diff options
Diffstat (limited to 'src')
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; |