Odd. I just logged on, and had my Imm test this on my mort, and you're
right, the strength stopped at 18/100. But, yesterday, we had a Mage
cast this on himself enough times, that it went over. Stating him
reported his strength at 0/0, and affects: STR (330h) +116 to Str. Using
set didn't affect his strength, and we had to unaffect him to get things
normal again.
I didn't think the code would have missed something like that, but I
couldn't think of another reason why it would happen. I'll see if I
can't re-create the problem. Thanks for the help.
Dann
On Thu, 20 Jun 1996, Johan Dustler wrote:
> > From: Dann Fuller <dannimal@umich.edu>
> >
> > As near as I can tell, when you cast STR, nowhere does it check to make
> > sure you don't go over the limit of 18/100. This is bad, because if
> > you're at 18/100 when you cast it, bad thigns happen to your stats.
> >
> > After looking at the code, I can think of a couple of places to put the
> > check in, but before I do, I was wondering if others had noticed this,
> > and how they went about fixing it if they have. TIA
> >
> > Dann
> >
> > _____________________________________________________________________________
> > Dann Fuller dannimal@umich.edu
> > ITD Contract Services System Administrator www.umich.edu/~dannimal
> > Kinesiology Administration 764-4015
> > School of Public Policy 764-8004
> > "He fell out of the Stupid tree and hit every branch on the way down."
> >
> >
>
> There is already a check for this. If you check the function calls from
> mag_affects <magic.c> you will see that it calls affect_join <handler.c>.
> If you continue tracing function calls from affect_join you will end up
> in affect_total <handler.c>. In the second half of this function the check
> is made:
>
> /* Make certain values are between 0..25, not < 0 and not > 25! */
>
> i = (IS_NPC(ch) ? 25 : 18);
>
> GET_DEX(ch) = MAX(0, MIN(GET_DEX(ch), i));
> GET_INT(ch) = MAX(0, MIN(GET_INT(ch), i));
> GET_WIS(ch) = MAX(0, MIN(GET_WIS(ch), i));
> GET_CON(ch) = MAX(0, MIN(GET_CON(ch), i));
> GET_STR(ch) = MAX(0, GET_STR(ch));
>
> if (IS_NPC(ch)) {
> GET_STR(ch) = MIN(GET_STR(ch), i);
> } else {
> |-> if (GET_STR(ch) > 18) {
> |-> i = GET_ADD(ch) + ((GET_STR(ch) - 18) * 10);
> |-> GET_ADD(ch) = MIN(i, 100);
> |-> GET_STR(ch) = 18;
> | }
> | }
> |
> |
>
> This part sets the str_add to a maximum of 100.
>
> -Johan
>
_____________________________________________________________________________
Dann Fuller dannimal@umich.edu
ITD Contract Services System Administrator www.umich.edu/~dannimal
Kinesiology Administration 764-4015
School of Public Policy 764-8004
"It's only too much meat when I can't cram it all in my mouth." K. Fazzari
This archive was generated by hypermail 2b30 : 12/18/00 PST