*Add CONDITION_INSTANCE_DATA for dynamic loot of instance such as Zul'aman and AV battleground.
*Script update for Zul'aman. --HG-- branch : trunk
This commit is contained in:
@@ -33,10 +33,6 @@ class TRINITY_DLL_DECL ScriptedInstance : public InstanceData
|
|||||||
virtual uint64 GetData64(uint32) {return 0; }
|
virtual uint64 GetData64(uint32) {return 0; }
|
||||||
virtual void SetData64(uint32, uint64) { }
|
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
|
// Called every instance update
|
||||||
virtual void Update(uint32) {}
|
virtual void Update(uint32) {}
|
||||||
|
|
||||||
|
|||||||
@@ -103,7 +103,8 @@ CreatureAI* GetAI_npc_forest_frog(Creature *_Creature)
|
|||||||
|
|
||||||
#define GOSSIP_HOSTAGE1 "I am glad to help you."
|
#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
|
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());
|
ScriptedInstance* pInstance = ((ScriptedInstance*)_Creature->GetInstanceData());
|
||||||
if(pInstance)
|
if(pInstance)
|
||||||
{
|
{
|
||||||
uint8 progress = pInstance->GetData(DATA_CHESTLOOTED);
|
//uint8 progress = pInstance->GetData(DATA_CHESTLOOTED);
|
||||||
pInstance->SetData(DATA_CHESTLOOTED, 0);
|
pInstance->SetData(DATA_CHESTLOOTED, 0);
|
||||||
float x, y, z;
|
float x, y, z;
|
||||||
_Creature->GetPosition(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)
|
if(summon)
|
||||||
{
|
{
|
||||||
((npc_zulaman_hostageAI*)summon->AI())->PlayerGUID = player->GetGUID();
|
((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->SetDisplayId(10056);
|
||||||
summon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
summon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||||
summon->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
summon->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,5 +64,9 @@ class TRINITY_DLL_SPEC InstanceData
|
|||||||
|
|
||||||
//called on creature creation
|
//called on creature creation
|
||||||
virtual void OnCreatureCreate(Creature * /*creature*/, uint32 /*creature_entry*/) {}
|
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
|
#endif
|
||||||
|
|||||||
@@ -45,6 +45,7 @@
|
|||||||
#include "SpellAuras.h"
|
#include "SpellAuras.h"
|
||||||
#include "Util.h"
|
#include "Util.h"
|
||||||
#include "WaypointManager.h"
|
#include "WaypointManager.h"
|
||||||
|
#include "InstanceData.h" //for condition_instance_data
|
||||||
|
|
||||||
INSTANTIATE_SINGLETON_1(ObjectMgr);
|
INSTANTIATE_SINGLETON_1(ObjectMgr);
|
||||||
|
|
||||||
@@ -6737,6 +6738,12 @@ bool PlayerCondition::Meets(Player const * player) const
|
|||||||
return !player->HasAura(value1, value2);
|
return !player->HasAura(value1, value2);
|
||||||
case CONDITION_ACTIVE_EVENT:
|
case CONDITION_ACTIVE_EVENT:
|
||||||
return gameeventmgr.IsActiveEvent(value1);
|
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:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -6881,6 +6888,9 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case CONDITION_INSTANCE_DATA:
|
||||||
|
//TODO: need some check
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -216,9 +216,10 @@ enum ConditionType
|
|||||||
CONDITION_AD_COMMISSION_AURA = 10, // 0 0, for condition true while one from AD ñommission aura active
|
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_NO_AURA = 11, // spell_id effindex
|
||||||
CONDITION_ACTIVE_EVENT = 12, // event_id
|
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
|
//Player's info
|
||||||
typedef struct _tagCachePlayerInfo
|
typedef struct _tagCachePlayerInfo
|
||||||
|
|||||||
Reference in New Issue
Block a user