aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormegamage <none@none>2009-05-06 00:06:38 -0500
committermegamage <none@none>2009-05-06 00:06:38 -0500
commit3f6f15e34b11586d4b819cd89261fb03f690bb9f (patch)
treed058b290537c5cea2e3300c5af71d5449227c341 /src
parentf4e86543377c9e4e3746b579106cb4d72d099fa1 (diff)
*Update instance script functions.
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/game/Creature.cpp4
-rw-r--r--src/game/GameObject.cpp7
-rw-r--r--src/game/InstanceData.cpp57
-rw-r--r--src/game/InstanceData.h21
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()
{