feat(client): use 'realmList' CVar when connecting to realm list server

This commit is contained in:
superp00t 2023-09-01 21:14:28 -04:00
parent 9096894a21
commit d60b85f85c
6 changed files with 148 additions and 5 deletions

View File

@ -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;

View File

@ -4,6 +4,7 @@
#include "net/Connection.hpp"
#include "net/Login.hpp"
#include "console/CVar.hpp"
#include "console/Types.hpp"
#include <storm/Memory.hpp>
#include <storm/String.hpp>
#include <new>
@ -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");
}
}
}

View File

@ -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();

View File

@ -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);
}

View File

@ -1,8 +1,12 @@
#ifndef CONSOLE_CLIENT_HPP
#define CONSOLE_CLIENT_HPP
#include <cstdint>
void ConsoleInitializeClientCommand();
void ConsoleInitializeClientCVar(const char* a1);
int32_t ConsoleLoadClientCVar(const char* a1);
#endif

View File

@ -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;
}