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.85 by elmex, Sun Jul 2 19:32:56 2006 UTC vs.
Revision 1.96 by root, Mon Jul 17 01:41:54 2006 UTC

40use CFClient::UI; 40use CFClient::UI;
41use CFClient::BindingEditor; 41use CFClient::BindingEditor;
42use CFClient::MapWidget; 42use CFClient::MapWidget;
43 43
44$SIG{QUIT} = sub { Carp::cluck "QUIT" }; 44$SIG{QUIT} = sub { Carp::cluck "QUIT" };
45$SIG{PIPE} = 'IGNORE';
45 46
46$Event::DIED = sub { 47$Event::DIED = sub {
47 # TODO: display dialog box or so 48 # TODO: display dialog box or so
48 Carp::confess $_[1];#d#TODO: remove when stable 49 Carp::confess $_[1];#d#TODO: remove when stable
49 CFClient::error $_[1]; 50 CFClient::error $_[1];
85our $CONSOLE; 86our $CONSOLE;
86our $METASERVER; 87our $METASERVER;
87our $LOGIN_BUTTON; 88our $LOGIN_BUTTON;
88our $QUIT_DIALOG; 89our $QUIT_DIALOG;
89our $HOST_ENTRY; 90our $HOST_ENTRY;
91our $FULLSCREEN_ENABLE;
92our $PICKUP_ENABLE;
90our $SERVER_INFO; 93our $SERVER_INFO;
91 94
92our $SETUP_DIALOG; 95our $SETUP_DIALOG;
93our $SETUP_NOTEBOOK; 96our $SETUP_NOTEBOOK;
94our $SETUP_SERVER; 97our $SETUP_SERVER;
95our $SETUP_KEYBOARD; 98our $SETUP_KEYBOARD;
96our $SETUP_SPELLS;
97 99
100our $PL_NOTEBOOK;
98our $STATS_WINDOW; 101our $PL_WINDOW;
102
103our $INVENTORY_PAGE;
104our $STATS_PAGE;
105our $SKILL_PAGE;
106our $SPELL_PAGE;
107
108our $HELP_WINDOW;
99our $MESSAGE_WINDOW; 109our $MESSAGE_WINDOW;
100our $FLOORBOX; 110our $FLOORBOX;
101our $GAUGES; 111our $GAUGES;
102our $STATWIDS; 112our $STATWIDS;
103 113
113our $DEBUG_STATUS; 123our $DEBUG_STATUS;
114 124
115our $INV; 125our $INV;
116our $INVR; 126our $INVR;
117our $INV_RIGHT_HB; 127our $INV_RIGHT_HB;
118
119our $PL_NOTEBOOK;
120our $PL_WINDOW;
121 128
122our $BIND_EDITOR; 129our $BIND_EDITOR;
123our $BIND_UPD_CB; 130our $BIND_UPD_CB;
124 131
125our $PICKUP_CFG; 132our $PICKUP_CFG;
223 $conn->send ("reply $stat"); 230 $conn->send ("reply $stat");
224 destroy_query_dialog $conn; 231 destroy_query_dialog $conn;
225 return; 232 return;
226 } 233 }
227 234
228 $STATS_WINDOW->show; 235 $STATS_PAGE->show;
229 $MESSAGE_WINDOW->hide; 236 $MESSAGE_WINDOW->hide;
230 237
231 unshift @dialog, new CFClient::UI::Label 238 unshift @dialog, new CFClient::UI::Label
232 max_w => $::WIDTH * 0.4, 239 max_w => $::WIDTH * 0.4,
233 ellipsise => 0, 240 ellipsise => 0,
273 # right: accept 280 # right: accept
274 $table->add (4, 0, new CFClient::UI::Button 281 $table->add (4, 0, new CFClient::UI::Button
275 text => "Accept", 282 text => "Accept",
276 on_activate => sub { 283 on_activate => sub {
277 $conn->send ("reply n"); 284 $conn->send ("reply n");
278 $STATS_WINDOW->hide; 285 $STATS_PAGE->hide;
279 destroy_query_dialog $conn; 286 destroy_query_dialog $conn;
280 0 287 0
281 }, 288 },
282 ); 289 );
283 290
376sub stop_game { 383sub stop_game {
377 $LOGIN_BUTTON->set_text ("Login"); 384 $LOGIN_BUTTON->set_text ("Login");
378 $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER); 385 $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER);
379 $SETUP_DIALOG->show; 386 $SETUP_DIALOG->show;
380 $PL_WINDOW->hide; 387 $PL_WINDOW->hide;
381 $SETUP_SPELLS->clear_spells; 388 $SPELL_PAGE->clear_spells;
382 389
383 return unless $CONN; 390 return unless $CONN;
384 391
385 status "connection closed"; 392 status "connection closed";
386 393
411 $mode_slider->emit (changed => $mode_slider->{range}[0]); 418 $mode_slider->emit (changed => $mode_slider->{range}[0]);
412 419
413 my $row = 1; 420 my $row = 1;
414 421
415 $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");
416 $table->add (1, $row++, new CFClient::UI::CheckBox 423 $table->add (1, $row++, $FULLSCREEN_ENABLE = new CFClient::UI::CheckBox
417 state => $CFG->{fullscreen}, 424 state => $CFG->{fullscreen},
418 tooltip => "Bring the client into fullscreen mode.", 425 tooltip => "Bring the client into fullscreen mode.",
419 on_changed => sub { my ($self, $value) = @_; $CFG->{fullscreen} = $value; 0 } 426 on_changed => sub { my ($self, $value) = @_; $CFG->{fullscreen} = $value; 0 }
420 ); 427 );
421 428
471 range => [$CFG->{log_fontsize}, 0.5, 2, 0, 0.1], 478 range => [$CFG->{log_fontsize}, 0.5, 2, 0, 0.1],
472 tooltip => "The font size used by the <b>message/server log</b> window only. Changes are instant.", 479 tooltip => "The font size used by the <b>message/server log</b> window only. Changes are instant.",
473 on_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]); 0 }, 480 on_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]); 0 },
474 ); 481 );
475 482
476 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize");
477
478 $table->add (1, $row++, new CFClient::UI::Slider
479 range => [$CFG->{stat_fontsize}, 0.5, 2, 0, 0.1],
480 tooltip => "The font size used by the <b>statistics window</b> only. Changes are instant.",
481 on_changed => sub {
482 $CFG->{stat_fontsize} = $_[1];
483 &set_stats_window_fontsize;
484 0
485 }
486 );
487
488 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize"); 483 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize");
489 $table->add (1, $row++, new CFClient::UI::Slider 484 $table->add (1, $row++, new CFClient::UI::Slider
490 range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1], 485 range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1],
491 tooltip => "Adjusts the fontsize of the gauges at the bottom right. Changes are instant.", 486 tooltip => "Adjusts the fontsize of the gauges at the bottom right. Changes are instant.",
492 on_changed => sub { 487 on_changed => sub {
561 ); 556 );
562 557
563 $vbox 558 $vbox
564} 559}
565 560
566sub set_stats_window_fontsize {
567 for (values %{$STATWIDS}) {
568 $_->set_fontsize ($::CFG->{stat_fontsize});
569 }
570}
571
572sub set_gauge_window_fontsize { 561sub set_gauge_window_fontsize {
573 for (map { $GAUGES->{$_} } grep { $_ ne 'win' } keys %{$GAUGES}) { 562 for (map { $GAUGES->{$_} } grep { $_ ne 'win' } keys %{$GAUGES}) {
574 $_->set_fontsize ($::CFG->{gauge_fontsize}); 563 $_->set_fontsize ($::CFG->{gauge_fontsize});
575 } 564 }
576} 565}
655 644
656 $table 645 $table
657} 646}
658 647
659sub stats_window { 648sub stats_window {
660 my $tgw =
661 new CFClient::UI::Window
662 child => my $vb = new CFClient::UI::VBox; 649 my $vb = new CFClient::UI::VBox;
663 650
664 $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1, 651 $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1,
665 can_hover => 1, can_events => 1, 652 can_hover => 1, can_events => 1,
666 tooltip => "Your name and title. You can change your title by using the <b>title</b> command, if supported by the server."); 653 tooltip => "Your name and title. You can change your title by using the <b>title</b> command, if supported by the server.");
667 $vb->add ($STATWIDS->{map} = new CFClient::UI::Label valign => 0, align => -1, text => "Map:", expand => 1, 654 $vb->add ($STATWIDS->{map} = new CFClient::UI::Label valign => 0, align => -1, text => "Map:", expand => 1,
704 font => $FONT_FIXED, can_hover => 1, can_events => 1, valign => 0, align => +1, template => $template, tooltip => $tooltip); 691 font => $FONT_FIXED, can_hover => 1, can_events => 1, valign => 0, align => +1, template => $template, tooltip => $tooltip);
705 $tbl->add ($col + 1, $row, $STATWIDS->{"$id\_lbl"} = new CFClient::UI::Label 692 $tbl->add ($col + 1, $row, $STATWIDS->{"$id\_lbl"} = new CFClient::UI::Label
706 font => $FONT_FIXED, can_hover => 1, can_events => 1, fg => $color2, valign => 0, align => -1, text => $label, tooltip => $tooltip); 693 font => $FONT_FIXED, can_hover => 1, can_events => 1, fg => $color2, valign => 0, align => -1, text => $label, tooltip => $tooltip);
707 } 694 }
708 695
709 $hb->add (my $tbl2 = new CFClient::UI::Table expand => 1); 696 $vb->add (my $tbl2 = new CFClient::UI::Table expand => 1);
710 697
711 my $row = 0; 698 my $row = 0;
712 my $col = 0; 699 my $col = 0;
713 700
714 my %resist_names = ( 701 my %resist_names = (
702 slow => ["Slow",
715 slow => "<b>Slow</b> (slows you down when you are hit by the spell. Monsters will have an opportunity to come near you faster and hit you more often.)", 703 "<b>Slow</b> (slows you down when you are hit by the spell. Monsters will have an opportunity to come near you faster and hit you more often.)"],
704 holyw => ["Holy Word",
716 holyw => "<b>Holy Word</b> (resistance you against getting the fear when someone whose god doesn't like you spells the holy word on you.)", 705 "<b>Holy Word</b> (resistance you against getting the fear when someone whose god doesn't like you spells the holy word on you.)"],
706 conf => ["Confusion",
717 conf => "<b>Confusion</b> (If you are hit by confusion you will move into random directions, and likely into monsters.)", 707 "<b>Confusion</b> (If you are hit by confusion you will move into random directions, and likely into monsters.)"],
708 fire => ["Fire",
718 fire => "<b>Fire</b> (just your resistance to fire spells like burning hands, dragonbreath, meteor swarm fire, ...)", 709 "<b>Fire</b> (just your resistance to fire spells like burning hands, dragonbreath, meteor swarm fire, ...)"],
710 depl => ["Depletion",
719 depl => "<b>Depletion</b> (some monsters and other effects can cause stats depletion)", 711 "<b>Depletion</b> (some monsters and other effects can cause stats depletion)"],
712 magic => ["Magic",
720 magic => "<b>Magic</b> (resistance to magic spells like magic missile or similar)", 713 "<b>Magic</b> (resistance to magic spells like magic missile or similar)"],
714 drain => ["Draining",
721 drain => "<b>Draining</b> (some monsters (e.g. vampires) and other effects can steal experience)", 715 "<b>Draining</b> (some monsters (e.g. vampires) and other effects can steal experience)"],
716 acid => ["Acid",
722 acid => "<b>Acid</b> (resistance to acid, acid hurts pretty much and also corrodes your weapons)", 717 "<b>Acid</b> (resistance to acid, acid hurts pretty much and also corrodes your weapons)"],
718 pois => ["Poison",
723 pois => "<b>Poison</b> (resistance to getting poisoned)", 719 "<b>Poison</b> (resistance to getting poisoned)"],
720 para => ["Paralysation",
724 para => "<b>Paralysation</b> (this resistance affects the chance you get paralysed)", 721 "<b>Paralysation</b> (this resistance affects the chance you get paralysed)"],
722 deat => ["Death",
725 deat => "<b>Death</b> (resistance against death spells)", 723 "<b>Death</b> (resistance against death spells)"],
724 phys => ["Physical",
726 phys => "<b>Physical</b> (this is the resistance against physical attacks, like when a monster hit you in melee combat. The value displayed here is also displayed in the 'Arm' field on the left.)", 725 "<b>Physical</b> (this is the resistance against physical attacks, like when a monster hit you in melee combat. The value displayed here is also displayed in the 'Arm' field on the left.)"],
726 blind => ["Blind",
727 blind => "<b>Blind</b> (blind resistance affects the chance of a successful blinding attack)", 727 "<b>Blind</b> (blind resistance affects the chance of a successful blinding attack)"],
728 fear => ["Fear",
728 fear => "<b>Fear</b> (this attack will drive you away from monsters who cast this and hit you successfully, being resistant to this helps a lot when fighting those monsters)", 729 "<b>Fear</b> (this attack will drive you away from monsters who cast this and hit you successfully, being resistant to this helps a lot when fighting those monsters)"],
730 tund => ["Turn undead",
729 tund => "<b>Turn undead</b> (affects your resistancy to various forms of 'turn undead' spells. Only relevant when you are, in fact, undead...", 731 "<b>Turn undead</b> (affects your resistancy to various forms of 'turn undead' spells. Only relevant when you are, in fact, undead..."],
732 elec => ["Electricity",
730 elec => "<b>Electricity</b> (resistance against electricity, spells like large lightning, small lightning, ...)", 733 "<b>Electricity</b> (resistance against electricity, spells like large lightning, small lightning, ...)"],
734 cold => ["Cold",
731 cold => "<b>Cold</b> (this is your resistance against cold spells like icestorm, snowstorm, ...)", 735 "<b>Cold</b> (this is your resistance against cold spells like icestorm, snowstorm, ...)"],
736 ghit => ["Ghost hit",
732 ghit => "<b>Ghost hit</b> (special attack used by ghosts and ghost-like beings)", 737 "<b>Ghost hit</b> (special attack used by ghosts and ghost-like beings)"],
733 ); 738 );
734 for (qw/slow holyw conf fire depl magic 739 for (qw/slow holyw conf fire depl magic
735 drain acid pois para deat phys 740 drain acid pois para deat phys
736 blind fear tund elec cold ghit/) 741 blind fear tund elec cold ghit/)
737 { 742 {
742 template => "-100%", 747 template => "-100%",
743 align => +1, 748 align => +1,
744 valign => 0, 749 valign => 0,
745 can_events => 1, 750 can_events => 1,
746 can_hover => 1, 751 can_hover => 1,
747 tooltip => $resist_names{$_}, 752 tooltip => $resist_names{$_}->[1],
748 ); 753 );
749 $tbl2->add ($col + 1, $row, new CFClient::UI::Image 754 $tbl2->add ($col + 1, $row, new CFClient::UI::Image
750 font => $FONT_FIXED, 755 font => $FONT_FIXED,
751 can_hover => 1, 756 can_hover => 1,
752 can_events => 1, 757 can_events => 1,
753 path => "ui/resist/resist_$_.png", 758 path => "ui/resist/resist_$_.png",
754 tooltip => $resist_names{$_}, 759 tooltip => $resist_names{$_}->[1],
760 );
761 $tbl2->add ($col + 2, $row, new CFClient::UI::Label
762 text => $resist_names{$_}->[0],
763 font => $FONT_FIXED,
764 can_hover => 1,
765 can_events => 1,
766 tooltip => $resist_names{$_}->[1],
755 ); 767 );
756 768
757 $row++; 769 $row++;
758 if ($row % 6 == 0) { 770 if ($row % 6 == 0) {
759 $col += 2; 771 $col += 3;
760 $row = 0; 772 $row = 0;
761 } 773 }
762 } 774 }
763 775
764 &set_stats_window_fontsize;
765 update_stats_window ({}); 776 #update_stats_window ({});
766 777
767 $tgw 778 $vb
779}
780
781sub skill_window {
782 $STATWIDS->{skill_tbl} = new CFClient::UI::Table expand => 1, col_expand => [0, 0, 1, 0, 0, 1]
768} 783}
769 784
770sub formsep($) { 785sub formsep($) {
771 scalar reverse join ",", unpack "(A3)*", reverse $_[0] * 1 786 scalar reverse join ",", unpack "(A3)*", reverse $_[0] * 1
772}
773
774sub update_stats_window {
775 my ($stats) = @_;
776
777 # I love text protocols...
778
779 my $hp = $stats->{+CS_STAT_HP} * 1;
780 my $hp_m = $stats->{+CS_STAT_MAXHP} * 1;
781 my $sp = $stats->{+CS_STAT_SP} * 1;
782 my $sp_m = $stats->{+CS_STAT_MAXSP} * 1;
783 my $fo = $stats->{+CS_STAT_FOOD} * 1;
784 my $fo_m = 999;
785 my $gr = $stats->{+CS_STAT_GRACE} * 1;
786 my $gr_m = $stats->{+CS_STAT_MAXGRACE} * 1;
787
788 $GAUGES->{hp} ->set_value ($hp, $hp_m);
789 $GAUGES->{mana} ->set_value ($sp, $sp_m);
790 $GAUGES->{food} ->set_value ($fo, $fo_m);
791 $GAUGES->{grace} ->set_value ($gr, $gr_m);
792 $GAUGES->{exp} ->set_text ("Exp: " . (formsep $stats->{+CS_STAT_EXP64})
793 . " (lvl " . ($stats->{+CS_STAT_LEVEL} * 1) . ")");
794 my $rng = $stats->{+CS_STAT_RANGE};
795 $rng =~ s/^Range: //; # thank you so much dear server
796 $GAUGES->{range} ->set_text ("Rng: " . $rng);
797 my $title = $stats->{+CS_STAT_TITLE};
798 $title =~ s/^Player: //;
799 $STATWIDS->{title} ->set_text ("Title: " . $title);
800
801 $STATWIDS->{st_str} ->set_text (sprintf "%d" , $stats->{+CS_STAT_STR});
802 $STATWIDS->{st_dex} ->set_text (sprintf "%d" , $stats->{+CS_STAT_DEX});
803 $STATWIDS->{st_con} ->set_text (sprintf "%d" , $stats->{+CS_STAT_CON});
804 $STATWIDS->{st_int} ->set_text (sprintf "%d" , $stats->{+CS_STAT_INT});
805 $STATWIDS->{st_wis} ->set_text (sprintf "%d" , $stats->{+CS_STAT_WIS});
806 $STATWIDS->{st_pow} ->set_text (sprintf "%d" , $stats->{+CS_STAT_POW});
807 $STATWIDS->{st_cha} ->set_text (sprintf "%d" , $stats->{+CS_STAT_CHA});
808 $STATWIDS->{st_wc} ->set_text (sprintf "%d" , $stats->{+CS_STAT_WC});
809 $STATWIDS->{st_ac} ->set_text (sprintf "%d" , $stats->{+CS_STAT_AC});
810 $STATWIDS->{st_dam} ->set_text (sprintf "%d" , $stats->{+CS_STAT_DAM});
811 $STATWIDS->{st_arm} ->set_text (sprintf "%d" , $stats->{+CS_STAT_RES_PHYS});
812 $STATWIDS->{st_spd} ->set_text (sprintf "%.1f", $stats->{+CS_STAT_SPEED});
813 $STATWIDS->{st_wspd}->set_text (sprintf "%.1f", $stats->{+CS_STAT_WEAP_SP});
814
815 $STATWIDS->{m_weight}->set_text (sprintf "Max weight: %.1fkg", $stats->{+CS_STAT_WEIGHT_LIM} / 1000);
816
817 my %tbl = (
818 phys => CS_STAT_RES_PHYS,
819 magic => CS_STAT_RES_MAG,
820 fire => CS_STAT_RES_FIRE,
821 elec => CS_STAT_RES_ELEC,
822 cold => CS_STAT_RES_COLD,
823 conf => CS_STAT_RES_CONF,
824 acid => CS_STAT_RES_ACID,
825 drain => CS_STAT_RES_DRAIN,
826 ghit => CS_STAT_RES_GHOSTHIT,
827 pois => CS_STAT_RES_POISON,
828 slow => CS_STAT_RES_SLOW,
829 para => CS_STAT_RES_PARA,
830 tund => CS_STAT_TURN_UNDEAD,
831 fear => CS_STAT_RES_FEAR,
832 depl => CS_STAT_RES_DEPLETE,
833 deat => CS_STAT_RES_DEATH,
834 holyw => CS_STAT_RES_HOLYWORD,
835 blind => CS_STAT_RES_BLIND,
836 );
837
838 $STATWIDS->{"res_$_"}->set_text (sprintf "%d%", $stats->{$tbl{$_}})
839 for keys %tbl;
840} 787}
841 788
842my $METASERVER_ATIME; 789my $METASERVER_ATIME;
843 790
844sub update_metaserver { 791sub update_metaserver {
1090sub message_window { 1037sub message_window {
1091 my $window = new CFClient::UI::FancyFrame 1038 my $window = new CFClient::UI::FancyFrame
1092 name => "message_window", 1039 name => "message_window",
1093 title => "Messages", 1040 title => "Messages",
1094 border_bg => [1, 1, 1, 1], 1041 border_bg => [1, 1, 1, 1],
1095 bg => [0, 0, 0, 0.75],
1096 x => "max", 1042 x => "max",
1097 y => 0, 1043 y => 0,
1098 force_w => $::WIDTH * 0.4, 1044 force_w => $::WIDTH * 0.4,
1099 force_h => $::HEIGHT * 0.5, 1045 force_h => $::HEIGHT * 0.5,
1100 child => (my $vbox = new CFClient::UI::VBox), 1046 child => (my $vbox = new CFClient::UI::VBox),
1186sub autopickup_setup { 1132sub autopickup_setup {
1187 my $table = new CFClient::UI::Table; 1133 my $table = new CFClient::UI::Table;
1188 1134
1189 for ( 1135 for (
1190 ["General", 0, 0, 1136 ["General", 0, 0,
1191 ["Enable autopickup" => PICKUP_NEWMODE], 1137 ["Enable autopickup" => PICKUP_NEWMODE, \$PICKUP_ENABLE],
1192 ["Inhibit autopickup" => PICKUP_INHIBIT], 1138 ["Inhibit autopickup" => PICKUP_INHIBIT],
1193 ["Stop before pickup" => PICKUP_STOP], 1139 ["Stop before pickup" => PICKUP_STOP],
1194 ["Debug autopickup" => PICKUP_DEBUG], 1140 ["Debug autopickup" => PICKUP_DEBUG],
1195 ], 1141 ],
1196 ["Weapons", 0, 6, 1142 ["Weapons", 0, 6,
1233 for (@bits) { 1179 for (@bits) {
1234 ++$y; 1180 ++$y;
1235 1181
1236 my $mask = $_->[1]; 1182 my $mask = $_->[1];
1237 $table->add ($x , $y, new CFClient::UI::Label text => $_->[0], align => 1, expand => 1); 1183 $table->add ($x , $y, new CFClient::UI::Label text => $_->[0], align => 1, expand => 1);
1238 $table->add ($x+1, $y, new CFClient::UI::CheckBox 1184 $table->add ($x+1, $y, my $checkbox = new CFClient::UI::CheckBox
1239 state => $::CFG->{pickup} & $mask, 1185 state => $::CFG->{pickup} & $mask,
1240 on_changed => sub { 1186 on_changed => sub {
1241 my ($box, $value) = @_; 1187 my ($box, $value) = @_;
1242 1188
1243 if ($value) { 1189 if ($value) {
1249 $::CONN->send_command ("pickup $::CFG->{pickup}") 1195 $::CONN->send_command ("pickup $::CFG->{pickup}")
1250 if defined $::CONN; 1196 if defined $::CONN;
1251 1197
1252 0 1198 0
1253 }); 1199 });
1200
1201 ${$_->[2]} = $checkbox if $_->[2];
1254 } 1202 }
1255 } 1203 }
1256 1204
1257 $table->add (2, 18, new CFClient::UI::ValSlider 1205 $table->add (2, 18, new CFClient::UI::ValSlider
1258 range => [$::CFG->{pickup} & 0xF, 0, 16, 1, 1], 1206 range => [$::CFG->{pickup} & 0xF, 0, 16, 1, 1],
1295 CFClient::Protocol::set_opencont ($::CONN, 0, "Floor"); 1243 CFClient::Protocol::set_opencont ($::CONN, 0, "Floor");
1296 1244
1297 $hb 1245 $hb
1298} 1246}
1299 1247
1248sub toggle_player_page {
1249 my ($widget) = @_;
1250
1251 if ($PL_WINDOW->{visible} && $PL_NOTEBOOK->get_current_page == $widget) {
1252 $PL_WINDOW->hide;
1253 } else {
1254 $PL_NOTEBOOK->set_current_page ($widget);
1255 $PL_WINDOW->show;
1256 }
1257}
1258
1300sub player_window { 1259sub player_window {
1301 my $plwin = $PL_WINDOW = new CFClient::UI::FancyFrame 1260 my $plwin = $PL_WINDOW = new CFClient::UI::FancyFrame
1302 x => "center", 1261 x => "center",
1303 y => "center", 1262 y => "center",
1304 force_w => $WIDTH * 9/10, 1263 force_w => $WIDTH * 9/10,
1305 force_h => $HEIGHT * 9/10, 1264 force_h => $HEIGHT * 9/10,
1306 title => "Player", 1265 title => "Player",
1266 name => "playerbook",
1307 has_close_button => 1 1267 has_close_button => 1
1308 ; 1268 ;
1309 1269
1310 my $ntb = 1270 my $ntb =
1311 $PL_NOTEBOOK = 1271 $PL_NOTEBOOK =
1312 new CFClient::UI::Notebook 1272 new CFClient::UI::Notebook
1313 expand => 1, 1273 expand => 1,
1314 debug => 1, 1274 debug => 1,
1315 filter => (new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1), 1275 filter => (new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1),
1316 ; 1276 ;
1277
1317 $ntb->add ( 1278 $ntb->add (
1318 Inventory => inventory_widget, 1279 "Statistics (F2)" => $STATS_PAGE = stats_window,
1280 "Shows statistics, where all your Stats and Resistances are shown."
1281 );
1282 $ntb->add (
1283 "Skills (F3)" => $SKILL_PAGE = skill_window,
1284 "Shows all your Skills."
1285 );
1286 $ntb->add (
1287 "Spellbook (F4)" => $SPELL_PAGE = new CFClient::UI::SpellList,
1288 "Displays all spells you have and lets you edit keyboard shortcuts for them."
1289 );
1290 $ntb->add (
1291 "Inventory (F5)" => $INVENTORY_PAGE = inventory_widget,
1319 "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 :). "
1320 . "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."
1321 ); 1294 );
1322 1295
1323 $ntb->add ( 1296 $ntb->set_current_page ($INVENTORY_PAGE);
1324 Stats => $STATS_WINDOW = stats_window,
1325 "Toggles the statistics window, where all your Stats and Resistances are being displayed at all times."
1326 );
1327 $ntb->add (
1328 Spells => $SETUP_SPELLS = new CFClient::UI::SpellList,
1329 "Displays all spells you have and lets you edit keyboard shortcuts for them."
1330 );
1331 1297
1332 $plwin->add ($ntb); 1298 $plwin->add ($ntb);
1333 $plwin 1299 $plwin
1334} 1300}
1335 1301
1443 $refresh->(); 1409 $refresh->();
1444 1410
1445 $vb 1411 $vb
1446} 1412}
1447 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
1448sub help_window { 1491sub help_window {
1449 my $win = new CFClient::UI::FancyFrame 1492 my $win = new CFClient::UI::FancyFrame
1450 x => 'center', 1493 x => 'center',
1451 y => 'center', 1494 y => 'center',
1452 z => 2, 1495 z => 2,
1453 name => 'doc_browser', 1496 name => 'doc_browser',
1454 force_w => int $WIDTH * 7/8, 1497 force_w => int $WIDTH * 7/8,
1455 force_h => int $HEIGHT * 7/8, 1498 force_h => int $HEIGHT * 7/8,
1456 title => "Documentation"; 1499 title => "Help Browser",
1500 has_close_button => 1;
1457 1501
1458 $win->add (my $vbox = new CFClient::UI::VBox); 1502 $win->add (my $vbox = new CFClient::UI::VBox);
1459 1503
1460 $vbox->add (my $buttons = new CFClient::UI::HBox); 1504 $vbox->add (my $buttons = new CFClient::UI::HBox);
1461 $vbox->add (my $viewer = new CFClient::UI::TextScroller 1505 $vbox->add (my $viewer = new CFClient::UI::TextScroller
1469 [manual => "Main Manual"], 1513 [manual => "Main Manual"],
1470 [skill_help => "Skill Reference"], 1514 [skill_help => "Skill Reference"],
1471 [command_help => "Command Reference"], 1515 [command_help => "Command Reference"],
1472 [dmcommand_help => "DM Commands"], 1516 [dmcommand_help => "DM Commands"],
1473 [COPYING => "License Terms"], 1517 [COPYING => "License Terms"],
1518 [test => "test (do not select)"], #d#TODO
1474 ], 1519 ],
1475 on_changed => sub { 1520 on_changed => sub {
1476 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 }
1477 1530
1478 my $pom = CFClient::load_pod CFClient::find_rcfile "pod/$pod.pod", 1531 my $pom = CFClient::load_pod CFClient::find_rcfile "pod/$pod.pod",
1479 doc_viewer => 1, sub { CFClient::pod_to_pango_list $_[0] }; 1532 doc_viewer => 1, sub { CFClient::pod_to_pango_list $_[0] };
1480 1533
1481 $viewer->clear; 1534 $viewer->clear;
1638 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Message Window", other => $MESSAGE_WINDOW = message_window, 1691 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Message Window", other => $MESSAGE_WINDOW = message_window,
1639 tooltip => "Toggles the server message log, where the client collects <i>all</i> messages from the server."); 1692 tooltip => "Toggles the server message log, where the client collects <i>all</i> messages from the server.");
1640 1693
1641 make_gauge_window->show; # XXX: this has to be set before make_stats_window as make_stats_window calls update_stats_window which updated the gauges also X-D 1694 make_gauge_window->show; # XXX: this has to be set before make_stats_window as make_stats_window calls update_stats_window which updated the gauges also X-D
1642 1695
1643 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Player", other => player_window, 1696 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Playerbook", other => player_window,
1644 tooltip => "Toggles the player view, where you can manage Inventory, Spells, Skills and see your Stats."); 1697 tooltip => "Toggles the player view, where you can manage Inventory, Spells, Skills and see your Stats.");
1645 1698
1646 $BUTTONBAR->add (new CFClient::UI::Button 1699 $BUTTONBAR->add (new CFClient::UI::Button
1647 text => "Save Config", 1700 text => "Save Config",
1648 tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.", 1701 tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.",
1652 status "Configuration Saved"; 1705 status "Configuration Saved";
1653 0 1706 0
1654 }, 1707 },
1655 ); 1708 );
1656 1709
1657 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => help_window, 1710 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => $HELP_WINDOW = help_window,
1658 tooltip => "View Documentation"); 1711 tooltip => "View Documentation");
1659 1712
1660 $BUTTONBAR->add (new CFClient::UI::Button 1713 $BUTTONBAR->add (new CFClient::UI::Button
1661 text => "Quit", 1714 text => "Quit",
1662 tooltip => "Terminates the program", 1715 tooltip => "Terminates the program",
1868# 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#
1869 }, 1922 },
1870 CFClient::SDL_KEYDOWN => sub { 1923 CFClient::SDL_KEYDOWN => sub {
1871 if ($_[0]{mod} & CFClient::KMOD_ALT && $_[0]{sym} == 13) { 1924 if ($_[0]{mod} & CFClient::KMOD_ALT && $_[0]{sym} == 13) {
1872 # alt-enter 1925 # alt-enter
1926 $FULLSCREEN_ENABLE->toggle;
1873 video_shutdown; 1927 video_shutdown;
1874 $CFG->{fullscreen} = !$CFG->{fullscreen};
1875 video_init; 1928 video_init;
1876 } else { 1929 } else {
1877 CFClient::UI::feed_sdl_key_down_event ($_[0]); 1930 CFClient::UI::feed_sdl_key_down_event ($_[0]);
1878 } 1931 }
1879 }, 1932 },
1895$SIG{INT} = $SIG{TERM} = sub { exit }; 1948$SIG{INT} = $SIG{TERM} = sub { exit };
1896 1949
1897{ 1950{
1898 local $SIG{__DIE__} = sub { 1951 local $SIG{__DIE__} = sub {
1899 return unless defined $^S && !$^S; 1952 return unless defined $^S && !$^S;
1900 Carp::confess $_[1];#d#TODO: remove when stable 1953 Carp::confess $_[0];#d#TODO: remove when stable
1901 CFClient::fatal $_[0]; 1954 CFClient::fatal $_[0];
1902 }; 1955 };
1903 1956
1904 CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc"; 1957 CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc";
1905 CFClient::UI::set_layout ($::CFG->{layout}); 1958 CFClient::UI::set_layout ($::CFG->{layout});

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines