Core/Scripts: implemented a guid map in InstanceScript, this way you can easier store guids and access its objects

This commit is contained in:
joschiwald
2014-09-18 00:25:05 +02:00
parent 053beae172
commit b08dcb1d99
7 changed files with 146 additions and 98 deletions

View File

@@ -441,7 +441,7 @@ class npc_watcher_gashra : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
Creature* krikthir = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_KRIKTHIR_THE_GATEWATCHER));
Creature* krikthir = _instance->GetCreature(DATA_KRIKTHIR_THE_GATEWATCHER);
if (krikthir && krikthir->IsAlive())
krikthir->AI()->Talk(SAY_PREFIGHT);
}
@@ -514,7 +514,7 @@ class npc_watcher_narjil : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
Creature* krikthir = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_KRIKTHIR_THE_GATEWATCHER));
Creature* krikthir = _instance->GetCreature(DATA_KRIKTHIR_THE_GATEWATCHER);
if (krikthir && krikthir->IsAlive())
krikthir->AI()->Talk(SAY_PREFIGHT);
}
@@ -591,7 +591,7 @@ class npc_watcher_silthik : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
Creature* krikthir = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_KRIKTHIR_THE_GATEWATCHER));
Creature* krikthir = _instance->GetCreature(DATA_KRIKTHIR_THE_GATEWATCHER);
if (krikthir && krikthir->IsAlive())
krikthir->AI()->Talk(SAY_PREFIGHT);
}
@@ -645,9 +645,7 @@ class npc_watcher_silthik : public CreatureScript
class achievement_watch_him_die : public AchievementCriteriaScript
{
public:
achievement_watch_him_die() : AchievementCriteriaScript("achievement_watch_him_die")
{
}
achievement_watch_him_die() : AchievementCriteriaScript("achievement_watch_him_die") { }
bool OnCheck(Player* /*player*/, Unit* target) override
{
@@ -660,7 +658,7 @@ class achievement_watch_him_die : public AchievementCriteriaScript
for (uint8 n = 0; n < 3; ++n)
{
if (Creature* watcher = ObjectAccessor::GetCreature(*target, instance->GetGuidData(DATA_WATCHER_GASHRA + n)))
if (Creature* watcher = instance->GetCreature(DATA_WATCHER_GASHRA + n))
if (!watcher->IsAlive())
return false;
}

View File

@@ -28,6 +28,15 @@ DoorData const doorData[] =
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
};
ObjectData const creatureData[] =
{
{ NPC_KRIKTHIR, DATA_KRIKTHIR_THE_GATEWATCHER },
{ NPC_WATCHER_NARJIL, DATA_WATCHER_GASHRA },
{ NPC_WATCHER_GASHRA, DATA_WATCHER_SILTHIK },
{ NPC_WATCHER_SILTHIK, DATA_WATCHER_NARJIL },
{ 0, 0 } // END
};
class instance_azjol_nerub : public InstanceMapScript
{
public:
@@ -40,95 +49,8 @@ class instance_azjol_nerub : public InstanceMapScript
SetHeaders(DataHeader);
SetBossNumber(EncounterCount);
LoadDoorData(doorData);
LoadObjectData(creatureData, nullptr);
}
void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
case NPC_KRIKTHIR:
KrikthirGUID = creature->GetGUID();
break;
case NPC_HADRONOX:
HadronoxGUID = creature->GetGUID();
break;
case NPC_ANUBARAK:
AnubarakGUID = creature->GetGUID();
break;
case NPC_WATCHER_NARJIL:
WatcherNarjilGUID = creature->GetGUID();
break;
case NPC_WATCHER_GASHRA:
WatcherGashraGUID = creature->GetGUID();
break;
case NPC_WATCHER_SILTHIK:
WatcherSilthikGUID = creature->GetGUID();
break;
default:
break;
}
}
void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
case GO_KRIKTHIR_DOOR:
case GO_ANUBARAK_DOOR_1:
case GO_ANUBARAK_DOOR_2:
case GO_ANUBARAK_DOOR_3:
AddDoor(go, true);
break;
default:
break;
}
}
void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
case GO_KRIKTHIR_DOOR:
case GO_ANUBARAK_DOOR_1:
case GO_ANUBARAK_DOOR_2:
case GO_ANUBARAK_DOOR_3:
AddDoor(go, false);
break;
default:
break;
}
}
ObjectGuid GetGuidData(uint32 type) const override
{
switch (type)
{
case DATA_KRIKTHIR_THE_GATEWATCHER:
return KrikthirGUID;
case DATA_HADRONOX:
return HadronoxGUID;
case DATA_ANUBARAK:
return AnubarakGUID;
case DATA_WATCHER_GASHRA:
return WatcherGashraGUID;
case DATA_WATCHER_SILTHIK:
return WatcherSilthikGUID;
case DATA_WATCHER_NARJIL:
return WatcherNarjilGUID;
default:
break;
}
return ObjectGuid::Empty;
}
protected:
ObjectGuid KrikthirGUID;
ObjectGuid HadronoxGUID;
ObjectGuid AnubarakGUID;
ObjectGuid WatcherGashraGUID;
ObjectGuid WatcherSilthikGUID;
ObjectGuid WatcherNarjilGUID;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override

View File

@@ -1119,7 +1119,7 @@ class instance_icecrown_citadel : public InstanceMapScript
return false;
}
bool CheckRequiredBosses(uint32 bossId, Player const* player = NULL) const override
bool CheckRequiredBosses(uint32 bossId, Player const* player = nullptr) const override
{
if (player && player->GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES))
return true;

View File

@@ -170,7 +170,7 @@ class instance_halls_of_stone : public InstanceMapScript
return true;
}
bool CheckRequiredBosses(uint32 bossId, Player const* player /*= NULL*/) const override
bool CheckRequiredBosses(uint32 bossId, Player const* player = nullptr) const override
{
if (player && player->GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES))
return true;