--- deliantra/Deliantra-Client/bin/cfplus 2006/07/02 21:41:34 1.87 +++ deliantra/Deliantra-Client/bin/cfplus 2006/07/15 01:19:55 1.93 @@ -42,6 +42,7 @@ use CFClient::MapWidget; $SIG{QUIT} = sub { Carp::cluck "QUIT" }; +$SIG{PIPE} = 'IGNORE'; $Event::DIED = sub { # TODO: display dialog box or so @@ -477,18 +478,6 @@ on_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]); 0 }, ); - $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize"); - - $table->add (1, $row++, new CFClient::UI::Slider - range => [$CFG->{stat_fontsize}, 0.5, 2, 0, 0.1], - tooltip => "The font size used by the statistics window only. Changes are instant.", - on_changed => sub { - $CFG->{stat_fontsize} = $_[1]; - &set_stats_window_fontsize; - 0 - } - ); - $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize"); $table->add (1, $row++, new CFClient::UI::Slider range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1], @@ -567,12 +556,6 @@ $vbox } -sub set_stats_window_fontsize { - for (values %{$STATWIDS}) { - $_->set_fontsize ($::CFG->{stat_fontsize}); - } -} - sub set_gauge_window_fontsize { for (map { $GAUGES->{$_} } grep { $_ ne 'win' } keys %{$GAUGES}) { $_->set_fontsize ($::CFG->{gauge_fontsize}); @@ -661,9 +644,7 @@ } sub stats_window { - my $tgw = - new CFClient::UI::Window - child => my $vb = new CFClient::UI::VBox; + my $vb = new CFClient::UI::VBox; $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1, can_hover => 1, can_events => 1, @@ -710,30 +691,48 @@ font => $FONT_FIXED, can_hover => 1, can_events => 1, fg => $color2, valign => 0, align => -1, text => $label, tooltip => $tooltip); } - $hb->add (my $tbl2 = new CFClient::UI::Table expand => 1); + $vb->add (my $tbl2 = new CFClient::UI::Table expand => 1); my $row = 0; my $col = 0; my %resist_names = ( - slow => "Slow (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.)", - holyw => "Holy Word (resistance you against getting the fear when someone whose god doesn't like you spells the holy word on you.)", - conf => "Confusion (If you are hit by confusion you will move into random directions, and likely into monsters.)", - fire => "Fire (just your resistance to fire spells like burning hands, dragonbreath, meteor swarm fire, ...)", - depl => "Depletion (some monsters and other effects can cause stats depletion)", - magic => "Magic (resistance to magic spells like magic missile or similar)", - drain => "Draining (some monsters (e.g. vampires) and other effects can steal experience)", - acid => "Acid (resistance to acid, acid hurts pretty much and also corrodes your weapons)", - pois => "Poison (resistance to getting poisoned)", - para => "Paralysation (this resistance affects the chance you get paralysed)", - deat => "Death (resistance against death spells)", - phys => "Physical (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.)", - blind => "Blind (blind resistance affects the chance of a successful blinding attack)", - fear => "Fear (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)", - tund => "Turn undead (affects your resistancy to various forms of 'turn undead' spells. Only relevant when you are, in fact, undead...", - elec => "Electricity (resistance against electricity, spells like large lightning, small lightning, ...)", - cold => "Cold (this is your resistance against cold spells like icestorm, snowstorm, ...)", - ghit => "Ghost hit (special attack used by ghosts and ghost-like beings)", + slow => ["Slow", + "Slow (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.)"], + holyw => ["Holy Word", + "Holy Word (resistance you against getting the fear when someone whose god doesn't like you spells the holy word on you.)"], + conf => ["Confusion", + "Confusion (If you are hit by confusion you will move into random directions, and likely into monsters.)"], + fire => ["Fire", + "Fire (just your resistance to fire spells like burning hands, dragonbreath, meteor swarm fire, ...)"], + depl => ["Depletion", + "Depletion (some monsters and other effects can cause stats depletion)"], + magic => ["Magic", + "Magic (resistance to magic spells like magic missile or similar)"], + drain => ["Draining", + "Draining (some monsters (e.g. vampires) and other effects can steal experience)"], + acid => ["Acid", + "Acid (resistance to acid, acid hurts pretty much and also corrodes your weapons)"], + pois => ["Poison", + "Poison (resistance to getting poisoned)"], + para => ["Paralysation", + "Paralysation (this resistance affects the chance you get paralysed)"], + deat => ["Death", + "Death (resistance against death spells)"], + phys => ["Physical", + "Physical (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.)"], + blind => ["Blind", + "Blind (blind resistance affects the chance of a successful blinding attack)"], + fear => ["Fear", + "Fear (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)"], + tund => ["Turn undead", + "Turn undead (affects your resistancy to various forms of 'turn undead' spells. Only relevant when you are, in fact, undead..."], + elec => ["Electricity", + "Electricity (resistance against electricity, spells like large lightning, small lightning, ...)"], + cold => ["Cold", + "Cold (this is your resistance against cold spells like icestorm, snowstorm, ...)"], + ghit => ["Ghost hit", + "Ghost hit (special attack used by ghosts and ghost-like beings)"], ); for (qw/slow holyw conf fire depl magic drain acid pois para deat phys @@ -748,27 +747,38 @@ valign => 0, can_events => 1, can_hover => 1, - tooltip => $resist_names{$_}, + tooltip => $resist_names{$_}->[1], ); $tbl2->add ($col + 1, $row, new CFClient::UI::Image font => $FONT_FIXED, can_hover => 1, can_events => 1, path => "ui/resist/resist_$_.png", - tooltip => $resist_names{$_}, + tooltip => $resist_names{$_}->[1], + ); + $tbl2->add ($col + 2, $row, new CFClient::UI::Label + text => $resist_names{$_}->[0], + font => $FONT_FIXED, + can_hover => 1, + can_events => 1, + tooltip => $resist_names{$_}->[1], ); $row++; if ($row % 6 == 0) { - $col += 2; + $col += 3; $row = 0; } } - &set_stats_window_fontsize; update_stats_window ({}); - $tgw + $vb +} + +sub skill_window { + my ($self) = @_; + $STATWIDS->{"_skill_tbl"} = new CFClient::UI::Table expand => 1; } sub formsep($) { @@ -839,6 +849,43 @@ blind => CS_STAT_RES_BLIND, ); + if ($::CONN && !$STATWIDS->{_skill_tbl_init}) { + my $sktbl = $STATWIDS->{_skill_tbl}; + $sktbl->clear; + + $sktbl->add (0, 0, new CFClient::UI::Label text => "Exp.", align => 1); + $sktbl->add (1, 0, new CFClient::UI::Label text => "Level", align => 1); + $sktbl->add (2, 0, new CFClient::UI::Label text => "Skillname"); + + my @skills; + + for (my $i = CS_STAT_SKILLINFO; $i < CS_STAT_SKILLINFO+CS_NUM_SKILLS; $i++) { + push @skills, [$i, $::CONN->{skill_info}{$i}]; + } + + my $y = 1; + for (sort { $a->[1] cmp $b->[1] } @skills) { + my ($idx, $name) = @$_; + + unless (defined $STATWIDS->{"sk_xp_$idx"} || !$::CONN->{skill_info}{$idx}) { + $sktbl->add (0, $y, $STATWIDS->{"sk_xp_$idx"} = new CFClient::UI::Label text => "0", align => 1); + $sktbl->add (1, $y, $STATWIDS->{"sk_lvl_$idx"} = new CFClient::UI::Label text => "0", align => 1); + $sktbl->add (2, $y++, new CFClient::UI::Label text => $name); + } + } + + $STATWIDS->{_skill_tbl_init} = 1; + } + + for (my $i = CS_STAT_SKILLINFO; $i < CS_STAT_SKILLINFO+CS_NUM_SKILLS; $i++) { + if (exists $stats->{$i}) { + $STATWIDS->{"sk_xp_$i"}->set_text (formsep $stats->{$i}->[1]) + if $STATWIDS->{"sk_xp_$i"}; + $STATWIDS->{"sk_lvl_$i"}->set_text (sprintf "%d", $stats->{$i}->[0]) + if $STATWIDS->{"sk_lvl_$i"}; + } + } + $STATWIDS->{"res_$_"}->set_text (sprintf "%d%", $stats->{$tbl{$_}}) for keys %tbl; } @@ -1096,7 +1143,6 @@ name => "message_window", title => "Messages", border_bg => [1, 1, 1, 1], - bg => [0, 0, 0, 0.75], x => "max", y => 0, force_w => $::WIDTH * 0.4, @@ -1321,6 +1367,7 @@ force_w => $WIDTH * 9/10, force_h => $HEIGHT * 9/10, title => "Player", + name => "playerbook", has_close_button => 1 ; @@ -1333,8 +1380,12 @@ ; $ntb->add ( - "Stats & Skills" => $STATS_PAGE = stats_window, - "Shows statistics and skill window, where all your Stats, Resistances and Skills are shown." + "Stats" => $STATS_PAGE = stats_window, + "Shows statistics, where all your Stats and Resistances are shown." + ); + $ntb->add ( + "Skills" => $STATS_PAGE = skill_window, + "Shows all your Skills." ); $ntb->add ( Spellbook => $SPELL_PAGE = new CFClient::UI::SpellList, @@ -1346,6 +1397,7 @@ . "You can also hit the Tab-key to show/hide the Inventory." ); + $ntb->set_current_page ($INVENTORY_PAGE); $plwin->add ($ntb); $plwin