diff --git a/ScriptMgr.cpp b/ScriptMgr.cpp index ea27fc6..cc98a12 100644 --- a/ScriptMgr.cpp +++ b/ScriptMgr.cpp @@ -15,14 +15,18 @@ #include "World.h" typedef std::vector SDScriptVec; +typedef std::map SDScriptMap; + int num_sc_scripts; -SDScriptVec m_scripts; +SDScriptVec *m_scripts = NULL; +SDScriptMap *m_scriptStorage = NULL; // Not registered scripts storage Config SD2Config; /********************************************************************** +additions for windows compiler **********************************************************************/ +#ifdef _WIN32 template<> bool MaNGOS::Singleton::si_destroyed; template<> bool MaNGOS::Singleton::si_destroyed; template<> World *MaNGOS::Singleton::si_instance; @@ -35,14 +39,13 @@ World::~World() ObjectMgr::~ObjectMgr() { } +#endif /***********************************************************************/ QueryResult* strSD2Pquery(char* str) { -return SD2Database.Query(str); + return SD2Database.Query(str); } -// Not registered scripts storage -std::map m_scriptStorage; void FillSpellSummary(); diff --git a/include/precompiled.h b/include/precompiled.h index fbebc1f..5267827 100644 --- a/include/precompiled.h +++ b/include/precompiled.h @@ -10,7 +10,7 @@ #include "sc_gossip.h" #include "sc_grid_searchers.h" #include "sc_instance.h" -#include "sc_outdoor_pvp.h" +#include "sc_utility.h" #ifdef WIN32 # include diff --git a/scripts/northrend/ruby_sanctum/boss_baltharus.cpp b/scripts/northrend/ruby_sanctum/boss_baltharus.cpp index 0ecf986..9f93687 100644 --- a/scripts/northrend/ruby_sanctum/boss_baltharus.cpp +++ b/scripts/northrend/ruby_sanctum/boss_baltharus.cpp @@ -128,22 +128,28 @@ struct MANGOS_DLL_DECL boss_baltharusAI : public BSWScriptedAI void JustDied(Unit* pKiller) { - if (!pInstance) return; + if (!pInstance) + return; - if (pDummyTarget) pDummyTarget->ForcedDespawn(); DoScriptText(SAY_BALTHARUS_DEATH,m_creature); - pInstance->SetData(TYPE_BALTHARUS, DONE); + if (pInstance->GetData(TYPE_BALTHARUS) != DONE) + { + pInstance->SetData(TYPE_BALTHARUS, DONE); + if (pDummyTarget && pDummyTarget->IsInWorld()) + pDummyTarget->ForcedDespawn(); + } } void KilledUnit(Unit* pVictim) { - switch (urand(0,1)) { - case 0: - DoScriptText(SAY_BALTHARUS_SLAY_1,m_creature,pVictim); - break; - case 1: - DoScriptText(SAY_BALTHARUS_SLAY_2,m_creature,pVictim); - break; + switch (urand(0,1)) + { + case 0: + DoScriptText(SAY_BALTHARUS_SLAY_1,m_creature,pVictim); + break; + case 1: + DoScriptText(SAY_BALTHARUS_SLAY_2,m_creature,pVictim); + break; }; } diff --git a/scripts/northrend/ruby_sanctum/boss_halion.cpp b/scripts/northrend/ruby_sanctum/boss_halion.cpp index 0dac7d1..8b82652 100644 --- a/scripts/northrend/ruby_sanctum/boss_halion.cpp +++ b/scripts/northrend/ruby_sanctum/boss_halion.cpp @@ -716,8 +716,6 @@ struct MANGOS_DLL_DECL mob_halion_controlAI : public BSWScriptedAI } ScriptedInstance* pInstance; - Creature* pHalionReal; - Creature* pHalionTwilight; uint32 m_lastBuffReal, m_lastBuffTwilight; bool m_detectplayers; @@ -774,8 +772,11 @@ struct MANGOS_DLL_DECL mob_halion_controlAI : public BSWScriptedAI if (pInstance->GetData(TYPE_HALION_EVENT) != SPECIAL) return; - pHalionReal = pInstance->GetSingleCreatureFromStorage(NPC_HALION_REAL); - pHalionTwilight = pInstance->GetSingleCreatureFromStorage(NPC_HALION_TWILIGHT); + Creature* pHalionReal = pInstance->GetSingleCreatureFromStorage(NPC_HALION_REAL); + Creature* pHalionTwilight = pInstance->GetSingleCreatureFromStorage(NPC_HALION_TWILIGHT); + + if (!pHalionTwilight || !pHalionReal) + return; //pHalionReal->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pHalionTwilight->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); diff --git a/scripts/northrend/ulduar/halls_of_lightning/boss_bjarngrim.cpp b/scripts/northrend/ulduar/halls_of_lightning/boss_bjarngrim.cpp index 080f062..bd2eec2 100644 --- a/scripts/northrend/ulduar/halls_of_lightning/boss_bjarngrim.cpp +++ b/scripts/northrend/ulduar/halls_of_lightning/boss_bjarngrim.cpp @@ -405,15 +405,15 @@ CreatureAI* GetAI_mob_stormforged_lieutenant(Creature* pCreature) void AddSC_boss_bjarngrim() { - Script *newscript; + Script* pNewScript; - newscript = new Script; - newscript->Name = "boss_bjarngrim"; - newscript->GetAI = &GetAI_boss_bjarngrim; - newscript->RegisterSelf(); + pNewScript = new Script; + pNewScript->Name = "boss_bjarngrim"; + pNewScript->GetAI = &GetAI_boss_bjarngrim; + pNewScript->RegisterSelf(); - newscript = new Script; - newscript->Name = "mob_stormforged_lieutenant"; - newscript->GetAI = &GetAI_mob_stormforged_lieutenant; - newscript->RegisterSelf(); + pNewScript = new Script; + pNewScript->Name = "mob_stormforged_lieutenant"; + pNewScript->GetAI = &GetAI_mob_stormforged_lieutenant; + pNewScript->RegisterSelf(); } diff --git a/scripts/northrend/ulduar/halls_of_lightning/boss_ionar.cpp b/scripts/northrend/ulduar/halls_of_lightning/boss_ionar.cpp index b6321c8..6928b75 100644 --- a/scripts/northrend/ulduar/halls_of_lightning/boss_ionar.cpp +++ b/scripts/northrend/ulduar/halls_of_lightning/boss_ionar.cpp @@ -73,11 +73,11 @@ struct MANGOS_DLL_DECL boss_ionarAI : public ScriptedAI bool m_bIsRegularMode; bool m_bIsSplitPhase; - uint32 m_uiSplit_Timer; + uint32 m_uiSplitTimer; uint32 m_uiSparkAtHomeCount; - uint32 m_uiStaticOverload_Timer; - uint32 m_uiBallLightning_Timer; + uint32 m_uiStaticOverloadTimer; + uint32 m_uiBallLightningTimer; uint32 m_uiHealthAmountModifier; @@ -86,11 +86,11 @@ struct MANGOS_DLL_DECL boss_ionarAI : public ScriptedAI m_lSparkGUIDList.clear(); m_bIsSplitPhase = true; - m_uiSplit_Timer = 25000; + m_uiSplitTimer = 25000; m_uiSparkAtHomeCount = 0; - m_uiStaticOverload_Timer = urand(5000, 6000); - m_uiBallLightning_Timer = urand(10000, 11000); + m_uiStaticOverloadTimer = urand(5000, 6000); + m_uiBallLightningTimer = urand(10000, 11000); m_uiHealthAmountModifier = 1; @@ -157,10 +157,7 @@ struct MANGOS_DLL_DECL boss_ionarAI : public ScriptedAI void DespawnSpark() { - if (m_lSparkGUIDList.empty()) - return; - - for(GUIDList::const_iterator itr = m_lSparkGUIDList.begin(); itr != m_lSparkGUIDList.end(); ++itr) + for (GUIDList::const_iterator itr = m_lSparkGUIDList.begin(); itr != m_lSparkGUIDList.end(); ++itr) { if (Creature* pTemp = m_creature->GetMap()->GetCreature(*itr)) { @@ -172,14 +169,10 @@ struct MANGOS_DLL_DECL boss_ionarAI : public ScriptedAI m_lSparkGUIDList.clear(); } - //make sparks come back + // make sparks come back void CallBackSparks() { - //should never be empty here, but check - if (m_lSparkGUIDList.empty()) - return; - - for(GUIDList::const_iterator itr = m_lSparkGUIDList.begin(); itr != m_lSparkGUIDList.end(); ++itr) + for (GUIDList::const_iterator itr = m_lSparkGUIDList.begin(); itr != m_lSparkGUIDList.end(); ++itr) { if (Creature* pSpark = m_creature->GetMap()->GetCreature(*itr)) { @@ -207,10 +200,8 @@ struct MANGOS_DLL_DECL boss_ionarAI : public ScriptedAI { pSummoned->CastSpell(pSummoned, m_bIsRegularMode ? SPELL_SPARK_VISUAL_TRIGGER_N : SPELL_SPARK_VISUAL_TRIGGER_H, true); - Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0); - - if (m_creature->getVictim()) - pSummoned->AI()->AttackStart(pTarget ? pTarget : m_creature->getVictim()); + if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0)) + pSummoned->AI()->AttackStart(pTarget); m_lSparkGUIDList.push_back(pSummoned->GetObjectGuid()); } @@ -218,18 +209,15 @@ struct MANGOS_DLL_DECL boss_ionarAI : public ScriptedAI void UpdateAI(const uint32 uiDiff) { + if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) + return; + // Splitted if (m_creature->GetVisibility() == VISIBILITY_OFF) { - if (!m_creature->isInCombat()) + if (m_uiSplitTimer < uiDiff) { - Reset(); - return; - } - - if (m_uiSplit_Timer < uiDiff) - { - m_uiSplit_Timer = 2500; + m_uiSplitTimer = 2500; // Return sparks to where Ionar splitted if (m_bIsSplitPhase) @@ -241,12 +229,11 @@ struct MANGOS_DLL_DECL boss_ionarAI : public ScriptedAI else { m_creature->SetVisibility(VISIBILITY_ON); - m_creature->CastSpell(m_creature, SPELL_SPARK_DESPAWN, false); - + DoCastSpellIfCan(m_creature, SPELL_SPARK_DESPAWN); DespawnSpark(); m_uiSparkAtHomeCount = 0; - m_uiSplit_Timer = 25000; + m_uiSplitTimer = 25000; m_bIsSplitPhase = true; if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() != CHASE_MOTION_TYPE) @@ -257,56 +244,32 @@ struct MANGOS_DLL_DECL boss_ionarAI : public ScriptedAI } } else - m_uiSplit_Timer -= uiDiff; + m_uiSplitTimer -= uiDiff; return; } - if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) - return; - - if (m_uiStaticOverload_Timer < uiDiff) + if (m_uiStaticOverloadTimer < uiDiff) { if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0)) - DoCastSpellIfCan(pTarget, m_bIsRegularMode ? SPELL_STATIC_OVERLOAD_N : SPELL_STATIC_OVERLOAD_H); - - m_uiStaticOverload_Timer = urand(5000, 6000); + { + if (DoCastSpellIfCan(pTarget, m_bIsRegularMode ? SPELL_STATIC_OVERLOAD_N : SPELL_STATIC_OVERLOAD_H) == CAST_OK) + m_uiStaticOverloadTimer = urand(5000, 6000); + } } else - m_uiStaticOverload_Timer -= uiDiff; + m_uiStaticOverloadTimer -= uiDiff; - if (m_uiBallLightning_Timer < uiDiff) + if (m_uiBallLightningTimer < uiDiff) { - Unit *target = NULL; - std::vector target_list; - - ThreatList const& tList = m_creature->getThreatManager().getThreatList(); - for (ThreatList::const_iterator itr = tList.begin();itr != tList.end(); ++itr) + if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0)) { - target = m_creature->GetMap()->GetUnit((*itr)->getUnitGuid()); - - // exclude pets & totems - if (!target || target->GetTypeId() != TYPEID_PLAYER) - continue; - - //10 yard radius minimum - if (target->IsWithinDist(m_creature, 10.0f, false)) - continue; - - target_list.push_back(target); + if (DoCastSpellIfCan(pTarget, m_bIsRegularMode ? SPELL_BALL_LIGHTNING_N : SPELL_BALL_LIGHTNING_H) == CAST_OK) + m_uiBallLightningTimer = urand(10000, 11000); } - - if (target_list.size()) - target = *(target_list.begin()+rand()%target_list.size()); - else - target = m_creature->getVictim(); - - if (target) - DoCastSpellIfCan(target, m_bIsRegularMode ? SPELL_BALL_LIGHTNING_N : SPELL_BALL_LIGHTNING_H); - m_uiBallLightning_Timer = urand(10000, 11000); } else - m_uiBallLightning_Timer -= uiDiff; + m_uiBallLightningTimer -= uiDiff; // Health check if (m_creature->GetHealthPercent() < float(100 - 20*m_uiHealthAmountModifier)) @@ -338,7 +301,7 @@ bool EffectDummyCreature_boss_ionar(Unit* pCaster, uint32 uiSpellId, SpellEffect if (pCreatureTarget->GetEntry() != NPC_IONAR) return true; - for(uint8 i = 0; i < MAX_SPARKS; ++i) + for (uint8 i = 0; i < MAX_SPARKS; ++i) pCreatureTarget->CastSpell(pCreatureTarget, SPELL_SUMMON_SPARK, true); pCreatureTarget->AttackStop(); @@ -404,16 +367,16 @@ CreatureAI* GetAI_mob_spark_of_ionar(Creature* pCreature) void AddSC_boss_ionar() { - Script *newscript; - - newscript = new Script; - newscript->Name = "boss_ionar"; - newscript->GetAI = &GetAI_boss_ionar; - newscript->pEffectDummyNPC = &EffectDummyCreature_boss_ionar; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "mob_spark_of_ionar"; - newscript->GetAI = &GetAI_mob_spark_of_ionar; - newscript->RegisterSelf(); + Script* pNewScript; + + pNewScript = new Script; + pNewScript->Name = "boss_ionar"; + pNewScript->GetAI = &GetAI_boss_ionar; + pNewScript->pEffectDummyNPC = &EffectDummyCreature_boss_ionar; + pNewScript->RegisterSelf(); + + pNewScript = new Script; + pNewScript->Name = "mob_spark_of_ionar"; + pNewScript->GetAI = &GetAI_mob_spark_of_ionar; + pNewScript->RegisterSelf(); } diff --git a/scripts/northrend/ulduar/halls_of_lightning/boss_loken.cpp b/scripts/northrend/ulduar/halls_of_lightning/boss_loken.cpp index 8dca453..716d8ed 100644 --- a/scripts/northrend/ulduar/halls_of_lightning/boss_loken.cpp +++ b/scripts/northrend/ulduar/halls_of_lightning/boss_loken.cpp @@ -248,10 +248,10 @@ CreatureAI* GetAI_boss_loken(Creature* pCreature) void AddSC_boss_loken() { - Script *newscript; + Script* pNewScript; - newscript = new Script; - newscript->Name = "boss_loken"; - newscript->GetAI = &GetAI_boss_loken; - newscript->RegisterSelf(); + pNewScript = new Script; + pNewScript->Name = "boss_loken"; + pNewScript->GetAI = &GetAI_boss_loken; + pNewScript->RegisterSelf(); } diff --git a/scripts/northrend/ulduar/halls_of_lightning/boss_volkhan.cpp b/scripts/northrend/ulduar/halls_of_lightning/boss_volkhan.cpp index 59d727d..e6d7615 100644 --- a/scripts/northrend/ulduar/halls_of_lightning/boss_volkhan.cpp +++ b/scripts/northrend/ulduar/halls_of_lightning/boss_volkhan.cpp @@ -123,7 +123,6 @@ struct MANGOS_DLL_DECL boss_volkhanAI : public ScriptedAI DoScriptText(SAY_DEATH, m_creature); DespawnGolem(); - if (m_pInstance) if (m_uiArchivCounter < 5) { @@ -147,7 +146,7 @@ struct MANGOS_DLL_DECL boss_volkhanAI : public ScriptedAI if (m_lGolemGUIDList.empty()) return; - for(GUIDList::iterator itr = m_lGolemGUIDList.begin(); itr != m_lGolemGUIDList.end(); ++itr) + for(GUIDList::const_iterator itr = m_lGolemGUIDList.begin(); itr != m_lGolemGUIDList.end(); ++itr) { if (Creature* pTemp = m_creature->GetMap()->GetCreature(*itr)) { @@ -173,7 +172,7 @@ struct MANGOS_DLL_DECL boss_volkhanAI : public ScriptedAI { if (pSummoned->GetEntry() == NPC_MOLTEN_GOLEM) { - m_lGolemGUIDList.push_back(pSummoned->GetGUID()); + m_lGolemGUIDList.push_back(pSummoned->GetObjectGuid()); pSummoned->SetInCombatWithZone(); } } @@ -232,7 +231,6 @@ struct MANGOS_DLL_DECL boss_volkhanAI : public ScriptedAI } }; - CreatureAI* GetAI_boss_volkhan(Creature* pCreature) { return new boss_volkhanAI(pCreature); @@ -332,7 +330,7 @@ struct MANGOS_DLL_DECL mob_molten_golemAI : public ScriptedAI void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) { - if(m_bIsFrozen) + if (m_bIsFrozen) { uiDamage = 0; } @@ -393,21 +391,21 @@ CreatureAI* GetAI_mob_molten_golem(Creature* pCreature) void AddSC_boss_volkhan() { - Script *newscript; - - newscript = new Script; - newscript->Name = "boss_volkhan"; - newscript->GetAI = &GetAI_boss_volkhan; - newscript->pEffectDummyNPC = &EffectDummyCreature_boss_volkhan; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "npc_volkhan_anvil"; - newscript->pEffectDummyNPC = &EffectDummyCreature_npc_volkhan_anvil; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "mob_molten_golem"; - newscript->GetAI = &GetAI_mob_molten_golem; - newscript->RegisterSelf(); + Script* pNewScript; + + pNewScript = new Script; + pNewScript->Name = "boss_volkhan"; + pNewScript->GetAI = &GetAI_boss_volkhan; + pNewScript->pEffectDummyNPC = &EffectDummyCreature_boss_volkhan; + pNewScript->RegisterSelf(); + + pNewScript = new Script; + pNewScript->Name = "npc_volkhan_anvil"; + pNewScript->pEffectDummyNPC = &EffectDummyCreature_npc_volkhan_anvil; + pNewScript->RegisterSelf(); + + pNewScript = new Script; + pNewScript->Name = "mob_molten_golem"; + pNewScript->GetAI = &GetAI_mob_molten_golem; + pNewScript->RegisterSelf(); } diff --git a/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp b/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp index 8dde169..992f61c 100644 --- a/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp +++ b/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp @@ -153,10 +153,10 @@ CreatureAI* GetAI_boss_maiden_of_grief(Creature* pCreature) void AddSC_boss_maiden_of_grief() { - Script *newscript; + Script* pNewScript; - newscript = new Script; - newscript->Name = "boss_maiden_of_grief"; - newscript->GetAI = &GetAI_boss_maiden_of_grief; - newscript->RegisterSelf(); + pNewScript = new Script; + pNewScript->Name = "boss_maiden_of_grief"; + pNewScript->GetAI = &GetAI_boss_maiden_of_grief; + pNewScript->RegisterSelf(); } diff --git a/sd2_revision_R2.h b/sd2_revision_R2.h index 851715f..892f3df 100644 --- a/sd2_revision_R2.h +++ b/sd2_revision_R2.h @@ -1,4 +1,4 @@ #ifndef __SD2_REVISION_R2_H__ #define __SD2_REVISION_R2_H__ - #define SD2_REVISION_R2 "0146" + #define SD2_REVISION_R2 "0259" #endif // __SD2_REVISION_R2_H__ diff --git a/sd2_revision_nr.h b/sd2_revision_nr.h index eada819..e8d9fd5 100644 --- a/sd2_revision_nr.h +++ b/sd2_revision_nr.h @@ -1,4 +1,4 @@ #ifndef __SD2_REVISION_NR_H__ #define __SD2_REVISION_NR_H__ - #define SD2_REVISION_NR "2261" + #define SD2_REVISION_NR "2335" #endif // __SD2_REVISION_NR_H__