From 248e6d44dba1ebf036a2a643b9e7f699885253ce Mon Sep 17 00:00:00 2001 From: Kinglykrab <89047260+Kinglykrab@users.noreply.github.com> Date: Tue, 9 Nov 2021 21:23:48 -0500 Subject: [PATCH] [Commands] Cleanup #npccast Command. (#1699) - Cleanup messages and display. --- zone/command.cpp | 96 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 81 insertions(+), 15 deletions(-) diff --git a/zone/command.cpp b/zone/command.cpp index 96f65d363..cd2e69082 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -2662,22 +2662,88 @@ void command_zclip(Client *c, const Seperator *sep) void command_npccast(Client *c, const Seperator *sep) { - if (c->GetTarget() && c->GetTarget()->IsNPC() && !sep->IsNumber(1) && sep->arg[1] != 0 && sep->IsNumber(2)) { - Mob* spelltar = entity_list.GetMob(sep->arg[1]); - if (spelltar) - c->GetTarget()->CastSpell(atoi(sep->arg[2]), spelltar->GetID()); - else - c->Message(Chat::White, "Error: %s not found", sep->arg[1]); + if (c->GetTarget() && c->GetTarget()->IsNPC()) { + NPC* target = c->GetTarget()->CastToNPC(); + if (!sep->IsNumber(1) && sep->arg[1] && sep->IsNumber(2)) { + const char* entity_name = sep->arg[1] ? sep->arg[1] : 0; + auto spell_id = sep->arg[2] ? std::stoul(sep->arg[2]) : 0; + Mob* spell_target = entity_list.GetMob(entity_name); + if (spell_target && IsValidSpell(spell_id) && spell_id < SPDAT_RECORDS) { + c->Message( + Chat::White, + fmt::format( + "{} ({}) casting {} ({}) on {} ({}).", + target->GetCleanName(), + target->GetID(), + GetSpellName(static_cast(spell_id)), + spell_id, + spell_target->GetCleanName(), + spell_target->GetID() + ).c_str() + ); + + target->CastSpell(spell_id, spell_target->GetID()); + } else { + if (!spell_target) { + c->Message( + Chat::White, + fmt::format( + "Entity {} was not found", + entity_name + ).c_str() + ); + } else if (!spell_id || !IsValidSpell(spell_id)) { + c->Message( + Chat::White, + fmt::format( + "Spell ID {} was not found", + spell_id + ).c_str() + ); + } + } + } else if (sep->IsNumber(1) && sep->IsNumber(2) ) { + uint16 entity_id = sep->arg[1] ? std::stoul(sep->arg[1]) : 0; + auto spell_id = sep->arg[2] ? std::stoul(sep->arg[2]) : 0; + Mob* spell_target = entity_list.GetMob(entity_id); + if (spell_target && IsValidSpell(spell_id) && spell_id < SPDAT_RECORDS) { + c->Message( + Chat::White, + fmt::format( + "{} ({}) casting {} ({}) on {} ({}).", + target->GetCleanName(), + target->GetID(), + GetSpellName(static_cast(spell_id)), + spell_id, + spell_target->GetCleanName(), + spell_target->GetID() + ).c_str() + ); + + target->CastSpell(spell_id, spell_target->GetID()); + } else { + if (!spell_target) { + c->Message( + Chat::White, + fmt::format( + "Entity ID {} was not found", + entity_id + ).c_str() + ); + } else if (!spell_id || !IsValidSpell(spell_id)) { + c->Message( + Chat::White, + fmt::format( + "Spell ID {} was not found", + spell_id + ).c_str() + ); + } + } + } + } else { + c->Message(Chat::White, "You must target an NPC to use this command."); } - else if (c->GetTarget() && c->GetTarget()->IsNPC() && sep->IsNumber(1) && sep->IsNumber(2) ) { - Mob* spelltar = entity_list.GetMob(atoi(sep->arg[1])); - if (spelltar) - c->GetTarget()->CastSpell(atoi(sep->arg[2]), spelltar->GetID()); - else - c->Message(Chat::White, "Error: target ID %i not found", atoi(sep->arg[1])); - } - else - c->Message(Chat::White, "Usage: (needs NPC targeted) #npccast targetname/entityid spellid"); } void command_zstats(Client *c, const Seperator *sep)