mirror of
https://github.com/araxiaonline/azerothshard-core.git
synced 2026-06-13 02:42:24 -04:00
Core/Hooks: Added hook CanApplySoulboundFlag for item
This commit is contained in:
@@ -415,6 +415,7 @@ bool Item::LoadFromDB(uint32 guid, uint64 owner_guid, Field* fields, uint32 entr
|
||||
|
||||
uint32 duration = fields[3].GetUInt32();
|
||||
SetUInt32Value(ITEM_FIELD_DURATION, duration);
|
||||
|
||||
// update duration if need, and remove if not need
|
||||
if ((proto->Duration == 0) != (duration == 0))
|
||||
{
|
||||
@@ -428,8 +429,9 @@ bool Item::LoadFromDB(uint32 guid, uint64 owner_guid, Field* fields, uint32 entr
|
||||
SetSpellCharges(i, atoi(tokens[i]));
|
||||
|
||||
SetUInt32Value(ITEM_FIELD_FLAGS, fields[5].GetUInt32());
|
||||
|
||||
// Remove bind flag for items vs NO_BIND set
|
||||
if (IsSoulBound() && proto->Bonding == NO_BIND /*[AZTH] force soulbound using an unknown flag as workaround */ && !HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_UNK1) /*[/AZTH]*/)
|
||||
if (IsSoulBound() && proto->Bonding == NO_BIND && sScriptMgr->CanApplySoulboundFlag(this, proto))
|
||||
{
|
||||
ApplyModFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_SOULBOUND, false);
|
||||
need_save = true;
|
||||
|
||||
@@ -2811,6 +2811,17 @@ void ScriptMgr::OnItemCreate(Item* item, ItemTemplate const* itemProto, Player c
|
||||
FOREACH_SCRIPT(MiscScript)->OnItemCreate(item, itemProto, owner);
|
||||
}
|
||||
|
||||
bool ScriptMgr::CanApplySoulboundFlag(Item* item, ItemTemplate const* proto)
|
||||
{
|
||||
bool ret = true;
|
||||
|
||||
FOR_SCRIPTS_RET(MiscScript, itr, end, ret) // return true by default if not scripts
|
||||
if (!itr->second->CanApplySoulboundFlag(item, proto))
|
||||
ret = false; // we change ret value only when scripts return false
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ScriptMgr::OnConstructObject(Object* origin)
|
||||
{
|
||||
FOREACH_SCRIPT(MiscScript)->OnConstructObject(origin);
|
||||
|
||||
@@ -1403,6 +1403,8 @@ public:
|
||||
|
||||
virtual void OnItemCreate(Item* /*item*/, ItemTemplate const* /*itemProto*/, Player const* /*owner*/) { }
|
||||
|
||||
virtual bool CanApplySoulboundFlag(Item* /*item*/, ItemTemplate const* /*proto*/) { return true; }
|
||||
|
||||
virtual bool CanItemApplyEquipSpell(Player* /*player*/, Item* /*item*/) { return true; }
|
||||
|
||||
virtual bool CanSendAuctionHello(WorldSession const* /*session*/, uint64 /*guid*/, Creature* /*creature*/) { return true; }
|
||||
@@ -1878,6 +1880,7 @@ class ScriptMgr
|
||||
void OnConstructInstanceSave(InstanceSave* origin);
|
||||
void OnDestructInstanceSave(InstanceSave* origin);
|
||||
void OnItemCreate(Item* item, ItemTemplate const* itemProto, Player const* owner);
|
||||
bool CanApplySoulboundFlag(Item* item, ItemTemplate const* proto);
|
||||
bool CanItemApplyEquipSpell(Player* player, Item* item);
|
||||
bool CanSendAuctionHello(WorldSession const* session, uint64 guid, Creature* creature);
|
||||
void ValidateSpellAtCastSpell(Player* player, uint32& oldSpellId, uint32& spellId, uint8& castCount, uint8& castFlags);
|
||||
|
||||
Reference in New Issue
Block a user