diff options
-rw-r--r-- | src/bindings/scripts/include/sc_instance.h | 4 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/zone/zulaman/zulaman.cpp | 18 | ||||
-rw-r--r-- | src/game/InstanceData.h | 4 | ||||
-rw-r--r-- | src/game/ObjectMgr.cpp | 10 | ||||
-rw-r--r-- | src/game/ObjectMgr.h | 3 |
5 files changed, 30 insertions, 9 deletions
diff --git a/src/bindings/scripts/include/sc_instance.h b/src/bindings/scripts/include/sc_instance.h index 8de13c10f72..cb6374b0415 100644 --- a/src/bindings/scripts/include/sc_instance.h +++ b/src/bindings/scripts/include/sc_instance.h @@ -33,10 +33,6 @@ class TRINITY_DLL_DECL ScriptedInstance : public InstanceData virtual uint64 GetData64(uint32) {return 0; } virtual void SetData64(uint32, uint64) { } - //All-purpose data storage 32 bit - virtual uint32 GetData(uint32) { return 0; } - virtual void SetData(uint32, uint32 data) {} - // Called every instance update virtual void Update(uint32) {} diff --git a/src/bindings/scripts/scripts/zone/zulaman/zulaman.cpp b/src/bindings/scripts/scripts/zone/zulaman/zulaman.cpp index b28b8a9bd06..a5706027f55 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/zulaman.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/zulaman.cpp @@ -103,7 +103,8 @@ CreatureAI* GetAI_npc_forest_frog(Creature *_Creature) #define GOSSIP_HOSTAGE1 "I am glad to help you." -static uint32 HostageInfo[] = {23790, 23999, 24024, 24001}; +static uint32 HostageEntry[] = {23790, 23999, 24024, 24001}; +static uint32 ChestEntry[] = {186648, 187021, 186672, 186667}; struct TRINITY_DLL_DECL npc_zulaman_hostageAI : public ScriptedAI { @@ -142,11 +143,20 @@ bool GossipSelect_npc_zulaman_hostage(Player* player, Creature* _Creature, uint3 ScriptedInstance* pInstance = ((ScriptedInstance*)_Creature->GetInstanceData()); if(pInstance) { - uint8 progress = pInstance->GetData(DATA_CHESTLOOTED); + //uint8 progress = pInstance->GetData(DATA_CHESTLOOTED); pInstance->SetData(DATA_CHESTLOOTED, 0); float x, y, z; _Creature->GetPosition(x, y, z); - Creature* summon = _Creature->SummonCreature(HostageInfo[progress], x-2, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 0); + uint32 entry = _Creature->GetEntry(); + for(uint8 i = 0; i < 4; ++i) + { + if(HostageEntry[i] == entry) + { + _Creature->SummonGameObject(ChestEntry[i], x-2, y, z, 0, 0, 0, 0, 0, 0); + break; + } + } + /*Creature* summon = _Creature->SummonCreature(HostageInfo[progress], x-2, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 0); if(summon) { ((npc_zulaman_hostageAI*)summon->AI())->PlayerGUID = player->GetGUID(); @@ -154,7 +164,7 @@ bool GossipSelect_npc_zulaman_hostage(Player* player, Creature* _Creature, uint3 summon->SetDisplayId(10056); summon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); summon->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - } + }*/ } return true; } diff --git a/src/game/InstanceData.h b/src/game/InstanceData.h index a1611a2bc1f..8fea525a6e2 100644 --- a/src/game/InstanceData.h +++ b/src/game/InstanceData.h @@ -64,5 +64,9 @@ class TRINITY_DLL_SPEC InstanceData //called on creature creation virtual void OnCreatureCreate(Creature * /*creature*/, uint32 /*creature_entry*/) {} + + //All-purpose data storage 32 bit + virtual uint32 GetData(uint32) { return 0; } + virtual void SetData(uint32, uint32 data) {} }; #endif diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 070e171f9fc..54f92b5fccf 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -45,6 +45,7 @@ #include "SpellAuras.h" #include "Util.h" #include "WaypointManager.h" +#include "InstanceData.h" //for condition_instance_data INSTANTIATE_SINGLETON_1(ObjectMgr); @@ -6737,6 +6738,12 @@ bool PlayerCondition::Meets(Player const * player) const return !player->HasAura(value1, value2); case CONDITION_ACTIVE_EVENT: return gameeventmgr.IsActiveEvent(value1); + case CONDITION_INSTANCE_DATA: + { + Map *map = player->GetMap(); + if(map && map->IsDungeon() && ((InstanceMap*)map)->GetInstanceData()) + return ((InstanceMap*)map)->GetInstanceData()->GetData(value1) == value2; + } default: return false; } @@ -6881,6 +6888,9 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val } break; } + case CONDITION_INSTANCE_DATA: + //TODO: need some check + break; } return true; } diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 9595418ed22..8c7f8728b0b 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -216,9 +216,10 @@ enum ConditionType CONDITION_AD_COMMISSION_AURA = 10, // 0 0, for condition true while one from AD ñommission aura active CONDITION_NO_AURA = 11, // spell_id effindex CONDITION_ACTIVE_EVENT = 12, // event_id + CONDITION_INSTANCE_DATA = 13, // entry data }; -#define MAX_CONDITION 13 // maximum value in ConditionType enum +#define MAX_CONDITION 14 // maximum value in ConditionType enum //Player's info typedef struct _tagCachePlayerInfo |