void HostileReference::updateOnlineStatus() { bool online = false; bool accessible = false; if (!isValid()) { if (Unit* target = ObjectAccessor::GetUnit(*getSourceUnit(), getUnitGuid())) link(target, getSource()); } // only check for online status if // ref is valid // target is no player or not gamemaster // target is not in flight if (isValid() && ((getTarget()->GetTypeId() != TYPEID_PLAYER || !((Player*)getTarget())->isGameMaster()) || !getTarget()->IsTaxiFlying())) { Creature* creature = (Creature*) getSourceUnit(); online = getTarget()->isInAccessablePlaceFor(creature); if (!online) { if (creature->AI()->canReachByRangeAttack(getTarget())) online = true; // not accessable but stays online } else accessible = true; } setAccessibleState(accessible); setOnlineOfflineState(online); }
void HostileReference::updateOnlineStatus() { bool online = false; bool accessible = false; if (!isValid()) if (Unit* target = ObjectAccessor::GetUnit(*getSourceUnit(), getUnitGuid())) link(target, getSource()); // only check for online status if // ref is valid // target is no player or not gamemaster // target is not in flight if (isValid() && (getTarget()->GetTypeId() != TYPEID_PLAYER || !getTarget()->ToPlayer()->isGameMaster()) && !getTarget()->HasUnitState(UNIT_STATE_IN_FLIGHT) && getTarget()->IsInMap(getSourceUnit()) && getTarget()->InSamePhase(getSourceUnit()) ) { Creature* creature = getSourceUnit()->ToCreature(); online = getTarget()->isInAccessiblePlaceFor(creature); if (!online) { if (creature->IsWithinCombatRange(getTarget(), creature->m_CombatDistance)) online = true; // not accessible but stays online } else accessible = true; } setAccessibleState(accessible); setOnlineOfflineState(online); }
void HostilReference::updateOnlineStatus() { bool online = false; bool accessible = false; if(!isValid()) { Unit* target = ObjectAccessor::GetUnit(*getSourceUnit(), getUnitGuid()); if(target) link(target, getSource()); } // only check for online status if // ref is valid // target is no player or not gamemaster // target is not in flight if(isValid() && ((getTarget()->GetTypeId() != TYPEID_PLAYER || !((Player*)getTarget())->isGameMaster()) || !getTarget()->hasUnitState(UNIT_STAT_IN_FLIGHT))) { Creature* creature = (Creature* ) getSourceUnit(); online = getTarget()->isInAccessiblePlaceFor(creature); if(!online) { if(creature->IsWithinCombatRange(getTarget(),MELEE_RANGE)) online = true; // not accessible but stays online } else accessible = true; } setAccessibleState(accessible); setOnlineOfflineState(online); }
void HostilReference::setOnlineOfflineState(bool pIsOnline) { if(iOnline != pIsOnline) { iOnline = pIsOnline; if(!iOnline) setAccessibleState(false); // if not online that not accessible as well fireStatusChanged(ThreatRefStatusChangeEvent(UEV_THREAT_REF_ONLINE_STATUS, this)); } }