Okay, guys here goes.
I have been working out a way to remove the restrictions of mobs
casting spells.
I do this primarily so I can put spell casts in mob programs..
i.e. for clerics and such
so here is what I have, I know it is a total HACK, but as many of
you know I am just learning C', in fact when I picked up the circle3
stock code a week or so ago I had never even looked at C code before.
So what i want to know, are there any problems with this code, it runs
fine, but am I setting my self up for a big fall?
I did it all is do_cast in spell_parser.c
I removed:
if(IS_NPC(ch))
return;
I changed:
if (GET_LEVEL(ch) < SINFO.min_level[(int) GET_CLASS(ch)]) {
send_to_char("You do not know that spell!\r\n", ch);
return;
}
if (GET_SKILL(ch, spellnum) == 0) {
send_to_char("You are unfamiliar with that spell.\r\n", ch);
return;
}
to:
if (IS_NPC(ch)) {
send_to_char("Yes!\r\n", ch);
} else {
if (GET_LEVEL(ch) < SINFO.min_level[(int) GET_CLASS(ch)]) {
send_to_char("You do not know that spell!\r\n", ch);
return;
}
if (GET_SKILL(ch, spellnum) == 0) {
send_to_char("You are unfamiliar with that spell.\r\n", ch);
return;
}
}
So that ANY mob could Cast ANY Spell when asked to do so...
The Yes! is there just as a filler
I changed:
mana = mag_manacost(ch, spellnum);
if ((mana > 0) && (GET_MANA(ch) < mana) && (GET_LEVEL(ch) < LVL_IMMORT))
{
send_to_char("You haven't the energy to cast that spell!\r\n", ch);
return;
}
To this
if (IS_NPC(ch)) {
send_to_char("Yes!\r\n", ch);
} else {
mana = mag_manacost(ch, spellnum);
if ((mana > 0) && (GET_MANA(ch) < mana) && (GET_LEVEL(ch) <
LVL_IMMORT)) {
send_to_char("You haven't the energy to cast that spell!\r\n", ch);
return;
}
}
No manna subtraction on mobs
and finally:
I Changed ,
/* You throws the dice and you takes your chances.. 101% is total
failure */
if (number(0, 101) > GET_SKILL(ch, spellnum)) {
WAIT_STATE(ch, PULSE_VIOLENCE);
if (!tch || !skill_message(0, ch, tch, spellnum))
send_to_char("You lost your concentration!\r\n", ch);
if (mana > 0)
GET_MANA(ch) = MAX(0, MIN(GET_MAX_MANA(ch), GET_MANA(ch) - (mana
>> 1)));
if (SINFO.violent && tch && IS_NPC(tch))
hit(tch, ch, TYPE_UNDEFINED);
} else { /* cast spell returns 1 on success; subtract mana & set
waitstate */
if (cast_spell(ch, tch, tobj, spellnum)) {
WAIT_STATE(ch, PULSE_VIOLENCE);
if (mana > 0)
GET_MANA(ch) = MAX(0, MIN(GET_MAX_MANA(ch), GET_MANA(ch) -
mana));
}
TO THIS
if (IS_NPC(ch)) {
/* You throws the dice and you takes your chances.. 101% is total
failure */
if (number(0, 100) > 100) {
WAIT_STATE(ch, PULSE_VIOLENCE);
if (!tch || !skill_message(0, ch, tch, spellnum))
send_to_char("You lost your concentration!\r\n", ch);
if (mana > 0)
GET_MANA(ch) = MAX(0, MIN(GET_MAX_MANA(ch), GET_MANA(ch) - (mana
>> 1)));
if (SINFO.violent && tch && IS_NPC(tch))
hit(tch, ch, TYPE_UNDEFINED);
} else { /* cast spell returns 1 on success; subtract mana & set
waitstate */
if (cast_spell(ch, tch, tobj, spellnum)) {
WAIT_STATE(ch, PULSE_VIOLENCE);
if (mana > 0)
GET_MANA(ch) = MAX(0, MIN(GET_MAX_MANA(ch), GET_MANA(ch) -
mana));
}
}
} else {
/* You throws the dice and you takes your chances.. 101% is total
failure */
if (number(0, 101) > GET_SKILL(ch, spellnum)) {
WAIT_STATE(ch, PULSE_VIOLENCE);
if (!tch || !skill_message(0, ch, tch, spellnum))
send_to_char("You lost your concentration!\r\n", ch);
if (mana > 0)
GET_MANA(ch) = MAX(0, MIN(GET_MAX_MANA(ch), GET_MANA(ch) - (mana
>> 1)));
if (SINFO.violent && tch && IS_NPC(tch))
hit(tch, ch, TYPE_UNDEFINED);
} else { /* cast spell returns 1 on success; subtract mana & set
waitstate */
if (cast_spell(ch, tch, tobj, spellnum)) {
WAIT_STATE(ch, PULSE_VIOLENCE);
if (mana > 0)
GET_MANA(ch) = MAX(0, MIN(GET_MAX_MANA(ch), GET_MANA(ch) -
mana));
}
YES, mobs allways cast at 100% skill.
Well, that what I did , and it APPEARS to work, do you guys think that
there will be and repercussions of this quuick ack?
+-----------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://cspo.queensu.ca/~fletcher/Circle/list_faq.html |
+-----------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/18/00 PST