From c234125fce1393d280e58c3cbe2655481edee16e Mon Sep 17 00:00:00 2001 From: Eva Comaroski Date: Wed, 1 Jun 2016 19:48:01 +0300 Subject: [PATCH] Override database mount level requirements to match configured values. (#132) --- src/game/Object/Player.cpp | 83 +++++++++++++++++++++++++- src/game/WorldHandlers/ItemHandler.cpp | 82 ++++++++++++++++++++++++- 2 files changed, 163 insertions(+), 2 deletions(-) diff --git a/src/game/Object/Player.cpp b/src/game/Object/Player.cpp index a056e211..4884284d 100644 --- a/src/game/Object/Player.cpp +++ b/src/game/Object/Player.cpp @@ -9809,7 +9809,88 @@ InventoryResult Player::CanUseItem(ItemPrototype const* pProto, bool direct_acti if (direct_action && GetHonorHighestRankInfo().rank < (uint8)pProto->RequiredHonorRank) { return EQUIP_ERR_CANT_EQUIP_RANK; } - if (getLevel() < pProto->RequiredLevel) + // override mount level requirements with the settings from the configuration file + int requiredLevel = pProto->RequiredLevel; + switch(pProto->ItemId) { + case 1132: //regular mounts + case 2411: + case 2414: + case 5655: + case 5656: + case 5665: + case 5668: + case 5864: + case 5872: + case 5873: + case 8563: + case 8588: + case 8591: + case 8592: + case 8595: + case 8629: + case 8631: + case 8632: + case 12325: + case 12326: + case 12327: + case 13321: + case 13322: + case 13331: + case 13332: + case 13333: + case 15277: + case 15290: + case 18241: + case 18242: + case 18243: + case 18244: + case 18245: + case 18246: + case 18247: + case 18248: + requiredLevel = AccountTypes(sWorld.getConfig(CONFIG_UINT32_MIN_TRAIN_MOUNT_LEVEL)); + break; + case 12302: // epic mounts + case 12303: + case 12330: + case 12351: + case 12353: + case 12354: + case 13086: + case 13326: + case 13327: + case 13328: + case 13329: + case 13334: + case 13335: + case 18766: + case 18767: + case 18768: + case 18772: + case 18773: + case 18774: + case 18776: + case 18777: + case 18778: + case 18785: + case 18786: + case 18787: + case 18788: + case 18789: + case 18790: + case 18791: + case 18793: + case 18794: + case 18795: + case 18796: + case 18797: + case 18798: + case 18902: + requiredLevel = AccountTypes(sWorld.getConfig(CONFIG_UINT32_MIN_TRAIN_EPIC_MOUNT_LEVEL)); + break; + } + + if (getLevel() < requiredLevel) { return EQUIP_ERR_CANT_EQUIP_LEVEL_I; } #ifdef ENABLE_ELUNA diff --git a/src/game/WorldHandlers/ItemHandler.cpp b/src/game/WorldHandlers/ItemHandler.cpp index 68ad4298..703e845e 100644 --- a/src/game/WorldHandlers/ItemHandler.cpp +++ b/src/game/WorldHandlers/ItemHandler.cpp @@ -302,6 +302,86 @@ void WorldSession::HandleItemQuerySingleOpcode(WorldPacket& recv_data) std::string description = pProto->Description; sObjectMgr.GetItemLocaleStrings(pProto->ItemId, loc_idx, &name, &description); + // override mount level requirements with the settings from the configuration file + int requiredLevel = pProto->RequiredLevel; + switch(pProto->ItemId) { + case 1132: //regular mounts + case 2411: + case 2414: + case 5655: + case 5656: + case 5665: + case 5668: + case 5864: + case 5872: + case 5873: + case 8563: + case 8588: + case 8591: + case 8592: + case 8595: + case 8629: + case 8631: + case 8632: + case 12325: + case 12326: + case 12327: + case 13321: + case 13322: + case 13331: + case 13332: + case 13333: + case 15277: + case 15290: + case 18241: + case 18242: + case 18243: + case 18244: + case 18245: + case 18246: + case 18247: + case 18248: + requiredLevel = AccountTypes(sWorld.getConfig(CONFIG_UINT32_MIN_TRAIN_MOUNT_LEVEL)); + break; + case 12302: // epic mounts + case 12303: + case 12330: + case 12351: + case 12353: + case 12354: + case 13086: + case 13326: + case 13327: + case 13328: + case 13329: + case 13334: + case 13335: + case 18766: + case 18767: + case 18768: + case 18772: + case 18773: + case 18774: + case 18776: + case 18777: + case 18778: + case 18785: + case 18786: + case 18787: + case 18788: + case 18789: + case 18790: + case 18791: + case 18793: + case 18794: + case 18795: + case 18796: + case 18797: + case 18798: + case 18902: + requiredLevel = AccountTypes(sWorld.getConfig(CONFIG_UINT32_MIN_TRAIN_EPIC_MOUNT_LEVEL)); + break; + } // guess size WorldPacket data(SMSG_ITEM_QUERY_SINGLE_RESPONSE, 600); @@ -322,7 +402,7 @@ void WorldSession::HandleItemQuerySingleOpcode(WorldPacket& recv_data) data << pProto->AllowableClass; data << pProto->AllowableRace; data << pProto->ItemLevel; - data << pProto->RequiredLevel; + data << requiredLevel; data << pProto->RequiredSkill; data << pProto->RequiredSkillRank; data << pProto->RequiredSpell;