Alright, this is a *very* quick hack of do_cast and the cast_spell void... I
got tired of waiting for dg_cast to come out ;)
You might want to replace some of the stuff with log errors instead of telling
to the mob (unfortunetly, the mobs can't fix their own mistakes ;) ...
If you do use this code, please email me to let me know that people are using
it :)
If you have any questions, just ask :)
-=-=-=-=-=-=-=-=-=-
Viper
Head Impl
TimeTraveller
-=-=-=-=-=-=-=-=-=-
-=-=-=-=- Place in dg_mobcmd.c -=-=-=-=-
ACMD(do_mcast)
{
struct char_data *tch = NULL;
struct obj_data *tobj = NULL;
char *s, *t;
int spellnum, i, target = 0;
if (!MOB_OR_IMPL(ch)) {
send_to_char( "Huh?!?\r\n", ch );
return;
}
/* get: blank, spell name, target name */
s = strtok(argument, "'");
if (s == NULL) {
send_to_char("Cast what where?\r\n", ch);
return;
}
s = strtok(NULL, "'");
if (s == NULL) {
send_to_char("Spell names must be enclosed in the Holy Magic Symbols:
'\r\n", ch);
return;
}
t = strtok(NULL, "\0");
spellnum = find_skill_num(s);
if ((spellnum < 1) || (spellnum > MAX_SPELLS)) {
send_to_char("Cast what?!?\r\n", ch);
return;
}
/* Find the target */
if (t != NULL) {
one_argument(strcpy(arg, t), t);
skip_spaces(&t);
}
if (IS_SET(SINFO.targets, TAR_IGNORE)) {
target = TRUE;
} else if (t != NULL && *t) {
if (!target && (IS_SET(SINFO.targets, TAR_CHAR_ROOM))) {
if ((tch = get_char_room_vis(ch, t)) != NULL)
target = TRUE;
}
if (!target && IS_SET(SINFO.targets, TAR_CHAR_WORLD))
if ((tch = get_char_vis(ch, t)))
target = TRUE;
if (!target && IS_SET(SINFO.targets, TAR_OBJ_INV))
if ((tobj = get_obj_in_list_vis(ch, t, ch->carrying)))
target = TRUE;
if (!target && IS_SET(SINFO.targets, TAR_OBJ_EQUIP)) {
for (i = 0; !target && i < NUM_WEARS; i++)
if (GET_EQ(ch, i) && isname(t, GET_EQ(ch, i)->name)) {
tobj = GET_EQ(ch, i);
target = TRUE;
}
}
if (!target && IS_SET(SINFO.targets, TAR_OBJ_ROOM))
if ((tobj = get_obj_in_list_vis(ch, t, world[ch->in_room].contents)))
target = TRUE;
if (!target && IS_SET(SINFO.targets, TAR_OBJ_WORLD))
if ((tobj = get_obj_vis(ch, t)))
target = TRUE;
} else { /* if target string is empty */
if (!target && IS_SET(SINFO.targets, TAR_FIGHT_SELF))
if (FIGHTING(ch) != NULL) {
tch = ch;
target = TRUE;
}
if (!target && IS_SET(SINFO.targets, TAR_FIGHT_VICT))
if (FIGHTING(ch) != NULL) {
tch = FIGHTING(ch);
target = TRUE;
}
/* if no target specified, and the spell isn't violent, default to self */
if (!target && IS_SET(SINFO.targets, TAR_CHAR_ROOM) &&
!SINFO.violent) {
tch = ch;
target = TRUE;
}
if (!target) {
sprintf(buf, "Upon %s should the spell be cast?\r\n",
IS_SET(SINFO.targets, TAR_OBJ_ROOM | TAR_OBJ_INV | TAR_OBJ_WORLD) ?
"what" : "who");
send_to_char(buf, ch);
return;
}
}
/* int cast_spell(struct char_data * ch, struct char_data * tch,
struct obj_data * tobj, int spellnum) */
/* cast_spell = ch, tch(victim), tobj (?), lvl, spellnum */
cast_spell(ch, tch, tobj, spellnum);
}
-=-=-=-=- End code -=-=-=-=-
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST