From 69d5fee471283083f35140e3bd16e7d9918bd574 Mon Sep 17 00:00:00 2001 From: Kinglykrab <89047260+Kinglykrab@users.noreply.github.com> Date: Sun, 21 Nov 2021 09:58:23 -0500 Subject: [PATCH] [Commands] Cleanup #givemoney Command. (#1781) * [Commands] Cleanup #givemoney Command. - Cleanup message and logic. * Update givemoney.cpp --- zone/command.cpp | 2 +- zone/gm_commands/givemoney.cpp | 133 ++++++++++++++++++++++++++------- 2 files changed, 107 insertions(+), 28 deletions(-) diff --git a/zone/command.cpp b/zone/command.cpp index 56643a28d..f63928a8f 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -193,7 +193,7 @@ int command_init(void) command_add("getvariable", "[varname] - Get the value of a variable from the database", AccountStatus::GMMgmt, command_getvariable) || command_add("ginfo", "- get group info on target.", AccountStatus::ApprenticeGuide, command_ginfo) || command_add("giveitem", "[itemid] [charges] - Summon an item onto your target's cursor. Charges are optional.", AccountStatus::GMMgmt, command_giveitem) || - command_add("givemoney", "[pp] [gp] [sp] [cp] - Gives specified amount of money to the target player.", AccountStatus::GMMgmt, command_givemoney) || + command_add("givemoney", "[Platinum] [Gold] [Silver] [Copper] - Gives specified amount of money to you or your player target", AccountStatus::GMMgmt, command_givemoney) || command_add("globalview", "Lists all qglobals in cache if you were to do a quest with this target.", AccountStatus::QuestTroupe, command_globalview) || command_add("gm", "- Turn player target's or your GM flag on or off", AccountStatus::QuestTroupe, command_gm) || command_add("gmspeed", "[on/off] - Turn GM speed hack on/off for you or your player target", AccountStatus::GMAdmin, command_gmspeed) || diff --git a/zone/gm_commands/givemoney.cpp b/zone/gm_commands/givemoney.cpp index e5b2c3167..ab71df4ce 100755 --- a/zone/gm_commands/givemoney.cpp +++ b/zone/gm_commands/givemoney.cpp @@ -2,32 +2,111 @@ void command_givemoney(Client *c, const Seperator *sep) { - if (!sep->IsNumber(1)) { //as long as the first one is a number, we'll just let atoi convert the rest to 0 or a number - c->Message(Chat::Red, "Usage: #Usage: #givemoney [pp] [gp] [sp] [cp]"); + int arguments = sep->argnum; + if (!arguments || !sep->IsNumber(1)) { //as long as the first one is a number, we'll just let atoi convert the rest to 0 or a number + c->Message(Chat::Red, "Usage: #Usage: #givemoney [Platinum] [Gold] [Silver] [Copper]"); + return; } - else if (c->GetTarget() == nullptr) { - c->Message(Chat::Red, "You must target a player to give money to."); - } - else if (!c->GetTarget()->IsClient()) { - c->Message(Chat::Red, "You can only give money to players with this command."); - } - else { - //TODO: update this to the client, otherwise the client doesn't show any weight change until you zone, move an item, etc - c->GetTarget()->CastToClient()->AddMoneyToPP( - atoi(sep->arg[4]), - atoi(sep->arg[3]), - atoi(sep->arg[2]), - atoi(sep->arg[1]), - true - ); - c->Message( - Chat::White, - "Added %i Platinum, %i Gold, %i Silver, and %i Copper to %s's inventory.", - atoi(sep->arg[1]), - atoi(sep->arg[2]), - atoi(sep->arg[3]), - atoi(sep->arg[4]), - c->GetTarget()->GetName()); - } -} + + Client *target = c; + if (c->GetTarget() && c->GetTarget()->IsClient()) { + target = c->GetTarget()->CastToClient(); + } + + uint32 platinum = std::stoi(sep->arg[1]); + uint32 gold = std::stoi(sep->arg[2]); + uint32 silver = std::stoi(sep->arg[3]); + uint32 copper = std::stoi(sep->arg[4]); + if (!platinum && !gold && !silver && !copper) { + c->Message(Chat::Red, "Usage: #Usage: #givemoney [Platinum] [Gold] [Silver] [Copper]"); + return; + } + + target->AddMoneyToPP( + copper, + silver, + gold, + platinum, + true + ); + std::string money_string; + if (copper && silver && gold && platinum) { // CSGP + money_string = fmt::format( + "{} Platinum, {} Gold, {} Silver, and {} Copper", + platinum, + gold, + silver, + copper + ); + } else if (copper && silver && gold && !platinum) { // CSG + money_string = fmt::format( + "{} Gold, {} Silver, and {} Copper", + gold, + silver, + copper + ); + } else if (copper && silver && !gold && !platinum) { // CS + money_string = fmt::format( + "{} Silver and {} Copper", + silver, + copper + ); + } else if (copper && !silver && !gold && !platinum) { // C + money_string = fmt::format( + "{} Copper", + copper + ); + } else if (!copper && silver && gold && platinum) { // SGP + money_string = fmt::format( + "{} Platinum, {} Gold, and {} Silver", + platinum, + gold, + silver + ); + } else if (!copper && silver && gold && !platinum) { // SG + money_string = fmt::format( + "{} Gold and {} Silver", + gold, + silver + ); + } else if (!copper && silver && !gold && !platinum) { // S + money_string = fmt::format( + "{} Silver", + silver + ); + } else if (copper && !silver && gold && platinum) { // CGP + money_string = fmt::format( + "{} Platinum, {} Gold, and {} Copper", + platinum, + gold, + copper + ); + } else if (copper && !silver && gold && !platinum) { // CG + money_string = fmt::format( + "{} Gold and {} Copper", + gold, + copper + ); + } else if (!copper && !silver && gold && platinum) { // GP + money_string = fmt::format( + "{} Platinum and {} Gold", + platinum, + gold + ); + } else if (!copper && !silver && gold && !platinum) { // G + money_string = fmt::format( + "{} Gold", + gold + ); + } + + c->Message( + Chat::White, + fmt::format( + "Added {} to {}.", + money_string, + c == target ? "yourself" : target->GetCleanName() + ).c_str() + ); +}