sm-plugins/QuickSwitch/scripting/QuickSwitch.sp
2019-09-10 22:07:09 +02:00

74 lines
1.9 KiB
SourcePawn

#pragma semicolon 1
#pragma newdecls required
#include <sourcemod>
#include <sdkhooks>
#include <zombiereloaded>
ConVar g_Cvar_QuickSwitch_Knife;
float g_flNextAttack[MAXPLAYERS + 1] = {0.0, ...};
bool g_bSetNextAttack[MAXPLAYERS + 1] = false;
public Plugin myinfo =
{
name = "Knife QuickSwitch",
author = "BotoX",
description = "Switching to knife without delay.",
version = "1.0",
url = ""
};
public void OnPluginStart()
{
g_Cvar_QuickSwitch_Knife = CreateConVar("sm_quickswitch_knife", "1", "Enable Knife QuickSwitch.", 0, true, 0.0, true, 1.0);
AutoExecConfig(true, "plugin.QuickSwitch");
/* Handle late load */
for(int client = 1; client <= MaxClients; client++)
{
if(IsClientInGame(client))
OnClientPutInServer(client);
}
}
public void OnClientPutInServer(int client)
{
g_flNextAttack[client] = 0.0;
g_bSetNextAttack[client] = false;
SDKHook(client, SDKHook_WeaponSwitch, OnWeaponSwitch);
SDKHook(client, SDKHook_WeaponSwitchPost, OnWeaponSwitchPost);
}
public void OnWeaponSwitch(int client, int weapon)
{
if(!g_Cvar_QuickSwitch_Knife.BoolValue || !IsPlayerAlive(client) || ZR_IsClientZombie(client))
return;
char sWeaponName[32];
GetEdictClassname(weapon, sWeaponName, sizeof(sWeaponName));
if(!StrEqual(sWeaponName, "weapon_knife"))
return;
float flNextPrimaryAttack = GetEntPropFloat(weapon, Prop_Data, "m_flNextPrimaryAttack");
float flNextSecondaryAttack = GetEntPropFloat(weapon, Prop_Data, "m_flNextSecondaryAttack");
if(flNextPrimaryAttack > g_flNextAttack[client])
g_flNextAttack[client] = flNextPrimaryAttack;
if(flNextSecondaryAttack > g_flNextAttack[client])
g_flNextAttack[client] = flNextSecondaryAttack;
g_bSetNextAttack[client] = true;
}
public void OnWeaponSwitchPost(int client, int weapon)
{
if(g_bSetNextAttack[client])
{
SetEntPropFloat(client, Prop_Send, "m_flNextAttack", g_flNextAttack[client]);
g_bSetNextAttack[client] = false;
}
}