mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 18:15:31 +01:00
*Update instance script functions.
--HG-- branch : trunk
This commit is contained in:
@@ -186,7 +186,7 @@ void Creature::RemoveFromWorld()
|
||||
{
|
||||
if(Map *map = FindMap())
|
||||
if(map->IsDungeon() && ((InstanceMap*)map)->GetInstanceData())
|
||||
((InstanceMap*)map)->GetInstanceData()->OnCreatureRemove(this);
|
||||
((InstanceMap*)map)->GetInstanceData()->OnCreatureCreate(this, false);
|
||||
if(m_formation)
|
||||
formation_mgr.RemoveCreatureFromGroup(m_formation, this);
|
||||
Unit::RemoveFromWorld();
|
||||
@@ -1387,7 +1387,7 @@ bool Creature::CreateFromProto(uint32 guidlow, uint32 Entry, uint32 team, const
|
||||
Map *map = FindMap();
|
||||
if(map && map->IsDungeon() && ((InstanceMap*)map)->GetInstanceData())
|
||||
{
|
||||
((InstanceMap*)map)->GetInstanceData()->OnCreatureCreate(this, Entry);
|
||||
((InstanceMap*)map)->GetInstanceData()->OnCreatureCreate(this);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -95,7 +95,7 @@ void GameObject::RemoveFromWorld()
|
||||
{
|
||||
if(Map *map = FindMap())
|
||||
if(map->IsDungeon() && ((InstanceMap*)map)->GetInstanceData())
|
||||
((InstanceMap*)map)->GetInstanceData()->OnObjectRemove(this);
|
||||
((InstanceMap*)map)->GetInstanceData()->OnObjectCreate(this, false);
|
||||
// Possible crash at access to deleted GO in Unit::m_gameobj
|
||||
if(uint64 owner_guid = GetOwnerGUID())
|
||||
{
|
||||
@@ -1362,7 +1362,8 @@ void GameObject::CastSpell(Unit* target, uint32 spellId)
|
||||
|
||||
if(self)
|
||||
{
|
||||
target->CastSpell(target, spellInfo, true);
|
||||
if(target)
|
||||
target->CastSpell(target, spellInfo, true);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1379,7 +1380,7 @@ void GameObject::CastSpell(Unit* target, uint32 spellId)
|
||||
else
|
||||
{
|
||||
trigger->setFaction(14);
|
||||
trigger->CastSpell(target, spellInfo, true, 0, 0, target->GetGUID());
|
||||
trigger->CastSpell(target, spellInfo, true);
|
||||
}
|
||||
//trigger->setDeathState(JUST_DIED);
|
||||
//trigger->RemoveCorpse();
|
||||
|
||||
@@ -49,47 +49,47 @@ bool InstanceData::IsEncounterInProgress() const
|
||||
return false;
|
||||
}
|
||||
|
||||
void InstanceData::AddBossRoomDoor(uint32 id, GameObject *door)
|
||||
//This will be removed in the future, just compitiable with Mangos
|
||||
void InstanceData::OnCreatureCreate(Creature *creature, bool add)
|
||||
{
|
||||
OnCreatureCreate(creature, creature->GetEntry(), add);
|
||||
}
|
||||
|
||||
void InstanceData::SetBossRoomDoor(uint32 id, GameObject *door, bool add)
|
||||
{
|
||||
if(id < bosses.size())
|
||||
{
|
||||
BossInfo *bossInfo = &bosses[id];
|
||||
bossInfo->roomDoor.insert(door);
|
||||
// Room door is only closed when encounter is in progress
|
||||
if(bossInfo->state == IN_PROGRESS)
|
||||
door->SetGoState(GO_STATE_READY);
|
||||
if(add)
|
||||
{
|
||||
BossInfo *bossInfo = &bosses[id];
|
||||
bossInfo->roomDoor.insert(door);
|
||||
// Room door is only closed when encounter is in progress
|
||||
if(bossInfo->state == IN_PROGRESS)
|
||||
door->SetGoState(GO_STATE_READY);
|
||||
else
|
||||
door->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
else
|
||||
door->SetGoState(GO_STATE_ACTIVE);
|
||||
bosses[id].roomDoor.erase(door);
|
||||
}
|
||||
}
|
||||
|
||||
void InstanceData::AddBossPassageDoor(uint32 id, GameObject *door)
|
||||
void InstanceData::SetBossPassageDoor(uint32 id, GameObject *door, bool add)
|
||||
{
|
||||
if(id < bosses.size())
|
||||
{
|
||||
BossInfo *bossInfo = &bosses[id];
|
||||
bossInfo->passageDoor.insert(door);
|
||||
// Passage door is only opened when boss is defeated
|
||||
if(bossInfo->state == DONE)
|
||||
door->SetGoState(GO_STATE_ACTIVE);
|
||||
if(add)
|
||||
{
|
||||
BossInfo *bossInfo = &bosses[id];
|
||||
bossInfo->passageDoor.insert(door);
|
||||
// Passage door is only opened when boss is defeated
|
||||
if(bossInfo->state == DONE)
|
||||
door->SetGoState(GO_STATE_ACTIVE);
|
||||
else
|
||||
door->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
else
|
||||
door->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
|
||||
void InstanceData::RemoveBossRoomDoor(uint32 id, GameObject *door)
|
||||
{
|
||||
if(id < bosses.size())
|
||||
{
|
||||
bosses[id].roomDoor.erase(door);
|
||||
}
|
||||
}
|
||||
|
||||
void InstanceData::RemoveBossPassageDoor(uint32 id, GameObject *door)
|
||||
{
|
||||
if(id < bosses.size())
|
||||
{
|
||||
bosses[id].passageDoor.erase(door);
|
||||
bosses[id].passageDoor.erase(door);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,7 +98,6 @@ void InstanceData::SetBossState(uint32 id, EncounterState state)
|
||||
if(id < bosses.size())
|
||||
{
|
||||
BossInfo *bossInfo = &bosses[id];
|
||||
|
||||
bossInfo->state = state;
|
||||
switch(state)
|
||||
{
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
#define TRINITY_INSTANCE_DATA_H
|
||||
|
||||
#include "Common.h"
|
||||
#include "GameObject.h"
|
||||
#include "Map.h"
|
||||
//#include "GameObject.h"
|
||||
//#include "Map.h"
|
||||
|
||||
class Map;
|
||||
class Unit;
|
||||
@@ -80,13 +80,12 @@ class TRINITY_DLL_SPEC InstanceData
|
||||
virtual void OnPlayerEnter(Player *) {}
|
||||
|
||||
//Called when a gameobject is created
|
||||
virtual void OnObjectCreate(GameObject *) {}
|
||||
virtual void OnObjectCreate(GameObject *, bool add = true) {}
|
||||
|
||||
//called on creature creation
|
||||
virtual void OnCreatureCreate(Creature * /*creature*/, uint32 /*creature_entry*/) {}
|
||||
virtual void OnCreatureCreate(Creature *, bool add = true);
|
||||
virtual void OnCreatureCreate(Creature *, uint32 entry, bool add = true) {}
|
||||
|
||||
virtual void OnCreatureRemove(Creature*) {}
|
||||
virtual void OnObjectRemove(GameObject*) {}
|
||||
//All-purpose data storage 64 bit
|
||||
virtual uint64 GetData64(uint32 /*Data*/) { return 0; }
|
||||
virtual void SetData64(uint32 /*Data*/, uint64 /*Value*/) { }
|
||||
@@ -100,13 +99,11 @@ class TRINITY_DLL_SPEC InstanceData
|
||||
//use HandleGameObject(GUID,boolen,NULL); in any other script
|
||||
void HandleGameObject(uint64 GUID, bool open, GameObject *go = NULL);
|
||||
|
||||
protected:
|
||||
void AddBossRoomDoor(uint32 id, GameObject *door);
|
||||
void AddBossPassageDoor(uint32 id, GameObject *door);
|
||||
void RemoveBossRoomDoor(uint32 id, GameObject *door);
|
||||
void RemoveBossPassageDoor(uint32 id, GameObject *door);
|
||||
|
||||
void SetBossState(uint32 id, EncounterState state);
|
||||
protected:
|
||||
void SetBossNumber(uint32 number) { bosses.resize(number); }
|
||||
void SetBossRoomDoor(uint32 id, GameObject *door, bool add);
|
||||
void SetBossPassageDoor(uint32 id, GameObject *door, bool add);
|
||||
|
||||
std::string GetBossSave()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user