*Stratholme update

*added basic instance save
*handle Baron's doors
*Rammstein's adds will move to players

--HG--
branch : trunk
This commit is contained in:
Rat
2009-08-09 19:52:34 +02:00
parent 197c22bfc8
commit 2b1d4b756e
3 changed files with 60 additions and 5 deletions

View File

@@ -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)

View File

@@ -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);

View File

@@ -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)