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