aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/base/follower_ai.h7
-rw-r--r--src/bindings/scripts/scripts/kalimdor/ungoro_crater.cpp62
2 files changed, 64 insertions, 5 deletions
diff --git a/src/bindings/scripts/base/follower_ai.h b/src/bindings/scripts/base/follower_ai.h
index 1513cd4c49c..372fe38a581 100644
--- a/src/bindings/scripts/base/follower_ai.h
+++ b/src/bindings/scripts/base/follower_ai.h
@@ -43,16 +43,17 @@ class TRINITY_DLL_DECL FollowerAI : public ScriptedAI
void SetFollowPaused(bool bPaused); //if special event require follow mode to hold/resume during the follow
- protected:
bool HasFollowState(uint32 uiFollowState) { return (m_uiFollowState & uiFollowState); }
- void AddFollowState(uint32 uiFollowState) { m_uiFollowState |= uiFollowState; }
- void RemoveFollowState(uint32 uiFollowState) { m_uiFollowState &= ~uiFollowState; }
+ protected:
void SetFollowComplete(bool bWithEndEvent = false);
Player* GetLeaderForFollower();
private:
+ void AddFollowState(uint32 uiFollowState) { m_uiFollowState |= uiFollowState; }
+ void RemoveFollowState(uint32 uiFollowState) { m_uiFollowState &= ~uiFollowState; }
+
uint64 m_uiLeaderGUID;
uint32 m_uiUpdateFollowTimer;
uint32 m_uiFollowState;
diff --git a/src/bindings/scripts/scripts/kalimdor/ungoro_crater.cpp b/src/bindings/scripts/scripts/kalimdor/ungoro_crater.cpp
index 8699023681a..06c74469f80 100644
--- a/src/bindings/scripts/scripts/kalimdor/ungoro_crater.cpp
+++ b/src/bindings/scripts/scripts/kalimdor/ungoro_crater.cpp
@@ -168,11 +168,11 @@ enum
FACTION_ESCORTEE = 113
};
-//Script not fully complete. Need more development of followerAI to accomplish misc tasks.
struct TRINITY_DLL_DECL npc_ringoAI : public FollowerAI
{
npc_ringoAI(Creature* pCreature) : FollowerAI(pCreature) { }
+ uint32 m_uiFaintTimer;
uint32 m_uiEndEventProgress;
uint32 m_uiEndEventTimer;
@@ -180,6 +180,7 @@ struct TRINITY_DLL_DECL npc_ringoAI : public FollowerAI
void Reset()
{
+ m_uiFaintTimer = urand(30000, 60000);
m_uiEndEventProgress = 0;
m_uiEndEventTimer = 1000;
pSpraggle = NULL;
@@ -205,6 +206,49 @@ struct TRINITY_DLL_DECL npc_ringoAI : public FollowerAI
}
}
+ void SpellHit(Unit* pCaster, const SpellEntry* pSpell)
+ {
+ if (HasFollowState(STATE_FOLLOW_INPROGRESS | STATE_FOLLOW_PAUSED) && pSpell->Id == SPELL_REVIVE_RINGO)
+ ClearFaint();
+ }
+
+ void SetFaint()
+ {
+ if (!HasFollowState(STATE_FOLLOW_POSTEVENT))
+ {
+ SetFollowPaused(true);
+
+ switch(rand()%4)
+ {
+ case 0: DoScriptText(SAY_FAINT_1, m_creature); break;
+ case 1: DoScriptText(SAY_FAINT_2, m_creature); break;
+ case 2: DoScriptText(SAY_FAINT_3, m_creature); break;
+ case 3: DoScriptText(SAY_FAINT_4, m_creature); break;
+ }
+ }
+
+ //what does actually happen here? Emote? Aura?
+ m_creature->SetStandState(UNIT_STAND_STATE_SLEEP);
+ }
+
+ void ClearFaint()
+ {
+ m_creature->SetStandState(UNIT_STAND_STATE_STAND);
+
+ if (HasFollowState(STATE_FOLLOW_POSTEVENT))
+ return;
+
+ switch(rand()%4)
+ {
+ case 0: DoScriptText(SAY_WAKE_1, m_creature); break;
+ case 1: DoScriptText(SAY_WAKE_2, m_creature); break;
+ case 2: DoScriptText(SAY_WAKE_3, m_creature); break;
+ case 3: DoScriptText(SAY_WAKE_4, m_creature); break;
+ }
+
+ SetFollowPaused(false);
+ }
+
void UpdateFollowerAI(const uint32 uiDiff)
{
if (!UpdateVictim())
@@ -215,7 +259,6 @@ struct TRINITY_DLL_DECL npc_ringoAI : public FollowerAI
{
if (!pSpraggle || !pSpraggle->isAlive())
{
- m_uiEndEventTimer = 1000;
SetFollowComplete();
return;
}
@@ -236,10 +279,12 @@ struct TRINITY_DLL_DECL npc_ringoAI : public FollowerAI
break;
case 4:
DoScriptText(EMOTE_RIN_END_4, m_creature);
+ SetFaint();
m_uiEndEventTimer = 9000;
break;
case 5:
DoScriptText(EMOTE_RIN_END_5, m_creature);
+ ClearFaint();
m_uiEndEventTimer = 1000;
break;
case 6:
@@ -264,6 +309,19 @@ struct TRINITY_DLL_DECL npc_ringoAI : public FollowerAI
else
m_uiEndEventTimer -= uiDiff;
}
+ else if (HasFollowState(STATE_FOLLOW_INPROGRESS))
+ {
+ if (!HasFollowState(STATE_FOLLOW_PAUSED))
+ {
+ if (m_uiFaintTimer < uiDiff)
+ {
+ SetFaint();
+ m_uiFaintTimer = urand(60000, 120000);
+ }
+ else
+ m_uiFaintTimer -= uiDiff;
+ }
+ }
return;
}