diff options
48 files changed, 444 insertions, 60 deletions
diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt index 3ee74c0e592..571dbc1b2a9 100644 --- a/src/bindings/scripts/CMakeLists.txt +++ b/src/bindings/scripts/CMakeLists.txt @@ -4,8 +4,10 @@ SET(trinityscript_LIB_SRCS ScriptMgr.cpp ScriptMgr.h - base/escortAI.cpp - base/escortAI.h + base/escort_ai.cpp + base/escort_ai.h + base/follower_ai.cpp + base/follower_ai.h base/guard_ai.cpp base/guard_ai.h base/simple_ai.cpp diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj index 7368025639f..ee1a8c87592 100644 --- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj +++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj @@ -364,11 +364,19 @@ Name="base" > <File - RelativePath="..\base\escortAI.cpp" + RelativePath="..\base\escort_ai.cpp" > </File> <File - RelativePath="..\base\escortAI.h" + RelativePath="..\base\escort_ai.h" + > + </File> + <File + RelativePath="..\base\follower_ai.cpp" + > + </File> + <File + RelativePath="..\base\follower_ai.h" > </File> <File diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj index ea5fbf72f26..6cb095e68e1 100644 --- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj +++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj @@ -361,11 +361,19 @@ Name="base" > <File - RelativePath="..\base\escortAI.cpp" + RelativePath="..\base\escort_ai.cpp" > </File> <File - RelativePath="..\base\escortAI.h" + RelativePath="..\base\escort_ai.h" + > + </File> + <File + RelativePath="..\base\follower_ai.cpp" + > + </File> + <File + RelativePath="..\base\follower_ai.h" > </File> <File diff --git a/src/bindings/scripts/base/escortAI.cpp b/src/bindings/scripts/base/escort_ai.cpp index 2c9b968d281..3f4c8601f90 100644 --- a/src/bindings/scripts/base/escortAI.cpp +++ b/src/bindings/scripts/base/escort_ai.cpp @@ -10,7 +10,7 @@ SDCategory: Npc EndScriptData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" enum { diff --git a/src/bindings/scripts/base/escortAI.h b/src/bindings/scripts/base/escort_ai.h index 8ce82eb370a..8ce82eb370a 100644 --- a/src/bindings/scripts/base/escortAI.h +++ b/src/bindings/scripts/base/escort_ai.h diff --git a/src/bindings/scripts/base/follower_ai.cpp b/src/bindings/scripts/base/follower_ai.cpp new file mode 100644 index 00000000000..eb847c219db --- /dev/null +++ b/src/bindings/scripts/base/follower_ai.cpp @@ -0,0 +1,309 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> + * This program is free software licensed under GPL version 2 + * Please see the included DOCS/LICENSE.TXT for more information */ + +/* ScriptData +SDName: FollowerAI +SD%Complete: 50 +SDComment: This AI is under development +SDCategory: Npc +EndScriptData */ + +#include "precompiled.h" +#include "follower_ai.h" + +const float MAX_PLAYER_DISTANCE = 100.0f; + +enum +{ + POINT_COMBAT_START = 0xFFFFFF +}; + +FollowerAI::FollowerAI(Creature* pCreature) : ScriptedAI(pCreature), + m_uiLeaderGUID(0), + m_pQuestForFollow(NULL), + m_uiUpdateFollowTimer(2500), + m_bIsFollowing(false), + m_bIsReturnToLeader(false), + m_bIsFollowComplete(false) +{} + +void FollowerAI::AttackStart(Unit* pWho) +{ + if (!pWho) + return; + + if (m_creature->Attack(pWho, true)) + { + m_creature->AddThreat(pWho, 0.0f); + m_creature->SetInCombatWith(pWho); + pWho->SetInCombatWith(m_creature); + + if (m_creature->hasUnitState(UNIT_STAT_FOLLOW)) + m_creature->clearUnitState(UNIT_STAT_FOLLOW); + + if (IsCombatMovement()) + m_creature->GetMotionMaster()->MoveChase(pWho); + } +} + +void FollowerAI::MoveInLineOfSight(Unit* pWho) +{ + if (!m_creature->hasUnitState(UNIT_STAT_STUNNED) && pWho->isTargetableForAttack() && + m_creature->IsHostileTo(pWho) && pWho->isInAccessiblePlaceFor(m_creature)) + { + if (!m_creature->canFly() && m_creature->GetDistanceZ(pWho) > CREATURE_Z_ATTACK_RANGE) + return; + + //This part provides assistance to a player that are attacked by pWho, even if out of normal aggro range + //It will cause m_creature to attack pWho that are attacking _any_ player (which has been confirmed may happen also on offi) + //The flag (type_flag) is unconfirmed, but used here for further research and is a good candidate. + if (m_creature->hasUnitState(UNIT_STAT_FOLLOW) && + m_creature->GetCreatureInfo()->type_flags & 0x01000 && + pWho->getVictim() && + pWho->getVictim()->GetCharmerOrOwnerPlayerOrPlayerItself() && + m_creature->IsWithinDistInMap(pWho, MAX_PLAYER_DISTANCE) && + m_creature->IsWithinLOSInMap(pWho)) + { + pWho->RemoveAurasDueToSpell(SPELL_AURA_MOD_STEALTH); + AttackStart(pWho); + } + else + { + float attackRadius = m_creature->GetAttackDistance(pWho); + if (m_creature->IsWithinDistInMap(pWho, attackRadius) && m_creature->IsWithinLOSInMap(pWho)) + { + if (!m_creature->getVictim()) + { + pWho->RemoveAurasDueToSpell(SPELL_AURA_MOD_STEALTH); + AttackStart(pWho); + } + else if (m_creature->GetMap()->IsDungeon()) + { + pWho->SetInCombatWith(m_creature); + m_creature->AddThreat(pWho, 0.0f); + } + } + } + } +} + +void FollowerAI::JustDied(Unit* pKiller) +{ + if (!m_bIsFollowing || !m_uiLeaderGUID) + return; + + //TODO: need a better check for quests with time limit. + if (Player* pPlayer = GetLeaderForFollower()) + { + if (Group* pGroup = pPlayer->GetGroup()) + { + for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != NULL; pRef = pRef->next()) + { + if (Player* pMember = pRef->getSource()) + { + if (pPlayer->GetQuestStatus(m_pQuestForFollow->GetQuestId()) == QUEST_STATUS_INCOMPLETE) + pPlayer->FailQuest(m_pQuestForFollow->GetQuestId()); + } + } + } + else + { + if (pPlayer->GetQuestStatus(m_pQuestForFollow->GetQuestId()) == QUEST_STATUS_INCOMPLETE) + pPlayer->FailQuest(m_pQuestForFollow->GetQuestId()); + } + } +} + +void FollowerAI::JustRespawned() +{ + m_bIsFollowing = false; + m_bIsReturnToLeader = false; + m_bIsFollowComplete = false; + + if (!IsCombatMovement()) + SetCombatMovement(true); + + if (m_creature->getFaction() != m_creature->GetCreatureInfo()->faction_A) + m_creature->setFaction(m_creature->GetCreatureInfo()->faction_A); + + Reset(); +} + +void FollowerAI::EnterEvadeMode() +{ + m_creature->RemoveAllAuras(); + m_creature->DeleteThreatList(); + m_creature->CombatStop(true); + m_creature->SetLootRecipient(NULL); + + if (m_bIsFollowing) + { + debug_log("SD2: FollowerAI left combat, returning to CombatStartPosition."); + + if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == TARGETED_MOTION_TYPE) + { + float fPosX, fPosY, fPosZ; + m_creature->GetPosition(fPosX, fPosY, fPosZ); + m_creature->GetMotionMaster()->MovePoint(POINT_COMBAT_START, fPosX, fPosY, fPosZ); + } + } + else + { + if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == TARGETED_MOTION_TYPE) + m_creature->GetMotionMaster()->MoveTargetedHome(); + } + + Reset(); +} + +void FollowerAI::UpdateAI(const uint32 uiDiff) +{ + if (m_bIsFollowing && !m_creature->getVictim()) + { + if (m_uiUpdateFollowTimer < uiDiff) + { + if (m_bIsFollowComplete) + { + debug_log("SD2: FollowerAI is set completed, despawns."); + m_creature->ForcedDespawn(); + return; + } + + bool bIsMaxRangeExceeded = true; + + if (Player* pPlayer = GetLeaderForFollower()) + { + if (m_bIsReturnToLeader) + { + debug_log("SD2: FollowerAI is returning to leader."); + m_creature->GetMotionMaster()->MoveFollow(pPlayer, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); + m_bIsReturnToLeader = false; + return; + } + + if (Group* pGroup = pPlayer->GetGroup()) + { + for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != NULL; pRef = pRef->next()) + { + Player* pMember = pRef->getSource(); + + if (pMember && m_creature->IsWithinDistInMap(pMember, MAX_PLAYER_DISTANCE)) + { + bIsMaxRangeExceeded = false; + break; + } + } + } + else + { + if (m_creature->IsWithinDistInMap(pPlayer, MAX_PLAYER_DISTANCE)) + bIsMaxRangeExceeded = false; + } + } + + if (bIsMaxRangeExceeded) + { + debug_log("SD2: FollowerAI failed because player/group was to far away or not found"); + m_creature->ForcedDespawn(); + return; + } + + m_uiUpdateFollowTimer = 1000; + } + else + m_uiUpdateFollowTimer -= uiDiff; + } + + UpdateFollowerAI(uiDiff); +} + +void FollowerAI::UpdateFollowerAI(const uint32 uiDiff) +{ + if (!UpdateVictim()) + return; + + DoMeleeAttackIfReady(); +} + +void FollowerAI::MovementInform(uint32 uiMotionType, uint32 uiPointId) +{ + if (uiMotionType != POINT_MOTION_TYPE || !m_bIsFollowing) + return; + + if (uiPointId == POINT_COMBAT_START) + { + if (GetLeaderForFollower()) + m_bIsReturnToLeader = true; + else + m_creature->ForcedDespawn(); + } +} + +void FollowerAI::StartFollow(Player* pLeader, uint32 uiFactionForFollower, const Quest* pQuest) +{ + if (m_creature->getVictim()) + { + debug_log("SD2: FollowerAI attempt to StartFollow while in combat."); + return; + } + + if (m_bIsFollowing) + { + error_log("SD2: FollowerAI attempt to StartFollow while already following."); + return; + } + + //set variables + m_uiLeaderGUID = pLeader->GetGUID(); + + if (uiFactionForFollower) + m_creature->setFaction(uiFactionForFollower); + + m_pQuestForFollow = pQuest; + + if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == WAYPOINT_MOTION_TYPE) + { + m_creature->GetMotionMaster()->Clear(); + m_creature->GetMotionMaster()->MoveIdle(); + debug_log("SD2: FollowerAI start with WAYPOINT_MOTION_TYPE, set to MoveIdle."); + } + + m_creature->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); + + m_creature->GetMotionMaster()->MoveFollow(pLeader, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); + + m_bIsFollowing = true; + + debug_log("SD2: FollowerAI start follow %s (GUID %u)", pLeader->GetName(), m_uiLeaderGUID); +} + +Player* FollowerAI::GetLeaderForFollower() +{ + if (Player* pLeader = (Player*)Unit::GetUnit(*m_creature, m_uiLeaderGUID)) + { + if (pLeader->isAlive()) + return pLeader; + else + { + if (Group* pGroup = pLeader->GetGroup()) + { + for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != NULL; pRef = pRef->next()) + { + Player* pMember = pRef->getSource(); + + if (pMember && pMember->isAlive() && m_creature->IsWithinDistInMap(pMember, MAX_PLAYER_DISTANCE)) + { + debug_log("SD2: FollowerAI GetLeader changed and returned new leader."); + m_uiLeaderGUID = pMember->GetGUID(); + return pMember; + break; + } + } + } + } + } + + debug_log("SD2: FollowerAI GetLeader can not find suitable leader."); + return NULL; +} diff --git a/src/bindings/scripts/base/follower_ai.h b/src/bindings/scripts/base/follower_ai.h new file mode 100644 index 00000000000..d62980d4951 --- /dev/null +++ b/src/bindings/scripts/base/follower_ai.h @@ -0,0 +1,50 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> + * This program is free software licensed under GPL version 2 + * Please see the included DOCS/LICENSE.TXT for more information */ + +#ifndef SC_FOLLOWERAI_H +#define SC_FOLLOWERAI_H + +class TRINITY_DLL_DECL FollowerAI : public ScriptedAI +{ + public: + explicit FollowerAI(Creature* pCreature); + ~FollowerAI() {} + + //virtual void WaypointReached(uint32 uiPointId) = 0; + + void MovementInform(uint32 uiMotionType, uint32 uiPointId); + + void AttackStart(Unit*); + + void MoveInLineOfSight(Unit*); + + void EnterEvadeMode(); + + void JustDied(Unit*); + + void JustRespawned(); + + void UpdateAI(const uint32); //the "internal" update, calls UpdateFollowerAI() + virtual void UpdateFollowerAI(const uint32); //used when it's needed to add code in update (abilities, scripted events, etc) + + void StartFollow(Player* pPlayer, uint32 uiFactionForFollower = 0, const Quest* pQuest = NULL); + + protected: + void SetFollowComplete() { m_bIsFollowComplete = true; } + bool IsFollowComplete() { return m_bIsFollowComplete; } + + Player* GetLeaderForFollower(); + + private: + uint64 m_uiLeaderGUID; + uint32 m_uiUpdateFollowTimer; + + bool m_bIsFollowing; + bool m_bIsReturnToLeader; + bool m_bIsFollowComplete; + + const Quest* m_pQuestForFollow; //normally we have a quest +}; + +#endif diff --git a/src/bindings/scripts/scripts/custom/test.cpp b/src/bindings/scripts/scripts/custom/test.cpp index 20a3e2a20e3..121f5a5ec10 100644 --- a/src/bindings/scripts/scripts/custom/test.cpp +++ b/src/bindings/scripts/scripts/custom/test.cpp @@ -22,7 +22,7 @@ SDCategory: Script Examples EndScriptData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" struct TRINITY_DLL_DECL npc_testAI : public npc_escortAI { diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/arathi_highlands.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/arathi_highlands.cpp index bc33d9841eb..c5325da12d3 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/arathi_highlands.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/arathi_highlands.cpp @@ -26,7 +26,7 @@ npc_professor_phizzlethorpe EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_professor_phizzlethorpe diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.cpp index a9cf7b7391f..ee193df3430 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.cpp @@ -37,7 +37,7 @@ npc_rocknot EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" #include "def_blackrock_depths.h" /*###### diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/eversong_woods.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/eversong_woods.cpp index 6c76adeaecb..929fea7f41a 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/eversong_woods.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/eversong_woods.cpp @@ -30,7 +30,7 @@ go_harbinger_second_trial EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_prospector_anvilward diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/ghostlands.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/ghostlands.cpp index c96923661de..42122c1f002 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/ghostlands.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/ghostlands.cpp @@ -29,7 +29,7 @@ npc_ranger_lilatha EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_blood_knight_dawnstar diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/hinterlands.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/hinterlands.cpp index 46f12159acf..b02d3fb918b 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/hinterlands.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/hinterlands.cpp @@ -26,7 +26,7 @@ npc_rinji EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_rinji diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/karazhan/karazhan.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/karazhan/karazhan.cpp index 91dd4e44ad3..cecdcc6330e 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/karazhan/karazhan.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/karazhan/karazhan.cpp @@ -29,7 +29,7 @@ EndContentData */ #include "precompiled.h" #include "def_karazhan.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### # npc_barnesAI diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/scarlet_enclave/the_scarlet_enclave.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/scarlet_enclave/the_scarlet_enclave.cpp index ae6c4942c1a..1a081a49050 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/scarlet_enclave/the_scarlet_enclave.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/scarlet_enclave/the_scarlet_enclave.cpp @@ -19,7 +19,7 @@ #include "precompiled.h" #include "Vehicle.h" #include "ObjectMgr.h" -#include "escortAI.h" +#include "escort_ai.h" #define GCD_CAST 1 diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/scarlet_monastery/boss_herod.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/scarlet_monastery/boss_herod.cpp index 5a1c8e6d364..6235499fe13 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/scarlet_monastery/boss_herod.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/scarlet_monastery/boss_herod.cpp @@ -22,7 +22,7 @@ SDCategory: Scarlet Monastery EndScriptData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" #define SAY_AGGRO -1189000 #define SAY_WHIRLWIND -1189001 diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/shadowfang_keep/shadowfang_keep.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/shadowfang_keep/shadowfang_keep.cpp index 5f9d42ea65e..346e922a1b4 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/shadowfang_keep/shadowfang_keep.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/shadowfang_keep/shadowfang_keep.cpp @@ -26,7 +26,7 @@ npc_shadowfang_prisoner EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" #include "def_shadowfang_keep.h" /*###### diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/silverpine_forest.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/silverpine_forest.cpp index bd8b2906c92..07b1979f87f 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/silverpine_forest.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/silverpine_forest.cpp @@ -27,7 +27,7 @@ npc_deathstalker_erland EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_astor_hadren diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/westfall.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/westfall.cpp index 3ddaffe6e25..d6cbea99fb5 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/westfall.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/westfall.cpp @@ -27,7 +27,7 @@ npc_defias_traitor EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_daphne_stilwell diff --git a/src/bindings/scripts/scripts/examples/example_escort.cpp b/src/bindings/scripts/scripts/examples/example_escort.cpp index 23c97fb9b60..e603d3ce79c 100644 --- a/src/bindings/scripts/scripts/examples/example_escort.cpp +++ b/src/bindings/scripts/scripts/examples/example_escort.cpp @@ -22,7 +22,7 @@ SDCategory: Script Examples EndScriptData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" enum { diff --git a/src/bindings/scripts/scripts/kalimdor/ashenvale.cpp b/src/bindings/scripts/scripts/kalimdor/ashenvale.cpp index 86f3286c92f..88572bf3463 100644 --- a/src/bindings/scripts/scripts/kalimdor/ashenvale.cpp +++ b/src/bindings/scripts/scripts/kalimdor/ashenvale.cpp @@ -27,7 +27,7 @@ npc_ruul_snowhoof EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*#### # npc_torek diff --git a/src/bindings/scripts/scripts/kalimdor/azuremyst_isle.cpp b/src/bindings/scripts/scripts/kalimdor/azuremyst_isle.cpp index 71341f4d0ee..0e21a4b310d 100644 --- a/src/bindings/scripts/scripts/kalimdor/azuremyst_isle.cpp +++ b/src/bindings/scripts/scripts/kalimdor/azuremyst_isle.cpp @@ -31,7 +31,7 @@ mob_nestlewood_owlkin EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" #include <cmath> /*###### diff --git a/src/bindings/scripts/scripts/kalimdor/caverns_of_time/hyjal/hyjalAI.h b/src/bindings/scripts/scripts/kalimdor/caverns_of_time/hyjal/hyjalAI.h index 3b0ff32a429..c646c47699c 100644 --- a/src/bindings/scripts/scripts/kalimdor/caverns_of_time/hyjal/hyjalAI.h +++ b/src/bindings/scripts/scripts/kalimdor/caverns_of_time/hyjal/hyjalAI.h @@ -6,7 +6,7 @@ #define SC_HYJALAI_H #include "def_hyjal.h" -#include "escortAI.h" +#include "escort_ai.h" // Trash Mobs summoned in waves #define NECROMANCER 17899//done diff --git a/src/bindings/scripts/scripts/kalimdor/caverns_of_time/hyjal/hyjal_trash.h b/src/bindings/scripts/scripts/kalimdor/caverns_of_time/hyjal/hyjal_trash.h index 9eeff8a03f4..17fdbad5fda 100644 --- a/src/bindings/scripts/scripts/kalimdor/caverns_of_time/hyjal/hyjal_trash.h +++ b/src/bindings/scripts/scripts/kalimdor/caverns_of_time/hyjal/hyjal_trash.h @@ -3,7 +3,7 @@ #define SC_HYJAL_TRASH_AI_H #include "def_hyjal.h" -#include "escortAI.h" +#include "escort_ai.h" #define MINRAIDDAMAGE 700000//minimal damage before trash can drop loot and reputation, resets if faction leader dies diff --git a/src/bindings/scripts/scripts/kalimdor/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp b/src/bindings/scripts/scripts/kalimdor/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp index 266f61354c0..6200d947b63 100644 --- a/src/bindings/scripts/scripts/kalimdor/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp +++ b/src/bindings/scripts/scripts/kalimdor/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp @@ -23,7 +23,7 @@ EndScriptData */ #include "precompiled.h" #include "def_old_hillsbrad.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## go_barrel_old_hillsbrad diff --git a/src/bindings/scripts/scripts/kalimdor/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp b/src/bindings/scripts/scripts/kalimdor/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp index 5559989ef65..7c0290fe565 100644 --- a/src/bindings/scripts/scripts/kalimdor/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp +++ b/src/bindings/scripts/scripts/kalimdor/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp @@ -28,7 +28,7 @@ npc_taretha EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" #include "def_old_hillsbrad.h" #define QUEST_ENTRY_HILLSBRAD 10282 diff --git a/src/bindings/scripts/scripts/kalimdor/darkshore.cpp b/src/bindings/scripts/scripts/kalimdor/darkshore.cpp index fef5cf36e43..6c2520cd8b5 100644 --- a/src/bindings/scripts/scripts/kalimdor/darkshore.cpp +++ b/src/bindings/scripts/scripts/kalimdor/darkshore.cpp @@ -27,7 +27,7 @@ npc_threshwackonator EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*#### # npc_prospector_remtravel diff --git a/src/bindings/scripts/scripts/kalimdor/feralas.cpp b/src/bindings/scripts/scripts/kalimdor/feralas.cpp index 826d9cf19f8..08c00a9a5a7 100644 --- a/src/bindings/scripts/scripts/kalimdor/feralas.cpp +++ b/src/bindings/scripts/scripts/kalimdor/feralas.cpp @@ -22,7 +22,7 @@ SDCategory: Feralas EndScriptData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_gregan_brewspewer diff --git a/src/bindings/scripts/scripts/kalimdor/moonglade.cpp b/src/bindings/scripts/scripts/kalimdor/moonglade.cpp index 4206e370f4c..10d61132c5b 100644 --- a/src/bindings/scripts/scripts/kalimdor/moonglade.cpp +++ b/src/bindings/scripts/scripts/kalimdor/moonglade.cpp @@ -30,7 +30,7 @@ npc_clintar_dreamwalker EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_bunthen_plainswind diff --git a/src/bindings/scripts/scripts/kalimdor/mulgore.cpp b/src/bindings/scripts/scripts/kalimdor/mulgore.cpp index 544cce69d28..97e2e1233cc 100644 --- a/src/bindings/scripts/scripts/kalimdor/mulgore.cpp +++ b/src/bindings/scripts/scripts/kalimdor/mulgore.cpp @@ -28,7 +28,7 @@ npc_plains_vision EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### # npc_skorn_whitecloud diff --git a/src/bindings/scripts/scripts/kalimdor/razorfen_kraul/razorfen_kraul.cpp b/src/bindings/scripts/scripts/kalimdor/razorfen_kraul/razorfen_kraul.cpp index a6bd845b13e..5c51e64f5a2 100644 --- a/src/bindings/scripts/scripts/kalimdor/razorfen_kraul/razorfen_kraul.cpp +++ b/src/bindings/scripts/scripts/kalimdor/razorfen_kraul/razorfen_kraul.cpp @@ -26,7 +26,7 @@ npc_willix EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" #include "def_razorfen_kraul.h" #define SAY_READY -1047000 diff --git a/src/bindings/scripts/scripts/kalimdor/stonetalon_mountains.cpp b/src/bindings/scripts/scripts/kalimdor/stonetalon_mountains.cpp index 5c9dbe0b199..2b927af4852 100644 --- a/src/bindings/scripts/scripts/kalimdor/stonetalon_mountains.cpp +++ b/src/bindings/scripts/scripts/kalimdor/stonetalon_mountains.cpp @@ -27,7 +27,7 @@ npc_kaya_flathoof EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_braug_dimspirit diff --git a/src/bindings/scripts/scripts/kalimdor/tanaris.cpp b/src/bindings/scripts/scripts/kalimdor/tanaris.cpp index 44d9c67d9e6..9745fce9966 100644 --- a/src/bindings/scripts/scripts/kalimdor/tanaris.cpp +++ b/src/bindings/scripts/scripts/kalimdor/tanaris.cpp @@ -32,7 +32,7 @@ npc_tooga EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## mob_aquementas diff --git a/src/bindings/scripts/scripts/kalimdor/the_barrens.cpp b/src/bindings/scripts/scripts/kalimdor/the_barrens.cpp index aff67963445..d17d0b06cd1 100644 --- a/src/bindings/scripts/scripts/kalimdor/the_barrens.cpp +++ b/src/bindings/scripts/scripts/kalimdor/the_barrens.cpp @@ -31,7 +31,7 @@ npc_wizzlecrank_shredder EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_beaten_corpse diff --git a/src/bindings/scripts/scripts/kalimdor/thousand_needles.cpp b/src/bindings/scripts/scripts/kalimdor/thousand_needles.cpp index 6ec4a1403ab..be0c2db5aa9 100644 --- a/src/bindings/scripts/scripts/kalimdor/thousand_needles.cpp +++ b/src/bindings/scripts/scripts/kalimdor/thousand_needles.cpp @@ -29,7 +29,7 @@ npc_plucky EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*##### # npc_kanati diff --git a/src/bindings/scripts/scripts/kalimdor/ungoro_crater.cpp b/src/bindings/scripts/scripts/kalimdor/ungoro_crater.cpp index 426b7fa2217..323faf67814 100644 --- a/src/bindings/scripts/scripts/kalimdor/ungoro_crater.cpp +++ b/src/bindings/scripts/scripts/kalimdor/ungoro_crater.cpp @@ -26,7 +26,7 @@ npc_a-me EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" #define SAY_READY -1000200 #define SAY_AGGRO1 -1000201 diff --git a/src/bindings/scripts/scripts/kalimdor/wailing_caverns/wailing_caverns.cpp b/src/bindings/scripts/scripts/kalimdor/wailing_caverns/wailing_caverns.cpp index 622800127db..be222c33e3d 100644 --- a/src/bindings/scripts/scripts/kalimdor/wailing_caverns/wailing_caverns.cpp +++ b/src/bindings/scripts/scripts/kalimdor/wailing_caverns/wailing_caverns.cpp @@ -25,7 +25,7 @@ EndScriptData */ EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" #include "def_wailing_caverns.h" /*###### diff --git a/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp b/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp index da370ac4978..bb97fb12d18 100644 --- a/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp +++ b/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp @@ -26,7 +26,7 @@ npc_injured_rainspeaker_oracle EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_injured_rainspeaker_oracle diff --git a/src/bindings/scripts/scripts/outland/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp b/src/bindings/scripts/scripts/outland/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp index f9961e10174..66e6b3a108d 100644 --- a/src/bindings/scripts/scripts/outland/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp +++ b/src/bindings/scripts/scripts/outland/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp @@ -22,7 +22,7 @@ SDCategory: Auchindoun, Shadow Labyrinth EndScriptData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" #include "def_shadow_labyrinth.h" enum diff --git a/src/bindings/scripts/scripts/outland/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp b/src/bindings/scripts/scripts/outland/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp index 1e62083f1f9..33e6e8f1b3a 100644 --- a/src/bindings/scripts/scripts/outland/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp +++ b/src/bindings/scripts/scripts/outland/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp @@ -23,7 +23,7 @@ EndScriptData */ #include "precompiled.h" #include "def_serpent_shrine.h" -#include "escortAI.h" +#include "escort_ai.h" #define SAY_AGGRO -1548021 #define SAY_GAIN_BLESSING -1548022 diff --git a/src/bindings/scripts/scripts/outland/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp b/src/bindings/scripts/scripts/outland/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp index 8f7c076a701..24a3afa1d4b 100644 --- a/src/bindings/scripts/scripts/outland/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp +++ b/src/bindings/scripts/scripts/outland/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp @@ -205,12 +205,6 @@ struct TRINITY_DLL_DECL boss_magtheridonAI : public ScriptedAI void Reset() { - if (pInstance) - { - pInstance->SetData(DATA_MAGTHERIDON_EVENT, NOT_STARTED); - pInstance->SetData(DATA_COLLAPSE, false); - } - Berserk_Timer = 1320000; Quake_Timer = 40000; Debris_Timer = 10000; @@ -229,6 +223,15 @@ struct TRINITY_DLL_DECL boss_magtheridonAI : public ScriptedAI m_creature->CastSpell(m_creature, SPELL_SHADOW_CAGE_C, true); } + void JustReachedHome() + { + if (pInstance) + { + pInstance->SetData(DATA_MAGTHERIDON_EVENT, NOT_STARTED); + pInstance->SetData(DATA_COLLAPSE, false); + } + } + void SetClicker(uint64 cubeGUID, uint64 clickerGUID) { // to avoid multiclicks from 1 cube @@ -432,11 +435,6 @@ struct TRINITY_DLL_DECL mob_hellfire_channelerAI : public ScriptedAI Infernal_Timer = 10000 + rand()%40000; Check_Timer = 5000; - - if (pInstance) - pInstance->SetData(DATA_CHANNELER_EVENT, NOT_STARTED); - - m_creature->CastSpell(m_creature, SPELL_SHADOW_GRASP_C, false); } void EnterCombat(Unit *who) @@ -448,9 +446,18 @@ struct TRINITY_DLL_DECL mob_hellfire_channelerAI : public ScriptedAI DoZoneInCombat(); } - void JustSummoned(Creature *summon) {summon->AI()->AttackStart(m_creature->getVictim());} + void JustReachedHome() + { + if (pInstance) + pInstance->SetData(DATA_CHANNELER_EVENT, NOT_STARTED); + + m_creature->CastSpell(m_creature, SPELL_SHADOW_GRASP_C, false); + } - void MoveInLineOfSight(Unit* who) {} + void JustSummoned(Creature *summon) + { + summon->AI()->AttackStart(m_creature->getVictim()); + } void DamageTaken(Unit*, uint32 &damage) { diff --git a/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp b/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp index 171258922d6..209d11c3509 100644 --- a/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp +++ b/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp @@ -30,7 +30,7 @@ npc_wounded_blood_elf EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_aeranas diff --git a/src/bindings/scripts/scripts/outland/netherstorm.cpp b/src/bindings/scripts/scripts/outland/netherstorm.cpp index e251951f4aa..1e3c4349116 100644 --- a/src/bindings/scripts/scripts/outland/netherstorm.cpp +++ b/src/bindings/scripts/scripts/outland/netherstorm.cpp @@ -29,7 +29,7 @@ npc_bessy EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_manaforge_control_console diff --git a/src/bindings/scripts/scripts/outland/shadowmoon_valley.cpp b/src/bindings/scripts/scripts/outland/shadowmoon_valley.cpp index 41b1ec159b8..998cedf9c1e 100644 --- a/src/bindings/scripts/scripts/outland/shadowmoon_valley.cpp +++ b/src/bindings/scripts/scripts/outland/shadowmoon_valley.cpp @@ -40,7 +40,7 @@ npc_enraged_spirit EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*##### # mob_mature_netherwing_drake diff --git a/src/bindings/scripts/scripts/outland/shattrath_city.cpp b/src/bindings/scripts/scripts/outland/shattrath_city.cpp index e44aea2e0a0..5e0904f7661 100644 --- a/src/bindings/scripts/scripts/outland/shattrath_city.cpp +++ b/src/bindings/scripts/scripts/outland/shattrath_city.cpp @@ -33,7 +33,7 @@ npc_khadgar EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npc_raliq_the_drunk diff --git a/src/bindings/scripts/scripts/outland/terokkar_forest.cpp b/src/bindings/scripts/scripts/outland/terokkar_forest.cpp index ebe8c0b944f..b2c658c0eef 100644 --- a/src/bindings/scripts/scripts/outland/terokkar_forest.cpp +++ b/src/bindings/scripts/scripts/outland/terokkar_forest.cpp @@ -32,7 +32,7 @@ npc_slim EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## mob_unkor_the_ruthless diff --git a/src/bindings/scripts/scripts/outland/zangarmarsh.cpp b/src/bindings/scripts/scripts/outland/zangarmarsh.cpp index 5267767c544..0ce14cc0aee 100644 --- a/src/bindings/scripts/scripts/outland/zangarmarsh.cpp +++ b/src/bindings/scripts/scripts/outland/zangarmarsh.cpp @@ -30,7 +30,7 @@ npc_kayra_longmane EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" /*###### ## npcs_ashyen_and_keleth diff --git a/src/bindings/scripts/scripts/world/npcs_special.cpp b/src/bindings/scripts/scripts/world/npcs_special.cpp index 2a56a825b11..ef826d4af3a 100644 --- a/src/bindings/scripts/scripts/world/npcs_special.cpp +++ b/src/bindings/scripts/scripts/world/npcs_special.cpp @@ -38,7 +38,7 @@ npc_snake_trap_serpents 80% AI for snakes that summoned by Snake Trap EndContentData */ #include "precompiled.h" -#include "escortAI.h" +#include "escort_ai.h" #include "ObjectMgr.h" /*######## |