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