View Single Post
  #9  
Old 02-28-2018, 11:02 PM
c0ncrete's Avatar
c0ncrete
Dragon
 
Join Date: Dec 2009
Posts: 719
Default

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 );
}
__________________
I muck about @ The Forge.
say(rand 99>49?'try '.('0x'.join '',map{unpack 'H*',chr rand 256}1..2):'incoherent nonsense')while our $Noport=1;
Reply With Quote