Blackfathom Deeps: Fix GO & Event handling

--HG--
branch : trunk
This commit is contained in:
tartalo
2009-11-20 21:40:32 +01:00
parent 0ed7b7dbbf
commit 2a5192e7dd
2 changed files with 28 additions and 27 deletions
@@ -22,7 +22,8 @@ enum Data
TYPE_GELIHAST,
TYPE_KELRIS,
TYPE_SHRINE,
TYPE_AKU_MAI
TYPE_AKU_MAI,
DATA_FIRE
};
enum Creatures
@@ -24,11 +24,12 @@ EndScriptData */
#include "precompiled.h"
#include "blackfathom_deeps.h"
#define MAX_ENCOUNTER 3
#define MAX_ENCOUNTER 4
/* Encounter 0 = Gelihast
Encounter 1 = Twilight Lord Kelris
Encounter 2 = Shrine event
Encounter 3 = Aku'Mai
Must kill twilight lord for shrine event to be possible
*/
@@ -53,6 +54,7 @@ struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
uint64 m_uiMainDoorGUID;
uint8 m_auiEncounter[MAX_ENCOUNTER];
uint8 m_uiCountFires;
void Initialize()
{
@@ -66,6 +68,7 @@ struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
m_uiShrineOfGelihastGUID = 0;
m_uiAltarOfTheDeepsGUID = 0;
m_uiMainDoorGUID = 0;
m_uiCountFires = 0;
}
void OnCreatureCreate(Creature* pCreature, bool add)
@@ -107,13 +110,17 @@ struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
break;
case GO_SHRINE_OF_GELIHAST:
m_uiShrineOfGelihastGUID = pGo->GetGUID();
if (m_auiEncounter[0] != DONE)
pGo->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
break;
case GO_ALTAR_OF_THE_DEEPS:
m_uiAltarOfTheDeepsGUID = pGo->GetGUID();
if (m_auiEncounter[3] != DONE)
pGo->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
break;
case GO_AKU_MAI_DOOR:
if (m_auiEncounter[2] == DONE)
HandleGameObject(NULL,true,pGo);
m_uiMainDoorGUID = pGo->GetGUID();
break;
}
@@ -143,12 +150,15 @@ struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
}
break;
case TYPE_SHRINE:
m_auiEncounter[2] = uiData;
case TYPE_AKU_MAI:
m_auiEncounter[3] = uiData;
if (uiData == DONE)
if (GameObject *pGo = instance->GetGameObject(m_uiAltarOfTheDeepsGUID))
pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
break;
case DATA_FIRE:
m_uiCountFires = uiData;
break;
}
}
@@ -156,10 +166,16 @@ struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
{
switch(uiType)
{
case TYPE_KELRIS:
case TYPE_GELIHAST:
return m_auiEncounter[0];
case TYPE_SHRINE:
case TYPE_KELRIS:
return m_auiEncounter[1];
case TYPE_SHRINE:
return m_auiEncounter[2];
case TYPE_AKU_MAI:
return m_auiEncounter[3];
case DATA_FIRE:
return m_uiCountFires;
}
return 0;
@@ -198,7 +214,10 @@ struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
pShrine2 && pShrine2->GetGoState() == GO_STATE_ACTIVE &&
pShrine3 && pShrine3->GetGoState() == GO_STATE_ACTIVE &&
pShrine4 && pShrine4->GetGoState() == GO_STATE_ACTIVE)
{
HandleGameObject(m_uiMainDoorGUID,true);
m_auiEncounter[2] = DONE;
}
}
};
@@ -207,20 +226,6 @@ InstanceData* GetInstanceData_instance_blackfathom_deeps(Map* pMap)
return new instance_blackfathom_deeps(pMap);
}
bool GoHello_blackfathom_fire(Player *pPlayer, GameObject* pGo)
{
ScriptedInstance *pInstance = pGo->GetInstanceData();
if (pInstance)
{
pGo->SetGoState(GO_STATE_ACTIVE);
pGo->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
((instance_blackfathom_deeps*)pInstance)->CheckFires();
return true;
}
return false;
}
void AddSC_instance_blackfathom_deeps()
{
Script *newscript;
@@ -228,9 +233,4 @@ void AddSC_instance_blackfathom_deeps()
newscript->Name = "instance_blackfathom_deeps";
newscript->GetInstanceData = &GetInstanceData_instance_blackfathom_deeps;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "go_blackfathom_fire";
newscript->pGOHello = &GoHello_blackfathom_fire;
newscript->RegisterSelf();
}