diff options
3 files changed, 60 insertions, 5 deletions
diff --git a/src/bindings/scripts/scripts/zone/stratholme/boss_baron_rivendare.cpp b/src/bindings/scripts/scripts/zone/stratholme/boss_baron_rivendare.cpp index 092318fd7af..9d46ad70807 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/boss_baron_rivendare.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/boss_baron_rivendare.cpp @@ -98,12 +98,15 @@ struct TRINITY_DLL_DECL boss_baron_rivendareAI : public ScriptedAI MortalStrike_Timer = 12000; // RaiseDead_Timer = 30000; SummonSkeletons_Timer = 34000; + if (pInstance && pInstance->GetData(TYPE_RAMSTEIN) == DONE) + pInstance->SetData(TYPE_BARON,NOT_STARTED); } - void EnterCombat(Unit *who) + void AttackStart(Unit* who) { - if (pInstance) + if (pInstance)//can't use entercombat(), boss' dmg aura sets near players in combat, before entering the room's door pInstance->SetData(TYPE_BARON,IN_PROGRESS); + ScriptedAI::AttackStart(who); } void JustSummoned(Creature* summoned) diff --git a/src/bindings/scripts/scripts/zone/stratholme/boss_ramstein_the_gorger.cpp b/src/bindings/scripts/scripts/zone/stratholme/boss_ramstein_the_gorger.cpp index 1ecb95333c4..e1ae2b643c8 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/boss_ramstein_the_gorger.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/boss_ramstein_the_gorger.cpp @@ -54,7 +54,10 @@ struct TRINITY_DLL_DECL boss_ramstein_the_gorgerAI : public ScriptedAI void JustDied(Unit* Killer) { for(uint8 i = 0; i < 30; i++) - m_creature->SummonCreature(C_MINDLESS_UNDEAD,3969.35,-3391.87,119.11,5.91,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000); + { + if(Creature* mob = m_creature->SummonCreature(C_MINDLESS_UNDEAD,3969.35+irand(-10,10),-3391.87+irand(-10,10),119.11,5.91,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000)) + mob->AI()->AttackStart(m_creature->SelectNearestTarget(500)); + } if (pInstance) pInstance->SetData(TYPE_RAMSTEIN,DONE); diff --git a/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp b/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp index 03977287d71..1b0e7137df3 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp @@ -156,8 +156,16 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance case GO_ZIGGURAT1: ziggurat1GUID = go->GetGUID(); break; case GO_ZIGGURAT2: ziggurat2GUID = go->GetGUID(); break; case GO_ZIGGURAT3: ziggurat3GUID = go->GetGUID(); break; - case GO_ZIGGURAT4: ziggurat4GUID = go->GetGUID(); break; - case GO_ZIGGURAT5: ziggurat5GUID = go->GetGUID(); break; + case GO_ZIGGURAT4: + ziggurat4GUID = go->GetGUID(); + if(TYPE_BARON == DONE || TYPE_RAMSTEIN == DONE) + HandleGameObject(0, true, go); + break; + case GO_ZIGGURAT5: + ziggurat5GUID = go->GetGUID(); + if(TYPE_BARON == DONE || TYPE_RAMSTEIN == DONE) + HandleGameObject(0, true, go); + break; case GO_PORT_GAUNTLET: portGauntletGUID = go->GetGUID(); break; case GO_PORT_SLAUGTHER: portSlaugtherGUID = go->GetGUID(); break; case GO_PORT_ELDERS: portElderGUID = go->GetGUID(); break; @@ -248,6 +256,8 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance case TYPE_BARON: if (data == IN_PROGRESS) { + HandleGameObject(ziggurat4GUID, false); + HandleGameObject(ziggurat5GUID, false); if (GetData(TYPE_BARON_RUN) == IN_PROGRESS) { Map::PlayerList const& players = instance->GetPlayers(); @@ -270,6 +280,11 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance SetData(TYPE_BARON_RUN,DONE); } } + if (data == DONE || data == NOT_STARTED) + { + HandleGameObject(ziggurat4GUID, true); + HandleGameObject(ziggurat5GUID, true); + } Encounter[5] = data; break; case TYPE_SH_AELMAR: @@ -288,6 +303,40 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance IsSilverHandDead[4] = (data) ? true : false; break; } + if(data == DONE)SaveToDB(); + } + + std::string GetSaveData() + { + OUT_SAVE_INST_DATA; + + std::ostringstream saveStream; + saveStream << Encounter[0] << " " << Encounter[1] << " " << Encounter[2] << " " + << Encounter[3] << " " << Encounter[4] << " " << Encounter[5]; + + OUT_SAVE_INST_DATA_COMPLETE; + return saveStream.str(); + } + + void Load(const char* in) + { + if (!in) + { + OUT_LOAD_INST_DATA_FAIL; + return; + } + + OUT_LOAD_INST_DATA(in); + + std::istringstream loadStream(in); + loadStream >> Encounter[0] >> Encounter[1] >> Encounter[2] >> Encounter[3] + >> Encounter[4] >> Encounter[5]; + + for(uint8 i = 0; i < ENCOUNTERS; ++i) + if (Encounter[i] == IN_PROGRESS) + Encounter[i] = NOT_STARTED; + + OUT_LOAD_INST_DATA_COMPLETE; } uint32 GetData(uint32 type) |