diff options
author | megamage <none@none> | 2009-05-06 00:06:38 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-05-06 00:06:38 -0500 |
commit | 3f6f15e34b11586d4b819cd89261fb03f690bb9f (patch) | |
tree | d058b290537c5cea2e3300c5af71d5449227c341 /src | |
parent | f4e86543377c9e4e3746b579106cb4d72d099fa1 (diff) |
*Update instance script functions.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Creature.cpp | 4 | ||||
-rw-r--r-- | src/game/GameObject.cpp | 7 | ||||
-rw-r--r-- | src/game/InstanceData.cpp | 57 | ||||
-rw-r--r-- | src/game/InstanceData.h | 21 |
4 files changed, 43 insertions, 46 deletions
diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index 68e7ddd1640..1c905de68b8 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -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; diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp index 54760a99b78..2f1014eb769 100644 --- a/src/game/GameObject.cpp +++ b/src/game/GameObject.cpp @@ -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(); diff --git a/src/game/InstanceData.cpp b/src/game/InstanceData.cpp index e79a91dc345..4fcdc0e4195 100644 --- a/src/game/InstanceData.cpp +++ b/src/game/InstanceData.cpp @@ -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) { - 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); - else - door->SetGoState(GO_STATE_ACTIVE); - } + OnCreatureCreate(creature, creature->GetEntry(), add); } -void InstanceData::AddBossPassageDoor(uint32 id, GameObject *door) +void InstanceData::SetBossRoomDoor(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->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_READY); - } -} - -void InstanceData::RemoveBossRoomDoor(uint32 id, GameObject *door) -{ - if(id < bosses.size()) - { - bosses[id].roomDoor.erase(door); + bosses[id].roomDoor.erase(door); } } -void InstanceData::RemoveBossPassageDoor(uint32 id, GameObject *door) +void InstanceData::SetBossPassageDoor(uint32 id, GameObject *door, bool add) { if(id < bosses.size()) { - bosses[id].passageDoor.erase(door); + 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 + 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) { diff --git a/src/game/InstanceData.h b/src/game/InstanceData.h index 64fcec634ec..097ba28d449 100644 --- a/src/game/InstanceData.h +++ b/src/game/InstanceData.h @@ -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() { |