/* Function: get_victim. Returns a pointer to a randomly chosen character in * the same room, fighting someone in the castle staff. Used by BANZAII-ing * characters and King Welmar... */ struct char_data *get_victim(struct char_data *chAtChar) { struct char_data *ch; int iNum_bad_guys = 0, iVictim; for (ch = world[IN_ROOM(chAtChar)].people; ch; ch = ch->next_in_room) if (FIGHTING(ch) && member_of_staff(FIGHTING(ch))) iNum_bad_guys++; if (!iNum_bad_guys) return (NULL); iVictim = rand_number(0, iNum_bad_guys); /* How nice, we give them a chance */ if (!iVictim) return (NULL); iNum_bad_guys = 0; for (ch = world[IN_ROOM(chAtChar)].people; ch; ch = ch->next_in_room) { if (FIGHTING(ch) == NULL) continue; if (!member_of_staff(FIGHTING(ch))) continue; if (++iNum_bad_guys != iVictim) continue; return (ch); } return (NULL); }
int npc_rescue(struct char_data * ch_hero, struct char_data * ch_victim) { struct char_data *ch_bad_guy; for (ch_bad_guy = world[ch_hero->in_room].people; ch_bad_guy && (FIGHTING(ch_bad_guy) != ch_victim); ch_bad_guy = ch_bad_guy->next_in_room); if (ch_bad_guy) { if (ch_bad_guy == ch_hero) return FALSE; /* NO WAY I'll rescue the one I'm fighting! */ //act("Impavidamente Togli $N dai Guai!.\r\n", FALSE, ch_hero, 0, ch_victim, TO_CHAR); act("Vieni Salvato da $N, Tuo servitore Fedelissimo!\r\n", FALSE, ch_victim, 0, ch_hero, TO_CHAR); act("$n Eroicamente Salva $N.", FALSE, ch_hero, 0, ch_victim, TO_NOTVICT); if (FIGHTING(ch_bad_guy)) stop_fighting(ch_bad_guy); if (FIGHTING(ch_hero)!=ch_bad_guy) stop_fighting(ch_hero); set_fighting(ch_hero, ch_bad_guy); set_fighting(ch_bad_guy, ch_hero); return TRUE; } //End forif return FALSE; }
/* Common routine for the Castle Twins. */ int castle_twin_proc(struct char_data *ch, int cmd, char *arg, int ctlnum, const char *twinname) { struct char_data *king, *twin; if (!AWAKE(ch)) return (FALSE); if (cmd) return block_way(ch, cmd, arg, castle_virtual(ctlnum), 1); if ((king = find_npc_by_name(ch, "King Welmar", 11)) != NULL) { char actbuf[MAX_INPUT_LENGTH]; if (!ch->master) do_follow(ch, strcpy(actbuf, "King Welmar"), 0, 0); /* strcpy: OK */ if (FIGHTING(king)) do_npc_rescue(ch, king); } if ((twin = find_npc_by_name(ch, twinname, strlen(twinname))) != NULL) if (FIGHTING(twin) && 2 * GET_HIT(twin) < GET_HIT(ch)) do_npc_rescue(ch, twin); if (GET_POS(ch) != POS_FIGHTING) banzaii(ch); return (FALSE); }
/* Used by Tim and Tom */ int do_npc_rescue(struct char_data * ch_hero, struct char_data * ch_victim) { struct char_data *ch_bad_guy; for (ch_bad_guy = world[ch_hero->in_room].people; ch_bad_guy && (FIGHTING(ch_bad_guy) != ch_victim); ch_bad_guy = ch_bad_guy->next_in_room); if (ch_bad_guy) { if (ch_bad_guy == ch_hero) return FALSE; /* NO WAY I'll rescue the one I'm fighting! */ act("You bravely rescue $N.\r\n", FALSE, ch_hero, 0, ch_victim, TO_CHAR); act("You are rescued by $N, your loyal friend!\r\n", FALSE, ch_victim, 0, ch_hero, TO_CHAR); act("$n heroically rescues $N.", FALSE, ch_hero, 0, ch_victim, TO_NOTVICT); if (FIGHTING(ch_bad_guy)) stop_fighting(ch_bad_guy); if (FIGHTING(ch_hero)) stop_fighting(ch_hero); set_fighting(ch_hero, ch_bad_guy); set_fighting(ch_bad_guy, ch_hero); return TRUE; } return FALSE; }
/* Used by BANZAII-ing characters and King Welmar... */ struct char_data *get_victim(struct char_data * chAtChar) { struct char_data *ch; int iNum_bad_guys = 0, iVictim; for (ch = world[chAtChar->in_room].people; ch; ch = ch->next_in_room) if (FIGHTING(ch) && member_of_staff(FIGHTING(ch))) iNum_bad_guys++; if (!iNum_bad_guys) return NULL; iVictim = number(0, iNum_bad_guys); /* How nice, we give them a chance */ if (!iVictim) return NULL; iNum_bad_guys = 0; for (ch = world[chAtChar->in_room].people; ch; ch = ch->next_in_room) if (FIGHTING(ch) && member_of_staff(FIGHTING(ch)) && ++iNum_bad_guys == iVictim) return ch; return NULL; }
/* place a character in a room */ void char_to_room(struct char_data *ch, room_rnum room) { if (ch == NULL || room == NOWHERE || room > top_of_world) log("SYSERR: Illegal value(s) passed to char_to_room. (Room: %d/%d Ch: %p", room, top_of_world, ch); else { ch->next_in_room = world[room].people; world[room].people = ch; IN_ROOM(ch) = room; autoquest_trigger_check(ch, 0, 0, AQ_ROOM_FIND); autoquest_trigger_check(ch, 0, 0, AQ_MOB_FIND); if (GET_EQ(ch, WEAR_LIGHT)) if (GET_OBJ_TYPE(GET_EQ(ch, WEAR_LIGHT)) == ITEM_LIGHT) if (GET_OBJ_VAL(GET_EQ(ch, WEAR_LIGHT), 2)) /* Light ON */ world[room].light++; /* Stop fighting now, if we left. */ if (FIGHTING(ch) && IN_ROOM(ch) != IN_ROOM(FIGHTING(ch))) { stop_fighting(FIGHTING(ch)); stop_fighting(ch); } } }
/** * @param char_data *ch The person who is rescuing... * @param char_data *vict The person in need of rescue. * @param char_data *from The attacker, who will now hit ch. */ void perform_rescue(char_data *ch, char_data *vict, char_data *from) { send_to_char("Banzai! To the rescue...\r\n", ch); act("You are rescued by $N!", FALSE, vict, 0, ch, TO_CHAR); act("$n heroically rescues $N!", FALSE, ch, 0, vict, TO_NOTVICT); if (FIGHTING(vict) == from) stop_fighting(vict); if (FIGHTING(from)) stop_fighting(from); if (FIGHTING(ch)) stop_fighting(ch); set_fighting(ch, from, FMODE_MELEE); set_fighting(from, ch, FMODE_MELEE); }
int greet_mtrigger(char_data *actor, int dir) { trig_data *t; char_data *ch; char buf[MAX_INPUT_LENGTH]; int rev_dir[] = { SOUTH, WEST, NORTH, EAST, DOWN, UP }; int intermediate, final=TRUE; for (ch = world[IN_ROOM(actor)].people; ch; ch = ch->next_in_room) { if (!SCRIPT_CHECK(ch, MTRIG_GREET | MTRIG_GREET_ALL) || !AWAKE(ch) || FIGHTING(ch) || (ch == actor) || AFF_FLAGGED(ch, AFF_CHARM)) continue; for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) { if (((IS_SET(GET_TRIG_TYPE(t), MTRIG_GREET) && CAN_SEE(ch, actor)) || IS_SET(GET_TRIG_TYPE(t), MTRIG_GREET_ALL)) && !GET_TRIG_DEPTH(t) && (number(1, 100) <= GET_TRIG_NARG(t))) { if (dir>=0) add_var(&GET_TRIG_VARS(t), "direction", dirs[rev_dir[dir]], 0); ADD_UID_VAR(buf, t, actor, "actor", 0); intermediate = script_driver(ch, t, MOB_TRIGGER, TRIG_NEW); if (!intermediate) final = FALSE; continue; } } } return final; }
int greet_mtrigger(char_data *actor, int dir) { trig_data *t = NULL; char_data *ch = NULL; char buf[MAX_INPUT_LENGTH] = {'\0'}; int intermediate = 0, final = TRUE; if (!valid_dg_target(actor, DG_ALLOW_GODS)) return TRUE; for (ch = world[IN_ROOM(actor)].people; ch; ch = ch->next_in_room) { if (!SCRIPT_CHECK(ch, MTRIG_GREET | MTRIG_GREET_ALL) || !AWAKE(ch) || FIGHTING(ch) || (ch == actor) || AFF_FLAGGED(ch, AFF_CHARM)) continue; for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) { if (((IS_SET(GET_TRIG_TYPE(t), MTRIG_GREET) && CAN_SEE(ch, actor)) || IS_SET(GET_TRIG_TYPE(t), MTRIG_GREET_ALL)) && !GET_TRIG_DEPTH(t) && (rand_number(1, 100) <= GET_TRIG_NARG(t))) { if (dir >= 0 && dir < DIR_COUNT) add_var(&GET_TRIG_VARS(t), "direction", dirs[rev_dir[dir]], 0); else add_var(&GET_TRIG_VARS(t), "direction", "none", 0); ADD_UID_VAR(buf, t, actor, "actor", 0); intermediate = script_driver(&ch, t, MOB_TRIGGER, TRIG_NEW); if (!intermediate) final = FALSE; continue; } } } return final; }
int perform_move(struct char_data *ch, int dir, int need_specials_check) { room_rnum was_in; struct follow_type *k, *next; if (ch == NULL || dir < 0 || dir >= NUM_OF_DIRS || FIGHTING(ch)) return (0); else if ((!EXIT(ch, dir) && !buildwalk(ch, dir)) || EXIT(ch, dir)->to_room == NOWHERE) send_to_char(ch, "Alas, you cannot go that way...\r\n"); else if (EXIT_FLAGGED(EXIT(ch, dir), EX_CLOSED)) { if (EXIT(ch, dir)->keyword) send_to_char(ch, "The %s seems to be closed.\r\n", fname(EXIT(ch, dir)->keyword)); else send_to_char(ch, "It seems to be closed.\r\n"); } else { if (!ch->followers) return (do_simple_move(ch, dir, need_specials_check)); was_in = IN_ROOM(ch); if (!do_simple_move(ch, dir, need_specials_check)) return (0); for (k = ch->followers; k; k = next) { next = k->next; if ((IN_ROOM(k->follower) == was_in) && (GET_POS(k->follower) >= POS_STANDING)) { act("You follow $N.\r\n", FALSE, k->follower, 0, ch, TO_CHAR); perform_move(k->follower, dir, 1); } } return (1); } return (0); }
/*Mob Go - Patrol by Lance*/ void go_patrol_activity(int pulse) { register struct char_data *ch, *next_ch; //extern int no_specials; for (ch = character_list; ch; ch = next_ch) { next_ch = ch->next; if (!IS_MOB(ch)) continue; /* If the mob has no specproc, do the default actions */ if (FIGHTING(ch) || !AWAKE(ch)) continue; if (MOB_FLAGGED(ch , MOB_SEARCHER)) { if (MOB_FLAGGED(ch , MOB_GO_FAST)) { if (!(pulse % (2 * PASSES_PER_SEC))) perform_go(ch); } else { if (!(pulse % (4 * PASSES_PER_SEC))) perform_go(ch); } } }//for }
int door_mtrigger(char_data *actor, int subcmd, int dir) { trig_data *t; char_data *ch; char buf[MAX_INPUT_LENGTH]; for (ch = world[IN_ROOM(actor)].people; ch; ch = ch->next_in_room) { if (!SCRIPT_CHECK(ch, MTRIG_DOOR) || !AWAKE(ch) || FIGHTING(ch) || (ch == actor) || AFF_FLAGGED(ch, AFF_CHARM)) continue; for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) { if (IS_SET(GET_TRIG_TYPE(t), MTRIG_DOOR) && CAN_SEE(ch, actor) && !GET_TRIG_DEPTH(t) && (rand_number(1, 100) <= GET_TRIG_NARG(t))) { add_var(&GET_TRIG_VARS(t), "cmd", cmd_door[subcmd], 0); if (dir >= 0 && dir < DIR_COUNT) add_var(&GET_TRIG_VARS(t), "direction", dirs[dir], 0); else add_var(&GET_TRIG_VARS(t), "direction", "none", 0); ADD_UID_VAR(buf, t, actor, "actor", 0); return script_driver(&ch, t, MOB_TRIGGER, TRIG_NEW); } } } return 1; }
void hunt_victim(struct char_data *ch) { int dir; byte found; struct char_data *tmp; if (!ch || !HUNTING(ch) || FIGHTING(ch)) return; /* make sure the char still exists */ for (found = FALSE, tmp = character_list; tmp && !found; tmp = tmp->next) if (HUNTING(ch) == tmp) found = TRUE; if (!found) { do_say(ch, "Damn! My prey is gone!", 0, 0); HUNTING(ch) = NULL; return; } if ((dir = find_first_step(IN_ROOM(ch), IN_ROOM(HUNTING(ch)))) < 0) { sprintf(buf, "Damn! I lost %s!", HMHR(HUNTING(ch))); do_say(ch, buf, 0, 0); HUNTING(ch) = NULL; } else { perform_move(ch, dir, 1); if (IN_ROOM(ch) == IN_ROOM(HUNTING(ch))) hit(ch, HUNTING(ch), TYPE_UNDEFINED); } }
void hitprcnt_mtrigger(char_data *ch) { trig_data *t; char buf[MAX_INPUT_LENGTH]; if (!SCRIPT_CHECK(ch, MTRIG_HITPRCNT) || !FIGHTING(ch) || AFF_FLAGGED(ch, AFF_CHARM)) return; for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) { if (TRIGGER_CHECK(t, MTRIG_HITPRCNT) && GET_MAX_HIT(ch) && (((GET_HIT(ch) * 100) / GET_MAX_HIT(ch)) <= GET_TRIG_NARG(t))) { ADD_UID_VAR(buf, t, FIGHTING(ch), "actor", 0) script_driver(ch, t, MOB_TRIGGER, TRIG_NEW); break; } } }
/* Function: find_guard. Returns the pointer to a guard on duty. Used by Peter * the Captain of the Royal Guard */ struct char_data *find_guard(struct char_data *chAtChar) { struct char_data *ch; for (ch = world[IN_ROOM(chAtChar)].people; ch; ch = ch->next_in_room) if (!FIGHTING(ch) && member_of_royal_guard(ch)) return (ch); return (NULL); }
/* Used by Peter the Captain of the Royal Guard */ struct char_data *find_guard(struct char_data * chAtChar) { struct char_data *ch; for (ch = world[chAtChar->in_room].people; ch; ch = ch->next_in_room) if (!FIGHTING(ch) && member_of_royal_guard(ch)) return ch; return NULL; }
void greet_memory_mtrigger(char_data *actor) { trig_data *t; char_data *ch; struct script_memory *mem; char buf[MAX_INPUT_LENGTH]; int command_performed = 0; for (ch = world[IN_ROOM(actor)].people; ch; ch = ch->next_in_room) { if (!SCRIPT_MEM(ch) || !AWAKE(ch) || FIGHTING(ch) || (ch == actor) || AFF_FLAGGED(ch, AFF_CHARM)) continue; /* find memory line with command only */ for (mem = SCRIPT_MEM(ch); mem && SCRIPT_MEM(ch); mem=mem->next) { if (GET_ID(actor)!=mem->id) continue; if (mem->cmd) { command_interpreter(ch, mem->cmd); /* no script */ command_performed = 1; break; } } /* if a command was not performed execute the memory script */ if (mem && !command_performed) { for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) { if (IS_SET(GET_TRIG_TYPE(t), MTRIG_MEMORY) && CAN_SEE(ch, actor) && !GET_TRIG_DEPTH(t) && number(1, 100) <= GET_TRIG_NARG(t)) { ADD_UID_VAR(buf, t, actor, "actor", 0); script_driver(ch, t, MOB_TRIGGER, TRIG_NEW); break; } } } /* delete the memory */ if (mem) { if (SCRIPT_MEM(ch)==mem) { SCRIPT_MEM(ch) = mem->next; } else { struct script_memory *prev; prev = SCRIPT_MEM(ch); while (prev->next != mem) prev = prev->next; prev->next = mem->next; } if (mem->cmd) free(mem->cmd); free(mem); } } }
/* remove a char from the list of fighting chars */ void stop_fighting(struct char_data *ch) { struct char_data *temp; if (ch == next_combat_list) next_combat_list = ch->next_fighting; REMOVE_FROM_LIST(ch, combat_list, next_fighting); ch->next_fighting = NULL; FIGHTING(ch) = NULL; GET_POS(ch) = POS_STANDING; update_pos(ch); }
/* start one char fighting another (yes, it is horrible, I know... ) */ void set_fighting(struct char_data *ch, struct char_data *vict) { if (ch == vict) return; if (FIGHTING(ch)) { core_dump(); return; } ch->next_fighting = combat_list; combat_list = ch; if (AFF_FLAGGED(ch, AFF_SLEEP)) affect_from_char(ch, SPELL_SLEEP); FIGHTING(ch) = vict; GET_POS(ch) = POS_FIGHTING; if (!pk_allowed) check_killer(ch, vict); }
void raw_kill(struct char_data *ch) { if (FIGHTING(ch)) stop_fighting(ch); while (ch->affected) affect_remove(ch, ch->affected); death_cry(ch); make_corpse(ch); extract_char(ch); }
/* control the fights going on. Called every 2 seconds from comm.c. */ void perform_violence(void) { struct char_data *ch; for (ch = combat_list; ch; ch = next_combat_list) { next_combat_list = ch->next_fighting; if (FIGHTING(ch) == NULL || IN_ROOM(ch) != IN_ROOM(FIGHTING(ch))) { stop_fighting(ch); continue; } if (IS_NPC(ch)) { if (GET_MOB_WAIT(ch) > 0) { GET_MOB_WAIT(ch) -= PULSE_VIOLENCE; continue; } GET_MOB_WAIT(ch) = 0; if (GET_POS(ch) < POS_FIGHTING) { GET_POS(ch) = POS_FIGHTING; act("$n scrambles to $s feet!", TRUE, ch, 0, 0, TO_ROOM); } } if (GET_POS(ch) < POS_FIGHTING) { send_to_char(ch, "You can't fight while sitting!!\r\n"); continue; } if (hit(ch, FIGHTING(ch), TYPE_UNDEFINED) < -1) { continue; } if (MOB_FLAGGED(ch, MOB_SPEC) && GET_MOB_SPEC(ch) && !MOB_FLAGGED(ch, MOB_NOTDEADYET)) { char actbuf[MAX_INPUT_LENGTH] = ""; (GET_MOB_SPEC(ch)) (ch, ch, 0, actbuf, 0); } } }
void check_idling(struct char_data * ch) { if (++(ch->char_specials.timer) > idle_void) { if (GET_WAS_IN(ch) == NOWHERE && IN_ROOM(ch) != NOWHERE) { GET_WAS_IN(ch) = IN_ROOM(ch); if (FIGHTING(ch)) { stop_fighting(FIGHTING(ch)); stop_fighting(ch); } act("$n disappears into the void.", TRUE, ch, 0, 0, TO_ROOM); send_to_char("You have been idle, and are pulled into a void.\r\n", ch); save_char(ch, NOWHERE); Crash_crashsave(ch); char_from_room(ch); char_to_room(ch, 1); } else if (ch->char_specials.timer > idle_rent_time) { if (IN_ROOM(ch) != NOWHERE) char_from_room(ch); char_to_room(ch, 3); if (ch->desc) { STATE(ch->desc) = CON_DISCONNECT; /* * For the 'if (d->character)' test in close_socket(). * -gg 3/1/98 (Happy anniversary.) */ ch->desc->character = NULL; ch->desc = NULL; } if (free_rent) Crash_rentsave(ch, 0); else Crash_idlesave(ch); sprintf(buf, "%s force-rented and extracted (idle).", GET_NAME(ch)); mudlog(buf, CMP, LVL_GOD, TRUE); extract_char(ch); } } }
void fight_mtrigger(char_data *ch) { struct char_data *actor; trig_data *t; char buf[MAX_INPUT_LENGTH]; if (!SCRIPT_CHECK(ch, MTRIG_FIGHT) || !FIGHTING(ch) || AFF_FLAGGED(ch, AFF_CHARM)) return; for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) { if (TRIGGER_CHECK(t, MTRIG_FIGHT) && (rand_number(1, 100) <= GET_TRIG_NARG(t))) { actor = FIGHTING(ch); if (actor) ADD_UID_VAR(buf, t, actor, "actor", 0); else add_var(&GET_TRIG_VARS(t), "actor", "nobody", 0); script_driver(&ch, t, MOB_TRIGGER, TRIG_NEW); break; } } }
/* control the fights going on. Called every 2 seconds from comm.c. */ void perform_violence(void) { struct char_data *ch; for (ch = combat_list; ch; ch = next_combat_list) { next_combat_list = ch->next_fighting; if (FIGHTING(ch) == NULL || (IN_ROOM(ch) != IN_ROOM(FIGHTING(ch))) || \ (!char_within_range_of_vict(ch, FIGHTING(ch)))) { stop_fighting(ch); continue; } if (IS_NPC(ch)) { if (GET_MOB_WAIT(ch) > 0) { GET_MOB_WAIT(ch) -= PULSE_VIOLENCE; continue; } GET_MOB_WAIT(ch) = 0; if (GET_POS(ch) < POS_FIGHTING) { GET_POS(ch) = POS_FIGHTING; act("$n scrambles to $s feet!", TRUE, ch, 0, 0, TO_ROOM); } } if (GET_POS(ch) < POS_FIGHTING) { send_to_char("You can't fight while sitting!!\r\n", ch); continue; } hit(ch, FIGHTING(ch), TYPE_UNDEFINED); /* XXX: Need to see if they can handle "" instead of NULL. */ if (MOB_FLAGGED(ch, MOB_SPEC) && mob_index[GET_MOB_RNUM(ch)].func != NULL) (mob_index[GET_MOB_RNUM(ch)].func) (ch, ch, 0, ""); } }
void js_fight_triggers(Character * ch, Character * victim) { if (!ch->js_scripts || ch->js_scripts->size() == 0 || !FIGHTING(ch)) return; for (int i = 0; i < ch->js_scripts->size(); ++i) { if (ch->js_scripts->at(i)->isFlagged(JS::CHARACTER_FIGHT)) { JSTrigger* trig = ch->js_scripts->at(i); if (is_allowed_violent(ch, victim, trig) && randomly_triggered(trig->narg)) { JSManager::get()->execute(trig, ch, victim); } } } }
void raw_kill(struct char_data * ch, struct char_data * killer) { if (FIGHTING(ch)) stop_fighting(ch); while (ch->affected) affect_remove(ch, ch->affected); if (killer) { if (death_mtrigger(ch, killer)) death_cry(ch); } else death_cry(ch); make_corpse(ch); extract_char(ch); }
void js_hitpercent_triggers(Character * ch, Character * victim) { if (!ch->js_scripts || ch->js_scripts->size() == 0 || !FIGHTING(ch)) return; for (int i = 0; i < ch->js_scripts->size(); ++i) { if (ch->js_scripts->at(i)->isFlagged(JS::CHARACTER_HITPERCENT)) { JSTrigger* trig = ch->js_scripts->at(i); if (is_allowed_violent(ch, victim, trig) && GET_MAX_HIT(ch) && (((GET_HIT(ch) * 100) / GET_MAX_HIT(ch)) <= trig->narg)) { JSManager::get()->execute(trig, ch, victim); } } } }
void raw_kill(struct char_data * ch, struct char_data * killer) { if (FIGHTING(ch)) stop_fighting(ch); while (ch->affected) affect_remove(ch, ch->affected); /* To make ordinary commands work in scripts. welcor*/ GET_POS(ch) = POS_STANDING; if (killer) { if (check_hooks(HOOK_CONT_DIED, ch_script_cont(ch), killer, SNull, SNull )) death_cry(ch); } else death_cry(ch); update_pos(ch); make_corpse(ch); extract_char(ch); }
/* move a player out of a room */ void char_from_room(struct char_data * ch) { struct char_data *temp; if (ch == NULL || ch->in_room == NOWHERE) { log("SYSERR: NULL or NOWHERE in handler.c, char_from_room"); exit(1); } if (FIGHTING(ch) != NULL) { stop_fighting(ch); } if ( affected_by_spell(ch, SPELL_LIGHT) ) { world[ch->in_room].light -= 10; } if ( affected_by_spell(ch, SPELL_DARKNESS) ) { world[ch->in_room].light += 10; } if (GET_EQ(ch, WEAR_LIGHT) != NULL) { if (GET_OBJ_TYPE(GET_EQ(ch, WEAR_LIGHT)) == ITEM_LIGHT) { if (GET_OBJ_VAL(GET_EQ(ch, WEAR_LIGHT), 2)) { /* Light is ON */ world[ch->in_room].light--; } } } /* if (affected_by_spell(ch, SPELL_ENTANGLE)) affect_from_char(ch, SPELL_ENTANGLE); if (affected_by_spell(ch, SPELL_MIRE)) affect_from_char(ch, SPELL_MIRE); */ REMOVE_FROM_LIST(ch, world[ch->in_room].people, next_in_room); ch->in_room = NOWHERE; ch->next_in_room = NULL; }
/* move a player out of a room */ void char_from_room(struct char_data *ch) { struct char_data *temp; if (ch == NULL || IN_ROOM(ch) == NOWHERE) { log("SYSERR: NULL character or NOWHERE in %s, char_from_room", __FILE__); exit(1); } if (FIGHTING(ch) != NULL) stop_fighting(ch); char_from_furniture(ch); if (GET_EQ(ch, WEAR_LIGHT) != NULL) if (GET_OBJ_TYPE(GET_EQ(ch, WEAR_LIGHT)) == ITEM_LIGHT) if (GET_OBJ_VAL(GET_EQ(ch, WEAR_LIGHT), 2)) /* Light is ON */ world[IN_ROOM(ch)].light--; REMOVE_FROM_LIST(ch, world[IN_ROOM(ch)].people, next_in_room); IN_ROOM(ch) = NOWHERE; ch->next_in_room = NULL; }