/* * Copyright (C) * Copyright (C) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "PassiveAI.h" #include "Creature.h" #include "TemporarySummon.h" PassiveAI::PassiveAI(Creature* c) : CreatureAI(c) { me->SetReactState(REACT_PASSIVE); } PossessedAI::PossessedAI(Creature* c) : CreatureAI(c) { me->SetReactState(REACT_PASSIVE); } NullCreatureAI::NullCreatureAI(Creature* c) : CreatureAI(c) { me->SetReactState(REACT_PASSIVE); } void PassiveAI::UpdateAI(uint32) { if (me->IsInCombat() && me->getAttackers().empty()) EnterEvadeMode(); } void PossessedAI::AttackStart(Unit* target) { me->Attack(target, true); } void PossessedAI::UpdateAI(uint32 /*diff*/) { if (me->GetVictim()) { if (!me->IsValidAttackTarget(me->GetVictim())) me->AttackStop(); else DoMeleeAttackIfReady(); } } void PossessedAI::JustDied(Unit* /*u*/) { // We died while possessed, disable our loot me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } void PossessedAI::KilledUnit(Unit* victim) { // We killed a creature, disable victim's loot //if (victim->GetTypeId() == TYPEID_UNIT) // victim->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } void CritterAI::DamageTaken(Unit*, uint32&, DamageEffectType, SpellSchoolMask) { if (!me->HasUnitState(UNIT_STATE_FLEEING)) me->SetControlled(true, UNIT_STATE_FLEEING); _combatTimer = 1; } void CritterAI::EnterEvadeMode() { if (me->HasUnitState(UNIT_STATE_FLEEING)) me->SetControlled(false, UNIT_STATE_FLEEING); CreatureAI::EnterEvadeMode(); _combatTimer = 0; } void CritterAI::UpdateAI(uint32 diff) { if (me->IsInCombat()) { _combatTimer += diff; if (_combatTimer >= 5000) EnterEvadeMode(); } } void TriggerAI::IsSummonedBy(Unit* summoner) { if (me->m_spells[0]) me->CastSpell(me, me->m_spells[0], false, 0, 0, summoner ? summoner->GetGUID() : 0); }