aboutsummaryrefslogtreecommitdiff
path: root/src/bindings/scripts/base
diff options
context:
space:
mode:
authorKudlaty <none@none>2009-08-20 02:24:53 +0200
committerKudlaty <none@none>2009-08-20 02:24:53 +0200
commit33a1d8dc6c83bd6df2a441f700ab945d711a1aed (patch)
tree24f7b17501d38e33c8e58a22966584dcbee300e3 /src/bindings/scripts/base
parentfc3717d7e3757d59d78d2becf06f5f12f15e6ed1 (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.cpp40
-rw-r--r--src/bindings/scripts/base/follower_ai.h4
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
};