From ee3a485f0942b7026f32d10ec5db967b3c679fbf Mon Sep 17 00:00:00 2001 From: Celio Lozatto Date: Mon, 19 Aug 2024 14:28:28 -0300 Subject: [PATCH 1/9] implementation of funcs in Reapi --- .../scripting/include/reapi_gamedll.inc | 198 ++++++++++++++++ reapi/include/cssdk/dlls/regamedll_api.h | 18 ++ reapi/src/natives/natives_misc.cpp | 224 ++++++++++++++++++ 3 files changed, 440 insertions(+) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc index 013eb5ea..1e70379a 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc @@ -1221,3 +1221,201 @@ native rg_player_relationship(const player, const target); * @noreturn */ native rg_send_death_message(const pKiller, const pVictim, const pAssister, const pevInflictor, const killerWeaponName[], const DeathMessageFlags:iDeathMessageFlags, const KillRarity:iRarityOfKill); + +/* +* - +* +* @param classname Classname to search for +* +* @noreturn +*/ +native rg_restart_other(const classname[]); + +/* +* - +* +* @noreturn +*/ +native rg_reset_entities(); + +/* +* - +* +* @param classname Classname to search for +* @param removeCount Remove count +* +* @noreturn +*/ +native rg_remove_other(const classname[], const removeCount); + +/* +* - +* +* @param seed Seed +* @param low Low +* @param high High +* +* @return - +*/ +native rg_shared_random_long(const seed, const low, const high); + +/* +* - +* +* @param seed Seed +* @param low Low +* @param high High +* +* @return - +*/ +native Float:rg_shared_random_float(const seed, const Float:low, const Float:high); + +/* +* - +* +* @param groupmask Group Mask +* @param op Operation +* +* @noreturn +*/ +native rg_set_group_trace(const groupmask, const op); + + +/* +* - +* +* @noreturn +*/ +native rg_unset_group_trace(); + +/* +* - +* +* @param start_index Entity index to start searching from. AMX_NULLENT (-1) to start from the first entity +* @param vecCenter Center +* @param radius Radius +* +* @return Entity index > 0 if found, 0 otherwise +*/ +native rg_find_entity_in_sphere(const start_index, Float:vecCenter[3], const Float:radius); + +/* +* - +* +* @param vecCenter Center +* @param amplitude Amplitude +* @param frequency Frequency +* @param duration Duration +* @param radius Radius +* +* @noreturn +*/ +native rg_screen_shake(Float:vecCenter[3], const Float:amplitude, const Float:frequency, const Float:duration, const Float:radius); + +/* +* - +* +* @param vecColor Color +* @param fadeTime Fade Time +* @param fadeHold Fade Hold +* @param alpha Alpha +* @param flags Flags +* +* @noreturn +*/ +native rg_screen_fade_all(Float:vecColor[3], const Float:fadeTime, const Float:fadeHold, const alpha, const flags); + +/* +* - +* +* @param index Client index +* @param vecColor Color +* @param fadeTime Fade Time +* @param fadeHold Fade Hold +* @param alpha Alpha +* @param flags Flags +* +* @noreturn +*/ +native rg_screen_fade(const index, Float:vecColor[3], const Float:fadeTime, const Float:fadeHold, const alpha, const flags); + +/* +* - +* +* @param index Entity index +* @param vecMin Min +* @param vecMax Max +* +* @noreturn +*/ +native rg_set_size(const index, Float:vecMin[3], Float:vecMax[3]); + +/* +* - +* +* @param index Entity index +* @param vecOrigin Origin +* +* @noreturn +*/ +native rg_set_origin(const index, Float:vecOrigin[3]); + +/* +* - +* +* @param vec Origin +* +* @return - +*/ +native rg_point_contents(Float:vec[3]); + +/* +* - +* +* @param position Entity index +* @param minz Min Z +* @param maxz Max Z +* +* @return - +*/ +native Float:rg_water_level(Float:position[3], const Float:minz, const Float:maxz); + +/* +* - +* +* @param vecMins Mins +* @param vecMaxs Maxs +* @param bubbleCount Bubble Count +* +* @noreturn +*/ +native rg_bubbles(Float:vecMins[3], Float:vecMaxs[3], const bubbleCount); + +/* +* - +* +* @param from Start position +* @param to End position +* @param bubbleCount Bubble Count +* +* @noreturn +*/ +native rg_bubble_trail(Float:from[3], Float:to[3], const bubbleCount); + +/* +* - +* +* @param classname Classname to search for +* +* @return Entities Count +*/ +native rg_count_entities(const classname[]); + +/* +* - +* +* @param spot Spot to check +* +* @return 1 on success, 0 otherwise +*/ +native bool:rg_is_spawn_point_occupied(const spot); diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index c0aa993a..13214535 100644 --- a/reapi/include/cssdk/dlls/regamedll_api.h +++ b/reapi/include/cssdk/dlls/regamedll_api.h @@ -818,6 +818,24 @@ struct ReGameFuncs_t { void (*TextureTypePlaySound)(TraceResult *ptr, Vector vecSrc, Vector vecEnd, int iBulletType); class CWeaponBox *(*CreateWeaponBox)(CBasePlayerItem *pItem, CBasePlayer *pPlayerOwner, const char *modelName, Vector &origin, Vector &angles, Vector &velocity, float lifeTime, bool packAmmo); class CGrenade *(*SpawnGrenade)(WeaponIdType weaponId, entvars_t *pevOwner, Vector &vecSrc, Vector &vecThrow, float time, int iTeam, unsigned short usEvent); + int (*UTIL_SharedRandomLong)(unsigned int seed, int low, int high); + float (*UTIL_SharedRandomFloat)(unsigned int seed, float low, float high); + void (*UTIL_SetGroupTrace)(int groupmask, int op); + void (*UTIL_UnsetGroupTrace)(); + int (*UTIL_EntitiesInBox)(CBaseEntity** pList, int listMax, const Vector& mins, const Vector& maxs, int flagMask); + class CBaseEntity* (*UTIL_FindEntityInSphere)(CBaseEntity* pStartEntity, const Vector& vecCenter, float flRadius); + void (*UTIL_ScreenShake)(const Vector& center, float amplitude, float frequency, float duration, float radius); + void (*UTIL_ScreenFadeAll)(const Vector& color, float fadeTime, float fadeHold, int alpha, int flags); + void (*UTIL_ScreenFade)(CBaseEntity* pEntity, const Vector& color, float fadeTime, float fadeHold, int alpha, int flags); + void (*UTIL_SetSize)(entvars_t* pev, const Vector& vecMin, const Vector& vecMax); + void (*UTIL_SetOrigin)(entvars_t* pev, const Vector& vecOrigin); + int (*UTIL_PointContents)(const Vector& vec); + float (*UTIL_WaterLevel)(const Vector& position, float minz, float maxz); + void (*UTIL_Bubbles)(Vector mins, Vector maxs, int count); + void (*UTIL_BubbleTrail)(Vector from, Vector to, int count); + char (*UTIL_TextureHit)(TraceResult* ptr, Vector vecSrc, Vector vecEnd); + int (*UTIL_CountEntities)(const char* szName); + bool (*UTIL_IsSpawnPointOccupied)(CBaseEntity* pSpot); }; class IReGameApi { diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index 50300b99..7f18a1c8 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -3345,6 +3345,210 @@ cell AMX_NATIVE_CALL rg_send_death_message(AMX *amx, cell *params) return TRUE; } +cell AMX_NATIVE_CALL rg_restart_other(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_classname }; + + char classname[256]; + const char* value = getAmxString(amx, params[arg_classname], classname); + + g_ReGameFuncs->UTIL_RestartOther(value); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_reset_entities(AMX* amx, cell* params) +{ + enum args_e { arg_count }; + + g_ReGameFuncs->UTIL_ResetEntities(); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_remove_other(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_classname, arg_removeCount }; + + char classname[256]; + const char* value = getAmxString(amx, params[arg_classname], classname); + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_RemoveOther(value, args[arg_removeCount]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_shared_random_long(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_seed, arg_low, arg_high }; + + CAmxArgs args(amx, params); + return g_ReGameFuncs->UTIL_SharedRandomLong(args[arg_seed], args[arg_low], args[arg_high]); +} + +cell AMX_NATIVE_CALL rg_shared_random_float(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_seed, arg_low, arg_high }; + + CAmxArgs args(amx, params); + return g_ReGameFuncs->UTIL_SharedRandomFloat(args[arg_seed], args[arg_low], args[arg_high]); +} + +cell AMX_NATIVE_CALL rg_set_group_trace(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_groupmask, arg_op }; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_SetGroupTrace(args[arg_groupmask], args[arg_op]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_unset_group_trace(AMX* amx, cell* params) +{ + enum args_e { arg_count }; + + g_ReGameFuncs->UTIL_UnsetGroupTrace(); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_find_entity_in_sphere(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_start_index, arg_vecCenter, arg_radius }; + + auto pStartEntity = getPrivate(params[arg_start_index]); + + CAmxArgs args(amx, params); + auto pEntity = g_ReGameFuncs->UTIL_FindEntityInSphere(pStartEntity, args[arg_vecCenter], args[arg_radius]); + + if (pEntity) { + return indexOfEdict(pEntity->pev); + } + + return 0; +} + +cell AMX_NATIVE_CALL rg_screen_shake(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_center, arg_amplitude, arg_frequency, arg_duration, arg_radius }; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_ScreenShake(args[arg_center], args[arg_amplitude], args[arg_frequency], args[arg_duration], args[arg_radius]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_screen_fade_all(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_color, arg_fadeTime, arg_fadeHold, arg_alpha, arg_flags }; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_ScreenFadeAll(args[arg_color], args[arg_fadeTime], args[arg_fadeHold], args[arg_alpha], args[arg_flags]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_screen_fade(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_entity, arg_color, arg_fadeTime, arg_fadeHold, arg_alpha, arg_flags }; + + CBaseEntity* pEntity = getPrivate(params[arg_entity]); + CHECK_CONNECTED(pEntity, arg_entity); + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_ScreenFade(args[arg_entity], args[arg_color], args[arg_fadeTime], args[arg_fadeHold], args[arg_alpha], args[arg_flags]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_set_size(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_index, arg_vecMin, arg_vecMax }; + + CHECK_ISENTITY(arg_index); + + CBaseEntity* pEntity = getPrivate(params[arg_index]); + if (unlikely(pEntity == nullptr)) { + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + return FALSE; + } + + entvars_t* pevEntity = pEntity->pev; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_SetSize(pevEntity, args[arg_vecMin], args[arg_vecMax]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_set_origin(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_index, arg_vecOrigin }; + + CHECK_ISENTITY(arg_index); + + CBaseEntity* pEntity = getPrivate(params[arg_index]); + if (unlikely(pEntity == nullptr)) { + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + return FALSE; + } + + entvars_t* pevEntity = pEntity->pev; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_SetOrigin(pevEntity, args[arg_vecOrigin]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_point_contents(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_vec }; + + CAmxArgs args(amx, params); + return g_ReGameFuncs->UTIL_PointContents(args[arg_vec]); +} + +cell AMX_NATIVE_CALL rg_water_level(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_position, arg_minz, arg_maxz }; + + CAmxArgs args(amx, params); + return g_ReGameFuncs->UTIL_WaterLevel(args[arg_position], args[arg_minz], args[arg_maxz]); +} + +cell AMX_NATIVE_CALL rg_bubbles(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_mins, arg_maxs, arg_bubbleCount }; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_Bubbles(args[arg_mins], args[arg_maxs], args[arg_bubbleCount]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_bubble_trail(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_from, arg_to, arg_bubbleCount }; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_BubbleTrail(args[arg_from], args[arg_to], args[arg_bubbleCount]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_count_entities(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_classname }; + + char classname[256]; + const char* value = getAmxString(amx, params[arg_classname], classname); + + return g_ReGameFuncs->UTIL_CountEntities(value); +} + +cell AMX_NATIVE_CALL rg_is_spawn_point_occupied(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_spot }; + + CHECK_ISENTITY(arg_spot); + + CBaseEntity* pSpot = getPrivate(params[arg_spot]); + + return g_ReGameFuncs->UTIL_IsSpawnPointOccupied(pSpot); +} + + AMX_NATIVE_INFO Misc_Natives_RG[] = { { "rg_set_animation", rg_set_animation }, @@ -3460,6 +3664,26 @@ AMX_NATIVE_INFO Misc_Natives_RG[] = { "rg_send_death_message", rg_send_death_message }, + { "rg_restart_other", rg_restart_other }, + { "rg_reset_entities", rg_reset_entities }, + { "rg_remove_other", rg_remove_other }, + { "rg_shared_random_long", rg_shared_random_long }, + { "rg_shared_random_float", rg_shared_random_float }, + { "rg_set_group_trace", rg_set_group_trace }, + { "rg_unset_group_trace", rg_unset_group_trace }, + { "rg_find_entity_in_sphere", rg_find_entity_in_sphere }, + { "rg_screen_shake", rg_screen_shake }, + { "rg_screen_fade_all", rg_screen_fade_all }, + { "rg_screen_fade", rg_screen_fade }, + { "rg_set_size", rg_set_size }, + { "rg_set_origin", rg_set_origin }, + { "rg_point_contents", rg_point_contents }, + { "rg_water_level", rg_water_level }, + { "rg_bubbles", rg_bubbles }, + { "rg_bubble_trail", rg_bubble_trail }, + { "rg_count_entities", rg_count_entities }, + { "rg_is_spawn_point_occupied", rg_is_spawn_point_occupied }, + { nullptr, nullptr } }; From 80341faf06263ca77560e95973f36ae0a2858dcc Mon Sep 17 00:00:00 2001 From: Celio Lozatto Date: Mon, 19 Aug 2024 14:28:28 -0300 Subject: [PATCH 2/9] implementation of funcs in Reapi --- .../scripting/include/reapi_gamedll.inc | 198 ++++++++++++++++ reapi/include/cssdk/dlls/regamedll_api.h | 18 ++ reapi/src/natives/natives_misc.cpp | 224 ++++++++++++++++++ 3 files changed, 440 insertions(+) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc index 013eb5ea..1e70379a 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc @@ -1221,3 +1221,201 @@ native rg_player_relationship(const player, const target); * @noreturn */ native rg_send_death_message(const pKiller, const pVictim, const pAssister, const pevInflictor, const killerWeaponName[], const DeathMessageFlags:iDeathMessageFlags, const KillRarity:iRarityOfKill); + +/* +* - +* +* @param classname Classname to search for +* +* @noreturn +*/ +native rg_restart_other(const classname[]); + +/* +* - +* +* @noreturn +*/ +native rg_reset_entities(); + +/* +* - +* +* @param classname Classname to search for +* @param removeCount Remove count +* +* @noreturn +*/ +native rg_remove_other(const classname[], const removeCount); + +/* +* - +* +* @param seed Seed +* @param low Low +* @param high High +* +* @return - +*/ +native rg_shared_random_long(const seed, const low, const high); + +/* +* - +* +* @param seed Seed +* @param low Low +* @param high High +* +* @return - +*/ +native Float:rg_shared_random_float(const seed, const Float:low, const Float:high); + +/* +* - +* +* @param groupmask Group Mask +* @param op Operation +* +* @noreturn +*/ +native rg_set_group_trace(const groupmask, const op); + + +/* +* - +* +* @noreturn +*/ +native rg_unset_group_trace(); + +/* +* - +* +* @param start_index Entity index to start searching from. AMX_NULLENT (-1) to start from the first entity +* @param vecCenter Center +* @param radius Radius +* +* @return Entity index > 0 if found, 0 otherwise +*/ +native rg_find_entity_in_sphere(const start_index, Float:vecCenter[3], const Float:radius); + +/* +* - +* +* @param vecCenter Center +* @param amplitude Amplitude +* @param frequency Frequency +* @param duration Duration +* @param radius Radius +* +* @noreturn +*/ +native rg_screen_shake(Float:vecCenter[3], const Float:amplitude, const Float:frequency, const Float:duration, const Float:radius); + +/* +* - +* +* @param vecColor Color +* @param fadeTime Fade Time +* @param fadeHold Fade Hold +* @param alpha Alpha +* @param flags Flags +* +* @noreturn +*/ +native rg_screen_fade_all(Float:vecColor[3], const Float:fadeTime, const Float:fadeHold, const alpha, const flags); + +/* +* - +* +* @param index Client index +* @param vecColor Color +* @param fadeTime Fade Time +* @param fadeHold Fade Hold +* @param alpha Alpha +* @param flags Flags +* +* @noreturn +*/ +native rg_screen_fade(const index, Float:vecColor[3], const Float:fadeTime, const Float:fadeHold, const alpha, const flags); + +/* +* - +* +* @param index Entity index +* @param vecMin Min +* @param vecMax Max +* +* @noreturn +*/ +native rg_set_size(const index, Float:vecMin[3], Float:vecMax[3]); + +/* +* - +* +* @param index Entity index +* @param vecOrigin Origin +* +* @noreturn +*/ +native rg_set_origin(const index, Float:vecOrigin[3]); + +/* +* - +* +* @param vec Origin +* +* @return - +*/ +native rg_point_contents(Float:vec[3]); + +/* +* - +* +* @param position Entity index +* @param minz Min Z +* @param maxz Max Z +* +* @return - +*/ +native Float:rg_water_level(Float:position[3], const Float:minz, const Float:maxz); + +/* +* - +* +* @param vecMins Mins +* @param vecMaxs Maxs +* @param bubbleCount Bubble Count +* +* @noreturn +*/ +native rg_bubbles(Float:vecMins[3], Float:vecMaxs[3], const bubbleCount); + +/* +* - +* +* @param from Start position +* @param to End position +* @param bubbleCount Bubble Count +* +* @noreturn +*/ +native rg_bubble_trail(Float:from[3], Float:to[3], const bubbleCount); + +/* +* - +* +* @param classname Classname to search for +* +* @return Entities Count +*/ +native rg_count_entities(const classname[]); + +/* +* - +* +* @param spot Spot to check +* +* @return 1 on success, 0 otherwise +*/ +native bool:rg_is_spawn_point_occupied(const spot); diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index c0aa993a..93680a94 100644 --- a/reapi/include/cssdk/dlls/regamedll_api.h +++ b/reapi/include/cssdk/dlls/regamedll_api.h @@ -818,6 +818,24 @@ struct ReGameFuncs_t { void (*TextureTypePlaySound)(TraceResult *ptr, Vector vecSrc, Vector vecEnd, int iBulletType); class CWeaponBox *(*CreateWeaponBox)(CBasePlayerItem *pItem, CBasePlayer *pPlayerOwner, const char *modelName, Vector &origin, Vector &angles, Vector &velocity, float lifeTime, bool packAmmo); class CGrenade *(*SpawnGrenade)(WeaponIdType weaponId, entvars_t *pevOwner, Vector &vecSrc, Vector &vecThrow, float time, int iTeam, unsigned short usEvent); + int (*UTIL_SharedRandomLong)(unsigned int seed, int low, int high); + float (*UTIL_SharedRandomFloat)(unsigned int seed, float low, float high); + void (*UTIL_SetGroupTrace)(int groupmask, int op); + void (*UTIL_UnsetGroupTrace)(); + int (*UTIL_EntitiesInBox)(CBaseEntity **pList, int listMax, const Vector &mins, const Vector &maxs, int flagMask); + class CBaseEntity *(*UTIL_FindEntityInSphere)(CBaseEntity *pStartEntity, const Vector &vecCenter, float flRadius); + void (*UTIL_ScreenShake)(const Vector ¢er, float amplitude, float frequency, float duration, float radius); + void (*UTIL_ScreenFadeAll)(const Vector &color, float fadeTime, float fadeHold, int alpha, int flags); + void (*UTIL_ScreenFade)(CBaseEntity *pEntity, const Vector &color, float fadeTime, float fadeHold, int alpha, int flags); + void (*UTIL_SetSize)(entvars_t *pev, const Vector &vecMin, const Vector &vecMax); + void (*UTIL_SetOrigin)(entvars_t *pev, const Vector &vecOrigin); + int (*UTIL_PointContents)(const Vector &vec); + float (*UTIL_WaterLevel)(const Vector &position, float minz, float maxz); + void (*UTIL_Bubbles)(Vector mins, Vector maxs, int count); + void (*UTIL_BubbleTrail)(Vector from, Vector to, int count); + char (*UTIL_TextureHit)(TraceResult *ptr, Vector vecSrc, Vector vecEnd); + int (*UTIL_CountEntities)(const char *szName); + bool (*UTIL_IsSpawnPointOccupied)(CBaseEntity *pSpot); }; class IReGameApi { diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index 50300b99..7f18a1c8 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -3345,6 +3345,210 @@ cell AMX_NATIVE_CALL rg_send_death_message(AMX *amx, cell *params) return TRUE; } +cell AMX_NATIVE_CALL rg_restart_other(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_classname }; + + char classname[256]; + const char* value = getAmxString(amx, params[arg_classname], classname); + + g_ReGameFuncs->UTIL_RestartOther(value); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_reset_entities(AMX* amx, cell* params) +{ + enum args_e { arg_count }; + + g_ReGameFuncs->UTIL_ResetEntities(); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_remove_other(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_classname, arg_removeCount }; + + char classname[256]; + const char* value = getAmxString(amx, params[arg_classname], classname); + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_RemoveOther(value, args[arg_removeCount]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_shared_random_long(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_seed, arg_low, arg_high }; + + CAmxArgs args(amx, params); + return g_ReGameFuncs->UTIL_SharedRandomLong(args[arg_seed], args[arg_low], args[arg_high]); +} + +cell AMX_NATIVE_CALL rg_shared_random_float(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_seed, arg_low, arg_high }; + + CAmxArgs args(amx, params); + return g_ReGameFuncs->UTIL_SharedRandomFloat(args[arg_seed], args[arg_low], args[arg_high]); +} + +cell AMX_NATIVE_CALL rg_set_group_trace(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_groupmask, arg_op }; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_SetGroupTrace(args[arg_groupmask], args[arg_op]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_unset_group_trace(AMX* amx, cell* params) +{ + enum args_e { arg_count }; + + g_ReGameFuncs->UTIL_UnsetGroupTrace(); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_find_entity_in_sphere(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_start_index, arg_vecCenter, arg_radius }; + + auto pStartEntity = getPrivate(params[arg_start_index]); + + CAmxArgs args(amx, params); + auto pEntity = g_ReGameFuncs->UTIL_FindEntityInSphere(pStartEntity, args[arg_vecCenter], args[arg_radius]); + + if (pEntity) { + return indexOfEdict(pEntity->pev); + } + + return 0; +} + +cell AMX_NATIVE_CALL rg_screen_shake(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_center, arg_amplitude, arg_frequency, arg_duration, arg_radius }; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_ScreenShake(args[arg_center], args[arg_amplitude], args[arg_frequency], args[arg_duration], args[arg_radius]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_screen_fade_all(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_color, arg_fadeTime, arg_fadeHold, arg_alpha, arg_flags }; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_ScreenFadeAll(args[arg_color], args[arg_fadeTime], args[arg_fadeHold], args[arg_alpha], args[arg_flags]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_screen_fade(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_entity, arg_color, arg_fadeTime, arg_fadeHold, arg_alpha, arg_flags }; + + CBaseEntity* pEntity = getPrivate(params[arg_entity]); + CHECK_CONNECTED(pEntity, arg_entity); + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_ScreenFade(args[arg_entity], args[arg_color], args[arg_fadeTime], args[arg_fadeHold], args[arg_alpha], args[arg_flags]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_set_size(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_index, arg_vecMin, arg_vecMax }; + + CHECK_ISENTITY(arg_index); + + CBaseEntity* pEntity = getPrivate(params[arg_index]); + if (unlikely(pEntity == nullptr)) { + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + return FALSE; + } + + entvars_t* pevEntity = pEntity->pev; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_SetSize(pevEntity, args[arg_vecMin], args[arg_vecMax]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_set_origin(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_index, arg_vecOrigin }; + + CHECK_ISENTITY(arg_index); + + CBaseEntity* pEntity = getPrivate(params[arg_index]); + if (unlikely(pEntity == nullptr)) { + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + return FALSE; + } + + entvars_t* pevEntity = pEntity->pev; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_SetOrigin(pevEntity, args[arg_vecOrigin]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_point_contents(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_vec }; + + CAmxArgs args(amx, params); + return g_ReGameFuncs->UTIL_PointContents(args[arg_vec]); +} + +cell AMX_NATIVE_CALL rg_water_level(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_position, arg_minz, arg_maxz }; + + CAmxArgs args(amx, params); + return g_ReGameFuncs->UTIL_WaterLevel(args[arg_position], args[arg_minz], args[arg_maxz]); +} + +cell AMX_NATIVE_CALL rg_bubbles(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_mins, arg_maxs, arg_bubbleCount }; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_Bubbles(args[arg_mins], args[arg_maxs], args[arg_bubbleCount]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_bubble_trail(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_from, arg_to, arg_bubbleCount }; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_BubbleTrail(args[arg_from], args[arg_to], args[arg_bubbleCount]); + return TRUE; +} + +cell AMX_NATIVE_CALL rg_count_entities(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_classname }; + + char classname[256]; + const char* value = getAmxString(amx, params[arg_classname], classname); + + return g_ReGameFuncs->UTIL_CountEntities(value); +} + +cell AMX_NATIVE_CALL rg_is_spawn_point_occupied(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_spot }; + + CHECK_ISENTITY(arg_spot); + + CBaseEntity* pSpot = getPrivate(params[arg_spot]); + + return g_ReGameFuncs->UTIL_IsSpawnPointOccupied(pSpot); +} + + AMX_NATIVE_INFO Misc_Natives_RG[] = { { "rg_set_animation", rg_set_animation }, @@ -3460,6 +3664,26 @@ AMX_NATIVE_INFO Misc_Natives_RG[] = { "rg_send_death_message", rg_send_death_message }, + { "rg_restart_other", rg_restart_other }, + { "rg_reset_entities", rg_reset_entities }, + { "rg_remove_other", rg_remove_other }, + { "rg_shared_random_long", rg_shared_random_long }, + { "rg_shared_random_float", rg_shared_random_float }, + { "rg_set_group_trace", rg_set_group_trace }, + { "rg_unset_group_trace", rg_unset_group_trace }, + { "rg_find_entity_in_sphere", rg_find_entity_in_sphere }, + { "rg_screen_shake", rg_screen_shake }, + { "rg_screen_fade_all", rg_screen_fade_all }, + { "rg_screen_fade", rg_screen_fade }, + { "rg_set_size", rg_set_size }, + { "rg_set_origin", rg_set_origin }, + { "rg_point_contents", rg_point_contents }, + { "rg_water_level", rg_water_level }, + { "rg_bubbles", rg_bubbles }, + { "rg_bubble_trail", rg_bubble_trail }, + { "rg_count_entities", rg_count_entities }, + { "rg_is_spawn_point_occupied", rg_is_spawn_point_occupied }, + { nullptr, nullptr } }; From d159a365af656af386063adb66f4eaa57d8ecc7b Mon Sep 17 00:00:00 2001 From: Celio Lozatto Date: Thu, 8 May 2025 19:18:52 -0300 Subject: [PATCH 3/9] REAPI: Added new funcs --- .../scripting/include/reapi_gamedll.inc | 88 ++----- reapi/include/cssdk/dlls/regamedll_api.h | 8 +- reapi/src/natives/natives_misc.cpp | 218 +++++++++++------- reapi/version/version.h | 2 +- 4 files changed, 157 insertions(+), 159 deletions(-) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc index 1e70379a..906bbf08 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc @@ -1223,7 +1223,7 @@ native rg_player_relationship(const player, const target); native rg_send_death_message(const pKiller, const pVictim, const pAssister, const pevInflictor, const killerWeaponName[], const DeathMessageFlags:iDeathMessageFlags, const KillRarity:iRarityOfKill); /* -* - +* Restarts entities with the specified classname. * * @param classname Classname to search for * @@ -1232,14 +1232,14 @@ native rg_send_death_message(const pKiller, const pVictim, const pAssister, cons native rg_restart_other(const classname[]); /* -* - +* Resets all entities to their original state. * * @noreturn */ native rg_reset_entities(); /* -* - +* Removes a specified number of entities matching the given classname. * * @param classname Classname to search for * @param removeCount Remove count @@ -1249,7 +1249,7 @@ native rg_reset_entities(); native rg_remove_other(const classname[], const removeCount); /* -* - +* Generates a random long integer within a specified range. * * @param seed Seed * @param low Low @@ -1260,7 +1260,7 @@ native rg_remove_other(const classname[], const removeCount); native rg_shared_random_long(const seed, const low, const high); /* -* - +* Generates a random float within a specified range. * * @param seed Seed * @param low Low @@ -1271,7 +1271,7 @@ native rg_shared_random_long(const seed, const low, const high); native Float:rg_shared_random_float(const seed, const Float:low, const Float:high); /* -* - +* Sets the group trace mask. * * @param groupmask Group Mask * @param op Operation @@ -1280,27 +1280,15 @@ native Float:rg_shared_random_float(const seed, const Float:low, const Float:hig */ native rg_set_group_trace(const groupmask, const op); - /* -* - +* Unsets the group trace mask. * * @noreturn */ native rg_unset_group_trace(); /* -* - -* -* @param start_index Entity index to start searching from. AMX_NULLENT (-1) to start from the first entity -* @param vecCenter Center -* @param radius Radius -* -* @return Entity index > 0 if found, 0 otherwise -*/ -native rg_find_entity_in_sphere(const start_index, Float:vecCenter[3], const Float:radius); - -/* -* - +* Creates a screen shake effect. * * @param vecCenter Center * @param amplitude Amplitude @@ -1313,7 +1301,7 @@ native rg_find_entity_in_sphere(const start_index, Float:vecCenter[3], const Flo native rg_screen_shake(Float:vecCenter[3], const Float:amplitude, const Float:frequency, const Float:duration, const Float:radius); /* -* - +* Fades the screen for all players. * * @param vecColor Color * @param fadeTime Fade Time @@ -1326,7 +1314,7 @@ native rg_screen_shake(Float:vecCenter[3], const Float:amplitude, const Float:fr native rg_screen_fade_all(Float:vecColor[3], const Float:fadeTime, const Float:fadeHold, const alpha, const flags); /* -* - +* Fades the screen for a specific player. * * @param index Client index * @param vecColor Color @@ -1340,37 +1328,7 @@ native rg_screen_fade_all(Float:vecColor[3], const Float:fadeTime, const Float:f native rg_screen_fade(const index, Float:vecColor[3], const Float:fadeTime, const Float:fadeHold, const alpha, const flags); /* -* - -* -* @param index Entity index -* @param vecMin Min -* @param vecMax Max -* -* @noreturn -*/ -native rg_set_size(const index, Float:vecMin[3], Float:vecMax[3]); - -/* -* - -* -* @param index Entity index -* @param vecOrigin Origin -* -* @noreturn -*/ -native rg_set_origin(const index, Float:vecOrigin[3]); - -/* -* - -* -* @param vec Origin -* -* @return - -*/ -native rg_point_contents(Float:vec[3]); - -/* -* - +* Gets the water level at a specific position. * * @param position Entity index * @param minz Min Z @@ -1381,7 +1339,7 @@ native rg_point_contents(Float:vec[3]); native Float:rg_water_level(Float:position[3], const Float:minz, const Float:maxz); /* -* - +* Creates bubbles within a specified area. * * @param vecMins Mins * @param vecMaxs Maxs @@ -1392,7 +1350,7 @@ native Float:rg_water_level(Float:position[3], const Float:minz, const Float:max native rg_bubbles(Float:vecMins[3], Float:vecMaxs[3], const bubbleCount); /* -* - +* Creates a trail of bubbles between two points. * * @param from Start position * @param to End position @@ -1403,19 +1361,15 @@ native rg_bubbles(Float:vecMins[3], Float:vecMaxs[3], const bubbleCount); native rg_bubble_trail(Float:from[3], Float:to[3], const bubbleCount); /* -* - +* Retrieves the texture type hit by a traceresult, based on start and end positions. * -* @param classname Classname to search for -* -* @return Entities Count -*/ -native rg_count_entities(const classname[]); - -/* -* - +* @param ptr Traceresult pointer, use Fakemeta's create_tr2 to instantiate one +* @param vecSrc Start position +* @param vecEnd End position +* @param output Buffer to copy the texture type +* @param len Maximum buffer size * -* @param spot Spot to check +* @noreturn * -* @return 1 on success, 0 otherwise */ -native bool:rg_is_spawn_point_occupied(const spot); +native rg_texture_hit(const ptr, Float:vecSrc[3], Float:vecEnd[3], output[], len); diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index 93680a94..5909ab08 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 31 // CBasePlayer::Spawn hook typedef IHookChainClass IReGameHook_CBasePlayer_Spawn; @@ -823,19 +823,13 @@ struct ReGameFuncs_t { void (*UTIL_SetGroupTrace)(int groupmask, int op); void (*UTIL_UnsetGroupTrace)(); int (*UTIL_EntitiesInBox)(CBaseEntity **pList, int listMax, const Vector &mins, const Vector &maxs, int flagMask); - class CBaseEntity *(*UTIL_FindEntityInSphere)(CBaseEntity *pStartEntity, const Vector &vecCenter, float flRadius); void (*UTIL_ScreenShake)(const Vector ¢er, float amplitude, float frequency, float duration, float radius); void (*UTIL_ScreenFadeAll)(const Vector &color, float fadeTime, float fadeHold, int alpha, int flags); void (*UTIL_ScreenFade)(CBaseEntity *pEntity, const Vector &color, float fadeTime, float fadeHold, int alpha, int flags); - void (*UTIL_SetSize)(entvars_t *pev, const Vector &vecMin, const Vector &vecMax); - void (*UTIL_SetOrigin)(entvars_t *pev, const Vector &vecOrigin); - int (*UTIL_PointContents)(const Vector &vec); float (*UTIL_WaterLevel)(const Vector &position, float minz, float maxz); void (*UTIL_Bubbles)(Vector mins, Vector maxs, int count); void (*UTIL_BubbleTrail)(Vector from, Vector to, int count); char (*UTIL_TextureHit)(TraceResult *ptr, Vector vecSrc, Vector vecEnd); - int (*UTIL_CountEntities)(const char *szName); - bool (*UTIL_IsSpawnPointOccupied)(CBaseEntity *pSpot); }; class IReGameApi { diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index 7f18a1c8..4fd691e5 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -3345,6 +3345,13 @@ cell AMX_NATIVE_CALL rg_send_death_message(AMX *amx, cell *params) return TRUE; } +/* +* Restarts entities with the specified classname. +* +* @param classname Classname to search for +* +* @noreturn +*/ cell AMX_NATIVE_CALL rg_restart_other(AMX* amx, cell* params) { enum args_e { arg_count, arg_classname }; @@ -3356,6 +3363,11 @@ cell AMX_NATIVE_CALL rg_restart_other(AMX* amx, cell* params) return TRUE; } +/* +* Resets all entities to their original state. +* +* @noreturn +*/ cell AMX_NATIVE_CALL rg_reset_entities(AMX* amx, cell* params) { enum args_e { arg_count }; @@ -3364,6 +3376,14 @@ cell AMX_NATIVE_CALL rg_reset_entities(AMX* amx, cell* params) return TRUE; } +/* +* Removes a specified number of entities matching the given classname. +* +* @param classname Classname to search for +* @param removeCount Remove count +* +* @noreturn +*/ cell AMX_NATIVE_CALL rg_remove_other(AMX* amx, cell* params) { enum args_e { arg_count, arg_classname, arg_removeCount }; @@ -3376,6 +3396,15 @@ cell AMX_NATIVE_CALL rg_remove_other(AMX* amx, cell* params) return TRUE; } +/* +* Generates a random long integer within a specified range. +* +* @param seed Seed +* @param low Low +* @param high High +* +* @return - +*/ cell AMX_NATIVE_CALL rg_shared_random_long(AMX* amx, cell* params) { enum args_e { arg_count, arg_seed, arg_low, arg_high }; @@ -3384,6 +3413,15 @@ cell AMX_NATIVE_CALL rg_shared_random_long(AMX* amx, cell* params) return g_ReGameFuncs->UTIL_SharedRandomLong(args[arg_seed], args[arg_low], args[arg_high]); } +/* +* Generates a random float within a specified range. +* +* @param seed Seed +* @param low Low +* @param high High +* +* @return - +*/ cell AMX_NATIVE_CALL rg_shared_random_float(AMX* amx, cell* params) { enum args_e { arg_count, arg_seed, arg_low, arg_high }; @@ -3392,6 +3430,14 @@ cell AMX_NATIVE_CALL rg_shared_random_float(AMX* amx, cell* params) return g_ReGameFuncs->UTIL_SharedRandomFloat(args[arg_seed], args[arg_low], args[arg_high]); } +/* +* Sets the group trace mask. +* +* @param groupmask Group Mask +* @param op Operation +* +* @noreturn +*/ cell AMX_NATIVE_CALL rg_set_group_trace(AMX* amx, cell* params) { enum args_e { arg_count, arg_groupmask, arg_op }; @@ -3401,6 +3447,11 @@ cell AMX_NATIVE_CALL rg_set_group_trace(AMX* amx, cell* params) return TRUE; } +/* +* Unsets the group trace mask. +* +* @noreturn +*/ cell AMX_NATIVE_CALL rg_unset_group_trace(AMX* amx, cell* params) { enum args_e { arg_count }; @@ -3409,22 +3460,17 @@ cell AMX_NATIVE_CALL rg_unset_group_trace(AMX* amx, cell* params) return TRUE; } -cell AMX_NATIVE_CALL rg_find_entity_in_sphere(AMX* amx, cell* params) -{ - enum args_e { arg_count, arg_start_index, arg_vecCenter, arg_radius }; - - auto pStartEntity = getPrivate(params[arg_start_index]); - - CAmxArgs args(amx, params); - auto pEntity = g_ReGameFuncs->UTIL_FindEntityInSphere(pStartEntity, args[arg_vecCenter], args[arg_radius]); - - if (pEntity) { - return indexOfEdict(pEntity->pev); - } - - return 0; -} - +/* +* Creates a screen shake effect. +* +* @param vecCenter Center +* @param amplitude Amplitude +* @param frequency Frequency +* @param duration Duration +* @param radius Radius +* +* @noreturn +*/ cell AMX_NATIVE_CALL rg_screen_shake(AMX* amx, cell* params) { enum args_e { arg_count, arg_center, arg_amplitude, arg_frequency, arg_duration, arg_radius }; @@ -3434,6 +3480,17 @@ cell AMX_NATIVE_CALL rg_screen_shake(AMX* amx, cell* params) return TRUE; } +/* +* Fades the screen for all players. +* +* @param vecColor Color +* @param fadeTime Fade Time +* @param fadeHold Fade Hold +* @param alpha Alpha +* @param flags Flags +* +* @noreturn +*/ cell AMX_NATIVE_CALL rg_screen_fade_all(AMX* amx, cell* params) { enum args_e { arg_count, arg_color, arg_fadeTime, arg_fadeHold, arg_alpha, arg_flags }; @@ -3443,6 +3500,18 @@ cell AMX_NATIVE_CALL rg_screen_fade_all(AMX* amx, cell* params) return TRUE; } +/* +* Fades the screen for a specific player. +* +* @param index Client index +* @param vecColor Color +* @param fadeTime Fade Time +* @param fadeHold Fade Hold +* @param alpha Alpha +* @param flags Flags +* +* @noreturn +*/ cell AMX_NATIVE_CALL rg_screen_fade(AMX* amx, cell* params) { enum args_e { arg_count, arg_entity, arg_color, arg_fadeTime, arg_fadeHold, arg_alpha, arg_flags }; @@ -3455,52 +3524,15 @@ cell AMX_NATIVE_CALL rg_screen_fade(AMX* amx, cell* params) return TRUE; } -cell AMX_NATIVE_CALL rg_set_size(AMX* amx, cell* params) -{ - enum args_e { arg_count, arg_index, arg_vecMin, arg_vecMax }; - - CHECK_ISENTITY(arg_index); - - CBaseEntity* pEntity = getPrivate(params[arg_index]); - if (unlikely(pEntity == nullptr)) { - AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); - return FALSE; - } - - entvars_t* pevEntity = pEntity->pev; - - CAmxArgs args(amx, params); - g_ReGameFuncs->UTIL_SetSize(pevEntity, args[arg_vecMin], args[arg_vecMax]); - return TRUE; -} - -cell AMX_NATIVE_CALL rg_set_origin(AMX* amx, cell* params) -{ - enum args_e { arg_count, arg_index, arg_vecOrigin }; - - CHECK_ISENTITY(arg_index); - - CBaseEntity* pEntity = getPrivate(params[arg_index]); - if (unlikely(pEntity == nullptr)) { - AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); - return FALSE; - } - - entvars_t* pevEntity = pEntity->pev; - - CAmxArgs args(amx, params); - g_ReGameFuncs->UTIL_SetOrigin(pevEntity, args[arg_vecOrigin]); - return TRUE; -} - -cell AMX_NATIVE_CALL rg_point_contents(AMX* amx, cell* params) -{ - enum args_e { arg_count, arg_vec }; - - CAmxArgs args(amx, params); - return g_ReGameFuncs->UTIL_PointContents(args[arg_vec]); -} - +/* +* Gets the water level at a specific position. +* +* @param position Entity index +* @param minz Min Z +* @param maxz Max Z +* +* @return - +*/ cell AMX_NATIVE_CALL rg_water_level(AMX* amx, cell* params) { enum args_e { arg_count, arg_position, arg_minz, arg_maxz }; @@ -3509,6 +3541,15 @@ cell AMX_NATIVE_CALL rg_water_level(AMX* amx, cell* params) return g_ReGameFuncs->UTIL_WaterLevel(args[arg_position], args[arg_minz], args[arg_maxz]); } +/* +* Creates bubbles within a specified area. +* +* @param vecMins Mins +* @param vecMaxs Maxs +* @param bubbleCount Bubble Count +* +* @noreturn +*/ cell AMX_NATIVE_CALL rg_bubbles(AMX* amx, cell* params) { enum args_e { arg_count, arg_mins, arg_maxs, arg_bubbleCount }; @@ -3518,6 +3559,15 @@ cell AMX_NATIVE_CALL rg_bubbles(AMX* amx, cell* params) return TRUE; } +/* +* Creates a trail of bubbles between two points. +* +* @param from Start position +* @param to End position +* @param bubbleCount Bubble Count +* +* @noreturn +*/ cell AMX_NATIVE_CALL rg_bubble_trail(AMX* amx, cell* params) { enum args_e { arg_count, arg_from, arg_to, arg_bubbleCount }; @@ -3527,28 +3577,33 @@ cell AMX_NATIVE_CALL rg_bubble_trail(AMX* amx, cell* params) return TRUE; } -cell AMX_NATIVE_CALL rg_count_entities(AMX* amx, cell* params) -{ - enum args_e { arg_count, arg_classname }; - - char classname[256]; - const char* value = getAmxString(amx, params[arg_classname], classname); - - return g_ReGameFuncs->UTIL_CountEntities(value); -} - -cell AMX_NATIVE_CALL rg_is_spawn_point_occupied(AMX* amx, cell* params) +/* +* Retrieves the texture type hit by a traceresult, based on start and end positions. +* +* @param ptr Traceresult pointer, use Fakemeta's create_tr2 to instantiate one +* @param vecSrc Start position +* @param vecEnd End position +* @param output Buffer to copy the texture type +* @param len Maximum buffer size +* +* @noreturn +* +* native rg_texture_hit(const ptr, Float:vecSrc[3], Float:vecEnd[3], output[], len); +*/ +cell AMX_NATIVE_CALL rg_texture_hit(AMX* amx, cell* params) { - enum args_e { arg_count, arg_spot }; + enum args_e { arg_count, arg_trace, arg_src, arg_end, arg_output, arg_maxlen }; - CHECK_ISENTITY(arg_spot); + CAmxArgs args(amx, params); - CBaseEntity* pSpot = getPrivate(params[arg_spot]); + cell* dest = getAmxAddr(amx, params[arg_output]); + size_t length = *getAmxAddr(amx, params[arg_maxlen]); + const char* textureType = g_ReGameFuncs->UTIL_TextureHit(args[arg_trace], args[arg_src], args[arg_end]); - return g_ReGameFuncs->UTIL_IsSpawnPointOccupied(pSpot); + setAmxString(dest, textureType, length); + return TRUE; } - AMX_NATIVE_INFO Misc_Natives_RG[] = { { "rg_set_animation", rg_set_animation }, @@ -3671,18 +3726,13 @@ AMX_NATIVE_INFO Misc_Natives_RG[] = { "rg_shared_random_float", rg_shared_random_float }, { "rg_set_group_trace", rg_set_group_trace }, { "rg_unset_group_trace", rg_unset_group_trace }, - { "rg_find_entity_in_sphere", rg_find_entity_in_sphere }, { "rg_screen_shake", rg_screen_shake }, { "rg_screen_fade_all", rg_screen_fade_all }, { "rg_screen_fade", rg_screen_fade }, - { "rg_set_size", rg_set_size }, - { "rg_set_origin", rg_set_origin }, - { "rg_point_contents", rg_point_contents }, { "rg_water_level", rg_water_level }, { "rg_bubbles", rg_bubbles }, { "rg_bubble_trail", rg_bubble_trail }, - { "rg_count_entities", rg_count_entities }, - { "rg_is_spawn_point_occupied", rg_is_spawn_point_occupied }, + { "rg_texture_hit", rg_texture_hit }, { nullptr, nullptr } }; diff --git a/reapi/version/version.h b/reapi/version/version.h index 0f32ed96..3838a2f8 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 30 #define VERSION_MAINTENANCE 0 From 01e1f59e8d4b875c795c0fb816a47332b83704ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lio=20Lozatto=20Baniuk?= Date: Thu, 8 May 2025 19:34:24 -0300 Subject: [PATCH 4/9] Update reapi_gamedll.inc --- reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc index 12cc1410..7ae64dda 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc @@ -1246,6 +1246,7 @@ native rg_send_death_message(const pKiller, const pVictim, const pAssister, cons */ native rg_player_takedamage_impulse(const player, const attacker, const Float:flKnockbackForce, const Float:flVelModifier); +/* * Restarts entities with the specified classname. * * @param classname Classname to search for @@ -1396,6 +1397,3 @@ native rg_bubble_trail(Float:from[3], Float:to[3], const bubbleCount); * */ native rg_texture_hit(const ptr, Float:vecSrc[3], Float:vecEnd[3], output[], len); - - - From e182d7bca1ead6bcffc3e51f146d8c4470ebeadd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lio=20Lozatto=20Baniuk?= Date: Thu, 8 May 2025 19:35:56 -0300 Subject: [PATCH 5/9] Update natives_misc.cpp --- reapi/src/natives/natives_misc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index 9a4c4a05..e8c75fa1 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -3374,7 +3374,7 @@ cell AMX_NATIVE_CALL rg_send_death_message(AMX *amx, cell *params) CSGameRules()->SendDeathMessage(pKiller, pVictim, pAssister, args[arg_inflictor], weaponName, args[arg_deathmsgflags], args[arg_rarityofkill]); return TRUE; } - + /* * Adds impulse to the player. * From c9f7d35db72b23a859c13ba52b25faea7634021b Mon Sep 17 00:00:00 2001 From: Celio Lozatto Date: Mon, 12 May 2025 14:40:34 -0300 Subject: [PATCH 6/9] adjustments --- .../amxmodx/scripting/include/cssdk_const.inc | 17 ++++++++++ .../scripting/include/reapi_gamedll.inc | 15 ++++----- reapi/src/natives/natives_misc.cpp | 32 ++++++++++--------- 3 files changed, 41 insertions(+), 23 deletions(-) diff --git a/reapi/extra/amxmodx/scripting/include/cssdk_const.inc b/reapi/extra/amxmodx/scripting/include/cssdk_const.inc index 821bbe9f..51526923 100644 --- a/reapi/extra/amxmodx/scripting/include/cssdk_const.inc +++ b/reapi/extra/amxmodx/scripting/include/cssdk_const.inc @@ -1583,3 +1583,20 @@ enum KillRarity KILLRARITY_REVENGE = 0x100, // Revenge by the killer KILLRARITY_INAIR = 0x200 // Killer was in the air (skill to deal with high inaccuracy) }; + +/** +* Texture types +*/ +#define CHAR_TEX_CONCRETE 'C' +#define CHAR_TEX_METAL 'M' +#define CHAR_TEX_DIRT 'D' +#define CHAR_TEX_VENT 'V' +#define CHAR_TEX_GRATE 'G' +#define CHAR_TEX_TILE 'T' +#define CHAR_TEX_SLOSH 'S' +#define CHAR_TEX_WOOD 'W' +#define CHAR_TEX_COMPUTER 'P' +#define CHAR_TEX_GRASS 'X' +#define CHAR_TEX_GLASS 'Y' +#define CHAR_TEX_FLESH 'F' +#define CHAR_TEX_SNOW 'N' diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc index 906bbf08..72bf330e 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc @@ -1239,7 +1239,7 @@ native rg_restart_other(const classname[]); native rg_reset_entities(); /* -* Removes a specified number of entities matching the given classname. +* Removes entities matching the given classname, optionally limited to a specified number of entities. * * @param classname Classname to search for * @param removeCount Remove count @@ -1255,7 +1255,7 @@ native rg_remove_other(const classname[], const removeCount); * @param low Low * @param high High * -* @return - +* @return A random long integer between "low" and "high" (inclusive) */ native rg_shared_random_long(const seed, const low, const high); @@ -1266,12 +1266,12 @@ native rg_shared_random_long(const seed, const low, const high); * @param low Low * @param high High * -* @return - +* @return A random float between "low" and "high" (inclusive) */ native Float:rg_shared_random_float(const seed, const Float:low, const Float:high); /* -* Sets the group trace mask. +* Sets the group trace mask and operation. * * @param groupmask Group Mask * @param op Operation @@ -1281,14 +1281,14 @@ native Float:rg_shared_random_float(const seed, const Float:low, const Float:hig native rg_set_group_trace(const groupmask, const op); /* -* Unsets the group trace mask. +* Resets the group trace mask to its default state. * * @noreturn */ native rg_unset_group_trace(); /* -* Creates a screen shake effect. +* Creates a screen shake effect for players within a specified radius. * * @param vecCenter Center * @param amplitude Amplitude @@ -1334,7 +1334,7 @@ native rg_screen_fade(const index, Float:vecColor[3], const Float:fadeTime, cons * @param minz Min Z * @param maxz Max Z * -* @return - +* @return The Z coordinate of the water surface */ native Float:rg_water_level(Float:position[3], const Float:minz, const Float:maxz); @@ -1370,6 +1370,5 @@ native rg_bubble_trail(Float:from[3], Float:to[3], const bubbleCount); * @param len Maximum buffer size * * @noreturn -* */ native rg_texture_hit(const ptr, Float:vecSrc[3], Float:vecEnd[3], output[], len); diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index 4fd691e5..b511561c 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -3370,14 +3370,12 @@ cell AMX_NATIVE_CALL rg_restart_other(AMX* amx, cell* params) */ cell AMX_NATIVE_CALL rg_reset_entities(AMX* amx, cell* params) { - enum args_e { arg_count }; - g_ReGameFuncs->UTIL_ResetEntities(); return TRUE; } /* -* Removes a specified number of entities matching the given classname. +* Removes entities matching the given classname, optionally limited to a specified number of entities. * * @param classname Classname to search for * @param removeCount Remove count @@ -3403,7 +3401,7 @@ cell AMX_NATIVE_CALL rg_remove_other(AMX* amx, cell* params) * @param low Low * @param high High * -* @return - +* @return A random long integer between "low" and "high" (inclusive) */ cell AMX_NATIVE_CALL rg_shared_random_long(AMX* amx, cell* params) { @@ -3420,7 +3418,7 @@ cell AMX_NATIVE_CALL rg_shared_random_long(AMX* amx, cell* params) * @param low Low * @param high High * -* @return - +* @return A random float between "low" and "high" (inclusive) */ cell AMX_NATIVE_CALL rg_shared_random_float(AMX* amx, cell* params) { @@ -3431,7 +3429,7 @@ cell AMX_NATIVE_CALL rg_shared_random_float(AMX* amx, cell* params) } /* -* Sets the group trace mask. +* Sets the group trace mask and operation. * * @param groupmask Group Mask * @param op Operation @@ -3448,20 +3446,18 @@ cell AMX_NATIVE_CALL rg_set_group_trace(AMX* amx, cell* params) } /* -* Unsets the group trace mask. +* Resets the group trace mask to its default state. * * @noreturn */ cell AMX_NATIVE_CALL rg_unset_group_trace(AMX* amx, cell* params) { - enum args_e { arg_count }; - g_ReGameFuncs->UTIL_UnsetGroupTrace(); return TRUE; } /* -* Creates a screen shake effect. +* Creates a screen shake effect for players within a specified radius. * * @param vecCenter Center * @param amplitude Amplitude @@ -3531,7 +3527,7 @@ cell AMX_NATIVE_CALL rg_screen_fade(AMX* amx, cell* params) * @param minz Min Z * @param maxz Max Z * -* @return - +* @return The Z coordinate of the water surface */ cell AMX_NATIVE_CALL rg_water_level(AMX* amx, cell* params) { @@ -3587,8 +3583,6 @@ cell AMX_NATIVE_CALL rg_bubble_trail(AMX* amx, cell* params) * @param len Maximum buffer size * * @noreturn -* -* native rg_texture_hit(const ptr, Float:vecSrc[3], Float:vecEnd[3], output[], len); */ cell AMX_NATIVE_CALL rg_texture_hit(AMX* amx, cell* params) { @@ -3598,9 +3592,17 @@ cell AMX_NATIVE_CALL rg_texture_hit(AMX* amx, cell* params) cell* dest = getAmxAddr(amx, params[arg_output]); size_t length = *getAmxAddr(amx, params[arg_maxlen]); - const char* textureType = g_ReGameFuncs->UTIL_TextureHit(args[arg_trace], args[arg_src], args[arg_end]); + const char textureType = g_ReGameFuncs->UTIL_TextureHit(args[arg_trace], args[arg_src], args[arg_end]); + + if (textureType == '\0') + { + setAmxString(dest, "", 1); + return TRUE; + } + + const char buffer[2] = { textureType, '\0' }; + setAmxString(dest, buffer, length); - setAmxString(dest, textureType, length); return TRUE; } From 7d298af307f4a05439ec1ada18add2a908f8644b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lio=20Lozatto=20Baniuk?= Date: Mon, 12 May 2025 14:45:08 -0300 Subject: [PATCH 7/9] Update natives_misc.cpp --- reapi/src/natives/natives_misc.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index c8609ea9..2cb31222 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -3674,8 +3674,7 @@ cell AMX_NATIVE_CALL rg_texture_hit(AMX* amx, cell* params) const char buffer[2] = { textureType, '\0' }; setAmxString(dest, buffer, length); - return TRUE; - + return TRUE; } AMX_NATIVE_INFO Misc_Natives_RG[] = From bf69162cdfa808a0a2d94281295d7151b421ea9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lio=20Lozatto=20Baniuk?= Date: Thu, 29 May 2025 12:24:12 -0300 Subject: [PATCH 8/9] Update reapi_gamedll.inc --- reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc index 141d735a..621d1dce 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc @@ -1270,7 +1270,7 @@ native rg_reset_entities(); * * @noreturn */ -native rg_remove_other(const classname[], const removeCount); +native rg_remove_other(const classname[], const removeCount = 0); /* * Generates a random long integer within a specified range. From b006d703f85cac569aea146f3930e16adbf06907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lio=20Lozatto=20Baniuk?= Date: Mon, 2 Jun 2025 10:30:22 -0300 Subject: [PATCH 9/9] Update reapi_gamedll.inc --- reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc index 621d1dce..c9daae0e 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc @@ -1349,7 +1349,7 @@ native rg_screen_fade_all(Float:vecColor[3], const Float:fadeTime, const Float:f * * @noreturn */ -native rg_screen_fade(const index, Float:vecColor[3], const Float:fadeTime, const Float:fadeHold, const alpha, const flags); +native rg_screen_fade(const index, Float:vecColor[3], const Float:fadeTime, const Float:fadeHold = 0.0, const alpha = 0, const flags = 0); /* * Gets the water level at a specific position.