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.122 by root, Sun Oct 8 21:22:30 2006 UTC vs.
Revision 1.130 by root, Sun Nov 19 19:43:53 2006 UTC

2 2
3my $startup_done = sub { }; 3my $startup_done = sub { };
4 4
5# do splash-screen thingy on win32 5# do splash-screen thingy on win32
6BEGIN { 6BEGIN {
7 if ($^O eq "MSWin32") { 7 if (%PAR::LibCache && $^O eq "MSWin32") {
8 while (my ($filename, $zip) = each %PAR::LibCache) { 8 while (my ($filename, $zip) = each %PAR::LibCache) {
9 $zip->extractMember ("SPLASH.bmp", "$ENV{PAR_TEMP}/SPLASH.bmp"); 9 $zip->extractMember ("SPLASH.bmp", "$ENV{PAR_TEMP}/SPLASH.bmp");
10 } 10 }
11 11
12 require Win32::GUI::SplashScreen; 12 require Win32::GUI::SplashScreen;
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;
381 381
382 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32; 382 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32;
383 383
384 my ($host, $port) = split /:/, $PROFILE->{host}; 384 my ($host, $port) = split /:/, $PROFILE->{host};
385 385
386 $MAP = new CFPlus::Map $mapsize, $mapsize; 386 $MAP = new CFPlus::Map;
387 387
388 $CONN = eval { 388 $CONN = eval {
389 new CFPlus::Protocol 389 new CFPlus::Protocol
390 host => $host, 390 host => $host,
391 port => $port || 13327, 391 port => $port || 13327,
857 857
858 my $table = $METASERVER->{table}; 858 my $table = $METASERVER->{table};
859 $table->clear; 859 $table->clear;
860 $table->add (0, 0, my $label = new CFPlus::UI::Label max_w => $WIDTH * 0.8, text => "fetching server list..."); 860 $table->add (0, 0, my $label = new CFPlus::UI::Label max_w => $WIDTH * 0.8, text => "fetching server list...");
861 861
862 my $buf; 862 my $ok = 0;
863 863
864 my $fh = new IO::Socket::INET PeerHost => $META_SERVER, Blocking => 0; 864 CFPlus::background {
865 my $ua = CFPlus::lwp_useragent;
865 866
866 unless ($fh) { 867 CFPlus::background_msg CFPlus::from_json +(CFPlus::lwp_check $ua->get ($META_SERVER))->decoded_content;
867 $label->set_text ("unable to contact metaserver: $!"); 868 } sub {
868 return; 869 my ($msg) = @_;
869 } 870 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; 871 $table->clear;
884 872
885 my @tip = ( 873 my @tip = (
886 "The current number of users logged in on the server.", 874 "The current number of users logged in on the server.",
887 "The hostname of the server.", 875 "The hostname of the server.",
897 for 0 .. $#col; 885 for 0 .. $#col;
898 886
899 my @align = qw(1 0 1 1 -1); 887 my @align = qw(1 0 1 1 -1);
900 888
901 my $y = 0; 889 my $y = 0;
902 for my $m (sort { $b->[3] <=> $a->[3] } map [split /\|/], split /\015?\012/, $buf) { 890 for my $m (
891 sort {
892 $b->{version} <=> $a->{version}
893 or $b->{users} <=> $a->{users}
894 }
895 @{ $msg->{servers} }
896 ) {
903 my ($ip, $last, $host, $users, $version, $desc, $ibytes, $obytes, $uptime) = @$m; 897 my ($ip, $last, $host, $users, $version, $desc, $ibytes, $obytes, $uptime) =
898 @$m{qw(ip age hostname users version description ibytes obytes uptime)};
904 899
905 for ($desc) { 900 for ($desc) {
906 s/<br>/\n/gi; 901 s/<br>/\n/gi;
907 s/<li>/\n· /gi; 902 s/<li>/\n· /gi;
908 s/<.*?>//sgi; 903 s/<.*?>//sgi;
909 s/&/&amp;/g; 904 s/&amp;/&/g;
910 s/</&lt;/g; 905 s/&lt;/</g;
911 s/>/&gt;/g; 906 s/&gt;/>/g;
912 } 907 }
913 908
914 $uptime = sprintf "%dd %02d:%02d:%02d", 909 $uptime = sprintf "%dd %02d:%02d:%02d",
915 (int $m->[8] / 86400), 910 (int $uptime / 86400),
916 (int $m->[8] / 3600) % 24, 911 (int $uptime / 3600) % 24,
917 (int $m->[8] / 60) % 60, 912 (int $uptime / 60) % 60,
918 $m->[8] % 60; 913 $uptime % 60;
919 914
920 $m = [$users, $host, $uptime, $version, $desc]; 915 $m = [$users, $host, $uptime, $version, $desc];
921 916
922 $y++; 917 $y++;
923 918
933 ), 928 ),
934 (new CFPlus::UI::Empty expand => 1), 929 (new CFPlus::UI::Empty expand => 1),
935 ]); 930 ]);
936 931
937 $table->add ($_, $y, new CFPlus::UI::Label 932 $table->add ($_, $y, new CFPlus::UI::Label
933 max_w => $::WIDTH * 0.4,
938 ellipsise => 0, 934 ellipsise => 0,
939 align => $align[$_], 935 align => $align[$_],
940 text => $m->[$_], 936 text => $m->[$_],
941 tooltip => $tip[$_], 937 tooltip => $tip[$_],
938 fg => ($m->[3] =~ /\+$/ ? [1, 1, 1] : [.7, .7, .7]),
942 can_hover => 1, 939 can_hover => 1,
943 can_events => 1, 940 can_events => 1,
944 fontsize => 0.8) 941 fontsize => 0.8)
945 for 0 .. $#$m; 942 for 0 .. $#$m;
946 } 943 }
944 } else {
945 $ok or $label->set_text ("error while contacting metaserver");
947 } 946 }
948 }); 947 };
948
949} 949}
950 950
951sub metaserver_dialog { 951sub metaserver_dialog {
952 my $vbox = new CFPlus::UI::VBox; 952 my $vbox = new CFPlus::UI::VBox;
953 my $table = new CFPlus::UI::Table; 953 my $table = new CFPlus::UI::Table;
957 title => "Server List", 957 title => "Server List",
958 name => 'metaserver_dialog', 958 name => 'metaserver_dialog',
959 x => 'center', 959 x => 'center',
960 y => 'center', 960 y => 'center',
961 z => 3, 961 z => 3,
962 force_w => $::WIDTH * 0.9,
962 force_h => $::HEIGHT * 0.4, 963 force_h => $::HEIGHT * 0.7,
963 child => $vbox, 964 child => $vbox,
964 has_close_button => 1, 965 has_close_button => 1,
965 table => $table, 966 table => $table,
966 on_visibility_change => sub { 967 on_visibility_change => sub {
967 update_metaserver ($_[0]) if $_[1]; 968 update_metaserver ($_[0]) if $_[1];
1262 $table 1263 $table
1263} 1264}
1264 1265
1265my %SORT_ORDER = ( 1266my %SORT_ORDER = (
1266 type => undef, 1267 type => undef,
1267 mtime => sub { sort { 1268 mtime => sub {
1269 my $NOW = time;
1270 sort {
1271 my $atime = $a->{mtime} - $NOW; $atime = $atime < 5 * 60 ? int $atime / 60 : 6;
1272 my $btime = $b->{mtime} - $NOW; $btime = $btime < 5 * 60 ? int $btime / 60 : 6;
1273
1268 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED) 1274 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED)
1269 or $b->{mtime} <=> $a->{mtime} 1275 or $btime <=> $atime
1270 or $a->{type} <=> $b->{type} 1276 or $a->{type} <=> $b->{type}
1277 } @_
1271 } @_ }, 1278 },
1272 weight => sub { sort { 1279 weight => sub { sort {
1273 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1) 1280 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1)
1274 or $a->{type} <=> $b->{type} 1281 or $a->{type} <=> $b->{type}
1275 } @_ }, 1282 } @_ },
1276); 1283);
1301 #TODO# update to weigh/maxweight 1308 #TODO# update to weigh/maxweight
1302 $hb1->add ($STATWIDS->{i_weight} = new CFPlus::UI::Label align => -1); 1309 $hb1->add ($STATWIDS->{i_weight} = new CFPlus::UI::Label align => -1);
1303 1310
1304 $vb1->add (my $sw1 = new CFPlus::UI::ScrolledWindow expand => 1, scroll_y => 1); 1311 $vb1->add (my $sw1 = new CFPlus::UI::ScrolledWindow expand => 1, scroll_y => 1);
1305 $sw1->add ($INV = new CFPlus::UI::Inventory); 1312 $sw1->add ($INV = new CFPlus::UI::Inventory);
1313 $INV->set_sort_order ($SORT_ORDER{$::CFG->{inv_sort}});
1306 1314
1307 $hb->add (my $vb2 = new CFPlus::UI::VBox); 1315 $hb->add (my $vb2 = new CFPlus::UI::VBox);
1308 1316
1309 $vb2->add ($INV_RIGHT_HB = new CFPlus::UI::HBox); 1317 $vb2->add ($INV_RIGHT_HB = new CFPlus::UI::HBox);
1310 1318
1912 CFPlus::Mix_AllocateChannels 8; 1920 CFPlus::Mix_AllocateChannels 8;
1913 CFPlus::MixMusic::volume $CFG->{bgm_volume} * 128; 1921 CFPlus::MixMusic::volume $CFG->{bgm_volume} * 128;
1914 1922
1915 audio_music_finished; 1923 audio_music_finished;
1916 1924
1925 local $_;
1917 while (<$fh>) { 1926 while (<$fh>) {
1918 next if /^\s*#/; 1927 next if /^\s*#/;
1919 next if /^\s*$/; 1928 next if /^\s*$/;
1920 1929
1921 my ($file, $volume, $event) = split /\s+/, $_, 3; 1930 my ($file, $volume, $event) = split /\s+/, $_, 3;
2055 log_fontsize => 0.7, 2064 log_fontsize => 0.7,
2056 gauge_fontsize => 1, 2065 gauge_fontsize => 1,
2057 gauge_size => 0.35, 2066 gauge_size => 0.35,
2058 stat_fontsize => 0.7, 2067 stat_fontsize => 0.7,
2059 mapsize => 100, 2068 mapsize => 100,
2060 say_command => 'say', 2069 say_command => 'chat',
2061 audio_enable => 1, 2070 audio_enable => 1,
2062 bgm_enable => 1, 2071 bgm_enable => 1,
2063 bgm_volume => 0.25, 2072 bgm_volume => 0.25,
2064 face_prefetch => 0, 2073 face_prefetch => 0,
2065 output_sync => 1, 2074 output_sync => 1,

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines