diff options
| author | Kudlaty <none@none> | 2009-08-20 02:24:53 +0200 |
|---|---|---|
| committer | Kudlaty <none@none> | 2009-08-20 02:24:53 +0200 |
| commit | 33a1d8dc6c83bd6df2a441f700ab945d711a1aed (patch) | |
| tree | 24f7b17501d38e33c8e58a22966584dcbee300e3 /src/bindings/scripts/base | |
| parent | fc3717d7e3757d59d78d2becf06f5f12f15e6ed1 (diff) | |
Merge [SD2]
r1346 Convert script for quest 2078 to use followerAI
r1347 Use spell to summon friends instead of manual summon in script for quest 1249.
r1348 Extend followerAI function SetFollowComplete with argument to simplify implementation of end events in scripts.
r1349 Convert script related to quest 1560 to use followerAI
r1350 Apply SD2 code style to one instance and boss script - skip
r1351 Add basic support for quest 4491.
r1352 Add basic support for quest 5321
r1353 Adjust way to complete quest, for script related to quest 938
--HG--
branch : trunk
Diffstat (limited to 'src/bindings/scripts/base')
| -rw-r--r-- | src/bindings/scripts/base/follower_ai.cpp | 40 | ||||
| -rw-r--r-- | src/bindings/scripts/base/follower_ai.h | 4 |
2 files changed, 31 insertions, 13 deletions
diff --git a/src/bindings/scripts/base/follower_ai.cpp b/src/bindings/scripts/base/follower_ai.cpp index a7248d10636..b44b22a31be 100644 --- a/src/bindings/scripts/base/follower_ai.cpp +++ b/src/bindings/scripts/base/follower_ai.cpp @@ -25,7 +25,8 @@ FollowerAI::FollowerAI(Creature* pCreature) : ScriptedAI(pCreature), m_uiUpdateFollowTimer(2500), m_bIsFollowing(false), m_bIsReturnToLeader(false), - m_bIsFollowComplete(false) + m_bIsFollowComplete(false), + m_bIsEndEvent(false) {} void FollowerAI::AttackStart(Unit* pWho) @@ -120,6 +121,7 @@ void FollowerAI::JustRespawned() m_bIsFollowing = false; m_bIsReturnToLeader = false; m_bIsFollowComplete = false; + m_bIsEndEvent = false; if (!IsCombatMovement()) SetCombatMovement(true); @@ -139,7 +141,7 @@ void FollowerAI::EnterEvadeMode() if (m_bIsFollowing) { - debug_log("SD2: FollowerAI left combat, returning to CombatStartPosition."); + debug_log("TSCR: FollowerAI left combat, returning to CombatStartPosition."); if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == TARGETED_MOTION_TYPE) { @@ -163,9 +165,9 @@ void FollowerAI::UpdateAI(const uint32 uiDiff) { if (m_uiUpdateFollowTimer < uiDiff) { - if (m_bIsFollowComplete) + if (m_bIsFollowComplete && !m_bIsEndEvent) { - debug_log("SD2: FollowerAI is set completed, despawns."); + debug_log("TSCR: FollowerAI is set completed, despawns."); m_creature->ForcedDespawn(); return; } @@ -176,7 +178,7 @@ void FollowerAI::UpdateAI(const uint32 uiDiff) { if (m_bIsReturnToLeader) { - debug_log("SD2: FollowerAI is returning to leader."); + debug_log("TSCR: FollowerAI is returning to leader."); m_creature->GetMotionMaster()->MoveFollow(pPlayer, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); m_bIsReturnToLeader = false; return; @@ -204,7 +206,7 @@ void FollowerAI::UpdateAI(const uint32 uiDiff) if (bIsMaxRangeExceeded) { - debug_log("SD2: FollowerAI failed because player/group was to far away or not found"); + debug_log("TSCR: FollowerAI failed because player/group was to far away or not found"); m_creature->ForcedDespawn(); return; } @@ -244,13 +246,13 @@ void FollowerAI::StartFollow(Player* pLeader, uint32 uiFactionForFollower, const { if (m_creature->getVictim()) { - debug_log("SD2: FollowerAI attempt to StartFollow while in combat."); + debug_log("TSCR: FollowerAI attempt to StartFollow while in combat."); return; } if (m_bIsFollowing) { - error_log("SD2: FollowerAI attempt to StartFollow while already following."); + error_log("TSCR: FollowerAI attempt to StartFollow while already following."); return; } @@ -266,7 +268,7 @@ void FollowerAI::StartFollow(Player* pLeader, uint32 uiFactionForFollower, const { m_creature->GetMotionMaster()->Clear(); m_creature->GetMotionMaster()->MoveIdle(); - debug_log("SD2: FollowerAI start with WAYPOINT_MOTION_TYPE, set to MoveIdle."); + debug_log("TSCR: FollowerAI start with WAYPOINT_MOTION_TYPE, set to MoveIdle."); } m_creature->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); @@ -275,7 +277,7 @@ void FollowerAI::StartFollow(Player* pLeader, uint32 uiFactionForFollower, const m_bIsFollowing = true; - debug_log("SD2: FollowerAI start follow %s (GUID %u)", pLeader->GetName(), m_uiLeaderGUID); + debug_log("TSCR: FollowerAI start follow %s (GUID %u)", pLeader->GetName(), m_uiLeaderGUID); } Player* FollowerAI::GetLeaderForFollower() @@ -294,7 +296,7 @@ Player* FollowerAI::GetLeaderForFollower() if (pMember && pMember->isAlive() && m_creature->IsWithinDistInMap(pMember, MAX_PLAYER_DISTANCE)) { - debug_log("SD2: FollowerAI GetLeader changed and returned new leader."); + debug_log("TSCR: FollowerAI GetLeader changed and returned new leader."); m_uiLeaderGUID = pMember->GetGUID(); return pMember; break; @@ -304,6 +306,20 @@ Player* FollowerAI::GetLeaderForFollower() } } - debug_log("SD2: FollowerAI GetLeader can not find suitable leader."); + debug_log("TSCR: FollowerAI GetLeader can not find suitable leader."); return NULL; } + +void FollowerAI::SetFollowComplete(bool bWithEndEvent) +{ + if (m_creature->hasUnitState(UNIT_STAT_FOLLOW)) + { + m_creature->clearUnitState(UNIT_STAT_FOLLOW); + + m_creature->GetMotionMaster()->MovementExpired(); + m_creature->GetMotionMaster()->MoveIdle(); + } + + m_bIsEndEvent = bWithEndEvent; + m_bIsFollowComplete = true; +} diff --git a/src/bindings/scripts/base/follower_ai.h b/src/bindings/scripts/base/follower_ai.h index d62980d4951..10ec5c9061e 100644 --- a/src/bindings/scripts/base/follower_ai.h +++ b/src/bindings/scripts/base/follower_ai.h @@ -31,8 +31,9 @@ class TRINITY_DLL_DECL FollowerAI : public ScriptedAI void StartFollow(Player* pPlayer, uint32 uiFactionForFollower = 0, const Quest* pQuest = NULL); protected: - void SetFollowComplete() { m_bIsFollowComplete = true; } + void SetFollowComplete(bool bWithEndEvent = false); bool IsFollowComplete() { return m_bIsFollowComplete; } + bool IsEndEventInProgress() { return m_bIsEndEvent; } Player* GetLeaderForFollower(); @@ -43,6 +44,7 @@ class TRINITY_DLL_DECL FollowerAI : public ScriptedAI bool m_bIsFollowing; bool m_bIsReturnToLeader; bool m_bIsFollowComplete; + bool m_bIsEndEvent; const Quest* m_pQuestForFollow; //normally we have a quest }; |
