Merge pull request #187 from Brentdevent/server_console_name
Change server console window title to server name
This commit is contained in:
commit
a06d709b33
@ -1,8 +1,10 @@
|
|||||||
#include <std_include.hpp>
|
#include <std_include.hpp>
|
||||||
|
#include "console.hpp"
|
||||||
#include "loader/component_loader.hpp"
|
#include "loader/component_loader.hpp"
|
||||||
#include "resource.hpp"
|
#include "resource.hpp"
|
||||||
|
|
||||||
#include "game/game.hpp"
|
#include "game/game.hpp"
|
||||||
|
#include "scheduler.hpp"
|
||||||
|
|
||||||
#include <utils/thread.hpp>
|
#include <utils/thread.hpp>
|
||||||
#include <utils/hook.hpp>
|
#include <utils/hook.hpp>
|
||||||
@ -14,6 +16,11 @@
|
|||||||
|
|
||||||
namespace console
|
namespace console
|
||||||
{
|
{
|
||||||
|
void set_title(const std::string& title)
|
||||||
|
{
|
||||||
|
SetWindowTextA(*game::s_wcd::hWnd, title.data());
|
||||||
|
}
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
utils::image::object logo;
|
utils::image::object logo;
|
||||||
|
6
src/client/component/console.hpp
Normal file
6
src/client/component/console.hpp
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace console
|
||||||
|
{
|
||||||
|
void set_title(const std::string& title);
|
||||||
|
}
|
53
src/client/component/dedicated_info.cpp
Normal file
53
src/client/component/dedicated_info.cpp
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#include <std_include.hpp>
|
||||||
|
#include "loader/component_loader.hpp"
|
||||||
|
|
||||||
|
#include "game/game.hpp"
|
||||||
|
#include "game/utils.hpp"
|
||||||
|
#include "scheduler.hpp"
|
||||||
|
#include "getinfo.hpp"
|
||||||
|
#include "console.hpp"
|
||||||
|
|
||||||
|
#include <utils/string.hpp>
|
||||||
|
|
||||||
|
namespace dedicated_info
|
||||||
|
{
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
void set_server_info_in_console_title()
|
||||||
|
{
|
||||||
|
const auto sv_running = game::Dvar_FindVar("sv_running");
|
||||||
|
const auto server_name = game::get_dvar_string("live_steam_server_name");
|
||||||
|
|
||||||
|
if (!sv_running || !sv_running->current.enabled)
|
||||||
|
{
|
||||||
|
std::string idle_text = server_name + " - not running";
|
||||||
|
console::set_title(idle_text);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto mapname = game::get_dvar_string("mapname");
|
||||||
|
|
||||||
|
std::string window_text = utils::string::va("%s on %s [%d/%d] (%d)",
|
||||||
|
server_name.data(),
|
||||||
|
mapname.data(),
|
||||||
|
getinfo::get_client_count(),
|
||||||
|
getinfo::get_max_client_count(),
|
||||||
|
getinfo::get_bot_count());
|
||||||
|
|
||||||
|
console::set_title(window_text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class component final : public server_component
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void post_unpack() override
|
||||||
|
{
|
||||||
|
scheduler::loop([]()
|
||||||
|
{
|
||||||
|
set_server_info_in_console_title();
|
||||||
|
}, scheduler::pipeline::main, 1s);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
REGISTER_COMPONENT(dedicated_info::component)
|
@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
namespace getinfo
|
namespace getinfo
|
||||||
{
|
{
|
||||||
namespace
|
|
||||||
{
|
|
||||||
int get_max_client_count()
|
int get_max_client_count()
|
||||||
{
|
{
|
||||||
return game::get_dvar_int("com_maxclients");
|
return game::get_dvar_int("com_maxclients");
|
||||||
@ -41,6 +39,23 @@ namespace getinfo
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int get_bot_count()
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < get_max_client_count(); ++i)
|
||||||
|
{
|
||||||
|
if (game::SV_IsTestClient(i))
|
||||||
|
{
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
int Com_SessionMode_GetGameMode()
|
int Com_SessionMode_GetGameMode()
|
||||||
{
|
{
|
||||||
return *reinterpret_cast<int*>(game::select(0x1568EF7F4, 0x14948DB04)) << 14 >> 28;
|
return *reinterpret_cast<int*>(game::select(0x1568EF7F4, 0x14948DB04)) << 14 >> 28;
|
||||||
|
8
src/client/component/getinfo.hpp
Normal file
8
src/client/component/getinfo.hpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace getinfo
|
||||||
|
{
|
||||||
|
int get_max_client_count();
|
||||||
|
int get_client_count();
|
||||||
|
int get_bot_count();
|
||||||
|
}
|
@ -22,11 +22,11 @@ namespace game
|
|||||||
WEAK symbol<void(const char* file, int line, int code, const char* fmt, ...)> Com_Error_{0x1420F8BD0};
|
WEAK symbol<void(const char* file, int line, int code, const char* fmt, ...)> Com_Error_{0x1420F8BD0};
|
||||||
WEAK symbol<bool(eModes mode)> Com_SessionMode_IsMode{0x1420F7DD0};
|
WEAK symbol<bool(eModes mode)> Com_SessionMode_IsMode{0x1420F7DD0};
|
||||||
WEAK symbol<bool()> Com_IsRunningUILevel{0x142148DB0};
|
WEAK symbol<bool()> Com_IsRunningUILevel{0x142148DB0};
|
||||||
WEAK symbol<void(uint32_t localClientNum, eModes fromMode, eModes toMode, uint32_t flags)> Com_SwitchMode{
|
WEAK symbol<void(int localClientNum, eModes fromMode, eModes toMode, uint32_t flags)> Com_SwitchMode{
|
||||||
0x14214AF30
|
0x14214AF30
|
||||||
};
|
};
|
||||||
|
|
||||||
WEAK symbol<void(uint32_t localClientNum, const char* text)> Cbuf_AddText{0x1420EC8B0, 0x1404F75B0};
|
WEAK symbol<void(int localClientNum, const char* text)> Cbuf_AddText{0x1420EC8B0, 0x1404F75B0};
|
||||||
WEAK symbol<void(int localClientNum, ControllerIndex_t controllerIndex, const char* buffer)> Cbuf_ExecuteBuffer{
|
WEAK symbol<void(int localClientNum, ControllerIndex_t controllerIndex, const char* buffer)> Cbuf_ExecuteBuffer{
|
||||||
0x14133BE10, 0x1404F78D0
|
0x14133BE10, 0x1404F78D0
|
||||||
};
|
};
|
||||||
@ -38,8 +38,8 @@ namespace game
|
|||||||
{
|
{
|
||||||
0x0, 0x1404F8280
|
0x0, 0x1404F8280
|
||||||
};
|
};
|
||||||
WEAK symbol<void(uint32_t localClientNum, ControllerIndex_t controllerIndex, const char* text,
|
WEAK symbol<void(int localClientNum, ControllerIndex_t controllerIndex, const char* text,
|
||||||
bool fromRemoteConsol)> Cmd_ExecuteSingleCommand{
|
bool fromRemoteConsole)> Cmd_ExecuteSingleCommand{
|
||||||
0x1420EDC20
|
0x1420EDC20
|
||||||
};
|
};
|
||||||
WEAK symbol<void(char* text, int maxSize)> Con_GetTextCopy{0x14133A7D0, 0x140182C40};
|
WEAK symbol<void(char* text, int maxSize)> Con_GetTextCopy{0x14133A7D0, 0x140182C40};
|
||||||
@ -81,26 +81,26 @@ namespace game
|
|||||||
WEAK symbol<const char*(const dvar_t* dvar)> Dvar_GetDebugName{0x1422BDCB0};
|
WEAK symbol<const char*(const dvar_t* dvar)> Dvar_GetDebugName{0x1422BDCB0};
|
||||||
WEAK symbol<const char*(const dvar_t* dvar)> Dvar_GetString{0x1422BFFF0, 0x140575E30};
|
WEAK symbol<const char*(const dvar_t* dvar)> Dvar_GetString{0x1422BFFF0, 0x140575E30};
|
||||||
WEAK symbol<const char*(const dvar_t* dvar)> Dvar_DisplayableValue{0x1422BCAE0};
|
WEAK symbol<const char*(const dvar_t* dvar)> Dvar_DisplayableValue{0x1422BCAE0};
|
||||||
WEAK symbol<bool(const dvar_t* dvar)> Dvar_GetBool{ 0x1422BD930 };
|
WEAK symbol<bool(const dvar_t* dvar)> Dvar_GetBool{0x1422BD930};
|
||||||
WEAK symbol<dvar_t*(dvarStrHash_t hash, const char* dvarName, bool value, dvarFlags_e flags, const char* description)> Dvar_RegisterBool{
|
WEAK symbol<dvar_t*(dvarStrHash_t hash, const char* dvarName, bool value, dvarFlags_e flags, const char* description)> Dvar_RegisterBool{
|
||||||
0x1422D1360
|
0x1422D1360
|
||||||
};
|
};
|
||||||
WEAK symbol<void (void (*callback)(const dvar_t*, void*), void* userData)> Dvar_ForEach{ 0x1422BD760 };
|
WEAK symbol<void (void (*callback)(const dvar_t*, void*), void* userData)> Dvar_ForEach{0x1422BD760};
|
||||||
WEAK symbol<void(const char* dvarName, const char* string, bool createIfMissing)> Dvar_SetFromStringByName{
|
WEAK symbol<void(const char* dvarName, const char* string, bool createIfMissing)> Dvar_SetFromStringByName{
|
||||||
0x1422C7F60
|
0x1422C7F60
|
||||||
};
|
};
|
||||||
WEAK symbol<char> s_dvarPool{ 0x157AC8220 };
|
WEAK symbol<char> s_dvarPool{0x157AC8220};
|
||||||
WEAK symbol<int> g_dvarCount{ 0x157AC81CC };
|
WEAK symbol<int> g_dvarCount{0x157AC81CC};
|
||||||
|
|
||||||
// UI
|
// UI
|
||||||
WEAK symbol<void(bool frontend)> UI_CoD_Init{ 0x141F298B0, 0x0 };
|
WEAK symbol<void(bool frontend)> UI_CoD_Init{0x141F298B0, 0x0};
|
||||||
WEAK symbol<void()> UI_CoD_LobbyUI_Init{ 0x141F2C620, 0x0 };
|
WEAK symbol<void()> UI_CoD_LobbyUI_Init{0x141F2C620, 0x0};
|
||||||
WEAK symbol<void()> UI_CoD_Shutdown{ 0x141F336B0, 0x0 };
|
WEAK symbol<void()> UI_CoD_Shutdown{0x141F336B0, 0x0};
|
||||||
WEAK symbol<void(const char*, const char*, int, game::hks::lua_State*)> UI_AddMenu{ 0x1427024B0, 0x0 };
|
WEAK symbol<void(const char*, const char*, int, game::hks::lua_State*)> UI_AddMenu{0x1427024B0, 0x0};
|
||||||
WEAK symbol<const char* (int)> UI_CoD_GetRootNameForController{ 0x141F291E0, 0x0 };
|
WEAK symbol<const char* (int)> UI_CoD_GetRootNameForController{0x141F291E0, 0x0};
|
||||||
WEAK symbol<void(game::hks::lua_State*, const char*)> Lua_CoD_LoadLuaFile{ 0x141F122C0, 0x0 };
|
WEAK symbol<void(game::hks::lua_State*, const char*)> Lua_CoD_LoadLuaFile{0x141F122C0, 0x0};
|
||||||
WEAK symbol<void(int localClientNum)> CG_LUIHUDRestart{ 0x140F7E970 };
|
WEAK symbol<void(int localClientNum)> CG_LUIHUDRestart{0x140F7E970};
|
||||||
WEAK symbol<void(int localClientNum)> CL_CheckKeepDrawingConnectScreen{ 0x1413CCAE0 };
|
WEAK symbol<void(int localClientNum)> CL_CheckKeepDrawingConnectScreen{0x1413CCAE0};
|
||||||
|
|
||||||
// Scr
|
// Scr
|
||||||
WEAK symbol<void(scriptInstance_t inst, int value)> Scr_AddInt{0x0, 0x14016F160};
|
WEAK symbol<void(scriptInstance_t inst, int value)> Scr_AddInt{0x0, 0x14016F160};
|
||||||
@ -125,6 +125,7 @@ namespace game
|
|||||||
// SV
|
// SV
|
||||||
WEAK symbol<void*()> SV_AddTestClient{0x1422499A0, 0x14052E3E0};
|
WEAK symbol<void*()> SV_AddTestClient{0x1422499A0, 0x14052E3E0};
|
||||||
WEAK symbol<void(client_s* cl_0, svscmd_type type, const char* fmt, ...)> SV_SendServerCommand{0x0, 0x140537F10};
|
WEAK symbol<void(client_s* cl_0, svscmd_type type, const char* fmt, ...)> SV_SendServerCommand{0x0, 0x140537F10};
|
||||||
|
WEAK symbol<bool(int clientNum)> SV_IsTestClient{0x14224B5C0, 0x14052FF40};
|
||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
|
|
||||||
@ -164,21 +165,21 @@ namespace game
|
|||||||
|
|
||||||
namespace hks
|
namespace hks
|
||||||
{
|
{
|
||||||
WEAK symbol<lua_State*> lua_state { 0x159C78D88 };
|
WEAK symbol<lua_State*> lua_state {0x159C78D88};
|
||||||
WEAK symbol<void(lua_State* s, const char* str, unsigned int l)> hksi_lua_pushlstring{ 0x140A18430 };
|
WEAK symbol<void(lua_State* s, const char* str, unsigned int l)> hksi_lua_pushlstring{0x140A18430};
|
||||||
|
|
||||||
WEAK symbol<void(lua_State* s, const HksObject* tbl, const HksObject* key, const HksObject* val)> hks_obj_settable{ 0x141D4B660 };
|
WEAK symbol<void(lua_State* s, const HksObject* tbl, const HksObject* key, const HksObject* val)> hks_obj_settable{0x141D4B660};
|
||||||
WEAK symbol<HksObject* (HksObject* result, lua_State* s, const HksObject* table, const HksObject* key)> hks_obj_gettable{ 0x141D4ABF0 };
|
WEAK symbol<HksObject* (HksObject* result, lua_State* s, const HksObject* table, const HksObject* key)> hks_obj_gettable{0x141D4ABF0};
|
||||||
WEAK symbol<void(lua_State* s, int nargs, int nresults, const unsigned int* pc)> vm_call_internal{ 0x141D71070 };
|
WEAK symbol<void(lua_State* s, int nargs, int nresults, const unsigned int* pc)> vm_call_internal{0x141D71070};
|
||||||
WEAK symbol<HashTable* (lua_State* s, unsigned int arraySize, unsigned int hashSize)> Hashtable_Create{ 0x141D3B5F0 };
|
WEAK symbol<HashTable* (lua_State* s, unsigned int arraySize, unsigned int hashSize)> Hashtable_Create{0x141D3B5F0};
|
||||||
WEAK symbol<cclosure* (lua_State* s, lua_function function, int num_upvalues, int internal_, int profilerTreatClosureAsFunc)> cclosure_Create{ 0x141D3B7E0 };
|
WEAK symbol<cclosure* (lua_State* s, lua_function function, int num_upvalues, int internal_, int profilerTreatClosureAsFunc)> cclosure_Create{0x141D3B7E0};
|
||||||
WEAK symbol<int(lua_State* s, int t)> hksi_luaL_ref{ 0x141D4D1A0 };
|
WEAK symbol<int(lua_State* s, int t)> hksi_luaL_ref{0x141D4D1A0};
|
||||||
WEAK symbol<void(lua_State* s, int t, int ref)> hksi_luaL_unref{ 0x141D4D320 };
|
WEAK symbol<void(lua_State* s, int t, int ref)> hksi_luaL_unref{0x141D4D320};
|
||||||
|
|
||||||
WEAK symbol<int(lua_State* s, const HksCompilerSettings* options, const char* buff, unsigned __int64 sz, const char* name)> hksi_hksL_loadbuffer{ 0x141D4BD80 };
|
WEAK symbol<int(lua_State* s, const HksCompilerSettings* options, const char* buff, unsigned __int64 sz, const char* name)> hksi_hksL_loadbuffer{0x141D4BD80};
|
||||||
WEAK symbol<int(lua_State* s, const char* what, lua_Debug* ar)> hksi_lua_getinfo{ 0x141D4D960 };
|
WEAK symbol<int(lua_State* s, const char* what, lua_Debug* ar)> hksi_lua_getinfo{0x141D4D960};
|
||||||
WEAK symbol<int(lua_State* s, int level, lua_Debug* ar)> hksi_lua_getstack{ 0x141D4DC20 };
|
WEAK symbol<int(lua_State* s, int level, lua_Debug* ar)> hksi_lua_getstack{0x141D4DC20};
|
||||||
WEAK symbol<void(lua_State* s, const char* fmt, ...)> hksi_luaL_error{ 0x141D4D050 };
|
WEAK symbol<void(lua_State* s, const char* fmt, ...)> hksi_luaL_error{0x141D4D050};
|
||||||
WEAK symbol<const char*> s_compilerTypeName{ 0x140A18430 };
|
WEAK symbol<const char*> s_compilerTypeName{0x140A18430};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user