aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/npc/npc_escortAI.cpp57
-rw-r--r--src/bindings/scripts/scripts/zone/azshara/azshara.cpp19
-rw-r--r--src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp8
-rw-r--r--src/bindings/scripts/scripts/zone/blackwing_lair/boss_victor_nefarius.cpp5
-rw-r--r--src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_leotheras_the_blind.cpp13
-rw-r--r--src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_morogrim_tidewalker.cpp3
-rw-r--r--src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp19
-rw-r--r--src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp3
-rw-r--r--src/bindings/scripts/scripts/zone/karazhan/boss_terestian_illhoof.cpp10
-rw-r--r--src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp98
-rw-r--r--src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp7
-rw-r--r--src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp24
12 files changed, 143 insertions, 123 deletions
diff --git a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp
index b74f0858515..5e9dd7e3141 100644
--- a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp
+++ b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp
@@ -147,34 +147,53 @@ void npc_escortAI::UpdateAI(const uint32 diff)
}else WaitTimer -= diff;
}
- //Check if player is within range
- if (IsBeingEscorted && !m_creature->isInCombat() && PlayerGUID)
+ //Check if player or any member of his group is within range
+ if (IsBeingEscorted && PlayerGUID && !m_creature->getVictim() && !m_creature->IsInEvadeMode())
{
if (PlayerTimer < diff)
- {
- Unit* p = Unit::GetUnit(*m_creature, PlayerGUID);
-
- if (DespawnAtFar && (!p || !m_creature->IsWithinDist(p,GetMaxPlayerDistance())))
{
- JustDied(m_creature);
- IsBeingEscorted = false;
+ bool bIsMaxRangeExceeded = true;
+
+ if (Player* pPlayer = Unit::GetPlayer(PlayerGUID))
+ {
+ 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, GetMaxPlayerDistance()))
+ {
+ bIsMaxRangeExceeded = false;
+ break;
+ }
+ }
+ }
+ else
+ {
+ if (m_creature->IsWithinDistInMap(pPlayer, GetMaxPlayerDistance()))
+ bIsMaxRangeExceeded = false;
+ }
+ }
- debug_log("TSCR: EscortAI Evaded back to spawn point because player was to far away or not found");
+ if (DespawnAtFar && bIsMaxRangeExceeded)
+ {
+ JustDied(m_creature);
+ IsBeingEscorted = false;
- m_creature->setDeathState(JUST_DIED);
- m_creature->SetHealth(0);
- m_creature->CombatStop(true);
- m_creature->DeleteThreatList();
- m_creature->Respawn();
- m_creature->GetMotionMaster()->Clear(true);
+ debug_log("TSCR: EscortAI Evaded back to spawn point because player/group was to far away or not found");
- //Restore original NpcFlags
- m_creature->SetUInt32Value(UNIT_NPC_FLAGS, m_uiNpcFlags);
+ m_creature->setDeathState(JUST_DIED);
- }
+ //TODO: add option to set instant respawn? Then use db respawn value as default
+ m_creature->Respawn();
+
+ //Restore original NpcFlags
+ m_creature->SetUInt32Value(UNIT_NPC_FLAGS, m_creature->GetCreatureInfo()->npcflag);
+ }
PlayerTimer = 1000;
- }else PlayerTimer -= diff;
+ }else PlayerTimer -= diff;
}
if(CanMelee && UpdateVictim())
diff --git a/src/bindings/scripts/scripts/zone/azshara/azshara.cpp b/src/bindings/scripts/scripts/zone/azshara/azshara.cpp
index 4ddabcb7c71..bf4db24d305 100644
--- a/src/bindings/scripts/scripts/zone/azshara/azshara.cpp
+++ b/src/bindings/scripts/scripts/zone/azshara/azshara.cpp
@@ -68,9 +68,7 @@ struct TRINITY_DLL_DECL mobs_spitelashesAI : public ScriptedAI
// we mustn't remove the creature in the same round in which we cast the summon spell, otherwise there will be no summons
if( spellhit && morphtimer>=5000 )
{
- m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
- m_creature->RemoveCorpse(); //you don't see any corpse on off.
- EnterEvadeMode(); //spellhit will be set to false
+ m_creature->ForcedDespawn();
return;
}
// walk 5 seconds before summoning
@@ -271,18 +269,12 @@ struct TRINITY_DLL_DECL mob_rizzle_sprysprocketAI : public ScriptedAI
Reached = false;
}
- void Despawn()
- {
- m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
- m_creature->RemoveCorpse();
- }
-
void UpdateAI(const uint32 diff)
{
if(Must_Die)
if(Must_Die_Timer < diff)
{
- Despawn();
+ m_creature->ForcedDespawn();
return;
} else Must_Die_Timer -= diff;
@@ -342,7 +334,7 @@ struct TRINITY_DLL_DECL mob_rizzle_sprysprocketAI : public ScriptedAI
Player *player = Unit::GetPlayer(PlayerGUID);
if(!player)
{
- Despawn();
+ m_creature->ForcedDespawn();
return;
}
@@ -392,7 +384,7 @@ struct TRINITY_DLL_DECL mob_rizzle_sprysprocketAI : public ScriptedAI
if(id == 57)
{
- Despawn();
+ m_creature->ForcedDespawn();
return;
}
@@ -452,8 +444,7 @@ struct TRINITY_DLL_DECL mob_depth_chargeAI : public ScriptedAI
if(we_must_die)
if(must_die_timer < diff)
{
- m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
- m_creature->RemoveCorpse();
+ m_creature->ForcedDespawn();
} else must_die_timer -= diff;
return;
}
diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp
index 66f4d3b4c63..98f060baff5 100644
--- a/src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp
+++ b/src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp
@@ -142,10 +142,9 @@ struct TRINITY_DLL_DECL boss_reliquary_of_soulsAI : public ScriptedAI
if(EssenceGUID)
{
- if(Unit* Essence = Unit::GetUnit(*m_creature, EssenceGUID))
+ if(Creature* Essence = Unit::GetCreature(*m_creature, EssenceGUID))
{
- Essence->SetVisibility(VISIBILITY_OFF);
- Essence->setDeathState(DEAD);
+ Essence->ForcedDespawn();
}
EssenceGUID = 0;
}
@@ -302,8 +301,7 @@ struct TRINITY_DLL_DECL boss_reliquary_of_soulsAI : public ScriptedAI
{
DoScriptText(DESI_SAY_AFTER, Essence);
}
- Essence->SetVisibility(VISIBILITY_OFF);
- Essence->setDeathState(JUST_DIED);
+ Essence->ForcedDespawn();
m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE,0);
EssenceGUID = 0;
SoulCount = 0;
diff --git a/src/bindings/scripts/scripts/zone/blackwing_lair/boss_victor_nefarius.cpp b/src/bindings/scripts/scripts/zone/blackwing_lair/boss_victor_nefarius.cpp
index 5bfa881ed3e..4391a748b8c 100644
--- a/src/bindings/scripts/scripts/zone/blackwing_lair/boss_victor_nefarius.cpp
+++ b/src/bindings/scripts/scripts/zone/blackwing_lair/boss_victor_nefarius.cpp
@@ -329,15 +329,14 @@ struct TRINITY_DLL_DECL boss_victor_nefariusAI : public ScriptedAI
{
if (NefCheckTime < diff)
{
- Unit* Nefarian = NULL;
- Nefarian = Unit::GetUnit((*m_creature),NefarianGUID);
+ Unit* Nefarian = (Creature*)Unit::GetUnit((*m_creature),NefarianGUID);
//If nef is dead then we die to so the players get out of combat
//and cannot repeat the event
if (!Nefarian || !Nefarian->isAlive())
{
NefarianGUID = 0;
- m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ m_creature->ForcedDespawn();
}
NefCheckTime = 2000;
diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_leotheras_the_blind.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_leotheras_the_blind.cpp
index 243cf223157..582129fe3c2 100644
--- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_leotheras_the_blind.cpp
+++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_leotheras_the_blind.cpp
@@ -312,10 +312,10 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
if(InnderDemon[i])
{
//delete creature
- Unit* pUnit = Unit::GetUnit((*m_creature), InnderDemon[i]);
- if (pUnit && pUnit->isAlive())
+ Creature* pCreature = Unit::GetCreature((*m_creature), InnderDemon[i]);
+ if (pCreature && pCreature->isAlive())
{
- pUnit->DealDamage(pUnit, pUnit->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ pCreature->ForcedDespawn();
}
InnderDemon[i] = 0;
}
@@ -376,11 +376,8 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
//despawn copy
if (Demon)
{
- Unit *pUnit = NULL;
- pUnit = Unit::GetUnit((*m_creature), Demon);
-
- if (pUnit)
- pUnit->DealDamage(pUnit, pUnit->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ if (Creature* pDemon = Unit::GetCreature(*m_creature, Demon))
+ pDemon->ForcedDespawn();
}
if (pInstance)
pInstance->SetData(DATA_LEOTHERASTHEBLINDEVENT, DONE);
diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_morogrim_tidewalker.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_morogrim_tidewalker.cpp
index b014b4b1e45..2ba3579eb7b 100644
--- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_morogrim_tidewalker.cpp
+++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_morogrim_tidewalker.cpp
@@ -336,7 +336,8 @@ struct TRINITY_DLL_DECL mob_water_globuleAI : public ScriptedAI
DoCast(m_creature->getVictim(), SPELL_GLOBULE_EXPLOSION);
//despawn
- m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ m_creature->ForcedDespawn();
+ return;
}
Check_Timer = 500;
}else Check_Timer -= diff;
diff --git a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp
index c3782b7666a..898041f0194 100644
--- a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp
+++ b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp
@@ -791,16 +791,19 @@ bool GOHello_go_acherus_soul_prison(Player *player, GameObject* _GO)
## npc_death_knight_initiate
######*/
-#define GOSSIP_ACCEPT_DUEL "[PH] I challenge you!"
+#define GOSSIP_ACCEPT_DUEL "I challenge you, death knight!"
enum
{
- SAY_DUEL_A = -1609017,
- SAY_DUEL_B = -1609018,
- SAY_DUEL_C = -1609019,
- SAY_DUEL_D = -1609020,
- SAY_DUEL_E = -1609021,
- SAY_DUEL_F = -1609022,
+ SAY_DUEL_A = -1609080,
+ SAY_DUEL_B = -1609081,
+ SAY_DUEL_C = -1609082,
+ SAY_DUEL_D = -1609083,
+ SAY_DUEL_E = -1609084,
+ SAY_DUEL_F = -1609085,
+ SAY_DUEL_G = -1609086,
+ SAY_DUEL_H = -1609087,
+ SAY_DUEL_I = -1609088,
SPELL_DUEL = 52996,
SPELL_DUEL_TRIGGERED = 52990,
@@ -813,7 +816,7 @@ enum
int32 m_auiRandomSay[] =
{
- SAY_DUEL_A, SAY_DUEL_B, SAY_DUEL_C, SAY_DUEL_D, SAY_DUEL_E, SAY_DUEL_F
+ SAY_DUEL_A, SAY_DUEL_B, SAY_DUEL_C, SAY_DUEL_D, SAY_DUEL_E, SAY_DUEL_F, SAY_DUEL_G, SAY_DUEL_H, SAY_DUEL_I
};
struct TRINITY_DLL_DECL npc_death_knight_initiateAI : public ScriptedAI
diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp
index fcdac62f183..d7118f039a7 100644
--- a/src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp
+++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp
@@ -149,8 +149,7 @@ struct TRINITY_DLL_DECL mob_abyssalAI : public ScriptedAI
if(Despawn_Timer < diff)
{
- m_creature->SetVisibility(VISIBILITY_OFF);
- m_creature->setDeathState(JUST_DIED);
+ m_creature->ForcedDespawn();
}else Despawn_Timer -= diff;
if(!UpdateVictim())
diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_terestian_illhoof.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_terestian_illhoof.cpp
index 96ba0b146b4..185891a7bbd 100644
--- a/src/bindings/scripts/scripts/zone/karazhan/boss_terestian_illhoof.cpp
+++ b/src/bindings/scripts/scripts/zone/karazhan/boss_terestian_illhoof.cpp
@@ -182,9 +182,8 @@ struct TRINITY_DLL_DECL boss_terestianAI : public ScriptedAI
{
if(PortalGUID[i])
{
- Unit* Portal = Unit::GetUnit((*m_creature), PortalGUID[i]);
- if(Portal)
- Portal->DealDamage(Portal, Portal->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ if(Creature* pPortal = Unit::GetCreature(*m_creature, PortalGUID[i]))
+ pPortal->ForcedDespawn();
PortalGUID[i] = 0;
}
@@ -240,9 +239,8 @@ struct TRINITY_DLL_DECL boss_terestianAI : public ScriptedAI
{
if(PortalGUID[i])
{
- Unit* Portal = Unit::GetUnit((*m_creature), PortalGUID[i]);
- if(Portal)
- Portal->DealDamage(Portal, Portal->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ if(Creature* pPortal = Unit::GetCreature((*m_creature), PortalGUID[i]))
+ pPortal->ForcedDespawn();
PortalGUID[i] = 0;
}
diff --git a/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp b/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp
index 55933b8854b..45874e4a83e 100644
--- a/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp
+++ b/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp
@@ -86,16 +86,15 @@ EndScriptData */
#define CREATURE_CYCLONE 18412
#define CREATURE_CRONE 18168
-void SummonCroneIfReady(ScriptedInstance* pInstance, Creature *_Creature)
+void SummonCroneIfReady(ScriptedInstance* pInstance, Creature* pCreature)
{
pInstance->SetData(DATA_OPERA_OZ_DEATHCOUNT, 0); // Increment DeathCount
if(pInstance->GetData(DATA_OPERA_OZ_DEATHCOUNT) == 4)
{
- Creature* Crone = _Creature->SummonCreature(CREATURE_CRONE, -10891.96, -1755.95, _Creature->GetPositionZ(), 4.64, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- if(Crone)
+ if (Creature* pCrone = pCreature->SummonCreature(CREATURE_CRONE, -10891.96, -1755.95, pCreature->GetPositionZ(), 4.64, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, HOUR*2*IN_MILISECONDS))
{
- if(_Creature->getVictim())
- Crone->AI()->AttackStart(_Creature->getVictim());
+ if(pCreature->getVictim())
+ pCrone->AI()->AttackStart(pCreature->getVictim());
}
}
};
@@ -135,6 +134,11 @@ struct TRINITY_DLL_DECL boss_dorotheeAI : public ScriptedAI
DoScriptText(SAY_DOROTHEE_AGGRO, m_creature);
}
+ void JustReachedHome()
+ {
+ m_creature->ForcedDespawn();
+ }
+
void SummonTito(); // See below
void JustDied(Unit* killer)
@@ -294,6 +298,11 @@ struct TRINITY_DLL_DECL boss_strawmanAI : public ScriptedAI
DoScriptText(SAY_STRAWMAN_AGGRO, m_creature);
}
+ void JustReachedHome()
+ {
+ m_creature->ForcedDespawn();
+ }
+
void SpellHit(Unit* caster, const SpellEntry *Spell)
{
if ((Spell->SchoolMask == SPELL_SCHOOL_MASK_FIRE) && (!(rand()%10)))
@@ -379,6 +388,11 @@ struct TRINITY_DLL_DECL boss_tinheadAI : public ScriptedAI
DoScriptText(SAY_TINHEAD_AGGRO, m_creature);
}
+ void JustReachedHome()
+ {
+ m_creature->ForcedDespawn();
+ }
+
void AttackStart(Unit* who)
{
if(m_creature->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
@@ -486,6 +500,11 @@ struct TRINITY_DLL_DECL boss_roarAI : public ScriptedAI
DoScriptText(SAY_ROAR_AGGRO, m_creature);
}
+ void JustReachedHome()
+ {
+ m_creature->ForcedDespawn();
+ }
+
void JustDied(Unit* killer)
{
DoScriptText(SAY_ROAR_DEATH, m_creature);
@@ -553,6 +572,11 @@ struct TRINITY_DLL_DECL boss_croneAI : public ScriptedAI
ChainLightningTimer = 10000;
}
+ void JustReachedHome()
+ {
+ m_creature->ForcedDespawn();
+ }
+
void EnterCombat(Unit* who)
{
switch(rand()%2)
@@ -702,21 +726,14 @@ bool GossipHello_npc_grandmother(Player* player, Creature* _Creature)
return true;
}
-bool GossipSelect_npc_grandmother(Player* player, Creature* _Creature, uint32 sender, uint32 action)
+bool GossipSelect_npc_grandmother(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 action)
{
if(action == GOSSIP_ACTION_INFO_DEF)
{
- _Creature->SetVisibility(VISIBILITY_OFF);
- float x,y,z;
- _Creature->GetPosition(x,y,z);
- Creature* BigBadWolf = _Creature->SummonCreature(CREATURE_BIG_BAD_WOLF, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- if(BigBadWolf)
- {
- BigBadWolf->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- BigBadWolf->AI()->AttackStart(player);
- }
+ if (Creature* pBigBadWolf = pCreature->SummonCreature(CREATURE_BIG_BAD_WOLF, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, HOUR*2*IN_MILISECONDS))
+ pBigBadWolf->AI()->AttackStart(pPlayer);
- _Creature->setDeathState(JUST_DIED);
+ pCreature->ForcedDespawn();
}
return true;
@@ -757,6 +774,11 @@ struct TRINITY_DLL_DECL boss_bigbadwolfAI : public ScriptedAI
DoScriptText(SAY_WOLF_AGGRO, m_creature);
}
+ void JustReachedHome()
+ {
+ m_creature->ForcedDespawn();
+ }
+
void JustDied(Unit* killer)
{
DoPlaySoundToSet(m_creature, SOUND_WOLF_DEATH);
@@ -918,6 +940,7 @@ struct TRINITY_DLL_DECL boss_julianneAI : public ScriptedAI
pInstance = c->GetInstanceData();
EntryYellTimer = 1000;
AggroYellTimer = 10000;
+ IsFakingDeath = false;
}
ScriptedInstance* pInstance;
@@ -944,16 +967,6 @@ struct TRINITY_DLL_DECL boss_julianneAI : public ScriptedAI
void Reset()
{
- if(RomuloGUID)
- {
- if(Unit* Romulo = Unit::GetUnit(*m_creature, RomuloGUID))
- {
- Romulo->SetVisibility(VISIBILITY_OFF);
- Romulo->DealDamage(Romulo, Romulo->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
- }
-
- }
-
RomuloGUID = 0;
Phase = PHASE_JULIANNE;
@@ -966,9 +979,11 @@ struct TRINITY_DLL_DECL boss_julianneAI : public ScriptedAI
ResurrectSelfTimer = 0;
if(IsFakingDeath)
+ {
Resurrect(m_creature);
+ IsFakingDeath = false;
+ }
- IsFakingDeath = false;
SummonedRomulo = false;
RomuloDead = false;
}
@@ -991,6 +1006,11 @@ struct TRINITY_DLL_DECL boss_julianneAI : public ScriptedAI
ScriptedAI::MoveInLineOfSight(who);
}
+ void JustReachedHome()
+ {
+ m_creature->ForcedDespawn();
+ }
+
void SpellHit(Unit* caster, const SpellEntry *Spell)
{
if (Spell->Id == SPELL_DRINK_POISON)
@@ -1064,6 +1084,11 @@ struct TRINITY_DLL_DECL boss_romuloAI : public ScriptedAI
JulianneDead = false;
}
+ void JustReachedHome()
+ {
+ m_creature->ForcedDespawn();
+ }
+
void DamageTaken(Unit* done_by, uint32 &damage);
void EnterCombat(Unit* who)
@@ -1265,19 +1290,14 @@ void boss_julianneAI::UpdateAI(const uint32 diff)
{
if(SummonRomuloTimer < diff)
{
- Creature* Romulo = m_creature->SummonCreature(CREATURE_ROMULO, ROMULO_X, ROMULO_Y, m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000);
- if(Romulo)
+ if (Creature* pRomulo = m_creature->SummonCreature(CREATURE_ROMULO, ROMULO_X, ROMULO_Y, m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, HOUR*2*IN_MILISECONDS))
{
- RomuloGUID = Romulo->GetGUID();
- CAST_AI(boss_romuloAI, Romulo->AI())->JulianneGUID = m_creature->GetGUID();
- CAST_AI(boss_romuloAI, Romulo->AI())->Phase = PHASE_ROMULO;
- Romulo->setFaction(16);
-
- if(m_creature->getVictim())
- {
- Romulo->AddThreat(m_creature->getVictim(), 0.0f);
- }
- DoZoneInCombat(Romulo);
+ RomuloGUID = pRomulo->GetGUID();
+ CAST_AI(boss_romuloAI, pRomulo->AI())->JulianneGUID = m_creature->GetGUID();
+ CAST_AI(boss_romuloAI, pRomulo->AI())->Phase = PHASE_ROMULO;
+ DoZoneInCombat(pRomulo);
+
+ pRomulo->setFaction(16);
}
SummonedRomulo = true;
}else SummonRomuloTimer -= diff;
diff --git a/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp b/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp
index 10e2a54cbaa..8156e8fff9c 100644
--- a/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp
+++ b/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp
@@ -296,11 +296,6 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
}
}
-
- if(!UpdateVictim())
- return;
-
- DoMeleeAttackIfReady();
}
void StartEvent()
@@ -344,7 +339,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
{
uint32 entry = ((uint32)Spawns[index][0]);
float PosX = Spawns[index][1];
- if (Creature* pCreature = m_creature->SummonCreature(entry, PosX, SPAWN_Y, SPAWN_Z, SPAWN_O, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000))
+ if (Creature* pCreature = m_creature->SummonCreature(entry, PosX, SPAWN_Y, SPAWN_Z, SPAWN_O, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, HOUR*2*IN_MILISECONDS))
{
// In case database has bad flags
pCreature->SetUInt32Value(UNIT_FIELD_FLAGS, 0);
diff --git a/src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp b/src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp
index dd9a8ec3049..0b84ba0a8b8 100644
--- a/src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp
+++ b/src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp
@@ -78,6 +78,7 @@ struct TRINITY_DLL_DECL npc_kyle_frenziedAI : public ScriptedAI
npc_kyle_frenziedAI(Creature *c) : ScriptedAI(c) {}
bool bEvent;
+ bool m_bIsMovingToLunch;
uint64 uiPlayerGUID;
uint32 uiEventTimer;
uint8 uiEventPhase;
@@ -85,9 +86,10 @@ struct TRINITY_DLL_DECL npc_kyle_frenziedAI : public ScriptedAI
void Reset()
{
bEvent = false;
+ m_bIsMovingToLunch = false;
uiPlayerGUID = 0;
uiEventTimer = 5000;
- uiEventPhase = 1;
+ uiEventPhase = 0;
if (m_creature->GetEntry() == NPC_KYLE_FRIENDLY)
m_creature->UpdateEntry(NPC_KYLE_FRENZIED);
@@ -95,7 +97,7 @@ struct TRINITY_DLL_DECL npc_kyle_frenziedAI : public ScriptedAI
void SpellHit(Unit* pCaster, SpellEntry const* pSpell)
{
- if (!m_creature->isInCombat() && !bEvent && pSpell->Id == SPELL_LUNCH)
+ if (!m_creature->getVictim() && !bEvent && pSpell->Id == SPELL_LUNCH)
{
if (pCaster->GetTypeId() == TYPEID_PLAYER)
uiPlayerGUID = pCaster->GetGUID();
@@ -119,37 +121,38 @@ struct TRINITY_DLL_DECL npc_kyle_frenziedAI : public ScriptedAI
return;
if (uiPointId == POINT_ID)
- uiEventTimer = 5000;
+ m_bIsMovingToLunch = false;
}
void UpdateAI(const uint32 diff)
{
if (bEvent)
{
- if (!uiEventTimer)
+ if (m_bIsMovingToLunch)
return;
if (uiEventTimer < diff)
{
+ uiEventTimer = 5000;
+ ++uiEventPhase;
+
switch(uiEventPhase)
{
case 1:
- uiEventTimer = 0;
-
if (Unit* pUnit = Unit::GetUnit(*m_creature,uiPlayerGUID))
{
if (GameObject* pGo = pUnit->GetGameObject(SPELL_LUNCH))
+ {
+ m_bIsMovingToLunch = true;
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 (Player* pUnit = Unit::GetPlayer(uiPlayerGUID))
pUnit->TalkedToCreature(m_creature->GetEntry(), m_creature->GetGUID());
@@ -166,9 +169,6 @@ struct TRINITY_DLL_DECL npc_kyle_frenziedAI : public ScriptedAI
m_creature->GetMotionMaster()->Clear();
break;
}
-
- if (uiEventPhase != 5)
- ++uiEventPhase;
}
else
uiEventTimer -= diff;