if (char_upd_it->position >= POS_STUNNED) {
if (IS_NPC(char_upd_it) && !char_upd_it->fighting && !char_upd_it->master
&& !char_upd_it->desc && char_upd_it->in_room) {
/* mobs that are supposed to stay in their area*/
if (IS_SET(char_upd_it->act, ACT_STAY_AREA) && char_upd_it->zone && char_upd_it->in_room && char_upd_it->zone->area != char_upd_it->in_room->area
&& number_percent() < 5) {
act("$n shrugs and wanders on home.", char_upd_it, NULL, NULL, TO_ROOM);
extract_char(char_upd_it, TRUE, CHAR_RETURN_LIST);
continue;
}
// case where a usually sentinel mobs started wandering cause he was attacked or bamf or whaetver
// and his attacker left the area
if (char_upd_it->pIndexData && IS_SET(char_upd_it->pIndexData->act, ACT_SENTINEL)
&& !IS_SET(char_upd_it->act, ACT_SENTINEL) ) {
if ( (!char_upd_it->hunting && char_upd_it->in_room->vnum != char_upd_it->zone->vnum) || (char_upd_it->hunting && char_upd_it->hunting->in_room
&& char_upd_it->in_room->area != char_upd_it->hunting->in_room->area)) {
MP_DATA direction = find_path(char_upd_it->in_room->vnum, char_upd_it->zone->vnum, char_upd_it,
PATH_DEPTH, TRUE, FALSE);
if (direction.value == -1) {
act("$n shrugs and wanders on home.", char_upd_it, NULL, NULL, TO_ROOM);
extract_char(char_upd_it, TRUE, CHAR_RETURN_LIST);
continue;
}
else {
move_char(char_upd_it, direction.value, FALSE);
if (char_upd_it->hunting && (!char_upd_it->hunting->in_room || (char_upd_it->hunting->in_room->area
!= char_upd_it->in_room->area)))
act("$n says 'Damn! Lost $M!'", char_upd_it, NULL, char_upd_it->hunting, TO_ROOM);
if (char_upd_it->in_room == char_upd_it->zone) {
SET_BIT(char_upd_it->act, ACT_SENTINEL);
char_upd_it->hunting = NULL;
}
}
}
}
else
hunt_victim(char_upd_it);
}
if ( !char_upd_it->valid || char_upd_it->position == POS_DEAD)
continue;
if (char_upd_it->position >= POS_STUNNED) {
if (IS_NPC(char_upd_it) && !char_upd_it->fighting && !char_upd_it->master
&& !char_upd_it->desc && char_upd_it->in_room) {
/* mobs that are supposed to stay in their area*/
if (IS_SET(char_upd_it->act, ACT_STAY_AREA) && char_upd_it->zone && char_upd_it->in_room && char_upd_it->zone->area != char_upd_it->in_room->area
&& number_percent() < 5) {
act("$n shrugs and wanders on home.", char_upd_it, NULL, NULL, TO_ROOM);
extract_char(char_upd_it, TRUE, CHAR_RETURN_LIST);
continue;
}
// case where a usually sentinel mobs started wandering cause he was attacked or bamf or whaetver
// and his attacker left the area
if (char_upd_it->pIndexData && IS_SET(char_upd_it->pIndexData->act, ACT_SENTINEL)
&& !IS_SET(char_upd_it->act, ACT_SENTINEL)) {
if (( !char_upd_it->hunting && char_upd_it->in_room->vnum != char_upd_it->zone->vnum)
|| (char_upd_it->hunting && char_upd_it->hunting->in_room && char_upd_it->in_room->area != char_upd_it->hunting->in_room->area)) {
MP_DATA direction = find_path(char_upd_it->in_room->vnum, char_upd_it->zone->vnum, char_upd_it, PATH_DEPTH, TRUE, FALSE);
if (direction.value == -1) {
act("$n shrugs and wanders on home.", char_upd_it, NULL, NULL, TO_ROOM);
extract_char(char_upd_it, TRUE, CHAR_RETURN_LIST);
continue;
}
move_char(char_upd_it, direction.value, FALSE);
if ( !char_upd_it->valid || char_upd_it->position == POS_DEAD)
continue;
if (char_upd_it->hunting && ( !char_upd_it->hunting->in_room || (char_upd_it->hunting->in_room->area != char_upd_it->in_room->area)))
act("$n says 'Damn! Lost $M!'", char_upd_it, NULL, char_upd_it->hunting, TO_ROOM);
if (char_upd_it->in_room == char_upd_it->zone) {
SET_BIT(char_upd_it->act, ACT_SENTINEL);
char_upd_it->hunting = NULL;
}
}
}
else
hunt_victim(char_upd_it);
}
if ( !char_upd_it->valid || char_upd_it->position == POS_DEAD)
continue;
if (IS_PC(char_upd_it) && IS_SET(char_upd_it->act, PLR_NOQUIT))
REMOVE_BIT(char_upd_it->act, PLR_NOQUIT);
if (char_upd_it->hit < get_max_hit(char_upd_it))
char_upd_it->hit += hit_gain_per_tick(char_upd_it);
if (char_upd_it->mana < get_max_mana(char_upd_it))
char_upd_it->mana += mana_gain_per_tick(char_upd_it);
if (char_upd_it->move < get_max_moves(char_upd_it))
char_upd_it->move += move_gain_per_tick(char_upd_it);
check_max_hpmanamv(char_upd_it);
}
if (!char_upd_it->valid || char_upd_it->position == POS_DEAD)
continue;