--- cf.schmorp.de/maps/perl/nimbus.ext 2006/03/17 02:40:09 1.1 +++ cf.schmorp.de/maps/perl/nimbus.ext 2006/03/17 03:13:49 1.2 @@ -18,32 +18,35 @@ $save } -sub stats_fix($) { - my ($stats) = @_; - - $stats->hp = $stats->maxhp; - $stats->grace = $stats->maxgrace; - $stats->food = 999; -} - sub stats_set($$) { my ($stats, $save) = @_; for my $stat (@STATS) { $stats->$stat ($save->{$stat}); } + + $stats->hp ($stats->maxhp); + $stats->grace ($stats->maxgrace); + $stats->food (999); } sub skills_get($) { my ($ob) = @_; - [map [$_->skill, $_->exp], - grep $_->type == cf::SKILL, - $ob->inv] + +{ + map +($_->skill => $_->exp), + grep $_->type == cf::SKILL, + $ob->inv + } } -sub skills_set($) { - die; +sub skills_set($$) { + my ($ob, $skill) = @_; + + for (grep $_->type == cf::SKILL, $ob->inv) { + $_->set_exp ($skill->{$_->skill}) + if exists $skill->{$_->skill}; + } } # called when the player will likely die (modulo explore mode) @@ -88,8 +91,12 @@ if (my $save = delete $ob->{nimbus_save}) { @savebed = @{$save->{savebed}}; - use Data::Dumper; - print STDERR Dumper $save; + if ($options eq "restore" || 1) { + stats_set $ob->stats, $save->{stats}; + stats_set $pl->orig_stats, $save->{orig_stats}; + skills_set $ob, $save->{skill_exp}; + } + } else { @savebed = ("/scorn/taverns/inn", 10, 5); }