diff options
Diffstat (limited to 'src/server/scripts/Commands')
| -rw-r--r-- | src/server/scripts/Commands/cs_character.cpp | 4 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_disable.cpp | 163 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_group.cpp | 44 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_guild.cpp | 14 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 156 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_modify.cpp | 128 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_pet.cpp | 51 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_send.cpp | 67 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_wp.cpp | 30 |
9 files changed, 208 insertions, 449 deletions
diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index 9363b146573..33cdffcd7dc 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -110,10 +110,10 @@ public: if (!searchString.empty()) { // search by GUID - if (isNumeric(searchString.c_str())) + if (Optional<uint64> guidValue = Trinity::StringTo<uint64>(searchString)) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_DEL_INFO_BY_GUID); - stmt->setUInt64(0, strtoull(searchString.c_str(), nullptr, 10)); + stmt->setUInt64(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 da8ca86df59..5ded723950b 100644 --- a/src/server/scripts/Commands/cs_disable.cpp +++ b/src/server/scripts/Commands/cs_disable.cpp @@ -36,10 +36,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 @@ -83,22 +79,8 @@ 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 = atoul(entryStr); - char const* disableTypeStr = ""; switch (disableType) @@ -191,6 +173,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; } @@ -209,87 +202,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, 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 HandleAddDisableCriteriaCommand(ChatHandler* handler, char const* args) + static bool HandleAddDisableCriteriaCommand(ChatHandler* handler, uint32 entry, Optional<uint16> flags, Tail disableComment) { - if (!*args) - return false; - - return HandleAddDisables(handler, args, DISABLE_TYPE_CRITERIA); + return HandleAddDisables(handler, DISABLE_TYPE_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)); - char const* disableTypeStr = ""; switch (disableType) @@ -318,6 +280,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); @@ -340,68 +307,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 HandleRemoveDisableCriteriaCommand(ChatHandler* handler, char const* args) + static bool HandleRemoveDisableCriteriaCommand(ChatHandler* handler, uint32 entry) { - if (!*args) - return false; - - return HandleRemoveDisables(handler, args, DISABLE_TYPE_CRITERIA); + return HandleRemoveDisables(handler, DISABLE_TYPE_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 64d82dd47a8..d97672aa091 100644 --- a/src/server/scripts/Commands/cs_group.cpp +++ b/src/server/scripts/Commands/cs_group.cpp @@ -431,40 +431,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; - ObjectGuid guidTarget; - std::string nameTarget; - std::string zoneName; - char const* onlineState = ""; - - // Parse the guid to uint32... - ObjectGuid parseGUID = ObjectGuid::Create<HighGuid::Player>(strtoull(args, nullptr, 10)); - - // ... 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->setUInt64(0, guidTarget.GetCounter()); + stmt->setUInt64(0, target.GetGUID().GetCounter()); PreparedQueryResult resultGroup = CharacterDatabase.Query(stmt); if (resultGroup) groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32()); @@ -473,7 +455,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; } @@ -531,16 +513,10 @@ public: zoneName = zone->AreaName[locale]; } } - else - { - // ... else, everything is set to offline or neutral values. - zoneName = "<ERROR>"; - onlineState = "Offline"; - } // 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(), phases.c_str(), slot.guid.ToString().c_str(), flags.c_str(), + zoneName, phases.c_str(), slot.guid.ToString().c_str(), 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 2a0185223ec..c824e370632 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -263,19 +263,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)) - guild = sGuildMgr->GetGuildById(strtoull(args, nullptr, 10)); + if (ObjectGuid::LowType const* guid = std::get_if<ObjectGuid::LowType>(&*guildIdentifier)) + guild = sGuildMgr->GetGuildById(*guid); else - guild = sGuildMgr->GetGuildByName(args); + 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 32724dd6824..3f2f8416699 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -81,6 +81,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 }, @@ -1206,7 +1207,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, " "); @@ -1233,7 +1235,7 @@ public: ItemContext itemContext = ItemContext::NONE; if (context) { - itemContext = ItemContext(atoul(context)); + itemContext = ItemContext(Trinity::StringTo<uint8>(context).value_or(0)); if (itemContext != ItemContext::NONE && itemContext < ItemContext::Max) { std::set<uint32> contextBonuses = sDB2Manager.GetDefaultItemBonusTree(itemId, itemContext); @@ -1370,7 +1372,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, " "); @@ -1397,7 +1400,7 @@ public: ItemContext itemContext = ItemContext::NONE; if (context) { - itemContext = ItemContext(atoul(context)); + itemContext = ItemContext(Trinity::StringTo<uint8>(context).value_or(0)); if (itemContext != ItemContext::NONE && itemContext < ItemContext::Max) { std::set<uint32> contextBonuses = sDB2Manager.GetDefaultItemBonusTree(itemId, itemContext); @@ -1634,27 +1637,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 = ObjectGuid::Create<HighGuid::Player>(strtoull(args, nullptr, 10)); + 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: @@ -2319,71 +2315,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 = atoull(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, std::to_string(guidLow).c_str()); - 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(), std::to_string(guidLow).c_str(), -damage, go->GetGOValue()->Building.Health); - } - - return true; - } - Unit* target = handler->getSelectedUnit(); if (!target || !handler->GetSession()->GetPlayer()->GetTarget()) { @@ -2399,16 +2332,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()) @@ -2416,21 +2341,15 @@ 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) { DamageInfo dmgInfo(attacker, target, damage, nullptr, schoolmask, SPELL_DIRECT_DAMAGE, BASE_ATTACK); Unit::CalcAbsorbResist(dmgInfo); @@ -2450,16 +2369,7 @@ 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) - return false; - - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellid, attacker->GetMap()->GetDifficultyID()); - if (!spellInfo) - return false; - - SpellNonMeleeDamage damageInfo(attacker, target, spellInfo, { spellInfo->GetSpellXSpellVisualId(handler->GetSession()->GetPlayer()), 0 }, spellInfo->SchoolMask); + SpellNonMeleeDamage damageInfo(attacker, target, *spellInfo, { (*spellInfo)->GetSpellXSpellVisualId(handler->GetSession()->GetPlayer()), 0 }, (*spellInfo)->SchoolMask); damageInfo.damage = damage; Unit::DealDamageMods(damageInfo.attacker, damageInfo.target, damageInfo.damage, &damageInfo.absorb); target->DealSpellDamage(&damageInfo, true); @@ -2467,6 +2377,28 @@ public: 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, std::to_string(*spawnId).c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + if (!go->IsDestructibleBuilding()) + { + handler->SendSysMessage(LANG_INVALID_GAMEOBJECT_TYPE); + handler->SetSentErrorMessage(true); + return false; + } + + go->ModifyHealth(-damage, handler->GetSession()->GetPlayer()); + handler->PSendSysMessage(LANG_GAMEOBJECT_DAMAGED, go->GetName().c_str(), std::to_string(*spawnId).c_str(), -damage, go->GetGOValue()->Building.Health); + return true; + } + static bool HandleCombatStopCommand(ChatHandler* handler, char const* args) { Player* target = nullptr; diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index 49f04af4593..da8e3d28d5e 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -36,6 +36,7 @@ EndScriptData */ #include "ReputationMgr.h" #include "SpellPackets.h" #include "UpdateFields.h" +#include "Util.h" #include "WorldSession.h" #if TRINITY_COMPILER == TRINITY_COMPILER_GNU @@ -210,10 +211,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<uint64> npcflag, Optional<uint32> dyflag) { - char* pfactionid = handler->extractKeyFromLink((char*)args, "Hfaction"); - Creature* target = handler->getSelectedCreature(); if (!target) { @@ -222,56 +221,35 @@ public: return false; } - if (!pfactionid) - { - uint32 factionid = target->GetFaction(); - uint32 flag = target->m_unitData->Flags; - uint64 npcflag; - memcpy(&npcflag, target->m_unitData->NpcFlags.begin(), sizeof(uint64)); - uint32 dyflag = target->m_objectData->DynamicFlags; - handler->PSendSysMessage(LANG_CURRENT_FACTION, target->GetGUID().ToString().c_str(), factionid, flag, std::to_string(npcflag).c_str(), dyflag); - return true; - } - - uint32 factionid = atoul(pfactionid); - uint32 flag; - - char *pflag = strtok(nullptr, " "); - if (!pflag) + if (!flag) flag = target->m_unitData->Flags; - else - flag = atoul(pflag); - - char* pnpcflag = strtok(nullptr, " "); - - uint64 npcflag; - if (!pnpcflag) - memcpy(&npcflag, target->m_unitData->NpcFlags.begin(), sizeof(uint64)); - else - npcflag = atoull(pnpcflag); - char* pdyflag = strtok(nullptr, " "); + if (!npcflag) + memcpy(&npcflag.emplace(), target->m_unitData->NpcFlags.begin(), sizeof(uint64)); - uint32 dyflag; - if (!pdyflag) + if (!dyflag) dyflag = target->m_objectData->DynamicFlags; - else - dyflag = atoul(pdyflag); - if (!sFactionTemplateStore.LookupEntry(factionid)) + if (!factionid) { - handler->PSendSysMessage(LANG_WRONG_FACTION, factionid); + handler->PSendSysMessage(LANG_CURRENT_FACTION, target->GetGUID().ToString().c_str(), *factionid, *flag, std::to_string(*npcflag).c_str(), *dyflag); + return true; + } + + if (!sFactionTemplateStore.LookupEntry(*factionid)) + { + handler->PSendSysMessage(LANG_WRONG_FACTION, *factionid); handler->SetSentErrorMessage(true); return false; } - handler->PSendSysMessage(LANG_YOU_CHANGE_FACTION, target->GetGUID().ToString().c_str(), factionid, flag, std::to_string(npcflag).c_str(), dyflag); + handler->PSendSysMessage(LANG_YOU_CHANGE_FACTION, target->GetGUID().ToString().c_str(), *factionid, *flag, std::to_string(*npcflag).c_str(), *dyflag); - target->SetFaction(factionid); - target->ReplaceAllUnitFlags(UnitFlags(flag)); - target->ReplaceAllNpcFlags(NPCFlags(npcflag & 0xFFFFFFFF)); - target->ReplaceAllNpcFlags2(NPCFlags2(npcflag >> 32)); - target->ReplaceAllDynamicFlags(dyflag); + target->SetFaction(*factionid); + target->ReplaceAllUnitFlags(UnitFlags(*flag)); + target->ReplaceAllNpcFlags(NPCFlags(*npcflag & 0xFFFFFFFF)); + target->ReplaceAllNpcFlags2(NPCFlags2(*npcflag >> 32)); + target->ReplaceAllDynamicFlags(*dyflag); return true; } @@ -382,13 +360,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); @@ -419,6 +392,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) { @@ -507,18 +489,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.HasRecord(mount)) { handler->SendSysMessage(LANG_NO_MOUNT); @@ -538,8 +510,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); @@ -775,13 +746,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 = atoul(args); - Unit* target = handler->getSelectedUnit(); if (!target) target = handler->GetSession()->GetPlayer(); @@ -796,22 +762,8 @@ public: } // Toggles a phaseid on a player - static bool HandleModifyPhaseCommand(ChatHandler* handler, char const* args) + static bool HandleModifyPhaseCommand(ChatHandler* handler, uint32 phaseId, Optional<uint32> visibleMapId) { - if (!*args) - return false; - - char* phaseText = strtok((char*)args, " "); - if (!phaseText) - return false; - - uint32 phaseId = uint32(strtoul(phaseText, nullptr, 10)); - uint32 visibleMapId = 0; - - char* visibleMapIdText = strtok(nullptr, " "); - if (visibleMapIdText) - visibleMapId = uint32(strtoul(visibleMapIdText, nullptr, 10)); - if (phaseId && !sPhaseStore.LookupEntry(phaseId)) { handler->SendSysMessage(LANG_PHASE_NOTFOUND); @@ -823,7 +775,7 @@ public: if (visibleMapId) { - MapEntry const* visibleMap = sMapStore.LookupEntry(visibleMapId); + MapEntry const* visibleMap = sMapStore.LookupEntry(*visibleMapId); if (!visibleMap || visibleMap->ParentMapID != int32(target->GetMapId())) { handler->SendSysMessage(LANG_PHASE_NOTFOUND); @@ -831,10 +783,10 @@ public: return false; } - if (!target->GetPhaseShift().HasVisibleMapId(visibleMapId)) - PhasingHandler::AddVisibleMapId(target, visibleMapId); + if (!target->GetPhaseShift().HasVisibleMapId(*visibleMapId)) + PhasingHandler::AddVisibleMapId(target, *visibleMapId); else - PhasingHandler::RemoveVisibleMapId(target, visibleMapId); + PhasingHandler::RemoveVisibleMapId(target, *visibleMapId); } if (phaseId) @@ -1076,11 +1028,11 @@ public: { if (upperCase) { - c = char(::toupper(c)); + c = charToUpper(c); upperCase = false; } else - c = char(::tolower(c)); + c = charToLower(c); if (c == '_') { diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp index d6f2a39e59e..b75789ecae2 100644 --- a/src/server/scripts/Commands/cs_pet.cpp +++ b/src/server/scripts/Commands/cs_pet.cpp @@ -23,12 +23,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) { @@ -49,23 +48,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(); @@ -117,11 +116,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) @@ -131,10 +127,7 @@ public: return false; } - uint32 spellId = handler->extractSpellIdFromLink((char*)args); - - if (!spellId || !sSpellMgr->GetSpellInfo(spellId, DIFFICULTY_NONE)) - return false; + uint32 spellId = spellInfo->Id; // Check if pet already has it if (pet->HasSpell(spellId)) @@ -145,8 +138,7 @@ public: } // Check if spell is valid - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId, DIFFICULTY_NONE); - if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo)) + if (!SpellMgr::IsSpellValid(spellInfo)) { handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId); handler->SetSentErrorMessage(true); @@ -159,11 +151,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) { @@ -172,7 +161,7 @@ public: return false; } - uint32 spellId = handler->extractSpellIdFromLink((char*)args); + uint32 spellId = spellInfo->Id; if (pet->HasSpell(spellId)) pet->removeSpell(spellId, false); @@ -182,7 +171,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; @@ -193,9 +182,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); @@ -203,7 +192,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_send.cpp b/src/server/scripts/Commands/cs_send.cpp index d4f42b6c5f5..f9ee8c114f7 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 = atoul(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->GetMaxCount() > 0 && itemCount > uint32(item_proto->GetMaxCount()))) { - 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, int64 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, ""); - int64 money = moneyStr ? atoll(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() : UI64LIT(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 d70d97746fc..851bb6cb43a 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -304,29 +304,25 @@ public: return false; char* arg_id = strtok(nullptr, " "); - uint32 id = 0; if (show == "add") { - if (arg_id) - id = atoul(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 { @@ -334,10 +330,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; @@ -351,7 +347,7 @@ public: return true; } - id = atoul(arg_id); + uint32 id = Trinity::StringTo<uint32>(arg_id).value_or(0); uint32 a2, a3, a4, a5, a6; float a8, a9, a10, a11; @@ -396,7 +392,7 @@ public: return true; } - id = atoul(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); @@ -424,7 +420,7 @@ public: return true; } - id = atoul(arg_id); + uint32 id = Trinity::StringTo<uint32>(arg_id).value_or(0); if (!id) { @@ -462,7 +458,7 @@ public: if (arg_str_2 == "setid") { - uint32 newid = atoul(arg_3); + 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); @@ -530,7 +526,7 @@ public: } else if (arg_str_2 == "dataint") { - WorldDatabase.PExecute("UPDATE waypoint_scripts SET {}='{}' WHERE guid='{}'", arg_2, atoul(arg_3), id); // Query can't be a prepared statement + WorldDatabase.PExecute("UPDATE waypoint_scripts SET {}='{}' WHERE guid='{}'", arg_2, arg_3, id); // Query can't be a prepared statement handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 dataint updated.|r", id); return true; @@ -779,7 +775,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; |
