Ok, a couple things I noticed, and some more info as well please :D
first of all, this wouldn't cause the crash, but it's something you can
condense:

In void train_skill:

---->     if (ch->skill_training == -1)
                    return;
         
          if (!IS_SET (ch->comm, COMM_IS_TRAINING))
          {
                    return;
          }
         
---->     temp = ch->skill_training;
         
---->     if (temp == 0)
                    return;
         
couldn't this be crunched into something like:

          if (ch->skill_training <= 0)

before the check for COMM_IS_TRAINING?     

I'd like to see the calculate_time_tnl and return_time_remaining
functions also please, especially return_time_remaining is crashing...

In do_train, you should probably change this:

                    int sn = skill_num_lookup(arg2);

to this:

                    int sn;

                    if ( ( sn = skill_num_lookup(arg2) ) > 0 )

to ensure it doesn't return a -1 or 0 (as per the check in
train_skill)... also I'm assuming you have checks in place for if
arg2[0] == '\0', if their
return_time_remaining(ch->skill_experience[sn])) > 0 (and not let them
use the train command right now if that's the case), etc. and just
didn't post those with your do_train function... but if not, you should
add those kinds of checks... also, what does this mean exactly?

"the bob is just a temp thing, it 'worked' for a second before i 
recalculated the time"

and one more thing, how often is skill_update called? Once per tick,
pulse, 2 ticks, etc?  and if you could crash it once and post the gdb
info (with backtrace) that'd probably be helpful also :D

Richard Lindsey.

Reply via email to