diff options
| author | Shauren <shauren.trinity@gmail.com> | 2023-05-13 15:46:27 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2023-05-13 15:46:27 +0200 |
| commit | 3260b94dd627b7b0c7114f94bb97d108b005af3e (patch) | |
| tree | 980d58d6db4a3d20785f8bca881d36f79d0f5755 /src/server/game | |
| parent | c4d40085964109893c76d301b6f7d99f03838fa0 (diff) | |
Core/Misc: Replace string to int conversion functions from Common.h with c++17 std::from_chars based ones Trinity::StringTo
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/Chat/Channels/Channel.cpp | 11 | ||||
| -rw-r--r-- | src/server/game/Chat/Chat.cpp | 75 | ||||
| -rw-r--r-- | src/server/game/Chat/Chat.h | 1 | ||||
| -rw-r--r-- | src/server/game/Chat/LanguageMgr.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/DataStores/DB2Stores.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/DataStores/GameTables.cpp | 9 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/ObjectGuid.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptReloadMgr.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSocket.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellScript.h | 2 | ||||
| -rw-r--r-- | src/server/game/Tools/PlayerDump.cpp | 11 |
11 files changed, 31 insertions, 93 deletions
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp index 3398503d270..dc423a55986 100644 --- a/src/server/game/Chat/Channels/Channel.cpp +++ b/src/server/game/Chat/Channels/Channel.cpp @@ -77,9 +77,16 @@ Channel::Channel(ObjectGuid const& guid, std::string const& name, uint32 team /* for (std::string_view guid : Trinity::Tokenize(banList, ' ', false)) { // legacy db content might not have 0x prefix, account for that - std::string bannedGuidStr(guid.size() > 2 && guid.substr(0, 2) == "0x" ? guid.substr(2) : guid); + if (guid.size() > 2 && guid.substr(0, 2) == "0x") + guid.remove_suffix(2); + + Optional<uint64> high = Trinity::StringTo<uint64>(guid.substr(0, 16), 16); + Optional<uint64> low = Trinity::StringTo<uint64>(guid.substr(16, 16), 16); + if (!high || !low) + continue; + ObjectGuid banned; - banned.SetRawValue(uint64(strtoull(bannedGuidStr.substr(0, 16).c_str(), nullptr, 16)), uint64(strtoull(bannedGuidStr.substr(16).c_str(), nullptr, 16))); + banned.SetRawValue(*high, *low); if (!banned) continue; diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index b1b1a221c2f..832d14631bc 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -22,18 +22,15 @@ #include "ChatCommand.h" #include "ChatPackets.h" #include "Common.h" -#include "DatabaseEnv.h" -#include "DB2Stores.h" #include "GridNotifiersImpl.h" #include "Group.h" #include "Language.h" -#include "Log.h" #include "ObjectAccessor.h" #include "ObjectMgr.h" #include "Optional.h" #include "Player.h" #include "Realm.h" -#include "ScriptMgr.h" +#include "StringConvert.h" #include "World.h" #include "WorldSession.h" #include <boost/algorithm/string/replace.hpp> @@ -413,72 +410,6 @@ Creature* ChatHandler::GetCreatureFromPlayerMapByDbGuid(ObjectGuid::LowType lowg return creature; } -enum SpellLinkType -{ - SPELL_LINK_SPELL = 0, - SPELL_LINK_TALENT = 1, - SPELL_LINK_ENCHANT = 2, - SPELL_LINK_TRADE = 3, - SPELL_LINK_GLYPH = 4 -}; - -static char const* const spellKeys[] = -{ - "Hspell", // normal spell - "Htalent", // talent spell - "Henchant", // enchanting recipe spell - "Htrade", // profession/skill spell - "Hglyph", // glyph - nullptr -}; - -uint32 ChatHandler::extractSpellIdFromLink(char* text) -{ - // number or [name] Shift-click form |color|Henchant:recipe_spell_id|h[prof_name: recipe_name]|h|r - // number or [name] Shift-click form |color|Hglyph:glyph_slot_id:glyph_prop_id|h[%s]|h|r - // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r - // number or [name] Shift-click form |color|Htalent:talent_id, rank|h[name]|h|r - // number or [name] Shift-click form |color|Htrade:spell_id, skill_id, max_value, cur_value|h[name]|h|r - int type = 0; - char* param1_str = nullptr; - char* idS = extractKeyFromLink(text, spellKeys, &type, ¶m1_str); - if (!idS) - return 0; - - uint32 id = atoul(idS); - - switch (type) - { - case SPELL_LINK_SPELL: - return id; - case SPELL_LINK_TALENT: - { - // talent - TalentEntry const* talentEntry = sTalentStore.LookupEntry(id); - if (!talentEntry) - return 0; - - return talentEntry->SpellID; - } - case SPELL_LINK_ENCHANT: - case SPELL_LINK_TRADE: - return id; - case SPELL_LINK_GLYPH: - { - uint32 glyph_prop_id = param1_str ? atoul(param1_str) : 0; - - GlyphPropertiesEntry const* glyphPropEntry = sGlyphPropertiesStore.LookupEntry(glyph_prop_id); - if (!glyphPropEntry) - return 0; - - return glyphPropEntry->SpellID; - } - } - - // unknown type? - return 0; -} - enum GuidLinkType { GUID_LINK_PLAYER = 0, // must be first for selection in not link case @@ -526,13 +457,13 @@ ObjectGuid::LowType ChatHandler::extractLowGuidFromLink(char* text, HighGuid& gu case GUID_LINK_CREATURE: { guidHigh = HighGuid::Creature; - ObjectGuid::LowType lowguid = atoull(idS); + ObjectGuid::LowType lowguid = Trinity::StringTo<ObjectGuid::LowType>(idS).value_or(UI64LIT(0)); return lowguid; } case GUID_LINK_GAMEOBJECT: { guidHigh = HighGuid::GameObject; - ObjectGuid::LowType lowguid = atoull(idS); + ObjectGuid::LowType lowguid = Trinity::StringTo<ObjectGuid::LowType>(idS).value_or(UI64LIT(0)); return lowguid; } } diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h index 53a49cc058c..2d9b49fb6b5 100644 --- a/src/server/game/Chat/Chat.h +++ b/src/server/game/Chat/Chat.h @@ -98,7 +98,6 @@ class TC_GAME_API ChatHandler char* extractKeyFromLink(char* text, char const* linkType, char** something1 = nullptr); char* extractKeyFromLink(char* text, char const* const* linkTypes, int* found_idx, char** something1 = nullptr); char* extractQuotedArg(char* args); - uint32 extractSpellIdFromLink(char* text); ObjectGuid::LowType extractLowGuidFromLink(char* text, HighGuid& guidHigh); bool GetPlayerGroupAndGUIDByName(const char* cname, Player*& player, Group*& group, ObjectGuid& guid, bool offline = false); std::string extractPlayerNameFromLink(char* text); diff --git a/src/server/game/Chat/LanguageMgr.cpp b/src/server/game/Chat/LanguageMgr.cpp index d383f152513..9fc877944bc 100644 --- a/src/server/game/Chat/LanguageMgr.cpp +++ b/src/server/game/Chat/LanguageMgr.cpp @@ -237,7 +237,7 @@ std::string LanguageMgr::Translate(std::string const& msg, uint32 language, Loca for (size_t i = 0; i < length; ++i) { if (str[i] >= 'A' && str[i] <= 'Z') - result += char(toupper(replacementWord[i])); + result += charToUpper(replacementWord[i]); else result += replacementWord[i]; } @@ -252,9 +252,9 @@ std::string LanguageMgr::Translate(std::string const& msg, uint32 language, Loca for (size_t i = 0; i < length; ++i) { if (isUpper(wstrSourceWord[i])) - result += char(toupper(replacementWord[i])); + result += charToUpper(replacementWord[i]); else - result += char(tolower(replacementWord[i])); + result += charToLower(replacementWord[i]); } } break; diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 6aa2d59b967..05c093d7717 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -2981,7 +2981,7 @@ PowerTypeEntry const* DB2Manager::GetPowerTypeByName(std::string const& name) co for (PowerTypeEntry const* powerType : sPowerTypeStore) { std::string powerName = powerType->NameGlobalStringTag; - std::transform(powerName.begin(), powerName.end(), powerName.begin(), [](char c) { return char(::tolower(c)); }); + strToLower(powerName); if (powerName == name) return powerType; diff --git a/src/server/game/DataStores/GameTables.cpp b/src/server/game/DataStores/GameTables.cpp index e164253a084..0d30439c685 100644 --- a/src/server/game/DataStores/GameTables.cpp +++ b/src/server/game/DataStores/GameTables.cpp @@ -19,6 +19,7 @@ #include "ItemTemplate.h" #include "Timer.h" #include "Log.h" +#include "StringConvert.h" #include "Util.h" #include <boost/filesystem/path.hpp> #include <fstream> @@ -84,14 +85,14 @@ inline uint32 LoadGameTable(std::vector<std::string>& errors, GameTable<T>& stor ASSERT(std::size_t(std::distance(values.begin(), end)) == columnDefs.size(), SZFMTD " == " SZFMTD, std::size_t(std::distance(values.begin(), end)), columnDefs.size()); // client ignores id column - CombatRatings has copypasted rows for levels > 110 - //ASSERT(strtol(values[0], nullptr, 10) == data.size(), - // "Unexpected row identifier %u at row " SZFMTD " (expected " SZFMTD ")", - // strtol(values[0], nullptr, 10), data.size(), data.size()); + //ASSERT(Trinity::StringTo<int32>(values[0], 10) == data.size(), + // "Unexpected row identifier %d at row " SZFMTD " (expected " SZFMTD ")", + // Trinity::StringTo<int32>(values[0], 10).value_or(0), data.size(), data.size()); data.emplace_back(); float* row = reinterpret_cast<float*>(&data.back()); for (auto itr = values.begin() + 1; itr != end; ++itr) - *row++ = strtof(itr->data(), nullptr); + *row++ = Trinity::StringTo<float>(itr->data(), 10).value_or(0.0f); } storage.SetData(std::move(data)); diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp index 0d6fd328be3..77e9bef5746 100644 --- a/src/server/game/Entities/Object/ObjectGuid.cpp +++ b/src/server/game/Entities/Object/ObjectGuid.cpp @@ -535,7 +535,7 @@ std::string ObjectGuid::ToString() const std::string ObjectGuid::ToHexString() const { - return Trinity::StringFormat("0x%016llX%016llX", _data[1], _data[0]); + return Trinity::StringFormat("0x{:016X}{:016X}", _data[1], _data[0]); } ObjectGuid ObjectGuid::FromString(std::string const& guidString) diff --git a/src/server/game/Scripting/ScriptReloadMgr.cpp b/src/server/game/Scripting/ScriptReloadMgr.cpp index 16d52343119..121cbc2286c 100644 --- a/src/server/game/Scripting/ScriptReloadMgr.cpp +++ b/src/server/game/Scripting/ScriptReloadMgr.cpp @@ -384,8 +384,7 @@ static std::shared_ptr<Trinity::AsyncProcessResult> InvokeAsyncCMakeCommand(T&&. static std::string CalculateScriptModuleProjectName(std::string const& module) { std::string module_project = "scripts_" + module; - std::transform(module_project.begin(), module_project.end(), - module_project.begin(), ::tolower); + strToLower(module_project); return module_project; } diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 93991977321..08c972cc12f 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -823,7 +823,7 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr<WorldPackets::Auth:: //! Negative mutetime indicates amount of seconds to be muted effective on next login - which is now. if (mutetime < 0) { - mutetime = GameTime::GetGameTime() + llabs(mutetime); + mutetime = GameTime::GetGameTime() + std::llabs(mutetime); stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_MUTE_TIME_LOGIN); stmt->setInt64(0, mutetime); diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h index 038020536cc..db41de17c8c 100644 --- a/src/server/game/Spells/SpellScript.h +++ b/src/server/game/Spells/SpellScript.h @@ -412,7 +412,7 @@ class TC_GAME_API SpellScript : public _SpellScript class OnCalculateResistAbsorbHandlerFunction : public SpellScript::OnCalculateResistAbsorbHandler { public: explicit OnCalculateResistAbsorbHandlerFunction(SpellOnResistAbsorbCalculateFnType _onCalculateResistAbsorbScript) : SpellScript::OnCalculateResistAbsorbHandler((SpellScript::SpellOnResistAbsorbCalculateFnType)_onCalculateResistAbsorbScript) { } }; \ class ObjectAreaTargetSelectHandlerFunction : public SpellScript::ObjectAreaTargetSelectHandler { public: explicit ObjectAreaTargetSelectHandlerFunction(SpellObjectAreaTargetSelectFnType _pObjectAreaTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::ObjectAreaTargetSelectHandler((SpellScript::SpellObjectAreaTargetSelectFnType)_pObjectAreaTargetSelectHandlerScript, _effIndex, _targetType) { } }; \ class ObjectTargetSelectHandlerFunction : public SpellScript::ObjectTargetSelectHandler { public: explicit ObjectTargetSelectHandlerFunction(SpellObjectTargetSelectFnType _pObjectTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::ObjectTargetSelectHandler((SpellScript::SpellObjectTargetSelectFnType)_pObjectTargetSelectHandlerScript, _effIndex, _targetType) { } }; \ - class DestinationTargetSelectHandlerFunction : public SpellScript::DestinationTargetSelectHandler { public: explicit DestinationTargetSelectHandlerFunction(SpellDestinationTargetSelectFnType _DestinationTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::DestinationTargetSelectHandler((SpellScript::SpellDestinationTargetSelectFnType)_DestinationTargetSelectHandlerScript, _effIndex, _targetType) { } }; + class DestinationTargetSelectHandlerFunction : public SpellScript::DestinationTargetSelectHandler { public: explicit DestinationTargetSelectHandlerFunction(SpellDestinationTargetSelectFnType _DestinationTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::DestinationTargetSelectHandler((SpellScript::SpellDestinationTargetSelectFnType)_DestinationTargetSelectHandlerScript, _effIndex, _targetType) { } } #define PrepareSpellScript(CLASSNAME) SPELLSCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) SPELLSCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME) public: diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp index 0eabe462431..5fe16403faa 100644 --- a/src/server/game/Tools/PlayerDump.cpp +++ b/src/server/game/Tools/PlayerDump.cpp @@ -23,6 +23,7 @@ #include "Log.h" #include "ObjectMgr.h" #include "Player.h" +#include "StringConvert.h" #include "World.h" #include <boost/algorithm/string/find.hpp> #include <fstream> @@ -592,7 +593,7 @@ inline T RegisterNewGuid(T oldGuid, MapType<T, T, Rest...>& guidMap, T guidOffse template <typename T, template<class, class, class...> class MapType, class... Rest> inline bool ChangeGuid(TableStruct const& ts, std::string& str, std::string const& column, MapType<T, T, Rest...>& guidMap, T guidOffset, bool allowZero = false) { - T oldGuid(atoull(GetColumn(ts, str, column).c_str())); + T oldGuid = Trinity::StringTo<T>(GetColumn(ts, str, column)).template value_or<T>(0); if (allowZero && !oldGuid) return true; // not an error @@ -1015,10 +1016,10 @@ DumpReturn PlayerDumpReader::LoadDump(std::istream& input, uint32 account, std:: { case DTT_CHARACTER: { - race = uint8(atoul(GetColumn(ts, line, "race").c_str())); - playerClass = uint8(atoul(GetColumn(ts, line, "class").c_str())); - gender = uint8(atoul(GetColumn(ts, line, "gender").c_str())); - level = uint8(atoul(GetColumn(ts, line, "level").c_str())); + race = Trinity::StringTo<uint8>(GetColumn(ts, line, "race")).value_or<uint8>(0); + playerClass = Trinity::StringTo<uint8>(GetColumn(ts, line, "class")).value_or<uint8>(0); + gender = Trinity::StringTo<uint8>(GetColumn(ts, line, "gender")).value_or<uint8>(0); + level = Trinity::StringTo<uint8>(GetColumn(ts, line, "level")).value_or<uint8>(0); if (name.empty()) { // generate a temporary name |
