aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-05-13 15:46:27 +0200
committerShauren <shauren.trinity@gmail.com>2023-08-15 21:59:52 +0200
commita4299c2a4b88d1cbdcea1301a190da6081abf876 (patch)
tree85b194c12b0413b8da3ad554633ddeb0fec98185 /src/server/scripts
parentb9201d3c07ecbd690117d248bec238e3657b57b9 (diff)
Core/Misc: Replace string to int conversion functions from Common.h with c++17 std::from_chars based ones Trinity::StringTo
(cherry picked from commit 3260b94dd627b7b0c7114f94bb97d108b005af3e)
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Commands/cs_character.cpp4
-rw-r--r--src/server/scripts/Commands/cs_disable.cpp167
-rw-r--r--src/server/scripts/Commands/cs_group.cpp47
-rw-r--r--src/server/scripts/Commands/cs_guild.cpp20
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp153
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp106
-rw-r--r--src/server/scripts/Commands/cs_pet.cpp51
-rw-r--r--src/server/scripts/Commands/cs_quest.cpp84
-rw-r--r--src/server/scripts/Commands/cs_send.cpp67
-rw-r--r--src/server/scripts/Commands/cs_wp.cpp30
10 files changed, 224 insertions, 505 deletions
diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp
index 4ebe7e0f9b6..108df9fa4f0 100644
--- a/src/server/scripts/Commands/cs_character.cpp
+++ b/src/server/scripts/Commands/cs_character.cpp
@@ -109,10 +109,10 @@ public:
if (!searchString.empty())
{
// search by GUID
- if (isNumeric(searchString.c_str()))
+ if (Optional<uint32> guidValue = Trinity::StringTo<uint64>(searchString))
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_DEL_INFO_BY_GUID);
- stmt->setUInt32(0, uint32(atoi(searchString.c_str())));
+ stmt->setUInt32(0, *guidValue);
result = CharacterDatabase.Query(stmt);
}
// search by name
diff --git a/src/server/scripts/Commands/cs_disable.cpp b/src/server/scripts/Commands/cs_disable.cpp
index 132f7af3cc9..25a2b4463c8 100644
--- a/src/server/scripts/Commands/cs_disable.cpp
+++ b/src/server/scripts/Commands/cs_disable.cpp
@@ -34,10 +34,6 @@ EndScriptData */
#include "RBAC.h"
#include "SpellMgr.h"
-#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
-
using namespace Trinity::ChatCommands;
class disable_commandscript : public CommandScript
@@ -81,23 +77,9 @@ public:
return commandTable;
}
- static bool HandleAddDisables(ChatHandler* handler, char const* args, uint8 disableType)
+ static bool HandleAddDisables(ChatHandler* handler, DisableType disableType, uint32 entry, Optional<uint16> flags, Tail disableComment)
{
- char* entryStr = strtok((char*)args, " ");
- if (!entryStr || !atoi(entryStr))
- return false;
-
- char* flagsStr = strtok(nullptr, " ");
- uint8 flags = flagsStr ? uint8(atoi(flagsStr)) : 0;
-
- char* commentStr = strtok(nullptr, "");
- if (!commentStr)
- return false;
-
- std::string disableComment = commentStr;
- uint32 entry = uint32(atoi(entryStr));
-
- std::string disableTypeStr = "";
+ char const* disableTypeStr = "";
switch (disableType)
{
@@ -189,6 +171,17 @@ public:
disableTypeStr = "mmap";
break;
}
+ case DISABLE_TYPE_LFG_MAP:
+ {
+ if (!sMapStore.LookupEntry(entry))
+ {
+ handler->PSendSysMessage(LANG_COMMAND_NOMAPFOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+ disableTypeStr = "lfg map";
+ break;
+ }
default:
break;
}
@@ -199,7 +192,7 @@ public:
PreparedQueryResult result = WorldDatabase.Query(stmt);
if (result)
{
- handler->PSendSysMessage("This %s (Id: %u) is already disabled.", disableTypeStr.c_str(), entry);
+ handler->PSendSysMessage("This %s (Id: %u) is already disabled.", disableTypeStr, entry);
handler->SetSentErrorMessage(true);
return false;
}
@@ -207,87 +200,56 @@ public:
stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_DISABLES);
stmt->setUInt32(0, entry);
stmt->setUInt8(1, disableType);
- stmt->setUInt16(2, flags);
- stmt->setString(3, disableComment);
+ stmt->setUInt16(2, flags.value_or<uint16>(0));
+ stmt->setStringView(3, disableComment);
WorldDatabase.Execute(stmt);
- handler->PSendSysMessage("Add Disabled %s (Id: %u) for reason %s", disableTypeStr.c_str(), entry, disableComment.c_str());
+ handler->PSendSysMessage("Add Disabled %s (Id: %u) for reason " STRING_VIEW_FMT, disableTypeStr, entry, STRING_VIEW_FMT_ARG(disableComment));
return true;
}
- static bool HandleAddDisableSpellCommand(ChatHandler* handler, char const* args)
+ static bool HandleAddDisableSpellCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
{
- if (!*args)
- return false;
-
- return HandleAddDisables(handler, args, DISABLE_TYPE_SPELL);
+ return HandleAddDisables(handler, DISABLE_TYPE_SPELL, entry, flags, disableComment);
}
- static bool HandleAddDisableQuestCommand(ChatHandler* handler, char const* args)
+ static bool HandleAddDisableQuestCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
{
- if (!*args)
- return false;
-
- return HandleAddDisables(handler, args, DISABLE_TYPE_QUEST);
+ return HandleAddDisables(handler, DISABLE_TYPE_QUEST, entry, flags, disableComment);
}
- static bool HandleAddDisableMapCommand(ChatHandler* handler, char const* args)
+ static bool HandleAddDisableMapCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
{
- if (!*args)
- return false;
-
- return HandleAddDisables(handler, args, DISABLE_TYPE_MAP);
+ return HandleAddDisables(handler, DISABLE_TYPE_MAP, entry, flags, disableComment);
}
- static bool HandleAddDisableBattlegroundCommand(ChatHandler* handler, char const* args)
+ static bool HandleAddDisableBattlegroundCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
{
- if (!*args)
- return false;
-
- return HandleAddDisables(handler, args, DISABLE_TYPE_BATTLEGROUND);
+ return HandleAddDisables(handler, DISABLE_TYPE_BATTLEGROUND, entry, flags, disableComment);
}
- static bool HandleAddDisableAchievementCriteriaCommand(ChatHandler* handler, char const* args)
+ static bool HandleAddDisableAchievementCriteriaCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
{
- if (!*args)
- return false;
-
- return HandleAddDisables(handler, args, DISABLE_TYPE_ACHIEVEMENT_CRITERIA);
+ return HandleAddDisables(handler, DISABLE_TYPE_ACHIEVEMENT_CRITERIA, entry, flags, disableComment);
}
- static bool HandleAddDisableOutdoorPvPCommand(ChatHandler* handler, char const* args)
+ static bool HandleAddDisableOutdoorPvPCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
{
- if (!*args)
- return false;
-
- HandleAddDisables(handler, args, DISABLE_TYPE_OUTDOORPVP);
- return true;
+ return HandleAddDisables(handler, DISABLE_TYPE_OUTDOORPVP, entry, flags, disableComment);
}
- static bool HandleAddDisableVmapCommand(ChatHandler* handler, char const* args)
+ static bool HandleAddDisableVmapCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
{
- if (!*args)
- return false;
-
- return HandleAddDisables(handler, args, DISABLE_TYPE_VMAP);
+ return HandleAddDisables(handler, DISABLE_TYPE_VMAP, entry, flags, disableComment);
}
- static bool HandleAddDisableMMapCommand(ChatHandler* handler, char const* args)
+ static bool HandleAddDisableMMapCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment)
{
- if (!*args)
- return false;
-
- return HandleAddDisables(handler, args, DISABLE_TYPE_MMAP);
+ return HandleAddDisables(handler, DISABLE_TYPE_MMAP, entry, flags, disableComment);
}
- static bool HandleRemoveDisables(ChatHandler* handler, char const* args, uint8 disableType)
+ static bool HandleRemoveDisables(ChatHandler* handler, DisableType disableType, uint32 entry)
{
- char* entryStr = strtok((char*)args, " ");
- if (!entryStr || !atoi(entryStr))
- return false;
-
- uint32 entry = uint32(atoi(entryStr));
-
std::string disableTypeStr = "";
switch (disableType)
@@ -316,6 +278,11 @@ public:
case DISABLE_TYPE_MMAP:
disableTypeStr = "mmap";
break;
+ case DISABLE_TYPE_LFG_MAP:
+ disableTypeStr = "lfg map";
+ break;
+ default:
+ break;
}
WorldDatabasePreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_DISABLES);
@@ -338,68 +305,44 @@ public:
return true;
}
- static bool HandleRemoveDisableSpellCommand(ChatHandler* handler, char const* args)
+ static bool HandleRemoveDisableSpellCommand(ChatHandler* handler, uint32 entry)
{
- if (!*args)
- return false;
-
- return HandleRemoveDisables(handler, args, DISABLE_TYPE_SPELL);
+ return HandleRemoveDisables(handler, DISABLE_TYPE_SPELL, entry);
}
- static bool HandleRemoveDisableQuestCommand(ChatHandler* handler, char const* args)
+ static bool HandleRemoveDisableQuestCommand(ChatHandler* handler, uint32 entry)
{
- if (!*args)
- return false;
-
- return HandleRemoveDisables(handler, args, DISABLE_TYPE_QUEST);
+ return HandleRemoveDisables(handler, DISABLE_TYPE_QUEST, entry);
}
- static bool HandleRemoveDisableMapCommand(ChatHandler* handler, char const* args)
+ static bool HandleRemoveDisableMapCommand(ChatHandler* handler, uint32 entry)
{
- if (!*args)
- return false;
-
- return HandleRemoveDisables(handler, args, DISABLE_TYPE_MAP);
+ return HandleRemoveDisables(handler, DISABLE_TYPE_MAP, entry);
}
- static bool HandleRemoveDisableBattlegroundCommand(ChatHandler* handler, char const* args)
+ static bool HandleRemoveDisableBattlegroundCommand(ChatHandler* handler, uint32 entry)
{
- if (!*args)
- return false;
-
- return HandleRemoveDisables(handler, args, DISABLE_TYPE_BATTLEGROUND);
+ return HandleRemoveDisables(handler, DISABLE_TYPE_BATTLEGROUND, entry);
}
- static bool HandleRemoveDisableAchievementCriteriaCommand(ChatHandler* handler, char const* args)
+ static bool HandleRemoveDisableAchievementCriteriaCommand(ChatHandler* handler, uint32 entry)
{
- if (!*args)
- return false;
-
- return HandleRemoveDisables(handler, args, DISABLE_TYPE_ACHIEVEMENT_CRITERIA);
+ return HandleRemoveDisables(handler, DISABLE_TYPE_ACHIEVEMENT_CRITERIA, entry);
}
- static bool HandleRemoveDisableOutdoorPvPCommand(ChatHandler* handler, char const* args)
+ static bool HandleRemoveDisableOutdoorPvPCommand(ChatHandler* handler, uint32 entry)
{
- if (!*args)
- return false;
-
- return HandleRemoveDisables(handler, args, DISABLE_TYPE_OUTDOORPVP);
+ return HandleRemoveDisables(handler, DISABLE_TYPE_OUTDOORPVP, entry);
}
- static bool HandleRemoveDisableVmapCommand(ChatHandler* handler, char const* args)
+ static bool HandleRemoveDisableVmapCommand(ChatHandler* handler, uint32 entry)
{
- if (!*args)
- return false;
-
- return HandleRemoveDisables(handler, args, DISABLE_TYPE_VMAP);
+ return HandleRemoveDisables(handler, DISABLE_TYPE_VMAP, entry);
}
- static bool HandleRemoveDisableMMapCommand(ChatHandler* handler, char const* args)
+ static bool HandleRemoveDisableMMapCommand(ChatHandler* handler, uint32 entry)
{
- if (!*args)
- return false;
-
- return HandleRemoveDisables(handler, args, DISABLE_TYPE_MMAP);
+ return HandleRemoveDisables(handler, DISABLE_TYPE_MMAP, entry);
}
};
diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp
index 056bac9df2f..731521ef0d7 100644
--- a/src/server/scripts/Commands/cs_group.cpp
+++ b/src/server/scripts/Commands/cs_group.cpp
@@ -428,41 +428,22 @@ public:
return true;
}
- static bool HandleGroupListCommand(ChatHandler* handler, char const* args)
+ static bool HandleGroupListCommand(ChatHandler* handler, PlayerIdentifier const& target)
{
- // Get ALL the variables!
- Player* playerTarget;
- uint32 phase = 0;
- ObjectGuid guidTarget;
- std::string nameTarget;
- std::string zoneName;
- char const* onlineState = "";
-
- // Parse the guid to uint32...
- ObjectGuid parseGUID(HighGuid::Player, uint32(atoul(args)));
-
- // ... and try to extract a player out of it.
- if (sCharacterCache->GetCharacterNameByGuid(parseGUID, nameTarget))
- {
- playerTarget = ObjectAccessor::FindPlayer(parseGUID);
- guidTarget = parseGUID;
- }
- // If not, we return false and end right away.
- else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget))
- return false;
+ char const* zoneName = "<ERROR>";
+ char const* onlineState = "Offline";
// Next, we need a group. So we define a group variable.
Group* groupTarget = nullptr;
// We try to extract a group from an online player.
- if (playerTarget)
- groupTarget = playerTarget->GetGroup();
-
- // If not, we extract it from the SQL.
- if (!groupTarget)
+ if (target.IsConnected())
+ groupTarget = target.GetConnectedPlayer()->GetGroup();
+ else
{
+ // If not, we extract it from the SQL.
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER);
- stmt->setUInt32(0, guidTarget.GetCounter());
+ stmt->setUInt32(0, target.GetGUID().GetCounter());
PreparedQueryResult resultGroup = CharacterDatabase.Query(stmt);
if (resultGroup)
groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32());
@@ -471,7 +452,7 @@ public:
// If both fails, players simply has no party. Return false.
if (!groupTarget)
{
- handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, nameTarget.c_str());
+ handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, target.GetName().c_str());
handler->SetSentErrorMessage(true);
return false;
}
@@ -513,6 +494,7 @@ public:
// Check if iterator is online. If is...
Player* p = ObjectAccessor::FindPlayer((*itr).guid);
+ uint32 phase = 0;
if (p)
{
// ... than, it prints information like "is online", where he is, etc...
@@ -528,17 +510,10 @@ public:
zoneName = zone->AreaName[locale];
}
}
- else
- {
- // ... else, everything is set to offline or neutral values.
- zoneName = "<ERROR>";
- onlineState = "Offline";
- phase = 0;
- }
// Now we can print those informations for every single member of each group!
handler->PSendSysMessage(LANG_GROUP_PLAYER_NAME_GUID, slot.name.c_str(), onlineState,
- zoneName.c_str(), phase, slot.guid.GetCounter(), flags.c_str(),
+ zoneName, phase, slot.guid.GetCounter(), flags.c_str(),
lfg::GetRolesString(slot.roles).c_str());
}
diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp
index cfe09772caf..73255185c67 100644
--- a/src/server/scripts/Commands/cs_guild.cpp
+++ b/src/server/scripts/Commands/cs_guild.cpp
@@ -261,25 +261,19 @@ public:
return true;
}
- static bool HandleGuildInfoCommand(ChatHandler* handler, char const* args)
+ static bool HandleGuildInfoCommand(ChatHandler* handler, Optional<Variant<ObjectGuid::LowType, std::string_view>> const& guildIdentifier)
{
Guild* guild = nullptr;
- if (args && args[0] != '\0')
+ if (guildIdentifier)
{
- if (isNumeric(args))
- {
- uint32 guildId = uint32(atoi(args));
- guild = sGuildMgr->GetGuildById(guildId);
- }
+ if (ObjectGuid::LowType const* guid = std::get_if<ObjectGuid::LowType>(&*guildIdentifier))
+ guild = sGuildMgr->GetGuildById(*guid);
else
- {
- std::string guildName = args;
- guild = sGuildMgr->GetGuildByName(guildName);
- }
+ guild = sGuildMgr->GetGuildByName(guildIdentifier->get<std::string_view>());
}
- else if (Player* target = handler->getSelectedPlayerOrSelf())
- guild = target->GetGuild();
+ else if (Optional<PlayerIdentifier> target = PlayerIdentifier::FromTargetOrSelf(handler); target && target->IsConnected())
+ guild = target->GetConnectedPlayer()->GetGuild();
if (!guild)
return false;
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 956877c2c08..670efaea221 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -84,6 +84,7 @@ public:
{ "commands", HandleCommandsCommand, rbac::RBAC_PERM_COMMAND_COMMANDS, Console::Yes },
{ "cooldown", HandleCooldownCommand, rbac::RBAC_PERM_COMMAND_COOLDOWN, Console::No },
{ "damage", HandleDamageCommand, rbac::RBAC_PERM_COMMAND_DAMAGE, Console::No },
+ { "damage go", HandleDamageGoCommand, rbac::RBAC_PERM_COMMAND_DAMAGE, Console::No },
{ "dev", HandleDevCommand, rbac::RBAC_PERM_COMMAND_DEV, Console::No },
{ "die", HandleDieCommand, rbac::RBAC_PERM_COMMAND_DIE, Console::No },
{ "dismount", HandleDismountCommand, rbac::RBAC_PERM_COMMAND_DISMOUNT, Console::No },
@@ -1181,7 +1182,8 @@ public:
char const* id = handler->extractKeyFromLink((char*)args, "Hitem");
if (!id)
return false;
- itemId = atoul(id);
+
+ itemId = Trinity::StringTo<uint32>(id).value_or(0);
}
char const* ccount = strtok(nullptr, " ");
@@ -1320,7 +1322,8 @@ public:
char const* id = handler->extractKeyFromLink(tailArgs, "Hitem");
if (!id)
return false;
- itemId = atoul(id);
+
+ itemId = Trinity::StringTo<uint32>(id).value_or(0);
}
char const* ccount = strtok(nullptr, " ");
@@ -1558,27 +1561,20 @@ public:
*
* @return Several pieces of information about the character and the account
**/
- static bool HandlePInfoCommand(ChatHandler* handler, char const* args)
+ static bool HandlePInfoCommand(ChatHandler* handler, Optional<PlayerIdentifier> arg)
{
- // Define ALL the player variables!
- Player* target;
- ObjectGuid targetGuid;
- std::string targetName;
- CharacterDatabasePreparedStatement* stmt = nullptr;
-
- // To make sure we get a target, we convert our guid to an omniversal...
- ObjectGuid parseGUID(HighGuid::Player, uint32(atoul(args)));
+ if (!arg)
+ arg = PlayerIdentifier::FromTargetOrSelf(handler);
- // ... and make sure we get a target, somehow.
- if (sCharacterCache->GetCharacterNameByGuid(parseGUID, targetName))
- {
- target = ObjectAccessor::FindPlayer(parseGUID);
- targetGuid = parseGUID;
- }
- // if not, then return false. Which shouldn't happen, now should it ?
- else if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
+ if (!arg)
return false;
+ // Define ALL the player variables!
+ Player* target = arg->GetConnectedPlayer();
+ ObjectGuid targetGuid = arg->GetGUID();
+ std::string targetName = arg->GetName();
+ CharacterDatabasePreparedStatement* stmt = nullptr;
+
/* The variables we extract for the command. They are
* default as "does not exist" to prevent problems
* The output is printed in the follow manner:
@@ -2245,71 +2241,8 @@ public:
return true;
}
- static bool HandleDamageCommand(ChatHandler* handler, char const* args)
+ static bool HandleDamageCommand(ChatHandler* handler, uint32 damage, Optional<SpellSchools> school, Optional<SpellInfo const*> spellInfo)
{
- if (!*args)
- return false;
-
- char* str = strtok((char*)args, " ");
-
- if (strcmp(str, "go") == 0)
- {
- char* guidStr = strtok(nullptr, " ");
- if (!guidStr)
- {
- handler->SendSysMessage(LANG_BAD_VALUE);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- ObjectGuid::LowType guidLow = atoul(guidStr);
- if (!guidLow)
- {
- handler->SendSysMessage(LANG_BAD_VALUE);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- char* damageStr = strtok(nullptr, " ");
- if (!damageStr)
- {
- handler->SendSysMessage(LANG_BAD_VALUE);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- int32 damage = atoi(damageStr);
- if (!damage)
- {
- handler->SendSysMessage(LANG_BAD_VALUE);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- if (Player* player = handler->GetSession()->GetPlayer())
- {
- GameObject* go = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
- if (!go)
- {
- handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, guidLow);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- if (!go->IsDestructibleBuilding())
- {
- handler->SendSysMessage(LANG_INVALID_GAMEOBJECT_TYPE);
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- go->ModifyHealth(-damage, player);
- handler->PSendSysMessage(LANG_GAMEOBJECT_DAMAGED, go->GetName().c_str(), guidLow, -damage, go->GetGOValue()->Building.Health);
- }
-
- return true;
- }
-
Unit* target = handler->getSelectedUnit();
if (!target || !handler->GetSession()->GetPlayer()->GetTarget())
{
@@ -2325,16 +2258,8 @@ public:
if (!target->IsAlive())
return true;
- int32 damage_int = atoi((char*)str);
- if (damage_int <= 0)
- return true;
-
- uint32 damage = damage_int;
-
- char* schoolStr = strtok((char*)nullptr, " ");
-
// flat melee damage without resistence/etc reduction
- if (!schoolStr)
+ if (!school)
{
Unit::DealDamage(handler->GetSession()->GetPlayer(), target, damage, nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false);
if (target != handler->GetSession()->GetPlayer())
@@ -2342,21 +2267,16 @@ public:
return true;
}
- uint32 school = atoi((char*)schoolStr);
- if (school >= MAX_SPELL_SCHOOL)
- return false;
-
- SpellSchoolMask schoolmask = SpellSchoolMask(1 << school);
+ SpellSchoolMask schoolmask = SpellSchoolMask(1 << *school);
if (Unit::IsDamageReducedByArmor(schoolmask))
damage = Unit::CalcArmorReducedDamage(handler->GetSession()->GetPlayer(), target, damage, nullptr, BASE_ATTACK);
- char* spellStr = strtok((char*)nullptr, " ");
+ Player* attacker = handler->GetSession()->GetPlayer();
// melee damage by specific school
- if (!spellStr)
+ if (!spellInfo)
{
- Player* attacker = handler->GetSession()->GetPlayer();
DamageInfo dmgInfo(attacker, target, damage, nullptr, schoolmask, SPELL_DIRECT_DAMAGE, BASE_ATTACK);
Unit::CalcAbsorbResist(dmgInfo);
@@ -2375,20 +2295,33 @@ public:
// non-melee damage
- // 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)
+ SpellNonMeleeDamage damageInfo(attacker, target, (*spellInfo)->Id, (*spellInfo)->SchoolMask);
+ damageInfo.damage = damage;
+ Unit::DealDamageMods(damageInfo.target, damageInfo.damage, &damageInfo.absorb);
+ target->DealSpellDamage(&damageInfo, true);
+ target->SendSpellNonMeleeDamageLog(&damageInfo);
+ return true;
+ }
+
+ static bool HandleDamageGoCommand(ChatHandler* handler, Variant<Hyperlink<gameobject>, ObjectGuid::LowType> spawnId, int32 damage)
+ {
+ GameObject* go = handler->GetObjectFromPlayerMapByDbGuid(*spawnId);
+ if (!go)
+ {
+ handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, *spawnId);
+ handler->SetSentErrorMessage(true);
return false;
+ }
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellid);
- if (!spellInfo)
+ if (!go->IsDestructibleBuilding())
+ {
+ handler->SendSysMessage(LANG_INVALID_GAMEOBJECT_TYPE);
+ handler->SetSentErrorMessage(true);
return false;
+ }
- Player* attacker = handler->GetSession()->GetPlayer();
- SpellNonMeleeDamage dmgInfo(attacker, target, spellid, spellInfo->GetSchoolMask());
- Unit::DealDamageMods(dmgInfo.target, dmgInfo.damage, &dmgInfo.absorb);
- attacker->SendSpellNonMeleeDamageLog(&dmgInfo);
- attacker->DealSpellDamage(&dmgInfo, true);
+ go->ModifyHealth(-damage, handler->GetSession()->GetPlayer());
+ handler->PSendSysMessage(LANG_GAMEOBJECT_DAMAGED, go->GetName().c_str(), *spawnId, -damage, go->GetGOValue()->Building.Health);
return true;
}
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index bfbda9be376..158be69baa2 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -32,6 +32,7 @@ EndScriptData */
#include "Player.h"
#include "RBAC.h"
#include "ReputationMgr.h"
+#include "Util.h"
#include "WorldSession.h"
#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
@@ -206,13 +207,8 @@ public:
}
//Edit Player Faction
- static bool HandleModifyFactionCommand(ChatHandler* handler, char const* args)
+ static bool HandleModifyFactionCommand(ChatHandler* handler, Optional<uint32> factionid, Optional<uint32> flag, Optional<uint32> npcflag, Optional<uint32> dyflag)
{
- if (!*args)
- return false;
-
- char* pfactionid = handler->extractKeyFromLink((char*)args, "Hfaction");
-
Creature* target = handler->getSelectedCreature();
if (!target)
{
@@ -221,54 +217,34 @@ public:
return false;
}
- if (!pfactionid)
- {
- uint32 factionid = target->GetFaction();
- uint32 flag = target->GetUnitFlags();
- uint32 npcflag = target->GetNpcFlags();
- uint32 dyflag = target->GetDynamicFlags();
- handler->PSendSysMessage(LANG_CURRENT_FACTION, target->GetGUID().GetCounter(), factionid, flag, npcflag, dyflag);
- return true;
- }
-
- uint32 factionid = atoi(pfactionid);
- UnitFlags flag;
-
- char *pflag = strtok(nullptr, " ");
- if (!pflag)
+ if (!flag)
flag = target->GetUnitFlags();
- else
- flag = UnitFlags(atoi(pflag));
-
- char* pnpcflag = strtok(nullptr, " ");
- NPCFlags npcflag;
- if (!pnpcflag)
+ if (!npcflag)
npcflag = target->GetNpcFlags();
- else
- npcflag = NPCFlags(atoi(pnpcflag));
- char* pdyflag = strtok(nullptr, " ");
-
- uint32 dyflag;
- if (!pdyflag)
+ if (!dyflag)
dyflag = target->GetDynamicFlags();
- else
- dyflag = atoi(pdyflag);
- if (!sFactionTemplateStore.LookupEntry(factionid))
+ if (!factionid)
+ {
+ handler->PSendSysMessage(LANG_CURRENT_FACTION, target->GetGUID().GetCounter(), *factionid, *flag, *npcflag, *dyflag);
+ return true;
+ }
+
+ if (!sFactionTemplateStore.LookupEntry(*factionid))
{
- handler->PSendSysMessage(LANG_WRONG_FACTION, factionid);
+ handler->PSendSysMessage(LANG_WRONG_FACTION, *factionid);
handler->SetSentErrorMessage(true);
return false;
}
- handler->PSendSysMessage(LANG_YOU_CHANGE_FACTION, target->GetGUID().GetCounter(), factionid, flag, npcflag, dyflag);
+ handler->PSendSysMessage(LANG_YOU_CHANGE_FACTION, target->GetGUID().GetCounter(), *factionid, *flag, *npcflag, *dyflag);
- target->SetFaction(factionid);
- target->ReplaceAllUnitFlags(flag);
- target->ReplaceAllNpcFlags(npcflag);
- target->ReplaceAllDynamicFlags(dyflag);
+ target->SetFaction(*factionid);
+ target->ReplaceAllUnitFlags(UnitFlags(*flag));
+ target->ReplaceAllNpcFlags(NPCFlags(*npcflag));
+ target->ReplaceAllDynamicFlags(*dyflag);
return true;
}
@@ -375,13 +351,8 @@ public:
return false;
}
- static bool CheckModifySpeed(ChatHandler* handler, char const* args, Unit* target, float& speed, float minimumBound, float maximumBound, bool checkInFlight = true)
+ static bool CheckModifySpeed(ChatHandler* handler, Unit* target, float speed, float minimumBound, float maximumBound, bool checkInFlight = true)
{
- if (!*args)
- return false;
-
- speed = (float)atof((char*)args);
-
if (speed > maximumBound || speed < minimumBound)
{
handler->SendSysMessage(LANG_BAD_VALUE);
@@ -412,6 +383,15 @@ public:
return true;
}
+ static bool CheckModifySpeed(ChatHandler* handler, char const* args, Unit* target, float& speed, float minimumBound, float maximumBound, bool checkInFlight = true)
+ {
+ if (!*args)
+ return false;
+
+ speed = (float)atof((char*)args);
+ return CheckModifySpeed(handler, target, speed, minimumBound, maximumBound, checkInFlight);
+ }
+
//Edit Player Aspeed
static bool HandleModifyASpeedCommand(ChatHandler* handler, char const* args)
{
@@ -500,18 +480,8 @@ public:
}
//Enable Player mount
- static bool HandleModifyMountCommand(ChatHandler* handler, char const* args)
+ static bool HandleModifyMountCommand(ChatHandler* handler, uint32 mount, float speed)
{
- if (!*args)
- return false;
-
- char const* mount_cstr = strtok(const_cast<char*>(args), " ");
- char const* speed_cstr = strtok(nullptr, " ");
-
- if (!mount_cstr || !speed_cstr)
- return false;
-
- uint32 mount = atoul(mount_cstr);
if (!sCreatureDisplayInfoStore.LookupEntry(mount))
{
handler->SendSysMessage(LANG_NO_MOUNT);
@@ -531,8 +501,7 @@ public:
if (handler->HasLowerSecurity(target, ObjectGuid::Empty))
return false;
- float speed;
- if (!CheckModifySpeed(handler, speed_cstr, target, speed, 0.1f, 50.0f))
+ if (!CheckModifySpeed(handler, target, speed, 0.1f, 50.0f))
return false;
NotifyModification(handler, target, LANG_YOU_GIVE_MOUNT, LANG_MOUNT_GIVED);
@@ -808,13 +777,8 @@ public:
}
//morph creature or player
- static bool HandleModifyMorphCommand(ChatHandler* handler, char const* args)
+ static bool HandleModifyMorphCommand(ChatHandler* handler, uint32 display_id)
{
- if (!*args)
- return false;
-
- uint32 display_id = (uint32)atoi((char*)args);
-
Unit* target = handler->getSelectedUnit();
if (!target)
target = handler->GetSession()->GetPlayer();
@@ -829,13 +793,8 @@ public:
}
//set temporary phase mask for player
- static bool HandleModifyPhaseCommand(ChatHandler* handler, char const* args)
+ static bool HandleModifyPhaseCommand(ChatHandler* handler, uint32 phasemask)
{
- if (!*args)
- return false;
-
- uint32 phasemask = (uint32)atoi((char*)args);
-
Unit* target = handler->getSelectedUnit();
if (!target)
target = handler->GetSession()->GetPlayer();
@@ -845,7 +804,6 @@ public:
return false;
target->SetPhaseMask(phasemask, true);
-
return true;
}
diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp
index a8c71b6b380..1dfc4bfdeb8 100644
--- a/src/server/scripts/Commands/cs_pet.cpp
+++ b/src/server/scripts/Commands/cs_pet.cpp
@@ -24,12 +24,11 @@
#include "Pet.h"
#include "Player.h"
#include "RBAC.h"
+#include "SpellInfo.h"
#include "SpellMgr.h"
#include "WorldSession.h"
-#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
+using namespace Trinity::ChatCommands;
inline Pet* GetSelectedPlayerPetOrOwn(ChatHandler* handler)
{
@@ -50,23 +49,23 @@ class pet_commandscript : public CommandScript
public:
pet_commandscript() : CommandScript("pet_commandscript") { }
- std::vector<ChatCommand> GetCommands() const override
+ ChatCommandTable GetCommands() const override
{
- static std::vector<ChatCommand> petCommandTable =
+ static ChatCommandTable petCommandTable =
{
- { "create", rbac::RBAC_PERM_COMMAND_PET_CREATE, false, &HandlePetCreateCommand, "" },
- { "learn", rbac::RBAC_PERM_COMMAND_PET_LEARN, false, &HandlePetLearnCommand, "" },
- { "unlearn", rbac::RBAC_PERM_COMMAND_PET_UNLEARN, false, &HandlePetUnlearnCommand, "" },
- { "level", rbac::RBAC_PERM_COMMAND_PET_LEVEL, false, &HandlePetLevelCommand, "" },
+ { "create", HandlePetCreateCommand, rbac::RBAC_PERM_COMMAND_PET_CREATE, Console::No },
+ { "learn", HandlePetLearnCommand, rbac::RBAC_PERM_COMMAND_PET_LEARN, Console::No },
+ { "unlearn", HandlePetUnlearnCommand, rbac::RBAC_PERM_COMMAND_PET_UNLEARN, Console::No },
+ { "level", HandlePetLevelCommand, rbac::RBAC_PERM_COMMAND_PET_LEVEL, Console::No },
};
- static std::vector<ChatCommand> commandTable =
+ static ChatCommandTable commandTable =
{
- { "pet", rbac::RBAC_PERM_COMMAND_PET, false, nullptr, "", petCommandTable },
+ { "pet", petCommandTable },
};
return commandTable;
}
- static bool HandlePetCreateCommand(ChatHandler* handler, char const* /*args*/)
+ static bool HandlePetCreateCommand(ChatHandler* handler)
{
Player* player = handler->GetSession()->GetPlayer();
Creature* creatureTarget = handler->getSelectedCreature();
@@ -122,11 +121,8 @@ public:
return true;
}
- static bool HandlePetLearnCommand(ChatHandler* handler, char const* args)
+ static bool HandlePetLearnCommand(ChatHandler* handler, SpellInfo const* spellInfo)
{
- if (!*args)
- return false;
-
Pet* pet = GetSelectedPlayerPetOrOwn(handler);
if (!pet)
@@ -136,10 +132,7 @@ public:
return false;
}
- uint32 spellId = handler->extractSpellIdFromLink((char*)args);
-
- if (!spellId || !sSpellMgr->GetSpellInfo(spellId))
- return false;
+ uint32 spellId = spellInfo->Id;
// Check if pet already has it
if (pet->HasSpell(spellId))
@@ -150,8 +143,7 @@ public:
}
// Check if spell is valid
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo))
+ if (!SpellMgr::IsSpellValid(spellInfo))
{
handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId);
handler->SetSentErrorMessage(true);
@@ -164,11 +156,8 @@ public:
return true;
}
- static bool HandlePetUnlearnCommand(ChatHandler* handler, char const* args)
+ static bool HandlePetUnlearnCommand(ChatHandler* handler, SpellInfo const* spellInfo)
{
- if (!*args)
- return false;
-
Pet* pet = GetSelectedPlayerPetOrOwn(handler);
if (!pet)
{
@@ -177,7 +166,7 @@ public:
return false;
}
- uint32 spellId = handler->extractSpellIdFromLink((char*)args);
+ uint32 spellId = spellInfo->Id;
if (pet->HasSpell(spellId))
pet->removeSpell(spellId, false);
@@ -187,7 +176,7 @@ public:
return true;
}
- static bool HandlePetLevelCommand(ChatHandler* handler, char const* args)
+ static bool HandlePetLevelCommand(ChatHandler* handler, Optional<int32> level)
{
Pet* pet = GetSelectedPlayerPetOrOwn(handler);
Player* owner = pet ? pet->GetOwner() : nullptr;
@@ -198,9 +187,9 @@ public:
return false;
}
- int32 level = args ? atoi(args) : 0;
- if (level == 0)
+ if (!level)
level = owner->GetLevel() - pet->GetLevel();
+
if (level == 0 || level < -STRONG_MAX_LEVEL || level > STRONG_MAX_LEVEL)
{
handler->SendSysMessage(LANG_BAD_VALUE);
@@ -208,7 +197,7 @@ public:
return false;
}
- int32 newLevel = pet->GetLevel() + level;
+ int32 newLevel = pet->GetLevel() + *level;
if (newLevel < 1)
newLevel = 1;
else if (newLevel > owner->GetLevel())
diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp
index 4c090a5f836..5e15e615a6b 100644
--- a/src/server/scripts/Commands/cs_quest.cpp
+++ b/src/server/scripts/Commands/cs_quest.cpp
@@ -58,7 +58,7 @@ public:
return commandTable;
}
- static bool HandleQuestAdd(ChatHandler* handler, char const* args)
+ static bool HandleQuestAdd(ChatHandler* handler, Quest const* quest)
{
Player* player = handler->getSelectedPlayerOrSelf();
if (!player)
@@ -68,19 +68,9 @@ public:
return false;
}
- // .addquest #entry'
- // number or [name] Shift-click form |color|Hquest:quest_id:quest_level|h[name]|h|r
- char* cId = handler->extractKeyFromLink((char*)args, "Hquest");
- if (!cId)
- return false;
-
- uint32 entry = atoul(cId);
-
- Quest const* quest = sObjectMgr->GetQuestTemplate(entry);
-
- if (!quest || DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, entry, nullptr))
+ if (DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, quest->GetQuestId(), nullptr))
{
- handler->PSendSysMessage(LANG_COMMAND_QUEST_NOTFOUND, entry);
+ handler->PSendSysMessage(LANG_COMMAND_QUEST_NOTFOUND, quest->GetQuestId());
handler->SetSentErrorMessage(true);
return false;
}
@@ -94,12 +84,12 @@ public:
if (itr != std::end(itc))
{
- handler->PSendSysMessage(LANG_COMMAND_QUEST_STARTFROMITEM, entry, itr->first);
+ handler->PSendSysMessage(LANG_COMMAND_QUEST_STARTFROMITEM, quest->GetQuestId(), itr->first);
handler->SetSentErrorMessage(true);
return false;
}
- if (player->IsActiveQuest(entry))
+ if (player->IsActiveQuest(quest->GetQuestId()))
return false;
// ok, normal (creature/GO starting) quest
@@ -109,7 +99,7 @@ public:
return true;
}
- static bool HandleQuestRemove(ChatHandler* handler, char const* args)
+ static bool HandleQuestRemove(ChatHandler* handler, Quest const* quest)
{
Player* player = handler->getSelectedPlayer();
if (!player)
@@ -119,30 +109,20 @@ public:
return false;
}
- // .removequest #entry'
- // number or [name] Shift-click form |color|Hquest:quest_id:quest_level|h[name]|h|r
- char* cId = handler->extractKeyFromLink((char*)args, "Hquest");
- if (!cId)
- return false;
-
- uint32 entry = atoul(cId);
-
- Quest const* quest = sObjectMgr->GetQuestTemplate(entry);
-
if (!quest)
{
- handler->PSendSysMessage(LANG_COMMAND_QUEST_NOTFOUND, entry);
+ handler->PSendSysMessage(LANG_COMMAND_QUEST_NOTFOUND, quest->GetQuestId());
handler->SetSentErrorMessage(true);
return false;
}
- if (player->GetQuestStatus(entry) != QUEST_STATUS_NONE)
+ if (player->GetQuestStatus(quest->GetQuestId()) != QUEST_STATUS_NONE)
{
// remove all quest entries for 'entry' from quest log
for (uint8 slot = 0; slot < MAX_QUEST_LOG_SIZE; ++slot)
{
uint32 logQuest = player->GetQuestSlotQuestId(slot);
- if (logQuest == entry)
+ if (logQuest == quest->GetQuestId())
{
player->SetQuestSlot(slot, 0);
@@ -156,23 +136,23 @@ public:
}
}
}
- player->RemoveActiveQuest(entry, false);
- player->RemoveRewardedQuest(entry);
+ player->RemoveActiveQuest(quest->GetQuestId(), false);
+ player->RemoveRewardedQuest(quest->GetQuestId());
- sScriptMgr->OnQuestStatusChange(player, entry);
+ sScriptMgr->OnQuestStatusChange(player, quest->GetQuestId());
handler->SendSysMessage(LANG_COMMAND_QUEST_REMOVED);
return true;
}
else
{
- handler->PSendSysMessage(LANG_COMMAND_QUEST_NOTFOUND, entry);
+ handler->PSendSysMessage(LANG_COMMAND_QUEST_NOTFOUND, quest->GetQuestId());
handler->SetSentErrorMessage(true);
return false;
}
}
- static bool HandleQuestComplete(ChatHandler* handler, char const* args)
+ static bool HandleQuestComplete(ChatHandler* handler, Quest const* quest)
{
Player* player = handler->getSelectedPlayerOrSelf();
if (!player)
@@ -182,21 +162,11 @@ public:
return false;
}
- // .quest complete #entry
- // number or [name] Shift-click form |color|Hquest:quest_id:quest_level|h[name]|h|r
- char* cId = handler->extractKeyFromLink((char*)args, "Hquest");
- if (!cId)
- return false;
-
- uint32 entry = atoul(cId);
-
- Quest const* quest = sObjectMgr->GetQuestTemplate(entry);
-
// If player doesn't have the quest
- if (!quest || player->GetQuestStatus(entry) == QUEST_STATUS_NONE
- || DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, entry, nullptr))
+ if (player->GetQuestStatus(quest->GetQuestId()) == QUEST_STATUS_NONE
+ || DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, quest->GetQuestId(), nullptr))
{
- handler->PSendSysMessage(LANG_COMMAND_QUEST_NOTFOUND, entry);
+ handler->PSendSysMessage(LANG_COMMAND_QUEST_NOTFOUND, quest->GetQuestId());
handler->SetSentErrorMessage(true);
return false;
}
@@ -278,11 +248,11 @@ public:
CharacterDatabase.Execute(stmt);
}
- player->CompleteQuest(entry);
+ player->CompleteQuest(quest->GetQuestId());
return true;
}
- static bool HandleQuestReward(ChatHandler* handler, char const* args)
+ static bool HandleQuestReward(ChatHandler* handler, Quest const* quest)
{
Player* player = handler->getSelectedPlayer();
if (!player)
@@ -292,21 +262,11 @@ public:
return false;
}
- // .quest reward #entry
- // number or [name] Shift-click form |color|Hquest:quest_id:quest_level|h[name]|h|r
- char* cId = handler->extractKeyFromLink((char*)args, "Hquest");
- if (!cId)
- return false;
-
- uint32 entry = atoul(cId);
-
- Quest const* quest = sObjectMgr->GetQuestTemplate(entry);
-
// If player doesn't have the quest
- if (!quest || player->GetQuestStatus(entry) != QUEST_STATUS_COMPLETE
- || DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, entry, nullptr))
+ if (player->GetQuestStatus(quest->GetQuestId()) != QUEST_STATUS_COMPLETE
+ || DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, quest->GetQuestId(), nullptr))
{
- handler->PSendSysMessage(LANG_COMMAND_QUEST_NOTFOUND, entry);
+ handler->PSendSysMessage(LANG_COMMAND_QUEST_NOTFOUND, quest->GetQuestId());
handler->SetSentErrorMessage(true);
return false;
}
diff --git a/src/server/scripts/Commands/cs_send.cpp b/src/server/scripts/Commands/cs_send.cpp
index 8b44a4a7677..d718a4b3c7f 100644
--- a/src/server/scripts/Commands/cs_send.cpp
+++ b/src/server/scripts/Commands/cs_send.cpp
@@ -31,24 +31,26 @@
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
+using namespace Trinity::ChatCommands;
+
class send_commandscript : public CommandScript
{
public:
send_commandscript() : CommandScript("send_commandscript") { }
- std::vector<ChatCommand> GetCommands() const override
+ ChatCommandTable GetCommands() const override
{
- static std::vector<ChatCommand> sendCommandTable =
+ static ChatCommandTable sendCommandTable =
{
- { "items", rbac::RBAC_PERM_COMMAND_SEND_ITEMS, true, &HandleSendItemsCommand, "" },
- { "mail", rbac::RBAC_PERM_COMMAND_SEND_MAIL, true, &HandleSendMailCommand, "" },
- { "message", rbac::RBAC_PERM_COMMAND_SEND_MESSAGE, true, &HandleSendMessageCommand, "" },
- { "money", rbac::RBAC_PERM_COMMAND_SEND_MONEY, true, &HandleSendMoneyCommand, "" },
+ { "items", HandleSendItemsCommand, rbac::RBAC_PERM_COMMAND_SEND_ITEMS, Console::Yes },
+ { "mail", HandleSendMailCommand, rbac::RBAC_PERM_COMMAND_SEND_MAIL, Console::Yes },
+ { "message", HandleSendMessageCommand, rbac::RBAC_PERM_COMMAND_SEND_MESSAGE, Console::Yes },
+ { "money", HandleSendMoneyCommand, rbac::RBAC_PERM_COMMAND_SEND_MONEY, Console::Yes },
};
- static std::vector<ChatCommand> commandTable =
+ static ChatCommandTable commandTable =
{
- { "send", rbac::RBAC_PERM_COMMAND_SEND, false, nullptr, "", sendCommandTable },
+ { "send", sendCommandTable },
};
return commandTable;
}
@@ -146,14 +148,14 @@ public:
char const* itemIdStr = strtok(itemStr, ":");
char const* itemCountStr = strtok(nullptr, " ");
- uint32 itemId = atoi(itemIdStr);
+ Optional<uint32> itemId = Trinity::StringTo<uint32>(itemIdStr);
if (!itemId)
return false;
- ItemTemplate const* item_proto = sObjectMgr->GetItemTemplate(itemId);
+ ItemTemplate const* item_proto = sObjectMgr->GetItemTemplate(*itemId);
if (!item_proto)
{
- handler->PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, itemId);
+ handler->PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, *itemId);
handler->SetSentErrorMessage(true);
return false;
}
@@ -161,18 +163,18 @@ public:
uint32 itemCount = itemCountStr ? atoi(itemCountStr) : 1;
if (itemCount < 1 || (item_proto->MaxCount > 0 && itemCount > uint32(item_proto->MaxCount)))
{
- handler->PSendSysMessage(LANG_COMMAND_INVALID_ITEM_COUNT, itemCount, itemId);
+ handler->PSendSysMessage(LANG_COMMAND_INVALID_ITEM_COUNT, itemCount, *itemId);
handler->SetSentErrorMessage(true);
return false;
}
while (itemCount > item_proto->GetMaxStackSize())
{
- items.push_back(ItemPair(itemId, item_proto->GetMaxStackSize()));
+ items.push_back(ItemPair(*itemId, item_proto->GetMaxStackSize()));
itemCount -= item_proto->GetMaxStackSize();
}
- items.push_back(ItemPair(itemId, itemCount));
+ items.push_back(ItemPair(*itemId, itemCount));
if (items.size() > MAX_MAIL_ITEMS)
{
@@ -207,41 +209,10 @@ public:
return true;
}
/// Send money by mail
- static bool HandleSendMoneyCommand(ChatHandler* handler, char const* args)
+ static bool HandleSendMoneyCommand(ChatHandler* handler, PlayerIdentifier const& receiver, QuotedString const& subject, QuotedString const& text, uint32 money)
{
/// format: name "subject text" "mail text" money
- Player* receiver;
- ObjectGuid receiverGuid;
- std::string receiverName;
- if (!handler->extractPlayerTarget((char*)args, &receiver, &receiverGuid, &receiverName))
- return false;
-
- char* tail1 = strtok(nullptr, "");
- if (!tail1)
- return false;
-
- char* msgSubject = handler->extractQuotedArg(tail1);
- if (!msgSubject)
- return false;
-
- char* tail2 = strtok(nullptr, "");
- if (!tail2)
- return false;
-
- char* msgText = handler->extractQuotedArg(tail2);
- if (!msgText)
- return false;
-
- char* moneyStr = strtok(nullptr, "");
- int32 money = moneyStr ? atoi(moneyStr) : 0;
- if (money <= 0)
- return false;
-
- // msgSubject, msgText isn't NUL after prev. check
- std::string subject = msgSubject;
- std::string text = msgText;
-
// from console show nonexisting sender
MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUID().GetCounter() : 0, MAIL_STATIONERY_GM);
@@ -249,11 +220,11 @@ public:
MailDraft(subject, text)
.AddMoney(money)
- .SendMailTo(trans, MailReceiver(receiver, receiverGuid.GetCounter()), sender);
+ .SendMailTo(trans, MailReceiver(receiver.GetConnectedPlayer(), receiver.GetGUID().GetCounter()), sender);
CharacterDatabase.CommitTransaction(trans);
- std::string nameLink = handler->playerLink(receiverName);
+ std::string nameLink = handler->playerLink(receiver.GetName());
handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
return true;
}
diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp
index d987d054bc6..6b64aa8b12d 100644
--- a/src/server/scripts/Commands/cs_wp.cpp
+++ b/src/server/scripts/Commands/cs_wp.cpp
@@ -299,29 +299,25 @@ public:
return false;
char* arg_id = strtok(nullptr, " ");
- uint32 id = 0;
if (show == "add")
{
- if (arg_id)
- id = atoi(arg_id);
-
- if (id)
+ if (Optional<uint32> id = Trinity::StringTo<uint32>(arg_id))
{
stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID);
- stmt->setUInt32(0, id);
+ stmt->setUInt32(0, *id);
PreparedQueryResult result = WorldDatabase.Query(stmt);
if (!result)
{
stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_SCRIPT);
- stmt->setUInt32(0, id);
+ stmt->setUInt32(0, *id);
WorldDatabase.Execute(stmt);
- handler->PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: New waypoint event added: ", id);
+ handler->PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: New waypoint event added: ", *id);
}
else
- handler->PSendSysMessage("|cff00ff00Wp Event: You have choosed an existing waypoint script guid: %u|r", id);
+ handler->PSendSysMessage("|cff00ff00Wp Event: You have choosed an existing waypoint script guid: %u|r", *id);
}
else
{
@@ -329,10 +325,10 @@ public:
PreparedQueryResult result = WorldDatabase.Query(stmt);
id = result->Fetch()->GetUInt32();
stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_SCRIPT);
- stmt->setUInt32(0, id + 1);
+ stmt->setUInt32(0, *id + 1);
WorldDatabase.Execute(stmt);
- handler->PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: New waypoint event added: |r|cff00ffff", id+1);
+ handler->PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: New waypoint event added: |r|cff00ffff", *id+1);
}
return true;
@@ -346,7 +342,7 @@ public:
return true;
}
- id = atoi(arg_id);
+ uint32 id = Trinity::StringTo<uint32>(arg_id).value_or(0);
uint32 a2, a3, a4, a5, a6;
float a8, a9, a10, a11;
@@ -391,7 +387,7 @@ public:
return true;
}
- id = atoi(arg_id);
+ uint32 id = Trinity::StringTo<uint32>(arg_id).value_or(0);
stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID);
stmt->setUInt32(0, id);
@@ -419,7 +415,7 @@ public:
return true;
}
- id = atoi(arg_id);
+ uint32 id = Trinity::StringTo<uint32>(arg_id).value_or(0);
if (!id)
{
@@ -457,8 +453,8 @@ public:
if (arg_str_2 == "setid")
{
- uint32 newid = atoi(arg_3);
- handler->PSendSysMessage("%s%s|r|cff00ffff%u|r|cff00ff00%s|r|cff00ffff%u|r", "|cff00ff00", "Wp Event: Wypoint scipt guid: ", newid, " id changed: ", id);
+ uint32 newid = Trinity::StringTo<uint32>(arg_3).value_or(0);
+ handler->PSendSysMessage("%s%s|r|cff00ffff%u|r|cff00ff00%s|r|cff00ffff%u|r", "|cff00ff00", "Wp Event: Waypoint script guid: ", newid, " id changed: ", id);
stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_ID);
stmt->setUInt32(0, newid);
@@ -767,7 +763,7 @@ public:
if (target)
handler->SendSysMessage(LANG_WAYPOINT_CREATSELECTED);
- pathid = atoul(guid_str);
+ pathid = Trinity::StringTo<uint32>(guid_str).value_or(0);
}
std::string show = show_str;