… | |
… | |
100 | our $PL_NOTEBOOK; |
100 | our $PL_NOTEBOOK; |
101 | our $PL_WINDOW; |
101 | our $PL_WINDOW; |
102 | |
102 | |
103 | our $INVENTORY_PAGE; |
103 | our $INVENTORY_PAGE; |
104 | our $STATS_PAGE; |
104 | our $STATS_PAGE; |
|
|
105 | our $SKILL_PAGE; |
105 | our $SPELL_PAGE; |
106 | our $SPELL_PAGE; |
106 | |
107 | |
107 | our $HELP_WINDOW; |
108 | our $HELP_WINDOW; |
108 | our $MESSAGE_WINDOW; |
109 | our $MESSAGE_WINDOW; |
109 | our $FLOORBOX; |
110 | our $FLOORBOX; |
… | |
… | |
770 | $col += 3; |
771 | $col += 3; |
771 | $row = 0; |
772 | $row = 0; |
772 | } |
773 | } |
773 | } |
774 | } |
774 | |
775 | |
775 | update_stats_window ({}); |
776 | #update_stats_window ({}); |
776 | |
777 | |
777 | $vb |
778 | $vb |
778 | } |
779 | } |
779 | |
780 | |
780 | sub skill_window { |
781 | sub skill_window { |
781 | my ($self) = @_; |
|
|
782 | $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] |
783 | } |
783 | } |
784 | |
784 | |
785 | sub formsep($) { |
785 | sub formsep($) { |
786 | scalar reverse join ",", unpack "(A3)*", reverse $_[0] * 1 |
786 | scalar reverse join ",", unpack "(A3)*", reverse $_[0] * 1 |
787 | } |
|
|
788 | |
|
|
789 | sub update_stats_window { |
|
|
790 | my ($stats) = @_; |
|
|
791 | |
|
|
792 | # I love text protocols... |
|
|
793 | |
|
|
794 | my $hp = $stats->{+CS_STAT_HP} * 1; |
|
|
795 | my $hp_m = $stats->{+CS_STAT_MAXHP} * 1; |
|
|
796 | my $sp = $stats->{+CS_STAT_SP} * 1; |
|
|
797 | my $sp_m = $stats->{+CS_STAT_MAXSP} * 1; |
|
|
798 | my $fo = $stats->{+CS_STAT_FOOD} * 1; |
|
|
799 | my $fo_m = 999; |
|
|
800 | my $gr = $stats->{+CS_STAT_GRACE} * 1; |
|
|
801 | my $gr_m = $stats->{+CS_STAT_MAXGRACE} * 1; |
|
|
802 | |
|
|
803 | $GAUGES->{hp} ->set_value ($hp, $hp_m); |
|
|
804 | $GAUGES->{mana} ->set_value ($sp, $sp_m); |
|
|
805 | $GAUGES->{food} ->set_value ($fo, $fo_m); |
|
|
806 | $GAUGES->{grace} ->set_value ($gr, $gr_m); |
|
|
807 | $GAUGES->{exp} ->set_text ("Exp: " . (formsep $stats->{+CS_STAT_EXP64}) |
|
|
808 | . " (lvl " . ($stats->{+CS_STAT_LEVEL} * 1) . ")"); |
|
|
809 | my $rng = $stats->{+CS_STAT_RANGE}; |
|
|
810 | $rng =~ s/^Range: //; # thank you so much dear server |
|
|
811 | $GAUGES->{range} ->set_text ("Rng: " . $rng); |
|
|
812 | my $title = $stats->{+CS_STAT_TITLE}; |
|
|
813 | $title =~ s/^Player: //; |
|
|
814 | $STATWIDS->{title} ->set_text ("Title: " . $title); |
|
|
815 | |
|
|
816 | $STATWIDS->{st_str} ->set_text (sprintf "%d" , $stats->{+CS_STAT_STR}); |
|
|
817 | $STATWIDS->{st_dex} ->set_text (sprintf "%d" , $stats->{+CS_STAT_DEX}); |
|
|
818 | $STATWIDS->{st_con} ->set_text (sprintf "%d" , $stats->{+CS_STAT_CON}); |
|
|
819 | $STATWIDS->{st_int} ->set_text (sprintf "%d" , $stats->{+CS_STAT_INT}); |
|
|
820 | $STATWIDS->{st_wis} ->set_text (sprintf "%d" , $stats->{+CS_STAT_WIS}); |
|
|
821 | $STATWIDS->{st_pow} ->set_text (sprintf "%d" , $stats->{+CS_STAT_POW}); |
|
|
822 | $STATWIDS->{st_cha} ->set_text (sprintf "%d" , $stats->{+CS_STAT_CHA}); |
|
|
823 | $STATWIDS->{st_wc} ->set_text (sprintf "%d" , $stats->{+CS_STAT_WC}); |
|
|
824 | $STATWIDS->{st_ac} ->set_text (sprintf "%d" , $stats->{+CS_STAT_AC}); |
|
|
825 | $STATWIDS->{st_dam} ->set_text (sprintf "%d" , $stats->{+CS_STAT_DAM}); |
|
|
826 | $STATWIDS->{st_arm} ->set_text (sprintf "%d" , $stats->{+CS_STAT_RES_PHYS}); |
|
|
827 | $STATWIDS->{st_spd} ->set_text (sprintf "%.1f", $stats->{+CS_STAT_SPEED}); |
|
|
828 | $STATWIDS->{st_wspd}->set_text (sprintf "%.1f", $stats->{+CS_STAT_WEAP_SP}); |
|
|
829 | |
|
|
830 | $STATWIDS->{m_weight}->set_text (sprintf "Max weight: %.1fkg", $stats->{+CS_STAT_WEIGHT_LIM} / 1000); |
|
|
831 | |
|
|
832 | my %tbl = ( |
|
|
833 | phys => CS_STAT_RES_PHYS, |
|
|
834 | magic => CS_STAT_RES_MAG, |
|
|
835 | fire => CS_STAT_RES_FIRE, |
|
|
836 | elec => CS_STAT_RES_ELEC, |
|
|
837 | cold => CS_STAT_RES_COLD, |
|
|
838 | conf => CS_STAT_RES_CONF, |
|
|
839 | acid => CS_STAT_RES_ACID, |
|
|
840 | drain => CS_STAT_RES_DRAIN, |
|
|
841 | ghit => CS_STAT_RES_GHOSTHIT, |
|
|
842 | pois => CS_STAT_RES_POISON, |
|
|
843 | slow => CS_STAT_RES_SLOW, |
|
|
844 | para => CS_STAT_RES_PARA, |
|
|
845 | tund => CS_STAT_TURN_UNDEAD, |
|
|
846 | fear => CS_STAT_RES_FEAR, |
|
|
847 | depl => CS_STAT_RES_DEPLETE, |
|
|
848 | deat => CS_STAT_RES_DEATH, |
|
|
849 | holyw => CS_STAT_RES_HOLYWORD, |
|
|
850 | blind => CS_STAT_RES_BLIND, |
|
|
851 | ); |
|
|
852 | |
|
|
853 | if ($::CONN && !$STATWIDS->{_skill_tbl_init}) { |
|
|
854 | my $sktbl = $STATWIDS->{_skill_tbl}; |
|
|
855 | $sktbl->clear; |
|
|
856 | |
|
|
857 | $sktbl->add (0, 0, new CFClient::UI::Label text => "Exp.", align => 1); |
|
|
858 | $sktbl->add (1, 0, new CFClient::UI::Label text => "Level", align => 1); |
|
|
859 | $sktbl->add (2, 0, new CFClient::UI::Label text => "Skillname"); |
|
|
860 | |
|
|
861 | my @skills; |
|
|
862 | |
|
|
863 | for (my $i = CS_STAT_SKILLINFO; $i < CS_STAT_SKILLINFO+CS_NUM_SKILLS; $i++) { |
|
|
864 | push @skills, [$i, $::CONN->{skill_info}{$i}]; |
|
|
865 | } |
|
|
866 | |
|
|
867 | my $y = 1; |
|
|
868 | for (sort { $a->[1] cmp $b->[1] } @skills) { |
|
|
869 | my ($idx, $name) = @$_; |
|
|
870 | |
|
|
871 | unless (defined $STATWIDS->{"sk_xp_$idx"} || !$::CONN->{skill_info}{$idx}) { |
|
|
872 | $sktbl->add (0, $y, $STATWIDS->{"sk_xp_$idx"} = new CFClient::UI::Label text => "0", align => 1); |
|
|
873 | $sktbl->add (1, $y, $STATWIDS->{"sk_lvl_$idx"} = new CFClient::UI::Label text => "0", align => 1); |
|
|
874 | $sktbl->add (2, $y++, new CFClient::UI::Label text => $name); |
|
|
875 | } |
|
|
876 | } |
|
|
877 | |
|
|
878 | $STATWIDS->{_skill_tbl_init} = 1; |
|
|
879 | } |
|
|
880 | |
|
|
881 | for (my $i = CS_STAT_SKILLINFO; $i < CS_STAT_SKILLINFO+CS_NUM_SKILLS; $i++) { |
|
|
882 | if (exists $stats->{$i}) { |
|
|
883 | $STATWIDS->{"sk_xp_$i"}->set_text (formsep $stats->{$i}->[1]) |
|
|
884 | if $STATWIDS->{"sk_xp_$i"}; |
|
|
885 | $STATWIDS->{"sk_lvl_$i"}->set_text (sprintf "%d", $stats->{$i}->[0]) |
|
|
886 | if $STATWIDS->{"sk_lvl_$i"}; |
|
|
887 | } |
|
|
888 | } |
|
|
889 | |
|
|
890 | $STATWIDS->{"res_$_"}->set_text (sprintf "%d%", $stats->{$tbl{$_}}) |
|
|
891 | for keys %tbl; |
|
|
892 | } |
787 | } |
893 | |
788 | |
894 | my $METASERVER_ATIME; |
789 | my $METASERVER_ATIME; |
895 | |
790 | |
896 | sub update_metaserver { |
791 | sub update_metaserver { |
… | |
… | |
1379 | debug => 1, |
1274 | debug => 1, |
1380 | filter => (new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1), |
1275 | filter => (new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1), |
1381 | ; |
1276 | ; |
1382 | |
1277 | |
1383 | $ntb->add ( |
1278 | $ntb->add ( |
1384 | "Stats" => $STATS_PAGE = stats_window, |
1279 | "Statistics (F2)" => $STATS_PAGE = stats_window, |
1385 | "Shows statistics, where all your Stats and Resistances are shown." |
1280 | "Shows statistics, where all your Stats and Resistances are shown." |
1386 | ); |
1281 | ); |
1387 | $ntb->add ( |
1282 | $ntb->add ( |
1388 | "Skills" => $STATS_PAGE = skill_window, |
1283 | "Skills (F3)" => $SKILL_PAGE = skill_window, |
1389 | "Shows all your Skills." |
1284 | "Shows all your Skills." |
1390 | ); |
1285 | ); |
1391 | $ntb->add ( |
1286 | $ntb->add ( |
1392 | Spellbook => $SPELL_PAGE = new CFClient::UI::SpellList, |
1287 | "Spellbook (F4)" => $SPELL_PAGE = new CFClient::UI::SpellList, |
1393 | "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." |
1394 | ); |
1289 | ); |
1395 | $ntb->add ( |
1290 | $ntb->add ( |
1396 | Inventory => $INVENTORY_PAGE = inventory_widget, |
1291 | "Inventory (F5)" => $INVENTORY_PAGE = inventory_widget, |
1397 | "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 :). " |
1398 | . "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." |
1399 | ); |
1294 | ); |
1400 | |
1295 | |
1401 | $ntb->set_current_page ($INVENTORY_PAGE); |
1296 | $ntb->set_current_page ($INVENTORY_PAGE); |
… | |
… | |
1967 | $SIG{INT} = $SIG{TERM} = sub { exit }; |
1862 | $SIG{INT} = $SIG{TERM} = sub { exit }; |
1968 | |
1863 | |
1969 | { |
1864 | { |
1970 | local $SIG{__DIE__} = sub { |
1865 | local $SIG{__DIE__} = sub { |
1971 | return unless defined $^S && !$^S; |
1866 | return unless defined $^S && !$^S; |
1972 | Carp::confess $_[1];#d#TODO: remove when stable |
1867 | Carp::confess $_[0];#d#TODO: remove when stable |
1973 | CFClient::fatal $_[0]; |
1868 | CFClient::fatal $_[0]; |
1974 | }; |
1869 | }; |
1975 | |
1870 | |
1976 | CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc"; |
1871 | CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc"; |
1977 | CFClient::UI::set_layout ($::CFG->{layout}); |
1872 | CFClient::UI::set_layout ($::CFG->{layout}); |