ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/bin/cfplus
(Generate patch)

Comparing deliantra/Deliantra-Client/bin/cfplus (file contents):
Revision 1.124 by root, Tue Nov 7 22:41:27 2006 UTC vs.
Revision 1.131 by root, Sun Nov 19 20:31:29 2006 UTC

75}; 75};
76 76
77my $MAX_FPS = 60; 77my $MAX_FPS = 60;
78my $MIN_FPS = 5; # unused as of yet 78my $MIN_FPS = 5; # unused as of yet
79 79
80our $META_SERVER = "crossfire.real-time.com:13326"; 80our $META_SERVER = "http://metaserver.schmorp.de/current.json";
81 81
82our $LAST_REFRESH; 82our $LAST_REFRESH;
83our $NOW; 83our $NOW;
84 84
85our $CFG; 85our $CFG;
123 123
124our $INVENTORY_PAGE; 124our $INVENTORY_PAGE;
125our $STATS_PAGE; 125our $STATS_PAGE;
126our $SKILL_PAGE; 126our $SKILL_PAGE;
127our $SPELL_PAGE; 127our $SPELL_PAGE;
128our $SPELL_LIST;
128 129
129our $HELP_WINDOW; 130our $HELP_WINDOW;
130our $MESSAGE_WINDOW; 131our $MESSAGE_WINDOW;
131our $FLOORBOX; 132our $FLOORBOX;
132our $GAUGES; 133our $GAUGES;
857 858
858 my $table = $METASERVER->{table}; 859 my $table = $METASERVER->{table};
859 $table->clear; 860 $table->clear;
860 $table->add (0, 0, my $label = new CFPlus::UI::Label max_w => $WIDTH * 0.8, text => "fetching server list..."); 861 $table->add (0, 0, my $label = new CFPlus::UI::Label max_w => $WIDTH * 0.8, text => "fetching server list...");
861 862
862 my $buf; 863 my $ok = 0;
863 864
864 my $fh = new IO::Socket::INET PeerHost => $META_SERVER, Blocking => 0; 865 CFPlus::background {
866 my $ua = CFPlus::lwp_useragent;
865 867
866 unless ($fh) { 868 CFPlus::background_msg CFPlus::from_json +(CFPlus::lwp_check $ua->get ($META_SERVER))->decoded_content;
867 $label->set_text ("unable to contact metaserver: $!"); 869 } sub {
868 return; 870 my ($msg) = @_;
869 } 871 if ($msg) {
870
871 Event->io (fd => $fh, poll => 'r', cb => sub {
872 my $res = sysread $fh, $buf, 8192, length $buf;
873
874 if (!defined $res) {
875 $_[0]->w->cancel;
876 $label->set_text ("error while retrieving server list: $!");
877 } elsif ($res == 0) {
878 $_[0]->w->cancel;
879 status "server list retrieved";
880
881 utf8::decode $buf if utf8::valid $buf;
882
883 $table->clear; 872 $table->clear;
884 873
885 my @tip = ( 874 my @tip = (
886 "The current number of users logged in on the server.", 875 "The current number of users logged in on the server.",
887 "The hostname of the server.", 876 "The hostname of the server.",
897 for 0 .. $#col; 886 for 0 .. $#col;
898 887
899 my @align = qw(1 0 1 1 -1); 888 my @align = qw(1 0 1 1 -1);
900 889
901 my $y = 0; 890 my $y = 0;
902 for my $m (sort { $b->[3] <=> $a->[3] } map [split /\|/], split /\015?\012/, $buf) { 891 for my $m (
892 sort {
893 $b->{version} <=> $a->{version}
894 or $b->{users} <=> $a->{users}
895 }
896 @{ $msg->{servers} }
897 ) {
903 my ($ip, $last, $host, $users, $version, $desc, $ibytes, $obytes, $uptime) = @$m; 898 my ($ip, $last, $host, $users, $version, $desc, $ibytes, $obytes, $uptime) =
899 @$m{qw(ip age hostname users version description ibytes obytes uptime)};
904 900
905 for ($desc) { 901 for ($desc) {
906 s/<br>/\n/gi; 902 s/<br>/\n/gi;
907 s/<li>/\n· /gi; 903 s/<li>/\n· /gi;
908 s/<.*?>//sgi; 904 s/<.*?>//sgi;
909 s/&/&amp;/g; 905 s/&amp;/&/g;
910 s/</&lt;/g; 906 s/&lt;/</g;
911 s/>/&gt;/g; 907 s/&gt;/>/g;
912 } 908 }
913 909
914 $uptime = sprintf "%dd %02d:%02d:%02d", 910 $uptime = sprintf "%dd %02d:%02d:%02d",
915 (int $m->[8] / 86400), 911 (int $uptime / 86400),
916 (int $m->[8] / 3600) % 24, 912 (int $uptime / 3600) % 24,
917 (int $m->[8] / 60) % 60, 913 (int $uptime / 60) % 60,
918 $m->[8] % 60; 914 $uptime % 60;
919 915
920 $m = [$users, $host, $uptime, $version, $desc]; 916 $m = [$users, $host, $uptime, $version, $desc];
921 917
922 $y++; 918 $y++;
923 919
933 ), 929 ),
934 (new CFPlus::UI::Empty expand => 1), 930 (new CFPlus::UI::Empty expand => 1),
935 ]); 931 ]);
936 932
937 $table->add ($_, $y, new CFPlus::UI::Label 933 $table->add ($_, $y, new CFPlus::UI::Label
934 max_w => $::WIDTH * 0.4,
938 ellipsise => 0, 935 ellipsise => 0,
939 align => $align[$_], 936 align => $align[$_],
940 text => $m->[$_], 937 text => $m->[$_],
941 tooltip => $tip[$_], 938 tooltip => $tip[$_],
939 fg => ($m->[3] =~ /\+$/ ? [1, 1, 1] : [.7, .7, .7]),
942 can_hover => 1, 940 can_hover => 1,
943 can_events => 1, 941 can_events => 1,
944 fontsize => 0.8) 942 fontsize => 0.8)
945 for 0 .. $#$m; 943 for 0 .. $#$m;
946 } 944 }
945 } else {
946 $ok or $label->set_text ("error while contacting metaserver");
947 } 947 }
948 }); 948 };
949
949} 950}
950 951
951sub metaserver_dialog { 952sub metaserver_dialog {
952 my $vbox = new CFPlus::UI::VBox; 953 my $vbox = new CFPlus::UI::VBox;
953 my $table = new CFPlus::UI::Table; 954 my $table = new CFPlus::UI::Table;
957 title => "Server List", 958 title => "Server List",
958 name => 'metaserver_dialog', 959 name => 'metaserver_dialog',
959 x => 'center', 960 x => 'center',
960 y => 'center', 961 y => 'center',
961 z => 3, 962 z => 3,
963 force_w => $::WIDTH * 0.9,
962 force_h => $::HEIGHT * 0.4, 964 force_h => $::HEIGHT * 0.7,
963 child => $vbox, 965 child => $vbox,
964 has_close_button => 1, 966 has_close_button => 1,
965 table => $table, 967 table => $table,
966 on_visibility_change => sub { 968 on_visibility_change => sub {
967 update_metaserver ($_[0]) if $_[1]; 969 update_metaserver ($_[0]) if $_[1];
1262 $table 1264 $table
1263} 1265}
1264 1266
1265my %SORT_ORDER = ( 1267my %SORT_ORDER = (
1266 type => undef, 1268 type => undef,
1267 mtime => sub { sort { 1269 mtime => sub {
1270 my $NOW = time;
1271 sort {
1272 my $atime = $a->{mtime} - $NOW; $atime = $atime < 5 * 60 ? int $atime / 60 : 6;
1273 my $btime = $b->{mtime} - $NOW; $btime = $btime < 5 * 60 ? int $btime / 60 : 6;
1274
1268 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED) 1275 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED)
1269 or $b->{mtime} <=> $a->{mtime} 1276 or $btime <=> $atime
1270 or $a->{type} <=> $b->{type} 1277 or $a->{type} <=> $b->{type}
1278 } @_
1271 } @_ }, 1279 },
1272 weight => sub { sort { 1280 weight => sub { sort {
1273 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1) 1281 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1)
1274 or $a->{type} <=> $b->{type} 1282 or $a->{type} <=> $b->{type}
1275 } @_ }, 1283 } @_ },
1276); 1284);
1301 #TODO# update to weigh/maxweight 1309 #TODO# update to weigh/maxweight
1302 $hb1->add ($STATWIDS->{i_weight} = new CFPlus::UI::Label align => -1); 1310 $hb1->add ($STATWIDS->{i_weight} = new CFPlus::UI::Label align => -1);
1303 1311
1304 $vb1->add (my $sw1 = new CFPlus::UI::ScrolledWindow expand => 1, scroll_y => 1); 1312 $vb1->add (my $sw1 = new CFPlus::UI::ScrolledWindow expand => 1, scroll_y => 1);
1305 $sw1->add ($INV = new CFPlus::UI::Inventory); 1313 $sw1->add ($INV = new CFPlus::UI::Inventory);
1314 $INV->set_sort_order ($SORT_ORDER{$::CFG->{inv_sort}});
1306 1315
1307 $hb->add (my $vb2 = new CFPlus::UI::VBox); 1316 $hb->add (my $vb2 = new CFPlus::UI::VBox);
1308 1317
1309 $vb2->add ($INV_RIGHT_HB = new CFPlus::UI::HBox); 1318 $vb2->add ($INV_RIGHT_HB = new CFPlus::UI::HBox);
1310 1319
1350 $ntb->add ( 1359 $ntb->add (
1351 "Skills (F3)" => $SKILL_PAGE = skill_window, 1360 "Skills (F3)" => $SKILL_PAGE = skill_window,
1352 "Shows all your Skills." 1361 "Shows all your Skills."
1353 ); 1362 );
1354 1363
1355 my $spellsw = new CFPlus::UI::ScrolledWindow (expand => 1, scroll_y => 1); 1364 my $spellsw = $SPELL_PAGE = new CFPlus::UI::ScrolledWindow (expand => 1, scroll_y => 1);
1356 $spellsw->add ($SPELL_PAGE = new CFPlus::UI::SpellList); 1365 $spellsw->add ($SPELL_LIST = new CFPlus::UI::SpellList);
1357 $ntb->add ( 1366 $ntb->add (
1358 "Spellbook (F4)" => $spellsw, 1367 "Spellbook (F4)" => $spellsw,
1359 "Displays all spells you have and lets you edit keyboard shortcuts for them." 1368 "Displays all spells you have and lets you edit keyboard shortcuts for them."
1360 ); 1369 );
1361 $ntb->add ( 1370 $ntb->add (
1912 CFPlus::Mix_AllocateChannels 8; 1921 CFPlus::Mix_AllocateChannels 8;
1913 CFPlus::MixMusic::volume $CFG->{bgm_volume} * 128; 1922 CFPlus::MixMusic::volume $CFG->{bgm_volume} * 128;
1914 1923
1915 audio_music_finished; 1924 audio_music_finished;
1916 1925
1926 local $_;
1917 while (<$fh>) { 1927 while (<$fh>) {
1918 next if /^\s*#/; 1928 next if /^\s*#/;
1919 next if /^\s*$/; 1929 next if /^\s*$/;
1920 1930
1921 my ($file, $volume, $event) = split /\s+/, $_, 3; 1931 my ($file, $volume, $event) = split /\s+/, $_, 3;
2055 log_fontsize => 0.7, 2065 log_fontsize => 0.7,
2056 gauge_fontsize => 1, 2066 gauge_fontsize => 1,
2057 gauge_size => 0.35, 2067 gauge_size => 0.35,
2058 stat_fontsize => 0.7, 2068 stat_fontsize => 0.7,
2059 mapsize => 100, 2069 mapsize => 100,
2060 say_command => 'say', 2070 say_command => 'chat',
2061 audio_enable => 1, 2071 audio_enable => 1,
2062 bgm_enable => 1, 2072 bgm_enable => 1,
2063 bgm_volume => 0.25, 2073 bgm_volume => 0.25,
2064 face_prefetch => 0, 2074 face_prefetch => 0,
2065 output_sync => 1, 2075 output_sync => 1,

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines