aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael <martin.dev.446@gmail.com>2019-12-28 16:58:18 -0500
committerShauren <shauren.trinity@gmail.com>2021-12-19 15:46:20 +0100
commit72e61625bca5a8420fc76666db3481673b180a69 (patch)
treeb38f9f028c45104e6fc1a270ebf3d70574b3c305 /src
parentbfc8889d544925182e2ddc4617ac5301c15745ae (diff)
additional output for additem command (#24006)
* additional output for additem command when removing items with additem: if the user provides an amount too large of a negative amount, the command will now output the amount of items that could not be destroyed. * renamed sql file to hopefully avoid conflicts * added clarification to failure string * changed unneeded else if condition to else * code style; braces * Update and rename 9999_99_99_99_world.sql to 2019_12_28_01_world.sql (cherry picked from commit 6b19f4a0ab1f77ea969a080a6eea0379baf9f8df)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp36
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Miscellaneous/Language.h2
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp23
4 files changed, 41 insertions, 22 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index a1cb2059172..db6cfdb97e8 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -12795,7 +12795,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update)
}
}
-void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool unequip_check)
+uint32 Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool unequip_check)
{
TC_LOG_DEBUG("entities.player.items", "Player::DestroyItemCount: Player '%s' (%s), Item: %u, Count: %u",
GetName().c_str(), GetGUID().ToString().c_str(), itemEntry, count);
@@ -12816,7 +12816,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
DestroyItem(INVENTORY_SLOT_BAG_0, i, update);
if (remcount >= count)
- return;
+ return remcount;
}
else
{
@@ -12825,7 +12825,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
if (IsInWorld() && update)
item->SendUpdateToPlayer(this);
item->SetState(ITEM_CHANGED, this);
- return;
+ return remcount;
}
}
}
@@ -12849,7 +12849,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
DestroyItem(i, j, update);
if (remcount >= count)
- return;
+ return remcount;
}
else
{
@@ -12858,7 +12858,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
if (IsInWorld() && update)
item->SendUpdateToPlayer(this);
item->SetState(ITEM_CHANGED, this);
- return;
+ return remcount;
}
}
}
@@ -12881,7 +12881,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
DestroyItem(INVENTORY_SLOT_BAG_0, i, update);
if (remcount >= count)
- return;
+ return remcount;
}
}
else
@@ -12891,7 +12891,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
if (IsInWorld() && update)
item->SendUpdateToPlayer(this);
item->SetState(ITEM_CHANGED, this);
- return;
+ return remcount;
}
}
}
@@ -12909,7 +12909,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
remcount += item->GetCount();
DestroyItem(INVENTORY_SLOT_BAG_0, i, update);
if (remcount >= count)
- return;
+ return remcount;
}
else
{
@@ -12918,7 +12918,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
if (IsInWorld() && update)
item->SendUpdateToPlayer(this);
item->SetState(ITEM_CHANGED, this);
- return;
+ return remcount;
}
}
}
@@ -12942,7 +12942,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
DestroyItem(i, j, update);
if (remcount >= count)
- return;
+ return remcount;
}
else
{
@@ -12951,7 +12951,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
if (IsInWorld() && update)
item->SendUpdateToPlayer(this);
item->SetState(ITEM_CHANGED, this);
- return;
+ return remcount;
}
}
}
@@ -12973,7 +12973,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
remcount += item->GetCount();
DestroyItem(INVENTORY_SLOT_BAG_0, i, update);
if (remcount >= count)
- return;
+ return remcount;
}
}
else
@@ -12983,7 +12983,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
if (IsInWorld() && update)
item->SendUpdateToPlayer(this);
item->SetState(ITEM_CHANGED, this);
- return;
+ return remcount;
}
}
}
@@ -13002,7 +13002,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
DestroyItem(INVENTORY_SLOT_BAG_0, i, update);
if (remcount >= count)
- return;
+ return remcount;
}
else
{
@@ -13011,7 +13011,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
if (IsInWorld() && update)
item->SendUpdateToPlayer(this);
item->SetState(ITEM_CHANGED, this);
- return;
+ return remcount;
}
}
}
@@ -13030,7 +13030,7 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
DestroyItem(INVENTORY_SLOT_BAG_0, i, update);
if (remcount >= count)
- return;
+ return remcount;
}
else
{
@@ -13039,12 +13039,12 @@ void Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, bool
if (IsInWorld() && update)
item->SendUpdateToPlayer(this);
item->SetState(ITEM_CHANGED, this);
- return;
+ return remcount;
}
}
}
}
-
+ return remcount;
}
void Player::DestroyZoneLimitedItem(bool update, uint32 new_zone)
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 85578cd1ff6..ce2e681a4c8 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1431,7 +1431,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
// in trade, guild bank, mail....
void RemoveItemDependentAurasAndCasts(Item* pItem);
void DestroyItem(uint8 bag, uint8 slot, bool update);
- void DestroyItemCount(uint32 item, uint32 count, bool update, bool unequip_check = false);
+ uint32 DestroyItemCount(uint32 item, uint32 count, bool update, bool unequip_check = false);
void DestroyItemCount(Item* item, uint32& count, bool update);
void DestroyConjuredItems(bool update);
void DestroyZoneLimitedItem(bool update, uint32 new_zone);
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index a1f167ba02d..fcd094ddd97 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -685,7 +685,7 @@ enum TrinityStrings
LANG_GMLIST_HEADER = 598,
LANG_GMLIST_EMPTY = 599,
- LANG_REMOVEITEM_FAILURE = 600, // 3.3.5 RESERVED
+ LANG_REMOVEITEM_FAILURE = 600,
// End Level 3 list, continued at 1100
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 7b74a54774f..af77c7466d2 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -1333,8 +1333,27 @@ public:
// Subtract
if (count < 0)
{
- playerTarget->DestroyItemCount(itemId, -count, true, false);
- handler->PSendSysMessage(LANG_REMOVEITEM, itemId, -count, handler->GetNameLink(playerTarget).c_str());
+ uint32 destroyedItemCount = playerTarget->DestroyItemCount(itemId, -count, true, false);
+
+ if (destroyedItemCount > 0)
+ {
+ // output the amount of items successfully destroyed
+ handler->PSendSysMessage(LANG_REMOVEITEM, itemId, destroyedItemCount, handler->GetNameLink(playerTarget).c_str());
+
+ // check to see if we were unable to destroy all of the amount requested.
+ uint32 unableToDestroyItemCount = -count - destroyedItemCount;
+ if (unableToDestroyItemCount > 0)
+ {
+ // output message for the amount of items we couldn't destroy
+ handler->PSendSysMessage(LANG_REMOVEITEM_FAILURE, itemId, unableToDestroyItemCount, handler->GetNameLink(playerTarget).c_str());
+ }
+ }
+ else
+ {
+ // failed to destroy items of the amount requested
+ handler->PSendSysMessage(LANG_REMOVEITEM_FAILURE, itemId, -count, handler->GetNameLink(playerTarget).c_str());
+ }
+
return true;
}