From b366e4ce826c9c7dbeb2af26cb6c34656b2c93f2 Mon Sep 17 00:00:00 2001 From: r-ex <67599507+r-ex@users.noreply.github.com> Date: Sat, 15 Jan 2022 17:57:18 +0000 Subject: [PATCH] sq server browser clean up (#63) * sq server browser clean up * Properly loop through std::vector on GetAvailableMaps. Co-authored-by: IcePixelx <41352111+PixieCore@users.noreply.github.com> --- r5dev/gameui/IBrowser.cpp | 21 +++++----- r5dev/gameui/IBrowser.h | 57 ++++++++++++++++------------ r5dev/squirrel/sqnativefunctions.cpp | 26 ++++++++++--- r5dev/squirrel/sqnativefunctions.h | 3 +- r5dev/squirrel/sqvm.cpp | 35 +++++++++-------- 5 files changed, 86 insertions(+), 56 deletions(-) diff --git a/r5dev/gameui/IBrowser.cpp b/r5dev/gameui/IBrowser.cpp index 1d7a68b0..3a52f3ea 100644 --- a/r5dev/gameui/IBrowser.cpp +++ b/r5dev/gameui/IBrowser.cpp @@ -55,6 +55,7 @@ IBrowser::IBrowser() { m_vszMapsList.push_back(filename); } + m_vszMapFileNameList.push_back(filename); } static std::thread hostingServerRequestThread([this]() @@ -92,24 +93,22 @@ IBrowser::~IBrowser() //----------------------------------------------------------------------------- // Purpose: Sets needed create game vars //----------------------------------------------------------------------------- -void IBrowser::SetMenuVars(std::string name, std::string vis) +void IBrowser::SetMenuVars(std::string name, EServerVisibility vis) { - if (vis == "Public") + switch (vis) { + case EServerVisibility::PUBLIC: m_Server.bHidden = false; - eServerVisibility = EServerVisibility::PUBLIC; - } - else if (vis == "Private") - { - eServerVisibility = EServerVisibility::HIDDEN; + break; + case EServerVisibility::HIDDEN: m_Server.bHidden = true; - } - else - { + break; + default: m_Server.bHidden = true; - eServerVisibility = EServerVisibility::OFFLINE; + break; } + eServerVisibility = vis; m_Server.svServerName = name; UpdateHostingStatus(); diff --git a/r5dev/gameui/IBrowser.h b/r5dev/gameui/IBrowser.h index c0833069..4597e271 100644 --- a/r5dev/gameui/IBrowser.h +++ b/r5dev/gameui/IBrowser.h @@ -3,11 +3,42 @@ #include "networksystem/serverlisting.h" #include "networksystem/r5net.h" +enum class ESection +{ + SERVER_BROWSER, + HOST_SERVER, + SETTINGS +}; + +enum class EHostStatus +{ + NOT_HOSTING, + HOSTING +}; + +enum class EServerVisibility +{ + OFFLINE, + HIDDEN, + PUBLIC +}; + class IBrowser { private: bool m_bInitialized = false; public: + //////////////////// + // Enum Vars // + //////////////////// + + ESection eCurrentSection = ESection::SERVER_BROWSER; + EHostStatus eHostingStatus = EHostStatus::NOT_HOSTING; + EServerVisibility eServerVisibility = EServerVisibility::OFFLINE; +public: + //////////////////// + // Funcs // + //////////////////// IBrowser(); ~IBrowser(); @@ -20,7 +51,7 @@ public: void ConnectToServer(const std::string ip, const std::string port, const std::string encKey); void ConnectToServer(const std::string connString, const std::string encKey); - void SetMenuVars(std::string name, std::string vis); + void SetMenuVars(std::string name, EServerVisibility vis); void HiddenServersModal(); void HostServerSection(); @@ -37,29 +68,6 @@ public: void SetStyleVar(); - //////////////////// - // Enums // - //////////////////// - enum class ESection - { - SERVER_BROWSER, - HOST_SERVER, - SETTINGS - } eCurrentSection = ESection::SERVER_BROWSER; - - enum class EHostStatus - { - NOT_HOSTING, - HOSTING - } eHostingStatus = EHostStatus::NOT_HOSTING; - - enum class EServerVisibility - { - OFFLINE, - HIDDEN, - PUBLIC - } eServerVisibility = EServerVisibility::OFFLINE; - //////////////////// // Server Browser // //////////////////// @@ -93,6 +101,7 @@ public: //////////////////// ServerListing m_Server; std::vector m_vszMapsList; + std::vector m_vszMapFileNameList; std::string m_szHostRequestMessage = ""; std::string m_szHostToken = ""; ImVec4 m_iv4HostRequestMessageColor = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); diff --git a/r5dev/squirrel/sqnativefunctions.cpp b/r5dev/squirrel/sqnativefunctions.cpp index a22eaa7c..4b78dbf1 100644 --- a/r5dev/squirrel/sqnativefunctions.cpp +++ b/r5dev/squirrel/sqnativefunctions.cpp @@ -38,11 +38,11 @@ namespace SQNativeFunctions return SQ_OK; } - SQRESULT GetServerAmount(void* sqvm) + SQRESULT GetServerCount(void* sqvm) { g_pIBrowser->GetServerList(); // Refresh server list. - hsq_pushinteger(sqvm, g_pIBrowser->m_vServerList.size() - 1); // please fix the -1 rexx okay thank you. + hsq_pushinteger(sqvm, g_pIBrowser->m_vServerList.size()); return SQ_OK; } @@ -128,14 +128,13 @@ namespace SQNativeFunctions std::string svName = hsq_getstring(sqvm, 1); std::string svMapName = hsq_getstring(sqvm, 2); std::string svPlaylist = hsq_getstring(sqvm, 3); - std::string svVisibility = hsq_getstring(sqvm, 4); // Rexx please change this to an integer, so we don't have that ghetto switch case in SetMenuVars. + EServerVisibility svVisibility = (EServerVisibility)hsq_getinteger(sqvm, 4); - if (svMapName.empty() || svPlaylist.empty() || svVisibility.empty()) + if (svMapName.empty() || svPlaylist.empty()) return SQ_OK; g_pIBrowser->SetMenuVars(svName, svVisibility); // Pass integer instead - /* Changing this up to call a IBrowser method eventually. */ DevMsg(eDLL_T::ENGINE, "Starting Server with map '%s' and playlist '%s'\n", svMapName.c_str(), svPlaylist.c_str()); @@ -203,5 +202,22 @@ namespace SQNativeFunctions return SQ_OK; } + + SQRESULT GetAvailableMaps(void* sqvm) + { + std::vector mapList = g_pIBrowser->m_vszMapFileNameList; + + DevMsg(eDLL_T::UI, "Requesting an array of %i available maps from script\n", mapList.size()); + + hsq_newarray(sqvm, 0); + + for (auto& it : mapList) + { + hsq_pushstring(sqvm, it.c_str(), -1); + hsq_arrayappend(sqvm, -2); + } + + return SQ_OK; + } } } \ No newline at end of file diff --git a/r5dev/squirrel/sqnativefunctions.h b/r5dev/squirrel/sqnativefunctions.h index 29579027..273f2e44 100644 --- a/r5dev/squirrel/sqnativefunctions.h +++ b/r5dev/squirrel/sqnativefunctions.h @@ -8,7 +8,7 @@ namespace SQNativeFunctions SQRESULT GetServerName(void* sqvm); SQRESULT GetServerPlaylist(void* sqvm); SQRESULT GetServerMap(void* sqvm); - SQRESULT GetServerAmount(void* sqvm); + SQRESULT GetServerCount(void* sqvm); SQRESULT GetSDKVersion(void* sqvm); SQRESULT GetPromoData(void* sqvm); SQRESULT SetEncKeyAndConnect(void* sqvm); @@ -16,5 +16,6 @@ namespace SQNativeFunctions SQRESULT JoinPrivateServerFromMenu(void* sqvm); SQRESULT GetPrivateServerMessage(void* sqvm); SQRESULT ConnectToIPFromMenu(void* sqvm); + SQRESULT GetAvailableMaps(void* sqvm); } } \ No newline at end of file diff --git a/r5dev/squirrel/sqvm.cpp b/r5dev/squirrel/sqvm.cpp index bc071458..cb009f6d 100644 --- a/r5dev/squirrel/sqvm.cpp +++ b/r5dev/squirrel/sqvm.cpp @@ -248,23 +248,28 @@ int HSQVM_NativeTest(void* sqvm) void RegisterUIScriptFunctions(void* sqvm) { - HSQVM_RegisterFunction(sqvm, "UINativeTest", "native ui function", "void", "", &HSQVM_NativeTest); - //Server Browser Data - HSQVM_RegisterFunction(sqvm, "GetServerName", "native ui function", "string", "int", &SQNativeFunctions::IBrowser::GetServerName); - HSQVM_RegisterFunction(sqvm, "GetServerPlaylist", "native ui function", "string", "int", &SQNativeFunctions::IBrowser::GetServerPlaylist); - HSQVM_RegisterFunction(sqvm, "GetServerMap", "native ui function", "string", "int", &SQNativeFunctions::IBrowser::GetServerMap); - HSQVM_RegisterFunction(sqvm, "GetServerAmmount", "native ui function", "int", "", &SQNativeFunctions::IBrowser::GetServerAmount); +#ifndef DEDICATED + HSQVM_RegisterFunction(sqvm, "UINativeTest", "native ui test function", "void", "", &HSQVM_NativeTest); - //Main Menu Data - HSQVM_RegisterFunction(sqvm, "GetSDKVersion", "native ui function", "string", "", &SQNativeFunctions::IBrowser::GetSDKVersion); - HSQVM_RegisterFunction(sqvm, "GetPromoData", "native ui function", "string", "int", &SQNativeFunctions::IBrowser::GetPromoData); + // functions for retrieving server browser data + HSQVM_RegisterFunction(sqvm, "GetServerName", "get name of the server at the specified index of the server list", "string", "int", &SQNativeFunctions::IBrowser::GetServerName); + HSQVM_RegisterFunction(sqvm, "GetServerPlaylist", "get playlist of the server at the specified index of the server list", "string", "int", &SQNativeFunctions::IBrowser::GetServerPlaylist); + HSQVM_RegisterFunction(sqvm, "GetServerMap", "get map of the server at the specified index of the server list", "string", "int", &SQNativeFunctions::IBrowser::GetServerMap); + HSQVM_RegisterFunction(sqvm, "GetServerCount", "get number of public servers", "int", "", &SQNativeFunctions::IBrowser::GetServerCount); - //Connecting To Servers - HSQVM_RegisterFunction(sqvm, "CreateServer", "native ui function", "void", "string,string,string,string", &SQNativeFunctions::IBrowser::CreateServerFromMenu); - HSQVM_RegisterFunction(sqvm, "SetEncKeyAndConnect", "native ui function", "void", "int", &SQNativeFunctions::IBrowser::SetEncKeyAndConnect); - HSQVM_RegisterFunction(sqvm, "JoinPrivateServerFromMenu", "native ui function", "void", "string", &SQNativeFunctions::IBrowser::JoinPrivateServerFromMenu); - HSQVM_RegisterFunction(sqvm, "GetPrivateServerMessage", "native ui function", "string", "string", &SQNativeFunctions::IBrowser::GetPrivateServerMessage); - HSQVM_RegisterFunction(sqvm, "ConnectToIPFromMenu", "native ui function", "void", "string,string", &SQNativeFunctions::IBrowser::ConnectToIPFromMenu); + // misc main menu functions + HSQVM_RegisterFunction(sqvm, "GetSDKVersion", "get sdk version as a string", "string", "", &SQNativeFunctions::IBrowser::GetSDKVersion); + HSQVM_RegisterFunction(sqvm, "GetPromoData", "get promo data for specified slot type", "string", "int", &SQNativeFunctions::IBrowser::GetPromoData); + + // functions for connecting to servers + HSQVM_RegisterFunction(sqvm, "CreateServer", "start server with the specified settings", "void", "string,string,string,int", &SQNativeFunctions::IBrowser::CreateServerFromMenu); + HSQVM_RegisterFunction(sqvm, "SetEncKeyAndConnect", "set the encryption key to that of the specified server and connects to it", "void", "int", &SQNativeFunctions::IBrowser::SetEncKeyAndConnect); + HSQVM_RegisterFunction(sqvm, "JoinPrivateServerFromMenu", "join private server by token", "void", "string", &SQNativeFunctions::IBrowser::JoinPrivateServerFromMenu); + HSQVM_RegisterFunction(sqvm, "GetPrivateServerMessage", "get private server join status message", "string", "string", &SQNativeFunctions::IBrowser::GetPrivateServerMessage); + HSQVM_RegisterFunction(sqvm, "ConnectToIPFromMenu", "join server by ip and encryption key", "void", "string,string", &SQNativeFunctions::IBrowser::ConnectToIPFromMenu); + + HSQVM_RegisterFunction(sqvm, "GetAvailableMaps", "gets an array of all the available maps that can be used to host a server", "array", "", &SQNativeFunctions::IBrowser::GetAvailableMaps); +#endif } void RegisterClientScriptFunctions(void* sqvm)