#include "../client.h" void command_removeitem(Client *c, const Seperator *sep) { int arguments = sep->argnum; if (!arguments || !sep->IsNumber(1)) { c->Message(Chat::White, "Usage: #removeitem [Item ID] [Amount]"); return; } Client *target = c; if (c->GetTarget() && c->GetTarget()->IsClient()) { target = c->GetTarget()->CastToClient(); } auto item_id = Strings::ToInt(sep->arg[1]); if (!database.GetItem(item_id)) { c->Message( Chat::White, fmt::format( "Item ID {} could not be found.", item_id ).c_str() ); return; } auto item_link = database.CreateItemLink(item_id); auto amount = sep->IsNumber(2) ? Strings::ToUnsignedInt(sep->arg[2]) : 1; auto item_count = target->CountItem(item_id); if (item_count) { if (item_count >= amount) { target->RemoveItem(item_id, amount); c->Message( Chat::White, fmt::format( "Removed {} {} ({}) from {}.", amount, item_link, item_id, c->GetTargetDescription(target) ).c_str() ); } else { target->RemoveItem(item_id, item_count); c->Message( Chat::White, fmt::format( "Removed {} {} ({}) from {} because {} did not have {} {} ({}).", item_count, item_link, item_id, c->GetTargetDescription(target), c == target ? "you" : "they", amount, item_link, item_id ).c_str() ); } } else { c->Message( Chat::White, fmt::format( "Could not find any {} ({}) to delete from {}.", database.CreateItemLink(item_id), item_id, c->GetTargetDescription(target) ).c_str() ); } }