#include "../client.h" void command_scribespell(Client *c, const Seperator *sep) { auto arguments = sep->argnum; if (!arguments || !sep->IsNumber(1)) { c->Message(Chat::White, "Usage: #scribespell [Spell ID]"); return; } auto t = c; if (c->GetTarget() && c->GetTarget()->IsClient() && c->GetGM()) { t = c->GetTarget()->CastToClient(); } const auto spell_id = std::stoul(sep->arg[1]); if (IsValidSpell(spell_id)) { t->Message( Chat::White, fmt::format( "Scribing {} ({}) to spellbook.", spells[spell_id].name, spell_id ).c_str() ); if (t != c) { c->Message( Chat::White, fmt::format( "Scribing {} ({}) for {}.", spells[spell_id].name, spell_id, t->GetName() ).c_str() ); } LogInfo( "Scribe spell: [{}] ([{}]) request for [{}] from [{}]", spells[spell_id].name, spell_id, t->GetName(), c->GetName() ); if ( spells[spell_id].classes[WARRIOR] != 0 && spells[spell_id].skill != EQ::skills::SkillTigerClaw && spells[spell_id].classes[t->GetPP().class_ - 1] > 0 && !IsDiscipline(spell_id) ) { auto book_slot = t->GetNextAvailableSpellBookSlot(); if (book_slot >= 0 && t->FindSpellBookSlotBySpellID(spell_id) < 0) { t->ScribeSpell(spell_id, book_slot); } else { t->Message( Chat::White, fmt::format( "Unable to scribe {} ({}) to your spellbook.", spells[spell_id].name, spell_id ).c_str() ); if (t != c) { c->Message( Chat::White, fmt::format( "Unable to scribe {} ({}) for {}.", spells[spell_id].name, spell_id, t->GetName() ).c_str() ); } } } else { c->Message(Chat::White, "Your target cannot scribe this spell."); } } else { c->Message( Chat::White, fmt::format( "Spell ID {} is an unknown spell and cannot be scribed.", spell_id ).c_str() ); } }