--- deliantra/Deliantra-Client/bin/cfplus 2006/07/11 13:51:38 1.91 +++ deliantra/Deliantra-Client/bin/cfplus 2006/07/16 23:30:08 1.95 @@ -88,6 +88,7 @@ our $LOGIN_BUTTON; our $QUIT_DIALOG; our $HOST_ENTRY; +our $FULLSCREEN_ENABLE; our $PICKUP_ENABLE; our $SERVER_INFO; @@ -101,6 +102,7 @@ our $INVENTORY_PAGE; our $STATS_PAGE; +our $SKILL_PAGE; our $SPELL_PAGE; our $HELP_WINDOW; @@ -418,7 +420,7 @@ my $row = 1; $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fullscreen"); - $table->add (1, $row++, new CFClient::UI::CheckBox + $table->add (1, $row++, $FULLSCREEN_ENABLE = new CFClient::UI::CheckBox state => $CFG->{fullscreen}, tooltip => "Bring the client into fullscreen mode.", on_changed => sub { my ($self, $value) = @_; $CFG->{fullscreen} = $value; 0 } @@ -691,30 +693,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 @@ -729,138 +749,41 @@ 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; } } - $vb->add (my $tbl3 = new CFClient::UI::Table expand => 1); - $STATWIDS->{"_skill_tbl"} = $tbl3; - - update_stats_window ({}); + #update_stats_window ({}); $vb } -sub formsep($) { - scalar reverse join ",", unpack "(A3)*", reverse $_[0] * 1 +sub skill_window { + $STATWIDS->{skill_tbl} = new CFClient::UI::Table expand => 1, col_expand => [0, 0, 1, 0, 0, 1] } -sub update_stats_window { - my ($stats) = @_; - - # I love text protocols... - - my $hp = $stats->{+CS_STAT_HP} * 1; - my $hp_m = $stats->{+CS_STAT_MAXHP} * 1; - my $sp = $stats->{+CS_STAT_SP} * 1; - my $sp_m = $stats->{+CS_STAT_MAXSP} * 1; - my $fo = $stats->{+CS_STAT_FOOD} * 1; - my $fo_m = 999; - my $gr = $stats->{+CS_STAT_GRACE} * 1; - my $gr_m = $stats->{+CS_STAT_MAXGRACE} * 1; - - $GAUGES->{hp} ->set_value ($hp, $hp_m); - $GAUGES->{mana} ->set_value ($sp, $sp_m); - $GAUGES->{food} ->set_value ($fo, $fo_m); - $GAUGES->{grace} ->set_value ($gr, $gr_m); - $GAUGES->{exp} ->set_text ("Exp: " . (formsep $stats->{+CS_STAT_EXP64}) - . " (lvl " . ($stats->{+CS_STAT_LEVEL} * 1) . ")"); - my $rng = $stats->{+CS_STAT_RANGE}; - $rng =~ s/^Range: //; # thank you so much dear server - $GAUGES->{range} ->set_text ("Rng: " . $rng); - my $title = $stats->{+CS_STAT_TITLE}; - $title =~ s/^Player: //; - $STATWIDS->{title} ->set_text ("Title: " . $title); - - $STATWIDS->{st_str} ->set_text (sprintf "%d" , $stats->{+CS_STAT_STR}); - $STATWIDS->{st_dex} ->set_text (sprintf "%d" , $stats->{+CS_STAT_DEX}); - $STATWIDS->{st_con} ->set_text (sprintf "%d" , $stats->{+CS_STAT_CON}); - $STATWIDS->{st_int} ->set_text (sprintf "%d" , $stats->{+CS_STAT_INT}); - $STATWIDS->{st_wis} ->set_text (sprintf "%d" , $stats->{+CS_STAT_WIS}); - $STATWIDS->{st_pow} ->set_text (sprintf "%d" , $stats->{+CS_STAT_POW}); - $STATWIDS->{st_cha} ->set_text (sprintf "%d" , $stats->{+CS_STAT_CHA}); - $STATWIDS->{st_wc} ->set_text (sprintf "%d" , $stats->{+CS_STAT_WC}); - $STATWIDS->{st_ac} ->set_text (sprintf "%d" , $stats->{+CS_STAT_AC}); - $STATWIDS->{st_dam} ->set_text (sprintf "%d" , $stats->{+CS_STAT_DAM}); - $STATWIDS->{st_arm} ->set_text (sprintf "%d" , $stats->{+CS_STAT_RES_PHYS}); - $STATWIDS->{st_spd} ->set_text (sprintf "%.1f", $stats->{+CS_STAT_SPEED}); - $STATWIDS->{st_wspd}->set_text (sprintf "%.1f", $stats->{+CS_STAT_WEAP_SP}); - - $STATWIDS->{m_weight}->set_text (sprintf "Max weight: %.1fkg", $stats->{+CS_STAT_WEIGHT_LIM} / 1000); - - my %tbl = ( - phys => CS_STAT_RES_PHYS, - magic => CS_STAT_RES_MAG, - fire => CS_STAT_RES_FIRE, - elec => CS_STAT_RES_ELEC, - cold => CS_STAT_RES_COLD, - conf => CS_STAT_RES_CONF, - acid => CS_STAT_RES_ACID, - drain => CS_STAT_RES_DRAIN, - ghit => CS_STAT_RES_GHOSTHIT, - pois => CS_STAT_RES_POISON, - slow => CS_STAT_RES_SLOW, - para => CS_STAT_RES_PARA, - tund => CS_STAT_TURN_UNDEAD, - fear => CS_STAT_RES_FEAR, - depl => CS_STAT_RES_DEPLETE, - deat => CS_STAT_RES_DEATH, - holyw => CS_STAT_RES_HOLYWORD, - 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; +sub formsep($) { + scalar reverse join ",", unpack "(A3)*", reverse $_[0] * 1 } my $METASERVER_ATIME; @@ -1116,7 +1039,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, @@ -1354,15 +1276,19 @@ ; $ntb->add ( - "Stats & Skills" => $STATS_PAGE = stats_window, - "Shows statistics and skill window, where all your Stats, Resistances and Skills are shown." + "Statistics (F2)" => $STATS_PAGE = stats_window, + "Shows statistics, where all your Stats and Resistances are shown." + ); + $ntb->add ( + "Skills (F3)" => $SKILL_PAGE = skill_window, + "Shows all your Skills." ); $ntb->add ( - Spellbook => $SPELL_PAGE = new CFClient::UI::SpellList, + "Spellbook (F4)" => $SPELL_PAGE = new CFClient::UI::SpellList, "Displays all spells you have and lets you edit keyboard shortcuts for them." ); $ntb->add ( - Inventory => $INVENTORY_PAGE = inventory_widget, + "Inventory (F5)" => $INVENTORY_PAGE = inventory_widget, "Toggles the inventory window, where you can manage your loot (or treasures :). " . "You can also hit the Tab-key to show/hide the Inventory." ); @@ -1911,8 +1837,8 @@ CFClient::SDL_KEYDOWN => sub { if ($_[0]{mod} & CFClient::KMOD_ALT && $_[0]{sym} == 13) { # alt-enter + $FULLSCREEN_ENABLE->toggle; video_shutdown; - $CFG->{fullscreen} = !$CFG->{fullscreen}; video_init; } else { CFClient::UI::feed_sdl_key_down_event ($_[0]); @@ -1938,7 +1864,7 @@ { local $SIG{__DIE__} = sub { return unless defined $^S && !$^S; - Carp::confess $_[1];#d#TODO: remove when stable + Carp::confess $_[0];#d#TODO: remove when stable CFClient::fatal $_[0]; };