--- deliantra/Deliantra-Client/bin/cfplus 2006/11/07 22:41:27 1.124
+++ deliantra/Deliantra-Client/bin/cfplus 2006/11/19 20:31:29 1.131
@@ -77,7 +77,7 @@
my $MAX_FPS = 60;
my $MIN_FPS = 5; # unused as of yet
-our $META_SERVER = "crossfire.real-time.com:13326";
+our $META_SERVER = "http://metaserver.schmorp.de/current.json";
our $LAST_REFRESH;
our $NOW;
@@ -125,6 +125,7 @@
our $STATS_PAGE;
our $SKILL_PAGE;
our $SPELL_PAGE;
+our $SPELL_LIST;
our $HELP_WINDOW;
our $MESSAGE_WINDOW;
@@ -859,27 +860,15 @@
$table->clear;
$table->add (0, 0, my $label = new CFPlus::UI::Label max_w => $WIDTH * 0.8, text => "fetching server list...");
- my $buf;
+ my $ok = 0;
- my $fh = new IO::Socket::INET PeerHost => $META_SERVER, Blocking => 0;
-
- unless ($fh) {
- $label->set_text ("unable to contact metaserver: $!");
- return;
- }
-
- Event->io (fd => $fh, poll => 'r', cb => sub {
- my $res = sysread $fh, $buf, 8192, length $buf;
-
- if (!defined $res) {
- $_[0]->w->cancel;
- $label->set_text ("error while retrieving server list: $!");
- } elsif ($res == 0) {
- $_[0]->w->cancel;
- status "server list retrieved";
-
- utf8::decode $buf if utf8::valid $buf;
+ CFPlus::background {
+ my $ua = CFPlus::lwp_useragent;
+ CFPlus::background_msg CFPlus::from_json +(CFPlus::lwp_check $ua->get ($META_SERVER))->decoded_content;
+ } sub {
+ my ($msg) = @_;
+ if ($msg) {
$table->clear;
my @tip = (
@@ -899,23 +888,30 @@
my @align = qw(1 0 1 1 -1);
my $y = 0;
- for my $m (sort { $b->[3] <=> $a->[3] } map [split /\|/], split /\015?\012/, $buf) {
- my ($ip, $last, $host, $users, $version, $desc, $ibytes, $obytes, $uptime) = @$m;
+ for my $m (
+ sort {
+ $b->{version} <=> $a->{version}
+ or $b->{users} <=> $a->{users}
+ }
+ @{ $msg->{servers} }
+ ) {
+ my ($ip, $last, $host, $users, $version, $desc, $ibytes, $obytes, $uptime) =
+ @$m{qw(ip age hostname users version description ibytes obytes uptime)};
for ($desc) {
s/
/\n/gi;
s/
/\n· /gi;
s/<.*?>//sgi;
- s/&/&/g;
- s/</g;
- s/>/>/g;
+ s/&/&/g;
+ s/<//g;
}
$uptime = sprintf "%dd %02d:%02d:%02d",
- (int $m->[8] / 86400),
- (int $m->[8] / 3600) % 24,
- (int $m->[8] / 60) % 60,
- $m->[8] % 60;
+ (int $uptime / 86400),
+ (int $uptime / 3600) % 24,
+ (int $uptime / 60) % 60,
+ $uptime % 60;
$m = [$users, $host, $uptime, $version, $desc];
@@ -935,17 +931,22 @@
]);
$table->add ($_, $y, new CFPlus::UI::Label
+ max_w => $::WIDTH * 0.4,
ellipsise => 0,
align => $align[$_],
text => $m->[$_],
tooltip => $tip[$_],
+ fg => ($m->[3] =~ /\+$/ ? [1, 1, 1] : [.7, .7, .7]),
can_hover => 1,
can_events => 1,
fontsize => 0.8)
for 0 .. $#$m;
}
+ } else {
+ $ok or $label->set_text ("error while contacting metaserver");
}
- });
+ };
+
}
sub metaserver_dialog {
@@ -959,7 +960,8 @@
x => 'center',
y => 'center',
z => 3,
- force_h => $::HEIGHT * 0.4,
+ force_w => $::WIDTH * 0.9,
+ force_h => $::HEIGHT * 0.7,
child => $vbox,
has_close_button => 1,
table => $table,
@@ -1264,11 +1266,17 @@
my %SORT_ORDER = (
type => undef,
- mtime => sub { sort {
- ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED)
- or $b->{mtime} <=> $a->{mtime}
- or $a->{type} <=> $b->{type}
- } @_ },
+ mtime => sub {
+ my $NOW = time;
+ sort {
+ my $atime = $a->{mtime} - $NOW; $atime = $atime < 5 * 60 ? int $atime / 60 : 6;
+ my $btime = $b->{mtime} - $NOW; $btime = $btime < 5 * 60 ? int $btime / 60 : 6;
+
+ ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED)
+ or $btime <=> $atime
+ or $a->{type} <=> $b->{type}
+ } @_
+ },
weight => sub { sort {
$a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1)
or $a->{type} <=> $b->{type}
@@ -1303,6 +1311,7 @@
$vb1->add (my $sw1 = new CFPlus::UI::ScrolledWindow expand => 1, scroll_y => 1);
$sw1->add ($INV = new CFPlus::UI::Inventory);
+ $INV->set_sort_order ($SORT_ORDER{$::CFG->{inv_sort}});
$hb->add (my $vb2 = new CFPlus::UI::VBox);
@@ -1352,8 +1361,8 @@
"Shows all your Skills."
);
- my $spellsw = new CFPlus::UI::ScrolledWindow (expand => 1, scroll_y => 1);
- $spellsw->add ($SPELL_PAGE = new CFPlus::UI::SpellList);
+ my $spellsw = $SPELL_PAGE = new CFPlus::UI::ScrolledWindow (expand => 1, scroll_y => 1);
+ $spellsw->add ($SPELL_LIST = new CFPlus::UI::SpellList);
$ntb->add (
"Spellbook (F4)" => $spellsw,
"Displays all spells you have and lets you edit keyboard shortcuts for them."
@@ -1914,6 +1923,7 @@
audio_music_finished;
+ local $_;
while (<$fh>) {
next if /^\s*#/;
next if /^\s*$/;
@@ -2057,7 +2067,7 @@
gauge_size => 0.35,
stat_fontsize => 0.7,
mapsize => 100,
- say_command => 'say',
+ say_command => 'chat',
audio_enable => 1,
bgm_enable => 1,
bgm_volume => 0.25,