aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp161
-rw-r--r--src/bindings/scripts/scripts/zone/stormwind/stormwind_city.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp3
3 files changed, 92 insertions, 74 deletions
diff --git a/src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp b/src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp
index 49317b34ce8..377a12bd512 100644
--- a/src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp
+++ b/src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp
@@ -61,97 +61,120 @@ bool GossipSelect_npc_skorn_whitecloud(Player *player, Creature *_Creature, uint
# npc_kyle_frenzied
######*/
+enum
+{
+ EMOTE_SEE_LUNCH = -1000407,
+ EMOTE_EAT_LUNCH = -1000408,
+ EMOTE_DANCE = -1000409,
+
+ SPELL_LUNCH = 42222,
+ NPC_KYLE_FRENZIED = 23616,
+ NPC_KYLE_FRIENDLY = 23622,
+ POINT_ID = 1
+};
+
struct TRINITY_DLL_DECL npc_kyle_frenziedAI : public ScriptedAI
{
npc_kyle_frenziedAI(Creature *c) : ScriptedAI(c) {}
- int STATE;
- uint32 wait;
- uint64 player;
+ bool bEvent;
+ uint64 uiPlayerGUID;
+ uint32 uiEventTimer;
+ uint8 uiEventPhase;
void Reset()
{
- STATE = 0;
- m_creature->SetDefaultMovementType(WAYPOINT_MOTION_TYPE);
- m_creature->GetMotionMaster()->Initialize();
- }
- void EnterCombat(Unit* who){}
+ bEvent = false;
+ uiPlayerGUID = 0;
+ uiEventTimer = 5000;
+ uiEventPhase = 1;
- void SpellHit(Unit *caster, const SpellEntry* spell)
- { // we can feed him without any quest
- if(spell->Id == 42222 && caster->GetTypeId() == TYPEID_PLAYER && CAST_PLR(caster)->GetTeam() == HORDE)
- {
- STATE = 1;
- player = caster->GetGUID();
- float x, y, z, z2;
- caster->GetPosition(x, y, z);
- x = x + 3.7*cos(caster->GetOrientation());
- y = y + 3.7*sin(caster->GetOrientation());
- z2 = m_creature->GetBaseMap()->GetHeight(x,y,z,false);
- z = (z2 <= INVALID_HEIGHT) ? z : z2;
- m_creature->SetDefaultMovementType(IDLE_MOTION_TYPE); //there is other way to stop waypoint movement?
- m_creature->GetMotionMaster()->Initialize();
- m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
- m_creature->GetMotionMaster()->MovePoint(0,x, y, z);
- }
+ if (m_creature->GetEntry() == NPC_KYLE_FRIENDLY)
+ m_creature->UpdateEntry(NPC_KYLE_FRENZIED);
}
- void MovementInform(uint32 type, uint32 id)
+ void Aggro(Unit* who) { }
+
+ void SpellHit(Unit* pCaster, SpellEntry const* pSpell)
{
- if(type == POINT_MOTION_TYPE)
+ if (!InCombat && !bEvent && pSpell->Id == SPELL_LUNCH)
{
- switch(STATE)
+ if (pCaster->GetTypeId() == TYPEID_PLAYER)
+ uiPlayerGUID = pCaster->GetGUID();
+
+ if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == WAYPOINT_MOTION_TYPE)
{
- case 1:
- {
- Unit *plr = Unit::GetUnit((*m_creature),player);
- if(plr)
- m_creature->SetOrientation(m_creature->GetAngle(plr));
- m_creature->HandleEmoteCommand(EMOTE_STATE_USESTANDING); //eat
- WorldPacket data;
- m_creature->BuildHeartBeatMsg(&data);
- m_creature->SendMessageToSet(&data,true);
- wait = 3000;
- STATE = 2;
- break;
- }
- case 4:
- m_creature->setDeathState(JUST_DIED);
- m_creature->Respawn();
- break;
+ m_creature->GetMotionMaster()->MovementExpired();
+ m_creature->GetMotionMaster()->MoveIdle();
+ m_creature->StopMoving();
}
+
+ bEvent = true;
+ DoScriptText(EMOTE_SEE_LUNCH, m_creature);
+ m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_CREATURE_SPECIAL);
}
}
- void UpdateAI(const uint32 diff)
+ void MovementInform(uint32 uiType, uint32 uiPointId)
{
- if (!STATE || STATE == 4)
+ if (uiType != POINT_MOTION_TYPE || !bEvent)
return;
- if(wait < diff)
+
+ if (uiPointId == POINT_ID)
+ uiEventTimer = 5000;
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (bEvent)
{
- switch(STATE)
+ if (!uiEventTimer)
+ return;
+
+ if (uiEventTimer < diff)
{
- case 2:
- STATE = 3; wait = 7000;
- m_creature->UpdateEntry(23622,HORDE);
- m_creature->HandleEmoteCommand(EMOTE_ONESHOT_DANCE);
- break;
- case 3:
- STATE = 4; //go home
- Unit *plr = Unit::GetUnit((*m_creature),player);
- if(plr && CAST_PLR(plr)->GetQuestStatus(11129) == QUEST_STATUS_INCOMPLETE)
- CAST_PLR(plr)->CompleteQuest(11129);
- float x, y, z, z2, angle;
- angle = m_creature->GetAngle(-2146, -430);
- m_creature->GetPosition(x,y,z);
- x = x + 40*cos(angle);
- y = y + 40*sin(angle);
- z2 = m_creature->GetBaseMap()->GetHeight(x,y,MAX_HEIGHT,false);
- z = (z2 <= INVALID_HEIGHT) ? z : z2;
- m_creature->GetMotionMaster()->MovePoint(0,x,y,z);
- break;
+ switch(uiEventPhase)
+ {
+ case 1:
+ uiEventTimer = 0;
+
+ if (Unit* pUnit = Unit::GetUnit(*m_creature,uiPlayerGUID))
+ {
+ if (GameObject* pGo = pUnit->GetGameObject(SPELL_LUNCH))
+ m_creature->GetMotionMaster()->MovePoint(POINT_ID, pGo->GetPositionX(), pGo->GetPositionY(), pGo->GetPositionZ());
+ }
+ break;
+ case 2:
+ uiEventTimer = 5000;
+ DoScriptText(EMOTE_EAT_LUNCH, m_creature);
+ m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USESTANDING);
+ break;
+ case 3:
+ uiEventTimer = 5000;
+
+ if (Unit* pUnit = Unit::GetUnit(*m_creature,uiPlayerGUID))
+ ((Player*)pUnit)->TalkedToCreature(m_creature->GetEntry(), m_creature->GetGUID());
+
+ m_creature->UpdateEntry(NPC_KYLE_FRIENDLY);
+ break;
+ case 4:
+ uiEventTimer = 30000;
+ DoScriptText(EMOTE_DANCE, m_creature);
+ m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_DANCESPECIAL);
+ break;
+ case 5:
+ m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
+ Reset();
+ m_creature->GetMotionMaster()->Clear();
+ break;
+ }
+
+ if (uiEventPhase != 5)
+ ++uiEventPhase;
}
- }else wait -= diff;
+ else
+ uiEventTimer -= diff;
+ }
}
};
diff --git a/src/bindings/scripts/scripts/zone/stormwind/stormwind_city.cpp b/src/bindings/scripts/scripts/zone/stormwind/stormwind_city.cpp
index 36f09218093..5cd9b01b7c3 100644
--- a/src/bindings/scripts/scripts/zone/stormwind/stormwind_city.cpp
+++ b/src/bindings/scripts/scripts/zone/stormwind/stormwind_city.cpp
@@ -74,7 +74,6 @@ struct TRINITY_DLL_DECL npc_bartlebyAI : public ScriptedAI
void Reset()
{
m_creature->setFaction(11);
- m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, 7);
PlayerGUID = 0;
}
@@ -131,7 +130,6 @@ struct TRINITY_DLL_DECL npc_dashel_stonefistAI : public ScriptedAI
void Reset()
{
m_creature->setFaction(11);
- m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, 7);
}
void DamageTaken(Unit *done_by, uint32 & damage)
diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp
index 584e87a3f97..ec1756083ce 100644
--- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp
+++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp
@@ -301,7 +301,6 @@ struct TRINITY_DLL_DECL eye_of_cthunAI : public Scripted_NoMovementAI
DoCast(m_creature,SPELL_RED_COLORATION);
//Freeze animation
- m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, 53);
//Darkbeam for 35 seconds
PhaseTimer = 35000;
@@ -351,7 +350,6 @@ struct TRINITY_DLL_DECL eye_of_cthunAI : public Scripted_NoMovementAI
m_creature->RemoveAurasDueToSpell(SPELL_RED_COLORATION);
//Freeze animation
- m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
m_creature->SetUInt32Value(UNIT_FIELD_FLAGS, 0);
//Eye Beam for 50 seconds
@@ -397,7 +395,6 @@ struct TRINITY_DLL_DECL eye_of_cthunAI : public Scripted_NoMovementAI
m_creature->RemoveAurasDueToSpell(SPELL_RED_COLORATION);
//Reset to normal emote state and prevent select and attack
- m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
//Remove Target field