fix(Core/Command): additem checks (#2898)

* Add check if the player has 0 items to be destroyed

* Add check if the player has less than items trying to be destroyed
This commit is contained in:
Kitzunu
2020-05-18 21:13:29 +02:00
committed by GitHub
parent 9097cf26ab
commit 7f3945e13e
3 changed files with 29 additions and 3 deletions

View File

@@ -0,0 +1,8 @@
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1587062218041221300');
DELETE FROM `acore_string` WHERE `entry` IN (30081,30082);
INSERT INTO `acore_string` (`entry`, `content_default`) VALUES
(30081, "%s does not have itemID = %i, thus cannot be removed."),
(30082, "%s does not have that many of itemID = %i, thus none were removed.");
UPDATE `command` SET `help` = "Syntax: .additem #itemID/[#itemName]/#itemLink #itemCount\r\nAdds the specified item to you or the selected character.\nIf #itemCount is negative, you will remove #itemID." WHERE `name` = "additem";

View File

@@ -1314,6 +1314,9 @@ enum AcoreStrings
LANG_INSTANT_FLIGHT_ON = 30078,
LANG_INSTANT_FLIGHT_OFF = 30079,
LANG_DEBUG_OPCODE_FILE_MISSING = 30080
LANG_DEBUG_OPCODE_FILE_MISSING = 30080,
LANG_REMOVEITEM_FAILURE = 30081,
LANG_REMOVEITEM_ERROR = 30082
};
#endif

View File

@@ -1466,8 +1466,23 @@ public:
// Subtract
if (count < 0)
{
playerTarget->DestroyItemCount(itemId, -count, true, false);
handler->PSendSysMessage(LANG_REMOVEITEM, itemId, -count, handler->GetNameLink(playerTarget).c_str());
if (!playerTarget->HasItemCount(itemId, 0))
{
// output that player don't have any items to destroy
handler->PSendSysMessage(LANG_REMOVEITEM_FAILURE, handler->GetNameLink(playerTarget).c_str(), itemId);
}
else if (!playerTarget->HasItemCount(itemId, -count))
{
// output that player don't have as many items that you want to destroy
handler->PSendSysMessage(LANG_REMOVEITEM_ERROR, handler->GetNameLink(playerTarget).c_str(), itemId);
}
else
{
// output successful amount of destroyed items
playerTarget->DestroyItemCount(itemId, -count, true, false);
handler->PSendSysMessage(LANG_REMOVEITEM, itemId, -count, handler->GetNameLink(playerTarget).c_str());
}
return true;
}