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.93 by root, Sat Jul 15 01:19:55 2006 UTC vs.
Revision 1.96 by root, Mon Jul 17 01:41:54 2006 UTC

86our $CONSOLE; 86our $CONSOLE;
87our $METASERVER; 87our $METASERVER;
88our $LOGIN_BUTTON; 88our $LOGIN_BUTTON;
89our $QUIT_DIALOG; 89our $QUIT_DIALOG;
90our $HOST_ENTRY; 90our $HOST_ENTRY;
91our $FULLSCREEN_ENABLE;
91our $PICKUP_ENABLE; 92our $PICKUP_ENABLE;
92our $SERVER_INFO; 93our $SERVER_INFO;
93 94
94our $SETUP_DIALOG; 95our $SETUP_DIALOG;
95our $SETUP_NOTEBOOK; 96our $SETUP_NOTEBOOK;
99our $PL_NOTEBOOK; 100our $PL_NOTEBOOK;
100our $PL_WINDOW; 101our $PL_WINDOW;
101 102
102our $INVENTORY_PAGE; 103our $INVENTORY_PAGE;
103our $STATS_PAGE; 104our $STATS_PAGE;
105our $SKILL_PAGE;
104our $SPELL_PAGE; 106our $SPELL_PAGE;
105 107
106our $HELP_WINDOW; 108our $HELP_WINDOW;
107our $MESSAGE_WINDOW; 109our $MESSAGE_WINDOW;
108our $FLOORBOX; 110our $FLOORBOX;
416 $mode_slider->emit (changed => $mode_slider->{range}[0]); 418 $mode_slider->emit (changed => $mode_slider->{range}[0]);
417 419
418 my $row = 1; 420 my $row = 1;
419 421
420 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fullscreen"); 422 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fullscreen");
421 $table->add (1, $row++, new CFClient::UI::CheckBox 423 $table->add (1, $row++, $FULLSCREEN_ENABLE = new CFClient::UI::CheckBox
422 state => $CFG->{fullscreen}, 424 state => $CFG->{fullscreen},
423 tooltip => "Bring the client into fullscreen mode.", 425 tooltip => "Bring the client into fullscreen mode.",
424 on_changed => sub { my ($self, $value) = @_; $CFG->{fullscreen} = $value; 0 } 426 on_changed => sub { my ($self, $value) = @_; $CFG->{fullscreen} = $value; 0 }
425 ); 427 );
426 428
769 $col += 3; 771 $col += 3;
770 $row = 0; 772 $row = 0;
771 } 773 }
772 } 774 }
773 775
774 update_stats_window ({}); 776 #update_stats_window ({});
775 777
776 $vb 778 $vb
777} 779}
778 780
779sub skill_window { 781sub skill_window {
780 my ($self) = @_;
781 $STATWIDS->{"_skill_tbl"} = new CFClient::UI::Table expand => 1; 782 $STATWIDS->{skill_tbl} = new CFClient::UI::Table expand => 1, col_expand => [0, 0, 1, 0, 0, 1]
782} 783}
783 784
784sub formsep($) { 785sub formsep($) {
785 scalar reverse join ",", unpack "(A3)*", reverse $_[0] * 1 786 scalar reverse join ",", unpack "(A3)*", reverse $_[0] * 1
786}
787
788sub update_stats_window {
789 my ($stats) = @_;
790
791 # I love text protocols...
792
793 my $hp = $stats->{+CS_STAT_HP} * 1;
794 my $hp_m = $stats->{+CS_STAT_MAXHP} * 1;
795 my $sp = $stats->{+CS_STAT_SP} * 1;
796 my $sp_m = $stats->{+CS_STAT_MAXSP} * 1;
797 my $fo = $stats->{+CS_STAT_FOOD} * 1;
798 my $fo_m = 999;
799 my $gr = $stats->{+CS_STAT_GRACE} * 1;
800 my $gr_m = $stats->{+CS_STAT_MAXGRACE} * 1;
801
802 $GAUGES->{hp} ->set_value ($hp, $hp_m);
803 $GAUGES->{mana} ->set_value ($sp, $sp_m);
804 $GAUGES->{food} ->set_value ($fo, $fo_m);
805 $GAUGES->{grace} ->set_value ($gr, $gr_m);
806 $GAUGES->{exp} ->set_text ("Exp: " . (formsep $stats->{+CS_STAT_EXP64})
807 . " (lvl " . ($stats->{+CS_STAT_LEVEL} * 1) . ")");
808 my $rng = $stats->{+CS_STAT_RANGE};
809 $rng =~ s/^Range: //; # thank you so much dear server
810 $GAUGES->{range} ->set_text ("Rng: " . $rng);
811 my $title = $stats->{+CS_STAT_TITLE};
812 $title =~ s/^Player: //;
813 $STATWIDS->{title} ->set_text ("Title: " . $title);
814
815 $STATWIDS->{st_str} ->set_text (sprintf "%d" , $stats->{+CS_STAT_STR});
816 $STATWIDS->{st_dex} ->set_text (sprintf "%d" , $stats->{+CS_STAT_DEX});
817 $STATWIDS->{st_con} ->set_text (sprintf "%d" , $stats->{+CS_STAT_CON});
818 $STATWIDS->{st_int} ->set_text (sprintf "%d" , $stats->{+CS_STAT_INT});
819 $STATWIDS->{st_wis} ->set_text (sprintf "%d" , $stats->{+CS_STAT_WIS});
820 $STATWIDS->{st_pow} ->set_text (sprintf "%d" , $stats->{+CS_STAT_POW});
821 $STATWIDS->{st_cha} ->set_text (sprintf "%d" , $stats->{+CS_STAT_CHA});
822 $STATWIDS->{st_wc} ->set_text (sprintf "%d" , $stats->{+CS_STAT_WC});
823 $STATWIDS->{st_ac} ->set_text (sprintf "%d" , $stats->{+CS_STAT_AC});
824 $STATWIDS->{st_dam} ->set_text (sprintf "%d" , $stats->{+CS_STAT_DAM});
825 $STATWIDS->{st_arm} ->set_text (sprintf "%d" , $stats->{+CS_STAT_RES_PHYS});
826 $STATWIDS->{st_spd} ->set_text (sprintf "%.1f", $stats->{+CS_STAT_SPEED});
827 $STATWIDS->{st_wspd}->set_text (sprintf "%.1f", $stats->{+CS_STAT_WEAP_SP});
828
829 $STATWIDS->{m_weight}->set_text (sprintf "Max weight: %.1fkg", $stats->{+CS_STAT_WEIGHT_LIM} / 1000);
830
831 my %tbl = (
832 phys => CS_STAT_RES_PHYS,
833 magic => CS_STAT_RES_MAG,
834 fire => CS_STAT_RES_FIRE,
835 elec => CS_STAT_RES_ELEC,
836 cold => CS_STAT_RES_COLD,
837 conf => CS_STAT_RES_CONF,
838 acid => CS_STAT_RES_ACID,
839 drain => CS_STAT_RES_DRAIN,
840 ghit => CS_STAT_RES_GHOSTHIT,
841 pois => CS_STAT_RES_POISON,
842 slow => CS_STAT_RES_SLOW,
843 para => CS_STAT_RES_PARA,
844 tund => CS_STAT_TURN_UNDEAD,
845 fear => CS_STAT_RES_FEAR,
846 depl => CS_STAT_RES_DEPLETE,
847 deat => CS_STAT_RES_DEATH,
848 holyw => CS_STAT_RES_HOLYWORD,
849 blind => CS_STAT_RES_BLIND,
850 );
851
852 if ($::CONN && !$STATWIDS->{_skill_tbl_init}) {
853 my $sktbl = $STATWIDS->{_skill_tbl};
854 $sktbl->clear;
855
856 $sktbl->add (0, 0, new CFClient::UI::Label text => "Exp.", align => 1);
857 $sktbl->add (1, 0, new CFClient::UI::Label text => "Level", align => 1);
858 $sktbl->add (2, 0, new CFClient::UI::Label text => "Skillname");
859
860 my @skills;
861
862 for (my $i = CS_STAT_SKILLINFO; $i < CS_STAT_SKILLINFO+CS_NUM_SKILLS; $i++) {
863 push @skills, [$i, $::CONN->{skill_info}{$i}];
864 }
865
866 my $y = 1;
867 for (sort { $a->[1] cmp $b->[1] } @skills) {
868 my ($idx, $name) = @$_;
869
870 unless (defined $STATWIDS->{"sk_xp_$idx"} || !$::CONN->{skill_info}{$idx}) {
871 $sktbl->add (0, $y, $STATWIDS->{"sk_xp_$idx"} = new CFClient::UI::Label text => "0", align => 1);
872 $sktbl->add (1, $y, $STATWIDS->{"sk_lvl_$idx"} = new CFClient::UI::Label text => "0", align => 1);
873 $sktbl->add (2, $y++, new CFClient::UI::Label text => $name);
874 }
875 }
876
877 $STATWIDS->{_skill_tbl_init} = 1;
878 }
879
880 for (my $i = CS_STAT_SKILLINFO; $i < CS_STAT_SKILLINFO+CS_NUM_SKILLS; $i++) {
881 if (exists $stats->{$i}) {
882 $STATWIDS->{"sk_xp_$i"}->set_text (formsep $stats->{$i}->[1])
883 if $STATWIDS->{"sk_xp_$i"};
884 $STATWIDS->{"sk_lvl_$i"}->set_text (sprintf "%d", $stats->{$i}->[0])
885 if $STATWIDS->{"sk_lvl_$i"};
886 }
887 }
888
889 $STATWIDS->{"res_$_"}->set_text (sprintf "%d%", $stats->{$tbl{$_}})
890 for keys %tbl;
891} 787}
892 788
893my $METASERVER_ATIME; 789my $METASERVER_ATIME;
894 790
895sub update_metaserver { 791sub update_metaserver {
1378 debug => 1, 1274 debug => 1,
1379 filter => (new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1), 1275 filter => (new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1),
1380 ; 1276 ;
1381 1277
1382 $ntb->add ( 1278 $ntb->add (
1383 "Stats" => $STATS_PAGE = stats_window, 1279 "Statistics (F2)" => $STATS_PAGE = stats_window,
1384 "Shows statistics, where all your Stats and Resistances are shown." 1280 "Shows statistics, where all your Stats and Resistances are shown."
1385 ); 1281 );
1386 $ntb->add ( 1282 $ntb->add (
1387 "Skills" => $STATS_PAGE = skill_window, 1283 "Skills (F3)" => $SKILL_PAGE = skill_window,
1388 "Shows all your Skills." 1284 "Shows all your Skills."
1389 ); 1285 );
1390 $ntb->add ( 1286 $ntb->add (
1391 Spellbook => $SPELL_PAGE = new CFClient::UI::SpellList, 1287 "Spellbook (F4)" => $SPELL_PAGE = new CFClient::UI::SpellList,
1392 "Displays all spells you have and lets you edit keyboard shortcuts for them." 1288 "Displays all spells you have and lets you edit keyboard shortcuts for them."
1393 ); 1289 );
1394 $ntb->add ( 1290 $ntb->add (
1395 Inventory => $INVENTORY_PAGE = inventory_widget, 1291 "Inventory (F5)" => $INVENTORY_PAGE = inventory_widget,
1396 "Toggles the inventory window, where you can manage your loot (or treasures :). " 1292 "Toggles the inventory window, where you can manage your loot (or treasures :). "
1397 . "You can also hit the <b>Tab</b>-key to show/hide the Inventory." 1293 . "You can also hit the <b>Tab</b>-key to show/hide the Inventory."
1398 ); 1294 );
1399 1295
1400 $ntb->set_current_page ($INVENTORY_PAGE); 1296 $ntb->set_current_page ($INVENTORY_PAGE);
1513 $refresh->(); 1409 $refresh->();
1514 1410
1515 $vb 1411 $vb
1516} 1412}
1517 1413
1414# just weirdness, pls. ignore
1415sub load_html_page {
1416 my ($viewer, $base) = @_;
1417
1418 $viewer->clear;
1419
1420 require LWP::Simple;
1421 require HTML::Parser;
1422 require URI;
1423
1424 my $page = LWP::Simple::get ($base)
1425 or return;
1426
1427 my @s = { };
1428 my %passthrough = map ($_ => undef), qw(b i u s tt big small sub sup);
1429
1430 my $parser = HTML::Parser->new (
1431 text_h => [sub {
1432 my ($text) = @_;
1433 $text =~ s/\s+/ /g;
1434 $s[-1]{text} .= CFClient::UI::Label::escape $text;
1435 }, "dtext"],
1436 start_h => [sub {
1437 my ($tag, $attr) = @_;
1438 if ($passthrough{$tag}) {
1439 $s[-1]{text} .= "<$tag>";
1440 } elsif ($tag eq "h1") {
1441 push @s, { text => "<span foreground='#ffff00' size='x-large'>" };
1442 } elsif ($tag eq "h2") {
1443 push @s, { text => "<span foreground='#ccccff' size='large'>" };
1444 } elsif ($tag eq "h3") {
1445 push @s, { text => "<span size='large'>" };
1446 } elsif ($tag eq "a") {
1447 push @s, { text => "", url => $attr->{href} };
1448 } elsif ($tag eq "p") {
1449 push @s, { };
1450 } elsif ($tag eq "img") {
1451 eval {
1452 push @{$s[-1]{obj}}, new CFClient::UI::Image
1453 tex => (new_from_image CFClient::Texture LWP::Simple::get (URI->new ($attr->{src}, $base)->abs ($base)));
1454 $s[-1]{text} .= "\x{fffc}";
1455 };
1456 }
1457 }, "tagname, attr"],
1458 end_h => [sub {
1459 my ($tag) = @_;
1460 if ($passthrough{$tag}) {
1461 $s[-1]{text} .= "</$tag>";
1462 } elsif ($tag =~ /^h\d$/) {
1463 $s[-1]{text} .= "</span>";
1464 push @s, { };
1465 } elsif ($tag eq "a") {
1466 my $S = pop @s;
1467 $s[-1]{text} .= "\x{fffc}";
1468 push @{$s[-1]{obj}}, new CFClient::UI::Label
1469 fg => [0.8, 0.8, 1],
1470 markup => "<u>$S->{text}</u>",
1471 fontsize => 0.8,
1472 can_events => 1,
1473 can_focus => 1,
1474 on_button_up => sub {
1475 load_html_page ($viewer, URI->new ($S->{url}, $base)->abs ($base));
1476 },
1477 ;
1478 }
1479 }, "tagname"],
1480 );
1481
1482 $parser->parse ($page);
1483 $parser->eof;
1484
1485 $viewer->add_paragraph ([1, 1, 1, 1], [$_->{text}, @{ $_->{obj} || [] }], $_->{indent})
1486 for @s;
1487
1488 $viewer->set_offset (0);
1489}
1490
1518sub help_window { 1491sub help_window {
1519 my $win = new CFClient::UI::FancyFrame 1492 my $win = new CFClient::UI::FancyFrame
1520 x => 'center', 1493 x => 'center',
1521 y => 'center', 1494 y => 'center',
1522 z => 2, 1495 z => 2,
1540 [manual => "Main Manual"], 1513 [manual => "Main Manual"],
1541 [skill_help => "Skill Reference"], 1514 [skill_help => "Skill Reference"],
1542 [command_help => "Command Reference"], 1515 [command_help => "Command Reference"],
1543 [dmcommand_help => "DM Commands"], 1516 [dmcommand_help => "DM Commands"],
1544 [COPYING => "License Terms"], 1517 [COPYING => "License Terms"],
1518 [test => "test (do not select)"], #d#TODO
1545 ], 1519 ],
1546 on_changed => sub { 1520 on_changed => sub {
1547 my ($self, $pod) = @_; 1521 my ($self, $pod) = @_;
1522
1523 if ($pod eq "test") {#d#TODO
1524 eval {
1525 load_html_page $viewer, "http://crossfire.real-time.com/guides/walkthrough/newbie-tower.html";
1526 };
1527 warn "$@" if $@;
1528 return;
1529 }
1548 1530
1549 my $pom = CFClient::load_pod CFClient::find_rcfile "pod/$pod.pod", 1531 my $pom = CFClient::load_pod CFClient::find_rcfile "pod/$pod.pod",
1550 doc_viewer => 1, sub { CFClient::pod_to_pango_list $_[0] }; 1532 doc_viewer => 1, sub { CFClient::pod_to_pango_list $_[0] };
1551 1533
1552 $viewer->clear; 1534 $viewer->clear;
1939# printf "active %x %x\n", $SDL_EV->active_gain, $SDL_EV->active_state;#d# 1921# printf "active %x %x\n", $SDL_EV->active_gain, $SDL_EV->active_state;#d#
1940 }, 1922 },
1941 CFClient::SDL_KEYDOWN => sub { 1923 CFClient::SDL_KEYDOWN => sub {
1942 if ($_[0]{mod} & CFClient::KMOD_ALT && $_[0]{sym} == 13) { 1924 if ($_[0]{mod} & CFClient::KMOD_ALT && $_[0]{sym} == 13) {
1943 # alt-enter 1925 # alt-enter
1926 $FULLSCREEN_ENABLE->toggle;
1944 video_shutdown; 1927 video_shutdown;
1945 $CFG->{fullscreen} = !$CFG->{fullscreen};
1946 video_init; 1928 video_init;
1947 } else { 1929 } else {
1948 CFClient::UI::feed_sdl_key_down_event ($_[0]); 1930 CFClient::UI::feed_sdl_key_down_event ($_[0]);
1949 } 1931 }
1950 }, 1932 },
1966$SIG{INT} = $SIG{TERM} = sub { exit }; 1948$SIG{INT} = $SIG{TERM} = sub { exit };
1967 1949
1968{ 1950{
1969 local $SIG{__DIE__} = sub { 1951 local $SIG{__DIE__} = sub {
1970 return unless defined $^S && !$^S; 1952 return unless defined $^S && !$^S;
1971 Carp::confess $_[1];#d#TODO: remove when stable 1953 Carp::confess $_[0];#d#TODO: remove when stable
1972 CFClient::fatal $_[0]; 1954 CFClient::fatal $_[0];
1973 }; 1955 };
1974 1956
1975 CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc"; 1957 CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc";
1976 CFClient::UI::set_layout ($::CFG->{layout}); 1958 CFClient::UI::set_layout ($::CFG->{layout});

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines