Ok. I've incorporated casting times before, now I am trying to recreate them
with a little easier code rather than a bunch of cut and paste duplicate code
all over. Problem is now it crashes as soon as u enter "cast '<spell>'..."
I have tried to narrow down the problem... here's clips from spell_parser::
ACMD(do_cast)
{
struct char_data *tch = NULL;
struct obj_data *tobj = NULL;
char *s, *t;
int spellnum, target = 0;
...(the normal beginning of do_cast down to here)...
send_to_char("You are unfamiliar with that spell.\r\n", ch);
return;
}
target = spell_target(ch, t, spellnum, tch, tobj);
CASTING_TARGET(ch) = t;
CASTING_SPELLNUM(ch) = spellnum;
CASTING_TIME(ch) = SINFO.casting_time;
act("&CYou begin casting.", TRUE, ch, 0, 0, TO_CHAR);
if (GET_SKILL(ch, SINFO.skill) < number(80,100)) /* Silent casting */
act("&C$n begins casting.", TRUE, ch, 0, 0, TO_ROOM);
SET_BIT(PLR_FLAGS(ch), PLR_CASTING);
}
K, I have reason to believe its in spell_target, just cause thats the new
thing I'm trying... Heres spell_target::
int spell_target(struct char_data * ch, char *t, int spellnum, struct
char_data * tch, struct obj_data * tobj)
{
int target = 0, i;
/* 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;
}
}
return target;
}
SORRY for all the code but I feel its kinda necessary? ... Ok, well it could
also be in pulse_casting, which happens every second to check casting times
...
pulse_casting::
void pulse_casting(void)
{
struct char_data *i = NULL, *next_char;
for (i = character_list; i; i = next_char) {
next_char = i->next;
if (PLR_FLAGGED(i, PLR_CASTING)) {
CASTING_TIME(i)--;
if (!CASTING_TIME(i))
casting_complete(i);
}
}
}
Alright ... I'm not going to paste anymore code cuz its not worth it ...
anyway, i am totally lost all it know is it crashes right after you type
"cast"
Thanx bunch.
Okay,
JinX
+------------------------------------------------------------+
| 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