refactor(Scripts/Commands): convert cs_learn & cs_player to new system (#9050)

This commit is contained in:
IntelligentQuantum
2021-11-12 15:33:38 +03:30
committed by GitHub
parent b1f038336d
commit 4a69d1fc07
4 changed files with 79 additions and 188 deletions

View File

@@ -16,13 +16,8 @@
*/
#include "ScriptMgr.h"
#include "Language.h"
#include "PlayerCommand.h"
#if AC_COMPILER == AC_COMPILER_GNU
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
using namespace Acore::ChatCommands;
class player_commandscript : public CommandScript
@@ -34,84 +29,37 @@ public:
{
static ChatCommandTable playerCommandTable =
{
{ "learn", SEC_GAMEMASTER, true, &HandlePlayerLearnCommand, "" },
{ "unlearn", SEC_GAMEMASTER, true, &HandlePlayerUnLearnCommand, "" }
{ "learn", HandlePlayerLearnCommand, SEC_GAMEMASTER, Console::Yes },
{ "unlearn", HandlePlayerUnLearnCommand, SEC_GAMEMASTER, Console::Yes }
};
static ChatCommandTable commandTable =
{
{ "player", SEC_GAMEMASTER, true, nullptr, "", playerCommandTable }
{ "player", playerCommandTable }
};
return commandTable;
}
static bool HandlePlayerLearnCommand(ChatHandler* handler, char const* args)
static bool HandlePlayerLearnCommand(ChatHandler* handler, Optional<PlayerIdentifier> player, SpellInfo const* spell, Optional<EXACT_SEQUENCE("all")> allRanks)
{
if (!*args)
if (!player)
player = PlayerIdentifier::FromTargetOrSelf(handler);
if (!player || !player->IsConnected())
return false;
char* playerName = strtok((char*)args, " ");
char* spellId = strtok(nullptr, " ");
char const* all = strtok(nullptr, " ");
Player* targetPlayer = FindPlayer(handler, playerName);
if (!spellId || !targetPlayer)
{
return false;
}
uint32 spell = handler->extractSpellIdFromLink(spellId);
if (!spell)
{
return false;
}
return Acore::PlayerCommand::HandleLearnSpellCommand(handler, targetPlayer, spell, all);
Player* targetPlayer = player->GetConnectedPlayer();
return Acore::PlayerCommand::HandleLearnSpellCommand(handler, targetPlayer, spell, allRanks);
}
static bool HandlePlayerUnLearnCommand(ChatHandler* handler, char const* args)
static bool HandlePlayerUnLearnCommand(ChatHandler* handler, Optional<PlayerIdentifier> player, SpellInfo const* spell, Optional<EXACT_SEQUENCE("all")> allRanks)
{
if (!*args)
if (!player)
player = PlayerIdentifier::FromTargetOrSelf(handler);
if (!player || !player->IsConnected())
return false;
char* playerName = strtok((char*)args, " ");
char* spellId = strtok(nullptr, " ");
char const* all = strtok(nullptr, " ");
Player* targetPlayer = FindPlayer(handler, playerName);
if (!spellId || !targetPlayer)
{
return false;
}
uint32 spell = handler->extractSpellIdFromLink(spellId);
if (!spell)
{
return false;
}
return Acore::PlayerCommand::HandleUnlearnSpellCommand(handler, targetPlayer, spell, all);
}
private:
static Player* FindPlayer(ChatHandler* handler, char* playerName)
{
if (!playerName)
return nullptr;
Player* targetPlayer;
if (!handler->extractPlayerTarget(playerName, &targetPlayer))
return nullptr;
if (!targetPlayer)
{
handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
handler->SetSentErrorMessage(true);
return nullptr;
}
return targetPlayer;
Player* targetPlayer = player->GetConnectedPlayer();
return Acore::PlayerCommand::HandleUnlearnSpellCommand(handler, targetPlayer, spell, allRanks);
}
};