From 61d076442fa93d5923c99fc4f132cb3116a81421 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Tue, 27 Jul 2010 12:19:05 +0400 Subject: [PATCH] [10277] Use typedef CreatureEventAIList, some other code style cleanups in EventAI code. --- src/game/CreatureEventAI.cpp | 175 +++++++++++++++++------------------ src/game/CreatureEventAI.h | 27 +++--- src/shared/revision_nr.h | 2 +- 3 files changed, 103 insertions(+), 101 deletions(-) diff --git a/src/game/CreatureEventAI.cpp b/src/game/CreatureEventAI.cpp index 93a76c240..27007a793 100644 --- a/src/game/CreatureEventAI.cpp +++ b/src/game/CreatureEventAI.cpp @@ -55,11 +55,10 @@ int CreatureEventAI::Permissible(const Creature *creature) CreatureEventAI::CreatureEventAI(Creature *c ) : CreatureAI(c) { // Need make copy for filter unneeded steps and safe in case table reload - CreatureEventAI_Event_Map::const_iterator CreatureEvents = sEventAIMgr.GetCreatureEventAIMap().find(m_creature->GetEntry()); - if (CreatureEvents != sEventAIMgr.GetCreatureEventAIMap().end()) + CreatureEventAI_Event_Map::const_iterator creatureEventsItr = sEventAIMgr.GetCreatureEventAIMap().find(m_creature->GetEntry()); + if (creatureEventsItr != sEventAIMgr.GetCreatureEventAIMap().end()) { - std::vector::const_iterator i; - for (i = (*CreatureEvents).second.begin(); i != (*CreatureEvents).second.end(); ++i) + for (CreatureEventAI_Event_Vec::const_iterator i = (*creatureEventsItr).second.begin(); i != (*creatureEventsItr).second.end(); ++i) { //Debug check @@ -72,32 +71,32 @@ CreatureEventAI::CreatureEventAI(Creature *c ) : CreatureAI(c) if ((1 << (m_creature->GetMap()->GetSpawnMode()+1)) & (*i).event_flags) { //event flagged for instance mode - CreatureEventAIList.push_back(CreatureEventAIHolder(*i)); + m_CreatureEventAIList.push_back(CreatureEventAIHolder(*i)); } - continue; } - CreatureEventAIList.push_back(CreatureEventAIHolder(*i)); + else + m_CreatureEventAIList.push_back(CreatureEventAIHolder(*i)); } //EventMap had events but they were not added because they must be for instance - if (CreatureEventAIList.empty()) + if (m_CreatureEventAIList.empty()) sLog.outError("CreatureEventAI: Creature %u has events but no events added to list because of instance flags.", m_creature->GetEntry()); } else sLog.outError("CreatureEventAI: EventMap for Creature %u is empty but creature is using CreatureEventAI.", m_creature->GetEntry()); - bEmptyList = CreatureEventAIList.empty(); - Phase = 0; - CombatMovementEnabled = true; - MeleeEnabled = true; - AttackDistance = 0.0f; - AttackAngle = 0.0f; + m_bEmptyList = m_CreatureEventAIList.empty(); + m_Phase = 0; + m_CombatMovementEnabled = true; + m_MeleeEnabled = true; + m_AttackDistance = 0.0f; + m_AttackAngle = 0.0f; - InvinceabilityHpLevel = 0; + m_InvinceabilityHpLevel = 0; //Handle Spawned Events - if (!bEmptyList) + if (!m_bEmptyList) { - for (std::vector::iterator i = CreatureEventAIList.begin(); i != CreatureEventAIList.end(); ++i) + for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i) if (SpawnedEventConditionsCheck((*i).Event)) ProcessEvent(*i); } @@ -110,7 +109,7 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction return false; //Check the inverse phase mask (event doesn't trigger if current phase bit is set in mask) - if (pHolder.Event.event_inverse_phase_mask & (1 << Phase)) + if (pHolder.Event.event_inverse_phase_mask & (1 << m_Phase)) return false; CreatureEventAI_Event const& event = pHolder.Event; @@ -476,11 +475,11 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32 { case CHASE_MOTION_TYPE: case FOLLOW_MOTION_TYPE: - AttackDistance = 0.0f; - AttackAngle = 0.0f; + m_AttackDistance = 0.0f; + m_AttackAngle = 0.0f; m_creature->GetMotionMaster()->Clear(false); - m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim(), AttackDistance, AttackAngle); + m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim(), m_AttackDistance, m_AttackAngle); break; } } @@ -562,17 +561,17 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32 target->RemoveFlag(UNIT_FIELD_FLAGS, action.unit_flag.value); break; case ACTION_T_AUTO_ATTACK: - MeleeEnabled = action.auto_attack.state != 0; + m_MeleeEnabled = action.auto_attack.state != 0; break; case ACTION_T_COMBAT_MOVEMENT: // ignore no affect case - if(CombatMovementEnabled==(action.combat_movement.state!=0)) + if(m_CombatMovementEnabled==(action.combat_movement.state!=0)) return; - CombatMovementEnabled = action.combat_movement.state != 0; + m_CombatMovementEnabled = action.combat_movement.state != 0; //Allow movement (create new targeted movement gen only if idle) - if (CombatMovementEnabled) + if (m_CombatMovementEnabled) { if(action.combat_movement.melee && m_creature->isInCombat()) if(Unit* victim = m_creature->getVictim()) @@ -581,7 +580,7 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32 if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == IDLE_MOTION_TYPE) { m_creature->GetMotionMaster()->Clear(false); - m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim(), AttackDistance, AttackAngle); + m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim(), m_AttackDistance, m_AttackAngle); } } else @@ -599,23 +598,23 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32 } break; case ACTION_T_SET_PHASE: - Phase = action.set_phase.phase; + m_Phase = action.set_phase.phase; break; case ACTION_T_INC_PHASE: { - int32 new_phase = int32(Phase)+action.set_inc_phase.step; + int32 new_phase = int32(m_Phase)+action.set_inc_phase.step; if (new_phase < 0) { sLog.outErrorDb( "CreatureEventAI: Event %d decrease Phase under 0. CreatureEntry = %d", EventId, m_creature->GetEntry()); - Phase = 0; + m_Phase = 0; } else if (new_phase >= MAX_PHASE) { sLog.outErrorDb( "CreatureEventAI: Event %d incremented Phase above %u. Phase mask cannot be used with phases past %u. CreatureEntry = %d", EventId, MAX_PHASE-1, MAX_PHASE-1, m_creature->GetEntry()); - Phase = MAX_PHASE-1; + m_Phase = MAX_PHASE-1; } else - Phase = new_phase; + m_Phase = new_phase; break; } @@ -647,25 +646,25 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32 target->RemoveAurasDueToSpell(action.remove_aura.spellId); break; case ACTION_T_RANGED_MOVEMENT: - AttackDistance = (float)action.ranged_movement.distance; - AttackAngle = action.ranged_movement.angle/180.0f*M_PI_F; + m_AttackDistance = (float)action.ranged_movement.distance; + m_AttackAngle = action.ranged_movement.angle/180.0f*M_PI_F; - if (CombatMovementEnabled) + if (m_CombatMovementEnabled) { if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE) { //Drop current movement gen m_creature->GetMotionMaster()->Clear(false); - m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim(), AttackDistance, AttackAngle); + m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim(), m_AttackDistance, m_AttackAngle); } } break; case ACTION_T_RANDOM_PHASE: - Phase = GetRandActionParam(rnd, action.random_phase.phase1, action.random_phase.phase2, action.random_phase.phase3); + m_Phase = GetRandActionParam(rnd, action.random_phase.phase1, action.random_phase.phase2, action.random_phase.phase3); break; case ACTION_T_RANDOM_PHASE_RANGE: if (action.random_phase_range.phaseMax > action.random_phase_range.phaseMin) - Phase = action.random_phase_range.phaseMin + (rnd % (action.random_phase_range.phaseMax - action.random_phase_range.phaseMin)); + m_Phase = action.random_phase_range.phaseMin + (rnd % (action.random_phase_range.phaseMax - action.random_phase_range.phaseMin)); else sLog.outErrorDb( "CreatureEventAI: ACTION_T_RANDOM_PHASE_RANGE cannot have Param2 <= Param1. Divide by Zero. Event = %d. CreatureEntry = %d", EventId, m_creature->GetEntry()); break; @@ -778,9 +777,9 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32 case ACTION_T_SET_INVINCIBILITY_HP_LEVEL: { if(action.invincibility_hp_level.is_percent) - InvinceabilityHpLevel = m_creature->GetMaxHealth()*action.invincibility_hp_level.hp_level/100; + m_InvinceabilityHpLevel = m_creature->GetMaxHealth()*action.invincibility_hp_level.hp_level/100; else - InvinceabilityHpLevel = action.invincibility_hp_level.hp_level; + m_InvinceabilityHpLevel = action.invincibility_hp_level.hp_level; break; } } @@ -790,25 +789,25 @@ void CreatureEventAI::JustRespawned() { Reset(); - if (bEmptyList) + if (m_bEmptyList) return; //Handle Spawned Events - for (std::vector::iterator i = CreatureEventAIList.begin(); i != CreatureEventAIList.end(); ++i) + for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i) if (SpawnedEventConditionsCheck((*i).Event)) ProcessEvent(*i); } void CreatureEventAI::Reset() { - EventUpdateTime = EVENT_UPDATE_TIME; - EventDiff = 0; + m_EventUpdateTime = EVENT_UPDATE_TIME; + m_EventDiff = 0; - if (bEmptyList) + if (m_bEmptyList) return; //Reset all events to enabled - for (std::vector::iterator i = CreatureEventAIList.begin(); i != CreatureEventAIList.end(); ++i) + for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i) { CreatureEventAI_Event const& event = (*i).Event; switch (event.event_type) @@ -833,9 +832,9 @@ void CreatureEventAI::JustReachedHome() { m_creature->LoadCreaturesAddon(); - if (!bEmptyList) + if (!m_bEmptyList) { - for (std::vector::iterator i = CreatureEventAIList.begin(); i != CreatureEventAIList.end(); ++i) + for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i) { if ((*i).Event.event_type == EVENT_T_REACHED_HOME) ProcessEvent(*i); @@ -856,11 +855,11 @@ void CreatureEventAI::EnterEvadeMode() m_creature->SetLootRecipient(NULL); - if (bEmptyList) + if (m_bEmptyList) return; //Handle Evade events - for (std::vector::iterator i = CreatureEventAIList.begin(); i != CreatureEventAIList.end(); ++i) + for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i) { if ((*i).Event.event_type == EVENT_T_EVADE) ProcessEvent(*i); @@ -878,26 +877,26 @@ void CreatureEventAI::JustDied(Unit* killer) m_creature->SendZoneUnderAttackMessage(pKiller); } - if (bEmptyList) + if (m_bEmptyList) return; //Handle Evade events - for (std::vector::iterator i = CreatureEventAIList.begin(); i != CreatureEventAIList.end(); ++i) + for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i) { if ((*i).Event.event_type == EVENT_T_DEATH) ProcessEvent(*i, killer); } // reset phase after any death state events - Phase = 0; + m_Phase = 0; } void CreatureEventAI::KilledUnit(Unit* victim) { - if (bEmptyList || victim->GetTypeId() != TYPEID_PLAYER) + if (m_bEmptyList || victim->GetTypeId() != TYPEID_PLAYER) return; - for (std::vector::iterator i = CreatureEventAIList.begin(); i != CreatureEventAIList.end(); ++i) + for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i) { if ((*i).Event.event_type == EVENT_T_KILL) ProcessEvent(*i, victim); @@ -906,10 +905,10 @@ void CreatureEventAI::KilledUnit(Unit* victim) void CreatureEventAI::JustSummoned(Creature* pUnit) { - if (bEmptyList || !pUnit) + if (m_bEmptyList || !pUnit) return; - for (std::vector::iterator i = CreatureEventAIList.begin(); i != CreatureEventAIList.end(); ++i) + for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i) { if ((*i).Event.event_type == EVENT_T_SUMMONED_UNIT) ProcessEvent(*i, pUnit); @@ -918,10 +917,10 @@ void CreatureEventAI::JustSummoned(Creature* pUnit) void CreatureEventAI::SummonedCreatureJustDied(Creature* pUnit) { - if (bEmptyList || !pUnit) + if (m_bEmptyList || !pUnit) return; - for (std::vector::iterator i = CreatureEventAIList.begin(); i != CreatureEventAIList.end(); ++i) + for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i) { if ((*i).Event.event_type == EVENT_T_SUMMONED_JUST_DIED) ProcessEvent(*i, pUnit); @@ -930,10 +929,10 @@ void CreatureEventAI::SummonedCreatureJustDied(Creature* pUnit) void CreatureEventAI::SummonedCreatureDespawn(Creature* pUnit) { - if (bEmptyList || !pUnit) + if (m_bEmptyList || !pUnit) return; - for (std::vector::iterator i = CreatureEventAIList.begin(); i != CreatureEventAIList.end(); ++i) + for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i) { if ((*i).Event.event_type == EVENT_T_SUMMONED_JUST_DESPAWN) ProcessEvent(*i, pUnit); @@ -943,9 +942,9 @@ void CreatureEventAI::SummonedCreatureDespawn(Creature* pUnit) void CreatureEventAI::EnterCombat(Unit *enemy) { //Check for on combat start events - if (!bEmptyList) + if (!m_bEmptyList) { - for (std::vector::iterator i = CreatureEventAIList.begin(); i != CreatureEventAIList.end(); ++i) + for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i) { CreatureEventAI_Event const& event = (*i).Event; switch (event.event_type) @@ -968,8 +967,8 @@ void CreatureEventAI::EnterCombat(Unit *enemy) } } - EventUpdateTime = EVENT_UPDATE_TIME; - EventDiff = 0; + m_EventUpdateTime = EVENT_UPDATE_TIME; + m_EventDiff = 0; } void CreatureEventAI::AttackStart(Unit *who) @@ -977,15 +976,15 @@ void CreatureEventAI::AttackStart(Unit *who) if (!who) return; - if (m_creature->Attack(who, MeleeEnabled)) + if (m_creature->Attack(who, m_MeleeEnabled)) { m_creature->AddThreat(who); m_creature->SetInCombatWith(who); who->SetInCombatWith(m_creature); - if (CombatMovementEnabled) + if (m_CombatMovementEnabled) { - m_creature->GetMotionMaster()->MoveChase(who, AttackDistance, AttackAngle); + m_creature->GetMotionMaster()->MoveChase(who, m_AttackDistance, m_AttackAngle); } else { @@ -1001,9 +1000,9 @@ void CreatureEventAI::MoveInLineOfSight(Unit *who) return; //Check for OOC LOS Event - if (!bEmptyList && !m_creature->getVictim()) + if (!m_bEmptyList && !m_creature->getVictim()) { - for (std::vector::iterator itr = CreatureEventAIList.begin(); itr != CreatureEventAIList.end(); ++itr) + for (CreatureEventAIList::iterator itr = m_CreatureEventAIList.begin(); itr != m_CreatureEventAIList.end(); ++itr) { if ((*itr).Event.event_type == EVENT_T_OOC_LOS) { @@ -1051,10 +1050,10 @@ void CreatureEventAI::MoveInLineOfSight(Unit *who) void CreatureEventAI::SpellHit(Unit* pUnit, const SpellEntry* pSpell) { - if (bEmptyList) + if (m_bEmptyList) return; - for (std::vector::iterator i = CreatureEventAIList.begin(); i != CreatureEventAIList.end(); ++i) + for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i) if ((*i).Event.event_type == EVENT_T_SPELLHIT) //If spell id matches (or no spell id) & if spell school matches (or no spell school) if (!(*i).Event.spell_hit.spellId || pSpell->Id == (*i).Event.spell_hit.spellId) @@ -1071,24 +1070,24 @@ void CreatureEventAI::UpdateAI(const uint32 diff) if (!m_creature->isAlive()) return; - if (!bEmptyList) + if (!m_bEmptyList) { //Events are only updated once every EVENT_UPDATE_TIME ms to prevent lag with large amount of events - if (EventUpdateTime < diff) + if (m_EventUpdateTime < diff) { - EventDiff += diff; + m_EventDiff += diff; //Check for time based events - for (std::vector::iterator i = CreatureEventAIList.begin(); i != CreatureEventAIList.end(); ++i) + for (CreatureEventAIList::iterator i = m_CreatureEventAIList.begin(); i != m_CreatureEventAIList.end(); ++i) { //Decrement Timers if ((*i).Time) { - if ((*i).Time > EventDiff) + if ((*i).Time > m_EventDiff) { //Do not decrement timers if event cannot trigger in this phase - if (!((*i).Event.event_inverse_phase_mask & (1 << Phase))) - (*i).Time -= EventDiff; + if (!((*i).Event.event_inverse_phase_mask & (1 << m_Phase))) + (*i).Time -= m_EventDiff; //Skip processing of events that have time remaining continue; @@ -1122,18 +1121,18 @@ void CreatureEventAI::UpdateAI(const uint32 diff) } } - EventDiff = 0; - EventUpdateTime = EVENT_UPDATE_TIME; + m_EventDiff = 0; + m_EventUpdateTime = EVENT_UPDATE_TIME; } else { - EventDiff += diff; - EventUpdateTime -= diff; + m_EventDiff += diff; + m_EventUpdateTime -= diff; } } //Melee Auto-Attack - if (Combat && MeleeEnabled) + if (Combat && m_MeleeEnabled) DoMeleeAttackIfReady(); } @@ -1340,10 +1339,10 @@ bool CreatureEventAI::CanCast(Unit* Target, SpellEntry const *Spell, bool Trigge void CreatureEventAI::ReceiveEmote(Player* pPlayer, uint32 text_emote) { - if (bEmptyList) + if (m_bEmptyList) return; - for (std::vector::iterator itr = CreatureEventAIList.begin(); itr != CreatureEventAIList.end(); ++itr) + for (CreatureEventAIList::iterator itr = m_CreatureEventAIList.begin(); itr != m_CreatureEventAIList.end(); ++itr) { if ((*itr).Event.event_type == EVENT_T_RECEIVE_EMOTE) { @@ -1362,12 +1361,12 @@ void CreatureEventAI::ReceiveEmote(Player* pPlayer, uint32 text_emote) void CreatureEventAI::DamageTaken( Unit* /*done_by*/, uint32& damage ) { - if(InvinceabilityHpLevel > 0 && m_creature->GetHealth() < InvinceabilityHpLevel+damage) + if(m_InvinceabilityHpLevel > 0 && m_creature->GetHealth() < m_InvinceabilityHpLevel+damage) { - if(m_creature->GetHealth() <= InvinceabilityHpLevel) + if(m_creature->GetHealth() <= m_InvinceabilityHpLevel) damage = 0; else - damage = m_creature->GetHealth() - InvinceabilityHpLevel; + damage = m_creature->GetHealth() - m_InvinceabilityHpLevel; } } diff --git a/src/game/CreatureEventAI.h b/src/game/CreatureEventAI.h index bfae2caa7..c7abfd55a 100644 --- a/src/game/CreatureEventAI.h +++ b/src/game/CreatureEventAI.h @@ -569,7 +569,7 @@ class MANGOS_DLL_SPEC CreatureEventAI : public CreatureAI explicit CreatureEventAI(Creature *c); ~CreatureEventAI() { - CreatureEventAIList.clear(); + m_CreatureEventAIList.clear(); } void JustRespawned(); void Reset(); @@ -607,18 +607,21 @@ class MANGOS_DLL_SPEC CreatureEventAI : public CreatureAI void DoFindFriendlyMissingBuff(std::list& _list, float range, uint32 spellid); void DoFindFriendlyCC(std::list& _list, float range); - //Holder for events (stores enabled, time, and eventid) - std::vector CreatureEventAIList; - uint32 EventUpdateTime; //Time between event updates - uint32 EventDiff; //Time between the last event call - bool bEmptyList; + protected: + uint32 m_EventUpdateTime; //Time between event updates + uint32 m_EventDiff; //Time between the last event call + bool m_bEmptyList; //Variables used by Events themselves - uint8 Phase; // Current phase, max 32 phases - bool CombatMovementEnabled; // If we allow targeted movment gen (movement twoards top threat) - bool MeleeEnabled; // If we allow melee auto attack - float AttackDistance; // Distance to attack from - float AttackAngle; // Angle of attack - uint32 InvinceabilityHpLevel; // Minimal health level allowed at damage apply + typedef std::vector CreatureEventAIList; + CreatureEventAIList m_CreatureEventAIList; //Holder for events (stores enabled, time, and eventid) + + uint8 m_Phase; // Current phase, max 32 phases + bool m_CombatMovementEnabled; // If we allow targeted movment gen (movement twoards top threat) + bool m_MeleeEnabled; // If we allow melee auto attack + float m_AttackDistance; // Distance to attack from + float m_AttackAngle; // Angle of attack + uint32 m_InvinceabilityHpLevel; // Minimal health level allowed at damage apply }; + #endif diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 10dadaa8d..7017ec0fc 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10276" + #define REVISION_NR "10277" #endif // __REVISION_NR_H__