From 6dffaef1d5531d00c62e6009cf8233d99dd1634c Mon Sep 17 00:00:00 2001 From: Eason <62255465+jonathan-up@users.noreply.github.com> Date: Mon, 7 Apr 2025 16:39:39 +0800 Subject: [PATCH] Add new native `rg_observer_find_next_player` (#345) --- .../scripting/include/reapi_gamedll.inc | 12 ++++++++ reapi/include/cssdk/dlls/API/CSPlayer.h | 1 + reapi/include/cssdk/dlls/regamedll_api.h | 2 +- reapi/src/natives/natives_misc.cpp | 29 +++++++++++++++++++ reapi/version/version.h | 2 +- 5 files changed, 44 insertions(+), 2 deletions(-) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc index 013eb5e..0fee9a6 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc @@ -1185,6 +1185,18 @@ native rg_disappear(const player); */ native rg_set_observer_mode(const player, const mode); +/* +* Call origin function CBasePlayer::Observer_FindNextPlayer() +* @note Player must be a valid observer (m_afPhysicsFlags & PFLAG_OBSERVER). +* +* @param player Player index. +* @param bReverse If bReverse is true, finding order will be reversed +* @param name Player name to find. +* +* @noreturn +*/ +native rg_observer_find_next_player(const player, const bool:bReverse = false, const name[] = ""); + /* * Emits a death notice (logs, DeathMsg event, win conditions check) * diff --git a/reapi/include/cssdk/dlls/API/CSPlayer.h b/reapi/include/cssdk/dlls/API/CSPlayer.h index 3495ee2..f329495 100644 --- a/reapi/include/cssdk/dlls/API/CSPlayer.h +++ b/reapi/include/cssdk/dlls/API/CSPlayer.h @@ -118,6 +118,7 @@ public: virtual void Reset() = 0; virtual void OnSpawnEquip(bool addDefault = true, bool equipGame = true) = 0; virtual void SetScoreboardAttributes(CBasePlayer *destination = nullptr) = 0; + virtual void Observer_FindNextPlayer(bool bReverse, const char *name = nullptr) = 0; CBasePlayer *BasePlayer() const; diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index de80f29..daaec1f 100644 --- a/reapi/include/cssdk/dlls/regamedll_api.h +++ b/reapi/include/cssdk/dlls/regamedll_api.h @@ -40,7 +40,7 @@ #include #define REGAMEDLL_API_VERSION_MAJOR 5 -#define REGAMEDLL_API_VERSION_MINOR 27 +#define REGAMEDLL_API_VERSION_MINOR 29 // CBasePlayer::Spawn hook typedef IHookChainClass IReGameHook_CBasePlayer_Spawn; diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index ae6cc87..2b60d83 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -3244,6 +3244,34 @@ cell AMX_NATIVE_CALL rg_set_observer_mode(AMX* amx, cell* params) return TRUE; } +/* +* Call origin function CBasePlayer::Observer_FindNextPlayer() +* @note Player must be a valid observer (m_afPhysicsFlags & PFLAG_OBSERVER). +* +* @param player Player index. +* @param bReverse If bReverse is true, finding order will be reversed +* @param name Player name to find. +* +* @noreturn +*/ +cell AMX_NATIVE_CALL rg_observer_find_next_player(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_index, arg_bReverse, arg_name }; + + CHECK_ISPLAYER(arg_index) + + CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]); + CHECK_CONNECTED(pPlayer, arg_index); + + char nameBuf[MAX_PLAYER_NAME_LENGTH]; + const char* name = getAmxString(amx, params[arg_name], nameBuf); + if (strcmp(name, "") == 0) + name = nullptr; + + pPlayer->CSPlayer()->Observer_FindNextPlayer(params[arg_bReverse] != 0, name); + return TRUE; +} + /* * Emits a death notice (logs, DeathMsg event, win conditions check) * @@ -3457,6 +3485,7 @@ AMX_NATIVE_INFO Misc_Natives_RG[] = { "rg_switch_best_weapon", rg_switch_best_weapon }, { "rg_disappear", rg_disappear }, { "rg_set_observer_mode", rg_set_observer_mode }, + { "rg_observer_find_next_player", rg_observer_find_next_player }, { "rg_death_notice", rg_death_notice }, { "rg_player_relationship", rg_player_relationship }, diff --git a/reapi/version/version.h b/reapi/version/version.h index 0f32ed9..fc64686 100644 --- a/reapi/version/version.h +++ b/reapi/version/version.h @@ -6,5 +6,5 @@ #pragma once #define VERSION_MAJOR 5 -#define VERSION_MINOR 26 +#define VERSION_MINOR 27 #define VERSION_MAINTENANCE 0