diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 4 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 1 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp | 51 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 290 | 
5 files changed, 149 insertions, 205 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index ed97075d7e1..a8ceac5faf8 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -5671,7 +5671,7 @@ void Player::InitializeSkillFields()  // This functions sets a skill line value (and adds if doesn't exist yet)  // To "remove" a skill line, set it's values to zero -void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) +void Player::SetSkill(uint32 id, uint16 step, uint16 newVal, uint16 maxVal)  {      if (!id)          return; @@ -5746,9 +5746,9 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal)                      SetSkill(childSkillLine->ID, 0, 0, 0);              // Clear profession lines -            if (m_activePlayerData->ProfessionSkillLine[0] == id) +            if (m_activePlayerData->ProfessionSkillLine[0] == int32(id))                  SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ProfessionSkillLine, 0), 0); -            else if (m_activePlayerData->ProfessionSkillLine[1] == id) +            else if (m_activePlayerData->ProfessionSkillLine[1] == int32(id))                  SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ProfessionSkillLine, 1), 0);          }      } @@ -5860,7 +5860,7 @@ bool Player::HasSkill(uint32 skill) const      return (itr != mSkillStatus.end() && itr->second.uState != SKILL_DELETED && m_activePlayerData->Skill->SkillRank[itr->second.pos]);  } -uint16 Player::GetSkillStep(uint16 skill) const +uint16 Player::GetSkillStep(uint32 skill) const  {      if (!skill)          return 0; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 666db7ca213..8efa94ff758 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2125,7 +2125,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>          JoinedChannelsList const& GetJoinedChannels() const { return m_channels; }          void InitializeSkillFields(); -        void SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal); +        void SetSkill(uint32 id, uint16 step, uint16 newVal, uint16 maxVal);          uint16 GetMaxSkillValue(uint32 skill) const;        // max + perm. bonus + temp bonus          uint16 GetPureMaxSkillValue(uint32 skill) const;    // max          uint16 GetSkillValue(uint32 skill) const;           // skill value + perm. bonus + temp bonus @@ -2133,7 +2133,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>          uint16 GetPureSkillValue(uint32 skill) const;       // skill value          int16 GetSkillPermBonusValue(uint32 skill) const;          int16 GetSkillTempBonusValue(uint32 skill) const; -        uint16 GetSkillStep(uint16 skill) const;            // 0...6 +        uint16 GetSkillStep(uint32 skill) const;            // 0...6          bool HasSkill(uint32 skill) const;          void LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue);          int32 FindProfessionSlotFor(uint32 skillId) const; diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index f4115fcfb18..07a36c73aaf 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -5630,6 +5630,7 @@ enum CorpseDynFlags  #define PLAYER_CORPSE_LOOT_ENTRY 1 +// EnumUtils: DESCRIBE THIS  enum WeatherType  {      WEATHER_TYPE_FINE       = 0, diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp index f12c19fcd63..09cbd37e5dc 100644 --- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp +++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp @@ -3641,6 +3641,57 @@ TC_API_EXPORT size_t EnumUtils<Emote>::ToIndex(Emote value)      }  } +/*******************************************************************\ +|* data for enum 'WeatherType' in 'SharedDefines.h' auto-generated *| +\*******************************************************************/ +template <> +TC_API_EXPORT EnumText EnumUtils<WeatherType>::ToString(WeatherType value) +{ +    switch (value) +    { +        case WEATHER_TYPE_FINE: return { "WEATHER_TYPE_FINE", "WEATHER_TYPE_FINE", "" }; +        case WEATHER_TYPE_RAIN: return { "WEATHER_TYPE_RAIN", "WEATHER_TYPE_RAIN", "" }; +        case WEATHER_TYPE_SNOW: return { "WEATHER_TYPE_SNOW", "WEATHER_TYPE_SNOW", "" }; +        case WEATHER_TYPE_STORM: return { "WEATHER_TYPE_STORM", "WEATHER_TYPE_STORM", "" }; +        case WEATHER_TYPE_THUNDERS: return { "WEATHER_TYPE_THUNDERS", "WEATHER_TYPE_THUNDERS", "" }; +        case WEATHER_TYPE_BLACKRAIN: return { "WEATHER_TYPE_BLACKRAIN", "WEATHER_TYPE_BLACKRAIN", "" }; +        default: throw std::out_of_range("value"); +    } +} + +template <> +TC_API_EXPORT size_t EnumUtils<WeatherType>::Count() { return 6; } + +template <> +TC_API_EXPORT WeatherType EnumUtils<WeatherType>::FromIndex(size_t index) +{ +    switch (index) +    { +        case 0: return WEATHER_TYPE_FINE; +        case 1: return WEATHER_TYPE_RAIN; +        case 2: return WEATHER_TYPE_SNOW; +        case 3: return WEATHER_TYPE_STORM; +        case 4: return WEATHER_TYPE_THUNDERS; +        case 5: return WEATHER_TYPE_BLACKRAIN; +        default: throw std::out_of_range("index"); +    } +} + +template <> +TC_API_EXPORT size_t EnumUtils<WeatherType>::ToIndex(WeatherType value) +{ +    switch (value) +    { +        case WEATHER_TYPE_FINE: return 0; +        case WEATHER_TYPE_RAIN: return 1; +        case WEATHER_TYPE_SNOW: return 2; +        case WEATHER_TYPE_STORM: return 3; +        case WEATHER_TYPE_THUNDERS: return 4; +        case WEATHER_TYPE_BLACKRAIN: return 5; +        default: throw std::out_of_range("value"); +    } +} +  /************************************************************************\  |* data for enum 'SpellFamilyNames' in 'SharedDefines.h' auto-generated *|  \************************************************************************/ diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 293ffec3aa6..b6dceef1101 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -60,6 +60,8 @@  #undef GetClassName  #endif +using namespace Trinity::ChatCommands; +  class misc_commandscript : public CommandScript  {  public: @@ -95,7 +97,7 @@ public:              { "listfreeze",       rbac::RBAC_PERM_COMMAND_LISTFREEZE,       false, &HandleListFreezeCommand,       "" },              { "movegens",         rbac::RBAC_PERM_COMMAND_MOVEGENS,         false, &HandleMovegensCommand,         "" },              { "mute",             rbac::RBAC_PERM_COMMAND_MUTE,              true, &HandleMuteCommand,             "" }, -            { "mutehistory",      rbac::RBAC_PERM_COMMAND_MUTEHISTORY,       true, &HandleMuteInfoCommand,         "" }, +            { "mutehistory",      rbac::RBAC_PERM_COMMAND_MUTEHISTORY,       true, &HandleMuteHistoryCommand,      "" },              { "neargrave",        rbac::RBAC_PERM_COMMAND_NEARGRAVE,        false, &HandleNearGraveCommand,        "" },              { "pinfo",            rbac::RBAC_PERM_COMMAND_PINFO,             true, &HandlePInfoCommand,            "" },              { "playall",          rbac::RBAC_PERM_COMMAND_PLAYALL,          false, &HandlePlayAllCommand,          "" }, @@ -123,7 +125,7 @@ public:          return commandTable;      } -    static bool HandlePvPstatsCommand(ChatHandler * handler, char const* /*args*/) +    static bool HandlePvPstatsCommand(ChatHandler* handler)      {          if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE))          { @@ -152,32 +154,28 @@ public:          return true;      } -    static bool HandleDevCommand(ChatHandler* handler, Optional<std::string> enable) +    static bool HandleDevCommand(ChatHandler* handler, Optional<bool> enableArg)      {          Player* player = handler->GetSession()->GetPlayer(); -        if (!enable) +        if (!enableArg)          {              handler->GetSession()->SendNotification(player->IsDeveloper() ? LANG_DEV_ON : LANG_DEV_OFF);              return true;          } -        if (*enable == "on") +        if (*enableArg)          {              player->SetDeveloper(true);              handler->GetSession()->SendNotification(LANG_DEV_ON); -            return true;          } -        else if (*enable == "off") +        else          {              player->SetDeveloper(false);              handler->GetSession()->SendNotification(LANG_DEV_OFF); -            return true;          } -        handler->SendSysMessage(LANG_USE_BOL); -        handler->SetSentErrorMessage(true); -        return false; +        return true;      }      static bool HandleGPSCommand(ChatHandler* handler, char const* args) @@ -303,7 +301,7 @@ public:          return true;      } -    static bool HandleAuraCommand(ChatHandler* handler, char const* args) +    static bool HandleAuraCommand(ChatHandler* handler, SpellInfo const* spell)      {          Unit* target = handler->getSelectedUnit();          if (!target) @@ -313,22 +311,19 @@ public:              return false;          } -        // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form -        uint32 spellId = handler->extractSpellIdFromLink((char*)args); +        if(!spell) +            return false; -        if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId, target->GetMap()->GetDifficultyID())) -        { -            ObjectGuid castId = ObjectGuid::Create<HighGuid::Cast>(SPELL_CAST_SOURCE_NORMAL, target->GetMapId(), spellId, target->GetMap()->GenerateLowGuid<HighGuid::Cast>()); -            AuraCreateInfo createInfo(castId, spellInfo, target->GetMap()->GetDifficultyID(), MAX_EFFECT_MASK, target); -            createInfo.SetCaster(target); +        ObjectGuid castId = ObjectGuid::Create<HighGuid::Cast>(SPELL_CAST_SOURCE_NORMAL, target->GetMapId(), spell->Id, target->GetMap()->GenerateLowGuid<HighGuid::Cast>()); +        AuraCreateInfo createInfo(castId, spell, target->GetMap()->GetDifficultyID(), MAX_EFFECT_MASK, target); +        createInfo.SetCaster(target); -            Aura::TryRefreshStackOrCreate(createInfo); -        } +        Aura::TryRefreshStackOrCreate(createInfo);          return true;      } -    static bool HandleUnAuraCommand(ChatHandler* handler, char const* args) +    static bool HandleUnAuraCommand(ChatHandler* handler, Variant<SpellInfo const*, ExactSequence<'a', 'l', 'l'>> spellArg)      {          Unit* target = handler->getSelectedUnit();          if (!target) @@ -338,22 +333,21 @@ public:              return false;          } -        std::string argstr = args; -        if (argstr == "all") +        if (spellArg.holds_alternative<ExactSequence<'a', 'l', 'l'>>())          {              target->RemoveAllAuras();              return true;          } -        // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form -        uint32 spellId = handler->extractSpellIdFromLink((char*)args); -        if (!spellId) -            return false; - -        target->RemoveAurasDueToSpell(spellId); +        if (SpellInfo const* spellInfo = spellArg.get<SpellInfo const*>()) +        { +            target->RemoveAurasDueToSpell(spellInfo->Id); +            return true; +        } -        return true; +        return false;      } +      // Teleport to Player      static bool HandleAppearCommand(ChatHandler* handler, char const* args)      { @@ -492,6 +486,7 @@ public:          return true;      } +      // Summon Player      static bool HandleSummonCommand(ChatHandler* handler, char const* args)      { @@ -611,13 +606,13 @@ public:          return true;      } -    static bool HandleCommandsCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleCommandsCommand(ChatHandler* handler)      { -        handler->ShowHelpForCommand(handler->getCommandTable(), ""); +        handler->ShowHelpForCommand(ChatHandler::getCommandTable(), "");          return true;      } -    static bool HandleDieCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleDieCommand(ChatHandler* handler)      {          Unit* target = handler->getSelectedUnit(); @@ -665,7 +660,7 @@ public:          return true;      } -    static bool HandleDismountCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleDismountCommand(ChatHandler* handler)      {          Player* player = handler->getSelectedPlayerOrSelf(); @@ -689,7 +684,7 @@ public:          return true;      } -    static bool HandleGUIDCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleGUIDCommand(ChatHandler* handler)      {          ObjectGuid guid = handler->GetSession()->GetPlayer()->GetTarget(); @@ -704,39 +699,25 @@ public:          return true;      } -    static bool HandleHelpCommand(ChatHandler* handler, char const* args) +    static bool HandleHelpCommand(ChatHandler* handler, Optional<std::string> cmdArg)      { -        char const* cmd = strtok((char*)args, " "); -        if (!cmd) +        if (!cmdArg)          { -            handler->ShowHelpForCommand(handler->getCommandTable(), "help"); -            handler->ShowHelpForCommand(handler->getCommandTable(), ""); +            handler->ShowHelpForCommand(ChatHandler::getCommandTable(), "help"); +            handler->ShowHelpForCommand(ChatHandler::getCommandTable(), "");          }          else          { -            if (!handler->ShowHelpForCommand(handler->getCommandTable(), cmd)) +            if (!handler->ShowHelpForCommand(ChatHandler::getCommandTable(), cmdArg->c_str()))                  handler->SendSysMessage(LANG_NO_HELP_CMD);          }          return true;      } +      // move item to other slot -    static bool HandleItemMoveCommand(ChatHandler* handler, char const* args) +    static bool HandleItemMoveCommand(ChatHandler* handler, uint8 srcSlot, uint8 dstSlot)      { -        if (!*args) -            return false; - -        char const* param1 = strtok((char*)args, " "); -        if (!param1) -            return false; - -        char const* param2 = strtok(nullptr, " "); -        if (!param2) -            return false; - -        uint8 srcSlot = uint8(atoi(param1)); -        uint8 dstSlot = uint8(atoi(param2)); -          if (srcSlot == dstSlot)              return true; @@ -754,7 +735,7 @@ public:          return true;      } -    static bool HandleCooldownCommand(ChatHandler* handler, char const* args) +    static bool HandleCooldownCommand(ChatHandler* handler, Optional<SpellInfo const*> spellArg)      {          Unit* target = handler->getSelectedUnit();          if (!target) @@ -773,7 +754,7 @@ public:          std::string nameLink = handler->GetNameLink(owner); -        if (!*args) +        if (!spellArg)          {              target->GetSpellHistory()->ResetAllCooldowns();              target->GetSpellHistory()->ResetAllCharges(); @@ -781,22 +762,16 @@ public:          }          else          { -            // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form -            uint32 spellIid = handler->extractSpellIdFromLink((char*)args); -            if (!spellIid) -                return false; - -            SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellIid, target->GetMap()->GetDifficultyID()); -            if (!spellInfo) +            if (!*spellArg)              {                  handler->PSendSysMessage(LANG_UNKNOWN_SPELL, owner == handler->GetSession()->GetPlayer() ? handler->GetTrinityString(LANG_YOU) : nameLink.c_str());                  handler->SetSentErrorMessage(true);                  return false;              } -            target->GetSpellHistory()->ResetCooldown(spellIid, true); -            target->GetSpellHistory()->ResetCharges(spellInfo->ChargeCategoryId); -            handler->PSendSysMessage(LANG_REMOVE_COOLDOWN, spellIid, owner == handler->GetSession()->GetPlayer() ? handler->GetTrinityString(LANG_YOU) : nameLink.c_str()); +            target->GetSpellHistory()->ResetCooldown((*spellArg)->Id, true); +            target->GetSpellHistory()->ResetCharges((*spellArg)->ChargeCategoryId); +            handler->PSendSysMessage(LANG_REMOVE_COOLDOWN, (*spellArg)->Id, owner == handler->GetSession()->GetPlayer() ? handler->GetTrinityString(LANG_YOU) : nameLink.c_str());          }          return true;      } @@ -862,6 +837,7 @@ public:          handler->PSendSysMessage(LANG_DISTANCE, handler->GetSession()->GetPlayer()->GetDistance(object), handler->GetSession()->GetPlayer()->GetDistance2d(object), handler->GetSession()->GetPlayer()->GetExactDist(object), handler->GetSession()->GetPlayer()->GetExactDist2d(object));          return true;      } +      // Teleport player to last position      static bool HandleRecallCommand(ChatHandler* handler, char const* args)      { @@ -886,7 +862,7 @@ public:          return true;      } -    static bool HandleSaveCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleSaveCommand(ChatHandler* handler)      {          Player* player = handler->GetSession()->GetPlayer(); @@ -910,7 +886,7 @@ public:      }      // Save all players in the world -    static bool HandleSaveAllCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleSaveAllCommand(ChatHandler* handler)      {          ObjectAccessor::SaveAllPlayers();          handler->SendSysMessage(LANG_PLAYERS_SAVED); @@ -1033,26 +1009,15 @@ public:      } -    static bool HandleLinkGraveCommand(ChatHandler* handler, char const* args) +    static bool HandleLinkGraveCommand(ChatHandler* handler, uint32 graveyardId, Optional<std::string> teamArg)      { -        if (!*args) -            return false; - -        char* px = strtok((char*)args, " "); -        if (!px) -            return false; - -        uint32 graveyardId = atoul(px); -          uint32 team; -        char* px2 = strtok(nullptr, " "); - -        if (!px2) +        if (!teamArg)              team = 0; -        else if (strncmp(px2, "horde", 6) == 0) +        else if (StringEqualI(*teamArg, "horde"))              team = HORDE; -        else if (strncmp(px2, "alliance", 9) == 0) +        else if (StringEqualI(*teamArg, "alliance"))              team = ALLIANCE;          else              return false; @@ -1086,17 +1051,15 @@ public:          return true;      } -    static bool HandleNearGraveCommand(ChatHandler* handler, char const* args) +    static bool HandleNearGraveCommand(ChatHandler* handler, Optional<std::string> teamArg)      {          uint32 team; -        size_t argStr = strlen(args); - -        if (!*args) +        if (!teamArg)              team = 0; -        else if (strncmp((char*)args, "horde", argStr) == 0) +        else if (StringEqualI(*teamArg, "horde"))              team = HORDE; -        else if (strncmp((char*)args, "alliance", argStr) == 0) +        else if (StringEqualI(*teamArg, "alliance"))              team = ALLIANCE;          else              return false; @@ -1148,11 +1111,8 @@ public:          return true;      } -    static bool HandleShowAreaCommand(ChatHandler* handler, char const* args) +    static bool HandleShowAreaCommand(ChatHandler* handler, uint32 areaId)      { -        if (!*args) -            return false; -          Player* playerTarget = handler->getSelectedPlayer();          if (!playerTarget)          { @@ -1161,7 +1121,7 @@ public:              return false;          } -        AreaTableEntry const* area = sAreaTableStore.LookupEntry(atoi(args)); +        AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId);          if (!area)          {              handler->SendSysMessage(LANG_BAD_VALUE); @@ -1191,11 +1151,8 @@ public:          return true;      } -    static bool HandleHideAreaCommand(ChatHandler* handler, char const* args) +    static bool HandleHideAreaCommand(ChatHandler* handler, uint32 areaId)      { -        if (!*args) -            return false; -          Player* playerTarget = handler->getSelectedPlayer();          if (!playerTarget)          { @@ -1204,7 +1161,7 @@ public:              return false;          } -        AreaTableEntry const* area = sAreaTableStore.LookupEntry(atoi(args)); +        AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId);          if (!area)          {              handler->SendSysMessage(LANG_BAD_VALUE); @@ -1390,19 +1347,10 @@ public:          return true;      } -    static bool HandleAddItemSetCommand(ChatHandler* handler, char const* args) +    static bool HandleAddItemSetCommand(ChatHandler* handler, Variant<Hyperlink<itemset>, uint32> itemSetId)      { -        if (!*args) -            return false; - -        char const* id = handler->extractKeyFromLink((char*)args, "Hitemset"); // number or [name] Shift-click form |color|Hitemset:itemset_id|h[name]|h|r -        if (!id) -            return false; - -        uint32 itemSetId = atoul(id); -          // prevent generation all items with itemset field value '0' -        if (itemSetId == 0) +        if (*itemSetId == 0)          {              handler->PSendSysMessage(LANG_NO_ITEMS_FROM_ITEMSET_FOUND, itemSetId);              handler->SetSentErrorMessage(true); @@ -1437,7 +1385,7 @@ public:          ItemTemplateContainer const& its = sObjectMgr->GetItemTemplateStore();          for (auto const& itemTemplatePair : its)          { -            if (itemTemplatePair.second.GetItemSet() != itemSetId) +            if (itemTemplatePair.second.GetItemSet() != *itemSetId)                  continue;              found = true; @@ -1479,17 +1427,14 @@ public:          return true;      } -    static bool HandleBankCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleBankCommand(ChatHandler* handler)      {          handler->GetSession()->SendShowBank(handler->GetSession()->GetPlayer()->GetGUID());          return true;      } -    static bool HandleChangeWeather(ChatHandler* handler, char const* args) +    static bool HandleChangeWeather(ChatHandler* handler, WeatherType type, float intensity)      { -        if (!*args) -            return false; -          // Weather is OFF          if (!sWorld->getBoolConfig(CONFIG_WEATHER))          { @@ -1498,16 +1443,6 @@ public:              return false;          } -        // *Change the weather of a cell -        char const* px = strtok((char*)args, " "); -        char const* py = strtok(nullptr, " "); - -        if (!px || !py) -            return false; - -        uint32 type = uint32(atoi(px));                         //0 to 3, 0: fine, 1: rain, 2: snow, 3: sand -        float grade = float(atof(py));                          //0 to 1, sending -1 is instand good weather -          Player* player = handler->GetSession()->GetPlayer();          uint32 zoneid = player->GetZoneId(); @@ -1519,34 +1454,13 @@ public:              return false;          } -        weather->SetWeather(WeatherType(type), grade); +        weather->SetWeather(type, intensity);          return true;      } -    static bool HandleSetSkillCommand(ChatHandler* handler, char const* args) +    static bool HandleSetSkillCommand(ChatHandler* handler, Variant<Hyperlink<skill>, uint32> skillId, uint32 level, Optional<uint32> maxSkillArg)      { -        // number or [name] Shift-click form |color|Hskill:skill_id|h[name]|h|r -        char const* skillStr = handler->extractKeyFromLink((char*)args, "Hskill"); -        if (!skillStr) -            return false; - -        char const* levelStr = strtok(nullptr, " "); -        if (!levelStr) -            return false; - -        char const* maxPureSkill = strtok(nullptr, " "); - -        uint32 skill = atoul(skillStr); -        if (skill == 0) -        { -            handler->PSendSysMessage(LANG_INVALID_SKILL_ID, skill); -            handler->SetSentErrorMessage(true); -            return false; -        } - -        uint32 level = atoul(levelStr); -          Player* target = handler->getSelectedPlayerOrSelf();          if (!target)          { @@ -1555,19 +1469,19 @@ public:              return false;          } -        SkillLineEntry const* skillLine = sSkillLineStore.LookupEntry(skill); +        SkillLineEntry const* skillLine = sSkillLineStore.LookupEntry(skillId);          if (!skillLine)          { -            handler->PSendSysMessage(LANG_INVALID_SKILL_ID, skill); +            handler->PSendSysMessage(LANG_INVALID_SKILL_ID, skillId);              handler->SetSentErrorMessage(true);              return false;          } -        bool targetHasSkill = target->GetSkillValue(skill) != 0; +        bool targetHasSkill = target->GetSkillValue(skillId) != 0;          // If our target does not yet have the skill they are trying to add to them, the chosen level also becomes          // the max level of the new profession. -        uint16 max = maxPureSkill ? atoul(maxPureSkill) : targetHasSkill ? target->GetPureMaxSkillValue(skill) : uint16(level); +        uint16 max = maxSkillArg.value_or(targetHasSkill ? target->GetPureMaxSkillValue(skillId) : level);          if (level == 0 || level > max)              return false; @@ -1575,8 +1489,8 @@ public:          // If the player has the skill, we get the current skill step. If they don't have the skill, we          // add the skill to the player's book with step 1 (which is the first rank, in most cases something          // like 'Apprentice <skill>'. -        target->SetSkill(skill, targetHasSkill ? target->GetSkillStep(skill) : 1, level, max); -        handler->PSendSysMessage(LANG_SET_SKILL, skill, skillLine->DisplayName[handler->GetSessionDbcLocale()], handler->GetNameLink(target).c_str(), level, max); +        target->SetSkill(skillId, targetHasSkill ? target->GetSkillStep(skillId) : 1, level, max); +        handler->PSendSysMessage(LANG_SET_SKILL, skillId, skillLine->DisplayName[handler->GetSessionDbcLocale()], handler->GetNameLink(target).c_str(), level, max);          return true;      } @@ -1597,7 +1511,6 @@ public:      *      * @return Several pieces of information about the character and the account      **/ -      static bool HandlePInfoCommand(ChatHandler* handler, char const* args)      {          // Define ALL the player variables! @@ -1965,7 +1878,7 @@ public:          return true;      } -    static bool HandleRespawnCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleRespawnCommand(ChatHandler* handler)      {          Player* player = handler->GetSession()->GetPlayer(); @@ -2004,7 +1917,7 @@ public:          return true;      } -    // mute player for some times +    // mute player for the specified duration      static bool HandleMuteCommand(ChatHandler* handler, char const* args)      {          char* nameStr; @@ -2134,16 +2047,8 @@ public:      }      // mutehistory command -    static bool HandleMuteInfoCommand(ChatHandler* handler, char const* args) +    static bool HandleMuteHistoryCommand(ChatHandler* handler, std::string accountName)      { -        if (!*args) -            return false; - -        char *nameStr = strtok((char*)args, ""); -        if (!nameStr) -            return false; - -        std::string accountName = nameStr;          if (!Utf8ToUpperOnlyLatin(accountName))          {              handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName.c_str()); @@ -2158,11 +2063,11 @@ public:              return false;          } -        return HandleMuteInfoHelper(accountId, accountName.c_str(), handler); +        return HandleMuteHistoryHelper(accountId, accountName.c_str(), handler);      }      // helper for mutehistory -    static bool HandleMuteInfoHelper(uint32 accountId, char const* accountName, ChatHandler *handler) +    static bool HandleMuteHistoryHelper(uint32 accountId, char const* accountName, ChatHandler *handler)      {          LoginDatabasePreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_MUTE_INFO);          stmt->setUInt32(0, accountId); @@ -2193,7 +2098,7 @@ public:          return true;      } -    static bool HandleMovegensCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleMovegensCommand(ChatHandler* handler)      {          Unit* unit = handler->getSelectedUnit();          if (!unit) @@ -2276,7 +2181,7 @@ public:          return true;      } -    static bool HandleComeToMeCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleComeToMeCommand(ChatHandler* handler)      {          Creature* caster = handler->getSelectedCreature();          if (!caster) @@ -2588,15 +2493,14 @@ public:          return false;      } -    static bool HandleUnFreezeCommand(ChatHandler* handler, char const*args) +    static bool HandleUnFreezeCommand(ChatHandler* handler, Optional<std::string> targetNameArg)      {          std::string name;          Player* player; -        char* targetName = strtok((char*)args, " "); // Get entered name -        if (targetName) +        if (targetNameArg)          { -            name = targetName; +            name = *targetNameArg;              normalizePlayerName(name);              player = ObjectAccessor::FindPlayerByName(name);          } @@ -2618,7 +2522,7 @@ public:          }          else          { -            if (targetName) +            if (targetNameArg)              {                  // Check for offline players                  ObjectGuid guid = sCharacterCache->GetCharacterGuidByName(name); @@ -2646,7 +2550,7 @@ public:          return true;      } -    static bool HandleListFreezeCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleListFreezeCommand(ChatHandler* handler)      {          // Get names from DB          CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_AURA_FROZEN); @@ -2682,15 +2586,8 @@ public:          return true;      } -    static bool HandlePlayAllCommand(ChatHandler* handler, char const* args) +    static bool HandlePlayAllCommand(ChatHandler* handler, uint32 soundId, Optional<int32> broadcastTextId)      { -        if (!*args) -            return false; - -        char const* soundIdToken = strtok((char*)args, " "); - -        uint32 soundId = atoul(soundIdToken); -          if (!sSoundKitStore.LookupEntry(soundId))          {              handler->PSendSysMessage(LANG_SOUND_NOT_EXIST, soundId); @@ -2698,18 +2595,13 @@ public:              return false;          } -        uint32 broadcastTextId = 0; -        char const* broadcastTextIdToken = strtok(nullptr, " "); -        if (broadcastTextIdToken) -            broadcastTextId = atoul(broadcastTextIdToken); - -        sWorld->SendGlobalMessage(WorldPackets::Misc::PlaySound(handler->GetSession()->GetPlayer()->GetGUID(), soundId, broadcastTextId).Write()); +        sWorld->SendGlobalMessage(WorldPackets::Misc::PlaySound(handler->GetSession()->GetPlayer()->GetGUID(), soundId, broadcastTextId.value_or(0)).Write());          handler->PSendSysMessage(LANG_COMMAND_PLAYED_TO_ALL, soundId);          return true;      } -    static bool HandlePossessCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandlePossessCommand(ChatHandler* handler)      {          Unit* unit = handler->getSelectedUnit();          if (!unit) @@ -2719,7 +2611,7 @@ public:          return true;      } -    static bool HandleUnPossessCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleUnPossessCommand(ChatHandler* handler)      {          Unit* unit = handler->getSelectedUnit();          if (!unit) @@ -2730,7 +2622,7 @@ public:          return true;      } -    static bool HandleBindSightCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleBindSightCommand(ChatHandler* handler)      {          Unit* unit = handler->getSelectedUnit();          if (!unit) @@ -2740,7 +2632,7 @@ public:          return true;      } -    static bool HandleUnbindSightCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleUnbindSightCommand(ChatHandler* handler)      {          Player* player = handler->GetSession()->GetPlayer(); @@ -2751,7 +2643,7 @@ public:          return true;      } -    static bool HandleMailBoxCommand(ChatHandler* handler, char const* /*args*/) +    static bool HandleMailBoxCommand(ChatHandler* handler)      {          Player* player = handler->GetSession()->GetPlayer();  | 
