diff --git a/src/client/Client.cpp b/src/client/Client.cpp index 3cf6e0d..c5e87dd 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -178,7 +178,12 @@ int32_t InitializeGlobal() { ConsoleInitializeClientCommand(); - CVar::Initialize("Config.wtf"); + ConsoleInitializeClientCVar("Config.wtf"); + + // TODO + // replace enUS with detected locale + ClientServices::InitLoginServerCVars(1, "enUS"); + // sub_7663F0(); // v18 = 0; diff --git a/src/client/ClientServices.cpp b/src/client/ClientServices.cpp index 13e9347..078f55c 100644 --- a/src/client/ClientServices.cpp +++ b/src/client/ClientServices.cpp @@ -4,6 +4,7 @@ #include "net/Connection.hpp" #include "net/Login.hpp" #include "console/CVar.hpp" +#include "console/Types.hpp" #include #include #include @@ -16,7 +17,6 @@ ClientConnection* ClientServices::s_currentConnection; ClientServices* ClientServices::s_instance; Login* ClientServices::s_loginObj; bool ClientServices::s_newLogin; -CVar* ClientServices::s_realmNameVar; REALM_INFO ClientServices::s_selectRealmInfo; bool ClientServices::s_selectRealmInfoValid; @@ -138,9 +138,19 @@ void ClientServices::Logon(const char* accountName, const char* password) { ClientServices::s_loginObj->SetLogonCreds(accountName, password); + auto loginServerType = ClientServices::s_loginObj->GetLoginServerType(); + + auto portal = loginServerType == 1 ? + ClientServices::s_darkPortalVar->GetString() : + ""; + + auto realmList = loginServerType == 1 ? + ClientServices::s_realmListBNVar->GetString() : + ClientServices::s_realmListVar->GetString(); + // TODO - ClientServices::s_loginObj->Logon(nullptr, nullptr); + ClientServices::s_loginObj->Logon(realmList, portal); } void ClientServices::SelectRealm(const char* realmName) { @@ -229,3 +239,107 @@ void ClientServices::RealmEnumCallback(uint32_t a2) { ClientServices::ConnectToSelectedServer(); } + +const char* ClientServices::GetDefaultRealmlistString() { + // TODO + + // return default us realmlist for now + + return "us.logon.worldofwarcraft.com:3724"; +} + +const char* ClientServices::GetDefaultPatchListString() { + // TODO + + // Return default patchlist for now + + return "public-test.patch.battle.net:1119/patch"; +} + +void ClientServices::InitLoginServerCVars(int32_t overwrite, const char* locale) { + if ((ClientServices::s_realmListBNVar == nullptr || ClientServices::s_realmListVar == nullptr) || overwrite != 0 ) { + ClientServices::s_decorateAccountName = CVar::Register( + "decorateAccountName", + "", + 0, + "0", + nullptr, + CATEGORY::NET, + false, + nullptr, + false); + } + + char localRealmList[260] = {0}; + char localDataDir[272] = {0}; + + if (locale == nullptr || *locale == '\0') { + localDataDir[0] = '\0'; + } else { + SStrPrintf(localDataDir, STORM_MAX_PATH, "data\\%s\\", locale); + } + + if ((ClientServices::s_realmListBNVar == nullptr) || overwrite != 0) { + ClientServices::s_realmListBNVar = CVar::Register( + "realmListbn", + "Address of Battle.net server", + 0, + "", + nullptr, + CATEGORY::NET, + false, + nullptr, + false); + + SStrPrintf(localRealmList, STORM_MAX_PATH, "%srealmlistbn.wtf", localDataDir); + + if (ConsoleLoadClientCVar(localRealmList) == 0) { + ConsoleLoadClientCVar("realmlistbn.wtf"); + } + } + + if (ClientServices::s_darkPortalVar == nullptr || overwrite != 0) { + ClientServices::s_darkPortalVar = CVar::Register( + "portal", + "Name of Battle.net portal to use", + 0, + "public-test", + nullptr, + CATEGORY::NET, + false, + nullptr, + false); + } + + if (ClientServices::s_ServerAlertVar == nullptr || overwrite != 0) { + ClientServices::s_ServerAlertVar = CVar::Register( + "serverAlert", + "Get the glue-string tag for the URL", + 0, + "SERVER_ALERT_URL", + nullptr, + CATEGORY::NET, + false, + nullptr, + false); + } + + if (ClientServices::s_ServerAlertVar == nullptr || overwrite != 0) { + ClientServices::s_realmListVar = CVar::Register( + "realmList", + "Address of realm list server", + 0, + ClientServices::GetDefaultRealmlistString(), + nullptr, + CATEGORY::NET, + false, + nullptr, + false); + + SStrPrintf(localRealmList, STORM_MAX_PATH, "%srealmlist.wtf", localDataDir); + + if (ConsoleLoadClientCVar(localRealmList) == 0) { + ConsoleLoadClientCVar("realmlist.wtf"); + } + } +} diff --git a/src/client/ClientServices.hpp b/src/client/ClientServices.hpp index 7b80b60..a17ecd5 100644 --- a/src/client/ClientServices.hpp +++ b/src/client/ClientServices.hpp @@ -17,10 +17,18 @@ class ClientServices : public LoginResponse { static ClientServices* s_instance; static Login* s_loginObj; static bool s_newLogin; - static CVar* s_realmNameVar; static REALM_INFO s_selectRealmInfo; static bool s_selectRealmInfoValid; + // Static console variables + static CVar* s_realmNameVar; + static CVar* s_decorateAccountName; + static CVar* s_realmListBNVar; + static CVar* s_darkPortalVar; + static CVar* s_ServerAlertVar; + static CVar* s_realmListVar; + static CVar* s_patchListVar; + // Static functions static void ConnectToSelectedServer(); static ClientConnection* Connection(); @@ -34,6 +42,9 @@ class ClientServices : public LoginResponse { static void SelectRealm(const char* realmName); static void SetAccountName(const char* accountName); static int32_t SetSelectedRealmInfo(int32_t a1); + static void InitLoginServerCVars(int32_t overwrite, const char* locale) + const char* GetDefaultRealmlistString(); + const char* GetDefaultPatchListString(); // Virtual member functions virtual int32_t GetLoginServerType(); diff --git a/src/console/Client.cpp b/src/console/Client.cpp index b9709cf..6f2c419 100644 --- a/src/console/Client.cpp +++ b/src/console/Client.cpp @@ -1,5 +1,6 @@ #include "console/Client.hpp" #include "console/Command.hpp" +#include "console/CVar.hpp" void ConsoleInitializeClientCommand() { ConsoleCommandInitialize(); @@ -8,5 +9,9 @@ void ConsoleInitializeClientCommand() { } void ConsoleInitializeClientCVar(const char* a1) { - // TODO + CVar::Initialize(a1); +} + +int32_t ConsoleLoadClientCVar(const char* a1) { + return CVar::Load(a1); } diff --git a/src/console/Client.hpp b/src/console/Client.hpp index 3ace87d..082c1d4 100644 --- a/src/console/Client.hpp +++ b/src/console/Client.hpp @@ -1,8 +1,12 @@ #ifndef CONSOLE_CLIENT_HPP #define CONSOLE_CLIENT_HPP +#include + void ConsoleInitializeClientCommand(); void ConsoleInitializeClientCVar(const char* a1); +int32_t ConsoleLoadClientCVar(const char* a1); + #endif diff --git a/src/console/Device.cpp b/src/console/Device.cpp index d3be839..e23d2c7 100644 --- a/src/console/Device.cpp +++ b/src/console/Device.cpp @@ -22,6 +22,10 @@ bool CVGxMaximizeCallback(CVar*, const char*, const char*, void*) { } bool CVGxResolutionCallback(CVar*, const char*, const char*, void*) { + static C2iVector legalSizes[] = { + {} + } + // TODO return true; }