mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-17 02:50:29 +00:00
Big re-organization of repository [W.I.P]
This commit is contained in:
@@ -1,448 +0,0 @@
|
||||
/*
|
||||
REWRITTEN BY XINEF
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "stratholme.h"
|
||||
#include "Player.h"
|
||||
|
||||
const Position BlackGuardPos[10] =
|
||||
{
|
||||
{4032.73f+0.0f, -3378.26f+0.0f, 119.76f, 4.67f},
|
||||
{4032.73f+2.0f, -3378.26f+2.0f, 119.76f, 4.67f},
|
||||
{4032.73f+2.0f, -3378.26f-2.0f, 119.76f, 4.67f},
|
||||
{4032.73f-2.0f, -3378.26f+2.0f, 119.76f, 4.67f},
|
||||
{4032.73f-2.0f, -3378.26f-2.0f, 119.76f, 4.67f},
|
||||
|
||||
{4032.73f+0.0f, -3407.38f+0.0f, 115.56f, 0.0f},
|
||||
{4032.73f+2.0f, -3407.38f+2.0f, 115.56f, 0.0f},
|
||||
{4032.73f+2.0f, -3407.38f-2.0f, 115.56f, 0.0f},
|
||||
{4032.73f-2.0f, -3407.38f+2.0f, 115.56f, 0.0f},
|
||||
{4032.73f-2.0f, -3407.38f-2.0f, 115.56f, 0.0f}
|
||||
};
|
||||
|
||||
class instance_stratholme : public InstanceMapScript
|
||||
{
|
||||
public:
|
||||
instance_stratholme() : InstanceMapScript("instance_stratholme", 329) { }
|
||||
|
||||
struct instance_stratholme_InstanceMapScript : public InstanceScript
|
||||
{
|
||||
instance_stratholme_InstanceMapScript(Map* map) : InstanceScript(map)
|
||||
{
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
_baronRunProgress = 0;
|
||||
_baronRunTime = 0;
|
||||
_zigguratState1 = 0;
|
||||
_zigguratState2 = 0;
|
||||
_zigguratState3 = 0;
|
||||
_slaughterProgress = 0;
|
||||
_slaughterNPCs = 0;
|
||||
_postboxesOpened = 0;
|
||||
|
||||
_zigguratDoorsGUID1 = 0;
|
||||
_zigguratDoorsGUID2 = 0;
|
||||
_zigguratDoorsGUID3 = 0;
|
||||
_zigguratDoorsGUID4 = 0;
|
||||
_zigguratDoorsGUID5 = 0;
|
||||
_gauntletGateGUID = 0;
|
||||
_slaughterGateGUID = 0;
|
||||
_baronRivendareGUID = 0;
|
||||
|
||||
events.Reset();
|
||||
}
|
||||
|
||||
void OnPlayerEnter(Player* player)
|
||||
{
|
||||
if (_baronRunTime > 0)
|
||||
if (Aura* aura = player->AddAura(SPELL_BARON_ULTIMATUM, player))
|
||||
aura->SetDuration(_baronRunTime*MINUTE*IN_MILLISECONDS);
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature)
|
||||
{
|
||||
switch (creature->GetEntry())
|
||||
{
|
||||
case NPC_BARON_RIVENDARE:
|
||||
_baronRivendareGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_VENOM_BELCHER:
|
||||
case NPC_BILE_SPEWER:
|
||||
if (_slaughterProgress == 0)
|
||||
++_slaughterNPCs;
|
||||
break;
|
||||
case NPC_RAMSTEIN_THE_GORGER:
|
||||
if (_slaughterProgress == 1)
|
||||
++_slaughterNPCs;
|
||||
break;
|
||||
case NPC_MINDLESS_UNDEAD:
|
||||
if (_slaughterProgress == 2)
|
||||
++_slaughterNPCs;
|
||||
break;
|
||||
case NPC_BLACK_GUARD:
|
||||
if (_slaughterProgress == 3)
|
||||
++_slaughterNPCs;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ProcessSlaughterEvent()
|
||||
{
|
||||
if (_slaughterProgress == 1)
|
||||
{
|
||||
if (Creature* baron = instance->GetCreature(_baronRivendareGUID))
|
||||
baron->AI()->Talk(SAY_BRAON_SUMMON_RAMSTEIN);
|
||||
|
||||
Position pos = {4032.20f, -3378.06f, 119.75f, 4.67f};
|
||||
instance->SummonCreature(NPC_RAMSTEIN_THE_GORGER, pos);
|
||||
}
|
||||
if (_slaughterProgress == 2)
|
||||
{
|
||||
for (uint32 i = 0; i < 33; ++i)
|
||||
events.ScheduleEvent(EVENT_SPAWN_MINDLESS, 5000 + i*210);
|
||||
if (Creature* baron = instance->GetCreature(_baronRivendareGUID))
|
||||
if (GameObject* gate = baron->FindNearestGameObject(GO_SLAUGHTER_GATE_SIDE, 200.0f))
|
||||
gate->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
if (_slaughterProgress == 3)
|
||||
{
|
||||
events.ScheduleEvent(EVENT_SPAWN_BLACK_GUARD, 20000);
|
||||
}
|
||||
if (_slaughterProgress == 4)
|
||||
{
|
||||
if (Creature* baron = instance->GetCreature(_baronRivendareGUID))
|
||||
baron->AI()->Talk(SAY_BARON_GUARD_DEAD);
|
||||
if (GameObject* gate = instance->GetGameObject(_zigguratDoorsGUID5))
|
||||
gate->SetGoState(GO_STATE_ACTIVE);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void OnUnitDeath(Unit* unit)
|
||||
{
|
||||
switch (unit->GetEntry())
|
||||
{
|
||||
case NPC_VENOM_BELCHER:
|
||||
case NPC_BILE_SPEWER:
|
||||
case NPC_RAMSTEIN_THE_GORGER:
|
||||
case NPC_MINDLESS_UNDEAD:
|
||||
case NPC_BLACK_GUARD:
|
||||
if (--_slaughterNPCs == 0)
|
||||
{
|
||||
++_slaughterProgress;
|
||||
ProcessSlaughterEvent();
|
||||
SaveToDB();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* go)
|
||||
{
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
case GO_ZIGGURAT_DOORS1:
|
||||
_zigguratDoorsGUID1 = go->GetGUID();
|
||||
if (GetData(TYPE_ZIGGURAT1) >= 1)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_ZIGGURAT_DOORS2:
|
||||
_zigguratDoorsGUID2 = go->GetGUID();
|
||||
if (GetData(TYPE_ZIGGURAT2) >= 1)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_ZIGGURAT_DOORS3:
|
||||
_zigguratDoorsGUID3 = go->GetGUID();
|
||||
if (GetData(TYPE_ZIGGURAT3) >= 1)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_GAUNTLET_GATE:
|
||||
_gauntletGateGUID = go->GetGUID();
|
||||
if (_zigguratState1 == 2 && _zigguratState2 == 2 && _zigguratState3 == 2)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_SLAUGTHER_GATE:
|
||||
_slaughterGateGUID = go->GetGUID();
|
||||
if (_zigguratState1 == 2 && _zigguratState2 == 2 && _zigguratState3 == 2)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_ZIGGURAT_DOORS4:
|
||||
_zigguratDoorsGUID4 = go->GetGUID();
|
||||
if (_slaughterProgress == 4)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_ZIGGURAT_DOORS5:
|
||||
_zigguratDoorsGUID5 = go->GetGUID();
|
||||
if (_slaughterProgress == 4)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_SLAUGHTER_GATE_SIDE:
|
||||
if (_slaughterProgress >= 2)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CheckZiggurats()
|
||||
{
|
||||
if (_zigguratState1 == 2 && _zigguratState2 == 2 && _zigguratState3 == 2)
|
||||
{
|
||||
instance->LoadGrid(4035.83f, -3336.31f);
|
||||
if (Creature* baron = instance->GetCreature(_baronRivendareGUID))
|
||||
baron->AI()->Talk(SAY_BRAON_ZIGGURAT_FALL_YELL);
|
||||
|
||||
if (GameObject* gate = instance->GetGameObject(_gauntletGateGUID))
|
||||
gate->SetGoState(GO_STATE_ACTIVE);
|
||||
if (GameObject* gate = instance->GetGameObject(_slaughterGateGUID))
|
||||
gate->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TYPE_BARON_RUN:
|
||||
{
|
||||
if (_baronRunProgress == DATA_BARON_RUN_NONE)
|
||||
{
|
||||
_baronRunProgress = DATA_BARON_RUN_GATE;
|
||||
_baronRunTime = 45;
|
||||
DoCastSpellOnPlayers(SPELL_BARON_ULTIMATUM);
|
||||
events.ScheduleEvent(EVENT_BARON_TIME, 60000);
|
||||
|
||||
instance->LoadGrid(4035.83f, -3336.31f);
|
||||
if (Creature* baron = instance->GetCreature(_baronRivendareGUID))
|
||||
baron->AI()->Talk(SAY_BARON_INIT_YELL);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TYPE_ZIGGURAT1:
|
||||
{
|
||||
if (data == _zigguratState1+1)
|
||||
++_zigguratState1;
|
||||
|
||||
if (_zigguratState1 == 1)
|
||||
if (GameObject* ziggurat = instance->GetGameObject(_zigguratDoorsGUID1))
|
||||
ziggurat->SetGoState(GO_STATE_ACTIVE);
|
||||
|
||||
CheckZiggurats();
|
||||
break;
|
||||
}
|
||||
case TYPE_ZIGGURAT2:
|
||||
{
|
||||
if (data == _zigguratState2+1)
|
||||
++_zigguratState2;
|
||||
|
||||
if (_zigguratState2 == 1)
|
||||
if (GameObject* ziggurat = instance->GetGameObject(_zigguratDoorsGUID2))
|
||||
ziggurat->SetGoState(GO_STATE_ACTIVE);
|
||||
|
||||
CheckZiggurats();
|
||||
break;
|
||||
}
|
||||
case TYPE_ZIGGURAT3:
|
||||
{
|
||||
if (data == _zigguratState3+1)
|
||||
++_zigguratState3;
|
||||
|
||||
if (_zigguratState3 == 1)
|
||||
if (GameObject* ziggurat = instance->GetGameObject(_zigguratDoorsGUID3))
|
||||
ziggurat->SetGoState(GO_STATE_ACTIVE);
|
||||
|
||||
CheckZiggurats();
|
||||
break;
|
||||
}
|
||||
case TYPE_BARON_FIGHT:
|
||||
{
|
||||
if (GameObject* gate = instance->GetGameObject(_zigguratDoorsGUID5))
|
||||
gate->SetGoState(data == IN_PROGRESS ? GO_STATE_READY : GO_STATE_ACTIVE);
|
||||
return;
|
||||
}
|
||||
case TYPE_MALLOW:
|
||||
++_postboxesOpened;
|
||||
break;
|
||||
}
|
||||
|
||||
SaveToDB();
|
||||
}
|
||||
|
||||
std::string GetSaveData()
|
||||
{
|
||||
std::ostringstream saveStream;
|
||||
saveStream << "S T " << _baronRunProgress << ' ' << _baronRunTime << ' ' << _zigguratState1 << ' ' << _zigguratState2 << ' ' << _zigguratState3 << ' ' << _slaughterProgress << ' ' << _postboxesOpened;
|
||||
return saveStream.str();
|
||||
}
|
||||
|
||||
void Load(const char* in)
|
||||
{
|
||||
if (!in)
|
||||
return;
|
||||
|
||||
char dataHead1, dataHead2;
|
||||
std::istringstream loadStream(in);
|
||||
loadStream >> dataHead1 >> dataHead2;
|
||||
if (dataHead1 == 'S' && dataHead2 == 'T')
|
||||
{
|
||||
loadStream >> _baronRunProgress;
|
||||
loadStream >> _baronRunTime;
|
||||
loadStream >> _zigguratState1;
|
||||
loadStream >> _zigguratState2;
|
||||
loadStream >> _zigguratState3;
|
||||
loadStream >> _slaughterProgress;
|
||||
loadStream >> _postboxesOpened;
|
||||
}
|
||||
|
||||
if (_baronRunTime > 0)
|
||||
events.ScheduleEvent(EVENT_BARON_TIME, 60000);
|
||||
|
||||
if (_slaughterProgress > 0 && _slaughterProgress < 4)
|
||||
events.ScheduleEvent(EVENT_FORCE_SLAUGHTER_EVENT, 5000);
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type) const
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TYPE_ZIGGURAT1:
|
||||
return _zigguratState1;
|
||||
case TYPE_ZIGGURAT2:
|
||||
return _zigguratState2;
|
||||
case TYPE_ZIGGURAT3:
|
||||
return _zigguratState3;
|
||||
case TYPE_MALLOW:
|
||||
return _postboxesOpened;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Update(uint32 diff)
|
||||
{
|
||||
events.Update(diff);
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_BARON_TIME:
|
||||
{
|
||||
--_baronRunTime;
|
||||
instance->LoadGrid(4035.83f, -3336.31f);
|
||||
Creature* baron = instance->GetCreature(_baronRivendareGUID);
|
||||
if (baron && !baron->IsInCombat())
|
||||
{
|
||||
switch (_baronRunTime)
|
||||
{
|
||||
case 10:
|
||||
baron->AI()->Talk(SAY_BARON_10M);
|
||||
break;
|
||||
case 5:
|
||||
baron->AI()->Talk(SAY_BARON_5M);
|
||||
if (Creature* ysida = baron->FindNearestCreature(NPC_YSIDA, 50.0f))
|
||||
ysida->AI()->SetData(1, 1);
|
||||
break;
|
||||
case 0:
|
||||
baron->AI()->Talk(SAY_BARON_0M);
|
||||
DoRemoveAurasDueToSpellOnPlayers(SPELL_BARON_ULTIMATUM);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (_baronRunTime > 0)
|
||||
events.ScheduleEvent(EVENT_BARON_TIME, 60000);
|
||||
else
|
||||
events.ScheduleEvent(EVENT_EXECUTE_PRISONER, 0);
|
||||
|
||||
SaveToDB();
|
||||
break;
|
||||
}
|
||||
case EVENT_EXECUTE_PRISONER:
|
||||
{
|
||||
instance->LoadGrid(4035.83f, -3336.31f);
|
||||
Creature* baron = instance->GetCreature(_baronRivendareGUID);
|
||||
if (baron && baron->IsAlive())
|
||||
{
|
||||
if (!baron->IsInCombat())
|
||||
{
|
||||
baron->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H);
|
||||
if (Creature* ysida = baron->FindNearestCreature(NPC_YSIDA, 50.0f))
|
||||
Unit::Kill(baron, ysida);
|
||||
}
|
||||
else
|
||||
events.ScheduleEvent(EVENT_EXECUTE_PRISONER, 1000);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EVENT_SPAWN_MINDLESS:
|
||||
{
|
||||
Position pos = {3941.75f, -3393.06f, 119.70f, 0.0f};
|
||||
instance->SummonCreature(NPC_MINDLESS_UNDEAD, pos);
|
||||
break;
|
||||
}
|
||||
case EVENT_FORCE_SLAUGHTER_EVENT:
|
||||
{
|
||||
Map::PlayerList const& PlayerList = instance->GetPlayers();
|
||||
if (!PlayerList.isEmpty())
|
||||
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||
if (Player* player = i->GetSource())
|
||||
if (player->GetDistance2d(4034.97f, -3402.13f) < 50.0f)
|
||||
{
|
||||
ProcessSlaughterEvent();
|
||||
return;
|
||||
}
|
||||
|
||||
events.ScheduleEvent(EVENT_FORCE_SLAUGHTER_EVENT, 3000);
|
||||
break;
|
||||
}
|
||||
case EVENT_SPAWN_BLACK_GUARD:
|
||||
{
|
||||
for (uint8 i = 0; i < 5; ++i)
|
||||
if (Creature* guard = instance->SummonCreature(NPC_BLACK_GUARD, BlackGuardPos[i]))
|
||||
{
|
||||
guard->SetWalk(true);
|
||||
guard->GetMotionMaster()->MovePoint(0, BlackGuardPos[i+5]);
|
||||
guard->SetHomePosition(BlackGuardPos[i+5]);
|
||||
if (i == 0 && guard->AI())
|
||||
guard->AI()->Talk(SAY_BLACK_GUARD_INIT);
|
||||
}
|
||||
|
||||
if (GameObject* gate = instance->GetGameObject(_zigguratDoorsGUID4))
|
||||
gate->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 _baronRunProgress;
|
||||
uint32 _baronRunTime;
|
||||
uint32 _zigguratState1;
|
||||
uint32 _zigguratState2;
|
||||
uint32 _zigguratState3;
|
||||
uint32 _slaughterProgress;
|
||||
uint32 _slaughterNPCs;
|
||||
uint32 _postboxesOpened;
|
||||
EventMap events;
|
||||
|
||||
uint64 _zigguratDoorsGUID1;
|
||||
uint64 _zigguratDoorsGUID2;
|
||||
uint64 _zigguratDoorsGUID3;
|
||||
uint64 _zigguratDoorsGUID4;
|
||||
uint64 _zigguratDoorsGUID5;
|
||||
uint64 _slaughterGateGUID;
|
||||
uint64 _gauntletGateGUID;
|
||||
uint64 _baronRivendareGUID;
|
||||
};
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* map) const
|
||||
{
|
||||
return new instance_stratholme_InstanceMapScript(map);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_instance_stratholme()
|
||||
{
|
||||
new instance_stratholme();
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
/*
|
||||
REWRITTEN BY XINEF
|
||||
*/
|
||||
|
||||
#ifndef DEF_STRATHOLME_H
|
||||
#define DEF_STRATHOLME_H
|
||||
|
||||
enum DataTypes
|
||||
{
|
||||
TYPE_BARON_RUN = 0,
|
||||
TYPE_ZIGGURAT1 = 1,
|
||||
TYPE_ZIGGURAT2 = 2,
|
||||
TYPE_ZIGGURAT3 = 3,
|
||||
TYPE_BARON_FIGHT = 4,
|
||||
TYPE_MALLOW = 5,
|
||||
|
||||
DATA_BARON_RUN_NONE = 0,
|
||||
DATA_BARON_RUN_GATE = 1,
|
||||
};
|
||||
|
||||
enum CreatureIds
|
||||
{
|
||||
NPC_BARON_RIVENDARE = 10440,
|
||||
NPC_BILE_SPEWER = 10416,
|
||||
NPC_VENOM_BELCHER = 10417,
|
||||
NPC_RAMSTEIN_THE_GORGER = 10439,
|
||||
NPC_MINDLESS_UNDEAD = 11030,
|
||||
NPC_BLACK_GUARD = 10394,
|
||||
NPC_YSIDA = 16031
|
||||
};
|
||||
|
||||
enum GameobjectIds
|
||||
{
|
||||
GO_ZIGGURAT_DOORS1 = 175380, // baroness
|
||||
GO_ZIGGURAT_DOORS2 = 175379, // nerub'enkan
|
||||
GO_ZIGGURAT_DOORS3 = 175381, // maleki
|
||||
GO_ZIGGURAT_DOORS4 = 175405, // rammstein
|
||||
GO_ZIGGURAT_DOORS5 = 175796, // baron
|
||||
GO_GAUNTLET_GATE = 175374,
|
||||
GO_SLAUGTHER_GATE = 175373,
|
||||
GO_SLAUGHTER_GATE_SIDE = 175358,
|
||||
GO_EXIT_GATE = 176424
|
||||
};
|
||||
|
||||
enum MiscIds
|
||||
{
|
||||
SAY_BLACK_GUARD_INIT = 0,
|
||||
SAY_BARON_INIT_YELL = 0,
|
||||
SAY_BRAON_ZIGGURAT_FALL_YELL = 1,
|
||||
SAY_BARON_10M = 2,
|
||||
SAY_BARON_5M = 3,
|
||||
SAY_BARON_0M = 4,
|
||||
SAY_BRAON_SUMMON_RAMSTEIN = 5,
|
||||
SAY_BARON_GUARD_DEAD = 6,
|
||||
|
||||
EVENT_BARON_TIME = 1,
|
||||
EVENT_SPAWN_MINDLESS = 2,
|
||||
EVENT_FORCE_SLAUGHTER_EVENT = 3,
|
||||
EVENT_SPAWN_BLACK_GUARD = 4,
|
||||
EVENT_EXECUTE_PRISONER = 5,
|
||||
|
||||
SPELL_BARON_ULTIMATUM = 27861
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user