Иконка ресурса

reapi Grenade Throw Delay 0.1

Нет прав для скачивания
Автор
Vaqtincha
Исходный код
// Copyright © 2021 Vaqtincha

#define PL_VERSION "0.1"

#include <amxmodx>
#include <hamsandwich>
#include <reapi>


#define IsPlayer(%1) (1 <= %1 <= MaxClients)

#define grenade_throw_delay var_teleport_time

enum hook_s
{
any:iFunctionId,
szCallback[32],
szClass[32],
bool:bIsPost
}

enum
{
FORWARD_REGISTER,
FORWARD_ENABLE,
FORWARD_DISABLE
}

new const g_aHookData[][hook_s] =
{
{ Ham_Weapon_WeaponIdle, "CBasePlayerWeapon_WeaponIdle", "weapon_hegrenade", false },
{ Ham_Weapon_WeaponIdle, "CBasePlayerWeapon_WeaponIdle", "weapon_flashbang", false },
{ Ham_Weapon_WeaponIdle, "CBasePlayerWeapon_WeaponIdle", "weapon_smokegrenade", false },
{ Ham_Item_Deploy, "CBasePlayerItem_Deploy", "weapon_hegrenade", true },
{ Ham_Item_Deploy, "CBasePlayerItem_Deploy", "weapon_flashbang", true },
{ Ham_Item_Deploy, "CBasePlayerItem_Deploy", "weapon_smokegrenade", true }
}

new any:g_hHookHandle[sizeof(g_aHookData)]
new g_iDelayThrow
new bool:Debug

public plugin_init()
{
register_plugin("Grenade Throw Delay", PL_VERSION, "Vaqtincha")

new pcvar = get_cvar_pointer("mp_infinite_grenades")

if (pcvar)
{
ForwardsState(FORWARD_REGISTER)
bind_pcvar_num(create_cvar("mp_infinite_grenades_delay", "5", .description = "Throw delay for mp_infinite_grenades", .has_min = true, .min_val = 2.0, .has_max = true, .max_val = 60.0), g_iDelayThrow)
hook_cvar_change(pcvar, "CVar_infinite_grenades")
}

Debug = !!(plugin_flags() & AMX_FLAG_DEBUG)
}

public CVar_infinite_grenades(pcvar, const old_value[], const new_value[])
{
if (!equali(old_value, new_value))
{
ForwardsState(new_value[0] == '1' ? FORWARD_ENABLE : FORWARD_DISABLE)
}
}


public CBasePlayerWeapon_WeaponIdle(const pWeapon)
{
if (pWeapon <= 0)
return HAM_IGNORED

new Float:flStartThrow = get_member(pWeapon, m_flStartThrow)
if (flStartThrow > 0.0)
{
set_entvar(pWeapon, grenade_throw_delay, 0.0)
}
else if(get_member(pWeapon, m_flReleaseThrow) > 0.0 && get_entvar(pWeapon, grenade_throw_delay) == 0.0)
{
set_entvar(pWeapon, grenade_throw_delay, get_gametime() + float(g_iDelayThrow))
set_member(pWeapon, m_Weapon_flNextPrimaryAttack, float(g_iDelayThrow))

if (Debug)
{
new pPlayer = get_member(pWeapon, m_pPlayer)
if (pPlayer > 0)
{
rg_send_bartime(pPlayer, g_iDelayThrow)
}
}
}

return HAM_IGNORED
}

public CBasePlayerItem_Deploy(const pItem)
{
if (pItem <= 0)
return HAM_IGNORED

new Float:thrwDelay = get_entvar(pItem, grenade_throw_delay)

if (thrwDelay != 0.0)
{
new Float:curTime = get_gametime()

if (thrwDelay > curTime)
{
set_member(pItem, m_Weapon_flNextPrimaryAttack, thrwDelay - curTime)
}
else
{
set_entvar(pItem, grenade_throw_delay, 0.0)
}
}

return HAM_IGNORED
}

ForwardsState(const iState)
{
for (new i = 0; i < sizeof(g_aHookData); i++)
{
switch (iState)
{
case FORWARD_REGISTER: DisableHamForward(g_hHookHandle = any:RegisterHam(g_aHookData[iFunctionId], g_aHookData[szClass], g_aHookData[szCallback], g_aHookData[bIsPost]))
case FORWARD_ENABLE: EnableHamForward(g_hHookHandle)
case FORWARD_DISABLE: DisableHamForward(g_hHookHandle)
}
}
}
Требования
ReGameDLL, ReAPI
Требование ReAPI
Да
Поддержка русского языка
Да
Совместимость
  1. REHLDS
Сверху Снизу