From 5c06c04fa77e804b7784b03c102a1aabebfa8738 Mon Sep 17 00:00:00 2001 From: Eason <62255465+jonathan-up@users.noreply.github.com> Date: Tue, 8 Apr 2025 20:24:45 +0800 Subject: [PATCH] Add new native `rh_is_server_paused` & `rh_set_server_pause` (#346) --- .../scripting/include/reapi_engine.inc | 18 +++++++++++ reapi/include/cssdk/engine/rehlds_api.h | 5 +++- .../include/cssdk/engine/rehlds_interfaces.h | 10 +++++++ reapi/src/natives/natives_misc.cpp | 30 +++++++++++++++++++ reapi/version/version.h | 2 +- 5 files changed, 63 insertions(+), 2 deletions(-) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_engine.inc b/reapi/extra/amxmodx/scripting/include/reapi_engine.inc index 1107451..62f752b 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_engine.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_engine.inc @@ -300,6 +300,24 @@ native bool:rh_is_entity_fullpacked(const host, const entity, const frame = -1); */ native Float:rh_get_realtime(); +/* +* Checks if server paused +* +* @return Returns true if paused, otherwise false. +* +*/ +native bool:rh_is_server_paused(); + +/* +* Set server pause state +* +* @param status pause state +* +* @noreturn +* +*/ +native rh_set_server_pause(const bool:status); + enum MessageHook { INVALID_MESSAGEHOOK = 0 diff --git a/reapi/include/cssdk/engine/rehlds_api.h b/reapi/include/cssdk/engine/rehlds_api.h index 0444b60..ac41537 100644 --- a/reapi/include/cssdk/engine/rehlds_api.h +++ b/reapi/include/cssdk/engine/rehlds_api.h @@ -38,7 +38,7 @@ #include "pr_dlls.h" #define REHLDS_API_VERSION_MAJOR 3 -#define REHLDS_API_VERSION_MINOR 14 +#define REHLDS_API_VERSION_MINOR 15 //Steam_NotifyClientConnect hook typedef IHookChain IRehldsHook_Steam_NotifyClientConnect; @@ -434,6 +434,9 @@ struct RehldsFuncs_t { void(*MSG_BeginReading)(); double(*GetHostFrameTime)(); struct cmd_function_s *(*GetFirstCmdFunctionHandle)(); + + // Pause + void(*SetServerPause)(bool status); }; class IRehldsApi { diff --git a/reapi/include/cssdk/engine/rehlds_interfaces.h b/reapi/include/cssdk/engine/rehlds_interfaces.h index e2b909f..392ae9c 100644 --- a/reapi/include/cssdk/engine/rehlds_interfaces.h +++ b/reapi/include/cssdk/engine/rehlds_interfaces.h @@ -129,4 +129,14 @@ public: virtual void SetName(const char* name) = 0; virtual class ISteamGameServer *GetSteamGameServer() = 0; virtual struct netadr_s *GetNetFrom() = 0; + virtual double GetOldTime() = 0; + + virtual void SetNetFrom(struct netadr_s *from) = 0; + virtual void SetWorldmapCrc(uint32 crcValue) = 0; + virtual void SetDecalNameNum(int num) = 0; + + virtual bool IsActive() = 0; + virtual void SetActive(bool state) = 0; + virtual bool IsPaused() = 0; + virtual void SetPaused(bool state) = 0; }; diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index 2b60d83..9a18fd3 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -3761,6 +3761,34 @@ cell AMX_NATIVE_CALL rh_is_entity_fullpacked(AMX *amx, cell *params) return FALSE; } +/* +* Checks if server paused +* +* @return Returns true if paused, otherwise false. +* +* native bool:rh_is_server_paused(); +*/ +cell AMX_NATIVE_CALL rh_is_server_paused(AMX *amx, cell *params) +{ + return g_RehldsData->IsPaused() ? TRUE : FALSE; +} + +/* +* Set server pause state +* +* @param st pause state +* +* @noreturn +* +* native rh_set_server_pause(const bool:status); +*/ +cell AMX_NATIVE_CALL rh_set_server_pause(AMX *amx, cell *params) +{ + enum { arg_count, arg_status }; + g_RehldsFuncs->SetServerPause(params[arg_status] != 0); + return TRUE; +} + AMX_NATIVE_INFO Misc_Natives_RH[] = { { "rh_set_mapname", rh_set_mapname }, @@ -3773,6 +3801,8 @@ AMX_NATIVE_INFO Misc_Natives_RH[] = { "rh_get_realtime", rh_get_realtime }, { "rh_is_entity_fullpacked", rh_is_entity_fullpacked }, { "rh_get_client_connect_time", rh_get_client_connect_time }, + { "rh_is_server_paused", rh_is_server_paused }, + { "rh_set_server_pause", rh_set_server_pause }, { nullptr, nullptr } }; diff --git a/reapi/version/version.h b/reapi/version/version.h index fc64686..62c3300 100644 --- a/reapi/version/version.h +++ b/reapi/version/version.h @@ -6,5 +6,5 @@ #pragma once #define VERSION_MAJOR 5 -#define VERSION_MINOR 27 +#define VERSION_MINOR 28 #define VERSION_MAINTENANCE 0