You probably want to add some logic for specialization (skills 43-47) as shown below, due to the fact that a caster is only ever supposed to go above 50 in one school of spells.
Code:
sub EVENT_LEVEL_UP {
AutoTrain() if $client->GetGM();
}
sub AutoTrain {
$client->Message( 15,
"Your experiences across the realm have infused you with increased"
. " power and knowledge..." );
$CanSkill = sub { $client->CanHaveSkill(shift) };
$MaxSkill = sub { $client->MaxSkill( shift, $class, $ulevel ) };
$RawSkill = sub { $client->GetRawSkill(shift) };
$SetSkill = sub { $client->SetSkill( shift, shift ) };
# set all available skills to maximum for class at current level
foreach my $skillNum ( 0 .. 42, 48 .. 74 ) {
next unless $CanSkill->($skillNum);
my $maxVal = $MaxSkill->($skillNum);
next unless $maxVal > $RawSkill->($skillNum);
$SetSkill->( $skillNum, $maxVal );
}
# if client is a caster and can specialize
if ( $CanSkill->(43) ) {
# get current raw value for all spell-casting spec skills
my %spec = map { $_ => $RawSkill->($_) } ( 43 .. 47 );
# if one spell-casting spec skill is above 50,
# set it to the max value for the client's current level
# (this skill is deleted from hash and doesn't get calculated again)
if ( my $main = first { $spec{$_} > 50 } keys %spec ) {
$SetSkill->( $main, $MaxSkill->($main) );
delete $spec{$main};
}
# set spell-casting spec skills to max value for client's current level
# all skill levels but the first one that goes over 50 are capped at 50
foreach my $skillNum ( keys %spec ) {
next if $spec{$skillNum} == 50;
my $maxVal = $MaxSkill->($skillNum);
$SetSkill->( $skillNum, $maxVal > 50 ? 50 : $maxVal );
}
}
# scribe all spells for current level
quest::scribespells( $ulevel, $ulevel );
# train all discs for current level
quest::traindiscs( $ulevel, $ulevel );
}