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.128 by root, Sat Nov 18 23:31:24 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];
1301 #TODO# update to weigh/maxweight 1302 #TODO# update to weigh/maxweight
1302 $hb1->add ($STATWIDS->{i_weight} = new CFPlus::UI::Label align => -1); 1303 $hb1->add ($STATWIDS->{i_weight} = new CFPlus::UI::Label align => -1);
1303 1304
1304 $vb1->add (my $sw1 = new CFPlus::UI::ScrolledWindow expand => 1, scroll_y => 1); 1305 $vb1->add (my $sw1 = new CFPlus::UI::ScrolledWindow expand => 1, scroll_y => 1);
1305 $sw1->add ($INV = new CFPlus::UI::Inventory); 1306 $sw1->add ($INV = new CFPlus::UI::Inventory);
1307 $INV->set_sort_order ($SORT_ORDER{$::CFG->{inv_sort}});
1306 1308
1307 $hb->add (my $vb2 = new CFPlus::UI::VBox); 1309 $hb->add (my $vb2 = new CFPlus::UI::VBox);
1308 1310
1309 $vb2->add ($INV_RIGHT_HB = new CFPlus::UI::HBox); 1311 $vb2->add ($INV_RIGHT_HB = new CFPlus::UI::HBox);
1310 1312
1913 CFPlus::MixMusic::volume $CFG->{bgm_volume} * 128; 1915 CFPlus::MixMusic::volume $CFG->{bgm_volume} * 128;
1914 1916
1915 audio_music_finished; 1917 audio_music_finished;
1916 1918
1917 while (<$fh>) { 1919 while (<$fh>) {
1920 last;
1918 next if /^\s*#/; 1921 next if /^\s*#/;
1919 next if /^\s*$/; 1922 next if /^\s*$/;
1920 1923
1921 my ($file, $volume, $event) = split /\s+/, $_, 3; 1924 my ($file, $volume, $event) = split /\s+/, $_, 3;
1922 1925
1923 push @SOUNDS, "$volume,$file"; 1926 push @SOUNDS, "$volume,$file";
1924 1927
1925 $AUDIO_CHUNKS{"$volume,$file"} ||= do { 1928# $AUDIO_CHUNKS{"$volume,$file"} ||= do {
1926 my $chunk = new_from_file CFPlus::MixChunk CFPlus::find_rcfile "sounds/$file"; 1929# my $chunk = new_from_file CFPlus::MixChunk CFPlus::find_rcfile "sounds/$file";
1927 $chunk->volume ($volume * 128 / 100); 1930# $chunk->volume ($volume * 128 / 100);
1928 $chunk 1931# $chunk
1929 }; 1932# };
1930 } 1933 }
1931 } else { 1934 } else {
1932 status "unable to open sound config: $!"; 1935 status "unable to open sound config: $!";
1933 } 1936 }
1934 } 1937 }
2055 log_fontsize => 0.7, 2058 log_fontsize => 0.7,
2056 gauge_fontsize => 1, 2059 gauge_fontsize => 1,
2057 gauge_size => 0.35, 2060 gauge_size => 0.35,
2058 stat_fontsize => 0.7, 2061 stat_fontsize => 0.7,
2059 mapsize => 100, 2062 mapsize => 100,
2060 say_command => 'say', 2063 say_command => 'chat',
2061 audio_enable => 1, 2064 audio_enable => 1,
2062 bgm_enable => 1, 2065 bgm_enable => 1,
2063 bgm_volume => 0.25, 2066 bgm_volume => 0.25,
2064 face_prefetch => 0, 2067 face_prefetch => 0,
2065 output_sync => 1, 2068 output_sync => 1,

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines