diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc index 013eb5ea..906bbf08 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc @@ -1221,3 +1221,155 @@ 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); + +/* +* Restarts entities with the specified classname. +* +* @param classname Classname to search for +* +* @noreturn +*/ +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 +* +* @noreturn +*/ +native rg_remove_other(const classname[], const removeCount); + +/* +* Generates a random long integer within a specified range. +* +* @param seed Seed +* @param low Low +* @param high High +* +* @return - +*/ +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 +* @param high High +* +* @return - +*/ +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 +* +* @noreturn +*/ +native rg_set_group_trace(const groupmask, const op); + +/* +* Unsets the group trace mask. +* +* @noreturn +*/ +native rg_unset_group_trace(); + +/* +* Creates a screen shake effect. +* +* @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); + +/* +* Fades the screen for all players. +* +* @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); + +/* +* 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 +*/ +native rg_screen_fade(const index, Float:vecColor[3], const Float:fadeTime, const Float:fadeHold, const alpha, const flags); + +/* +* Gets the water level at a specific position. +* +* @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); + +/* +* Creates bubbles within a specified area. +* +* @param vecMins Mins +* @param vecMaxs Maxs +* @param bubbleCount Bubble Count +* +* @noreturn +*/ +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 +* @param bubbleCount Bubble Count +* +* @noreturn +*/ +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 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); diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index c0aa993a..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; @@ -818,6 +818,18 @@ 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); + 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); + 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); }; class IReGameApi { diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index 50300b99..4fd691e5 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -3345,6 +3345,265 @@ 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 }; + + char classname[256]; + const char* value = getAmxString(amx, params[arg_classname], classname); + + g_ReGameFuncs->UTIL_RestartOther(value); + 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 }; + + g_ReGameFuncs->UTIL_ResetEntities(); + 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 }; + + 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; +} + +/* +* 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 }; + + CAmxArgs args(amx, 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 }; + + CAmxArgs args(amx, 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 }; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_SetGroupTrace(args[arg_groupmask], args[arg_op]); + 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 }; + + g_ReGameFuncs->UTIL_UnsetGroupTrace(); + return TRUE; +} + +/* +* 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 }; + + 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; +} + +/* +* 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 }; + + 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; +} + +/* +* 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 }; + + 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; +} + +/* +* 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 }; + + CAmxArgs args(amx, 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 }; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_Bubbles(args[arg_mins], args[arg_maxs], args[arg_bubbleCount]); + 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 }; + + CAmxArgs args(amx, params); + g_ReGameFuncs->UTIL_BubbleTrail(args[arg_from], args[arg_to], args[arg_bubbleCount]); + return TRUE; +} + +/* +* 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_trace, arg_src, arg_end, arg_output, arg_maxlen }; + + CAmxArgs args(amx, 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]); + + setAmxString(dest, textureType, length); + return TRUE; +} + AMX_NATIVE_INFO Misc_Natives_RG[] = { { "rg_set_animation", rg_set_animation }, @@ -3460,6 +3719,21 @@ 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_screen_shake", rg_screen_shake }, + { "rg_screen_fade_all", rg_screen_fade_all }, + { "rg_screen_fade", rg_screen_fade }, + { "rg_water_level", rg_water_level }, + { "rg_bubbles", rg_bubbles }, + { "rg_bubble_trail", rg_bubble_trail }, + { "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