aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKudlaty <none@none>2009-08-10 23:24:40 +0200
committerKudlaty <none@none>2009-08-10 23:24:40 +0200
commit1594f0381fad4733ccb2a83a5181204624c9f810 (patch)
tree1db92f7ccad15d87d569b2ffcf2c2c2c32b0f7e7 /src
parentf2a24c215c66993bfff7f9c5f9b1538078fa6037 (diff)
Merge [SD2]
r1172 Replace some DealDamage() with ForcedDespawn() r1173 Added a few more texts for quest 12733 r1174 Allow escortAI to continue run for as long as at least one member of party is in range (in case original player who start escort is in party). r1175 Correct gossip text, wrong in rev 1173. r1176 Correcting a bug for script related to quest 11129. Also use explicit boolean as check if still moving to location. r1177 Adjusting tempsummon time for Opera event bosses and also despawn if creatures evade. r1178 Remove not needed code (already called from escortAI::UpdateAI) --HG-- branch : trunk
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;