aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/game/Chat/ChatCommands/ChatCommandArgs.h15
-rw-r--r--src/server/game/Chat/Hyperlinks.h34
-rw-r--r--src/server/scripts/Commands/cs_battlenet_account.cpp28
3 files changed, 28 insertions, 49 deletions
diff --git a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
index 271d4850f2a..e2270c0259f 100644
--- a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
+++ b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
@@ -21,6 +21,7 @@
#include "ChatCommandHelpers.h"
#include "ChatCommandTags.h"
#include "SmartEnum.h"
+#include "StringConvert.h"
#include "Util.h"
#include <charconv>
#include <map>
@@ -55,20 +56,10 @@ struct ArgInfo<T, std::enable_if_t<std::is_integral_v<T>>>
char const* next = args;
std::string_view token(args, Trinity::Impl::ChatCommands::tokenize(next));
- if (!token.length())
- return nullptr;
-
- std::from_chars_result result;
- if (StringStartsWith(token, "0x"))
- result = std::from_chars(token.data() + 2, token.data() + token.length(), val, 16);
- else if (StringStartsWith(token, "0b"))
- result = std::from_chars(token.data() + 2, token.data() + token.length(), val, 2);
+ if (Optional<T> v = StringTo<T>(token, 0))
+ val = *v;
else
- result = std::from_chars(token.data(), token.data() + token.length(), val, 10);
-
- if ((token.data() + token.length()) != result.ptr)
return nullptr;
-
return next;
}
};
diff --git a/src/server/game/Chat/Hyperlinks.h b/src/server/game/Chat/Hyperlinks.h
index 960c6a10338..2085a27c4e5 100644
--- a/src/server/game/Chat/Hyperlinks.h
+++ b/src/server/game/Chat/Hyperlinks.h
@@ -19,7 +19,7 @@
#define TRINITY_HYPERLINKS_H
#include "ObjectGuid.h"
-#include "Optional.h"
+#include "StringConvert.h"
#include <string>
#include <type_traits>
#include <utility>
@@ -220,26 +220,28 @@ namespace Trinity::Hyperlinks
return true;
}
- static bool StoreTo(ObjectGuid& val, char const* pos, size_t len)
- {
- val = ObjectGuid::FromString(std::string(pos, len));
- return true;
- }
-
template <typename T>
- static std::enable_if_t<std::is_integral_v<T> && std::is_unsigned_v<T>, bool> StoreTo(T& val, char const* pos, size_t len)
+ static std::enable_if_t<std::is_integral_v<T>, bool> StoreTo(T& val, char const* pos, size_t len)
{
- try { val = std::stoull(std::string(pos, len)); }
- catch (...) { return false; }
- return true;
+ if (Optional<T> res = Trinity::StringTo<T>(std::string_view(pos, len)))
+ {
+ val = *res;
+ return true;
+ }
+ else
+ return false;
}
- template <typename T>
- static std::enable_if_t<std::is_integral_v<T> && std::is_signed_v<T>, bool> StoreTo(T& val, char const* pos, size_t len)
+ static bool StoreTo(ObjectGuid& val, char const* pos, size_t len)
{
- try { val = std::stoll(std::string(pos, len)); }
- catch (...) { return false; }
- return true;
+ ObjectGuid parsed = ObjectGuid::FromString(std::string(pos, len));
+ if (parsed != ObjectGuid::FromStringFailed)
+ {
+ val = parsed;
+ return true;
+ }
+ else
+ return false;
}
};
diff --git a/src/server/scripts/Commands/cs_battlenet_account.cpp b/src/server/scripts/Commands/cs_battlenet_account.cpp
index 748cfbe1aee..c4f0dff6c01 100644
--- a/src/server/scripts/Commands/cs_battlenet_account.cpp
+++ b/src/server/scripts/Commands/cs_battlenet_account.cpp
@@ -68,45 +68,31 @@ public:
}
/// Create an account
- static bool HandleAccountCreateCommand(ChatHandler* handler, char const* args)
+ static bool HandleAccountCreateCommand(ChatHandler* handler, std::string const& accountName, std::string const& password, Optional<bool> createGameAccount)
{
- if (!*args)
- return false;
-
- ///- %Parse the command line arguments
- char* accountName = strtok((char*)args, " ");
- char* password = strtok(nullptr, " ");
- if (!accountName || !password)
- return false;
-
- if (!strchr(accountName, '@'))
+ if (accountName.find('@') == std::string::npos)
{
handler->SendSysMessage(LANG_ACCOUNT_INVALID_BNET_NAME);
handler->SetSentErrorMessage(true);
return false;
}
- char* createGameAccountParam = strtok(nullptr, " ");
- bool createGameAccount = true;
- if (createGameAccountParam)
- createGameAccount = StringToBool(createGameAccountParam);
-
std::string gameAccountName;
- switch (Battlenet::AccountMgr::CreateBattlenetAccount(std::string(accountName), std::string(password), createGameAccount, &gameAccountName))
+ switch (Battlenet::AccountMgr::CreateBattlenetAccount(accountName, password, createGameAccount.value_or(true), &gameAccountName))
{
case AccountOpResult::AOR_OK:
{
- if (createGameAccount)
- handler->PSendSysMessage(LANG_ACCOUNT_CREATED_BNET_WITH_GAME, accountName, gameAccountName.c_str());
+ if (createGameAccount == true)
+ handler->PSendSysMessage(LANG_ACCOUNT_CREATED_BNET_WITH_GAME, accountName.c_str(), gameAccountName.c_str());
else
- handler->PSendSysMessage(LANG_ACCOUNT_CREATED_BNET, accountName);
+ handler->PSendSysMessage(LANG_ACCOUNT_CREATED_BNET, accountName.c_str());
if (handler->GetSession())
{
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (%s) created Battle.net account %s%s%s",
handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(),
handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().ToString().c_str(),
- accountName, createGameAccount ? " with game account " : "", createGameAccount ? gameAccountName.c_str() : "");
+ accountName.c_str(), createGameAccount == true ? " with game account " : "", createGameAccount == true ? gameAccountName.c_str() : "");
}
break;
}