diff options
author | Axel Cocat <ax.cocat@gmail.com> | 2021-10-12 18:35:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-12 13:35:45 -0300 |
commit | cb19dbf4924c7fdcb8fb89ef2fe5ab6f0fdee30b (patch) | |
tree | 7b53b3f4be217ab3d99b98a00dcc57e09a6f5488 /src | |
parent | edb38575640b74661fe2ca754b29bc0fc32807a3 (diff) |
fix(Core/Player): fix Eluna hook in Player::CanUseItem (#7117)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/PlayerStorage.cpp | 72 |
1 files changed, 47 insertions, 25 deletions
diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp index 50674566c3..a529543980 100644 --- a/src/server/game/Entities/Player/PlayerStorage.cpp +++ b/src/server/game/Entities/Player/PlayerStorage.cpp @@ -2302,48 +2302,70 @@ InventoryResult Player::CanUseItem(ItemTemplate const* proto) const { // Used by group, function NeedBeforeGreed, to know if a prototype can be used by a player - if (proto) + if (!proto) { - if ((proto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY) && GetTeamId(true) != TEAM_HORDE) - return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM; + return EQUIP_ERR_ITEM_NOT_FOUND; + } - if ((proto->Flags2 & ITEM_FLAGS_EXTRA_ALLIANCE_ONLY) && GetTeamId(true) != TEAM_ALLIANCE) - return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM; + if ((proto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY) && GetTeamId(true) != TEAM_HORDE) + { + return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM; + } - if ((proto->AllowableClass & getClassMask()) == 0 || (proto->AllowableRace & getRaceMask()) == 0) - return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM; + if ((proto->Flags2 & ITEM_FLAGS_EXTRA_ALLIANCE_ONLY) && GetTeamId(true) != TEAM_ALLIANCE) + { + return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM; + } - if (proto->RequiredSkill != 0) - { - if (GetSkillValue(proto->RequiredSkill) == 0) - return EQUIP_ERR_NO_REQUIRED_PROFICIENCY; - else if (GetSkillValue(proto->RequiredSkill) < proto->RequiredSkillRank) - return EQUIP_ERR_CANT_EQUIP_SKILL; - } + if ((proto->AllowableClass & getClassMask()) == 0 || (proto->AllowableRace & getRaceMask()) == 0) + { + return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM; + } - if (proto->RequiredSpell != 0 && !HasSpell(proto->RequiredSpell)) + if (proto->RequiredSkill != 0) + { + if (GetSkillValue(proto->RequiredSkill) == 0) + { return EQUIP_ERR_NO_REQUIRED_PROFICIENCY; + } + else if (GetSkillValue(proto->RequiredSkill) < proto->RequiredSkillRank) + { + return EQUIP_ERR_CANT_EQUIP_SKILL; + } + } - InventoryResult result = EQUIP_ERR_OK; + if (proto->RequiredSpell != 0 && !HasSpell(proto->RequiredSpell)) + { + return EQUIP_ERR_NO_REQUIRED_PROFICIENCY; + } - if (!sScriptMgr->CanUseItem(const_cast<Player*>(this), proto, result)) - return result; + InventoryResult result = EQUIP_ERR_OK; - if (getLevel() < proto->RequiredLevel) - return EQUIP_ERR_CANT_EQUIP_LEVEL_I; + if (!sScriptMgr->CanUseItem(const_cast<Player*>(this), proto, result)) + { + return result; + } - // If World Event is not active, prevent using event dependant items - if (proto->HolidayId && !IsHolidayActive((HolidayIds)proto->HolidayId)) - return EQUIP_ERR_CANT_DO_RIGHT_NOW; + if (getLevel() < proto->RequiredLevel) + { + return EQUIP_ERR_CANT_EQUIP_LEVEL_I; + } - return EQUIP_ERR_OK; + // If World Event is not active, prevent using event dependant items + if (proto->HolidayId && !IsHolidayActive((HolidayIds)proto->HolidayId)) + { + return EQUIP_ERR_CANT_DO_RIGHT_NOW; } + #ifdef ELUNA InventoryResult eres = sEluna->OnCanUseItem(this, proto->ItemId); if (eres != EQUIP_ERR_OK) + { return eres; + } #endif - return EQUIP_ERR_ITEM_NOT_FOUND; + + return EQUIP_ERR_OK; } InventoryResult Player::CanRollForItemInLFG(ItemTemplate const* proto, WorldObject const* lootedObject) const |