diff --git a/ZAmmo/scripting/ZAmmo.sp b/ZAmmo/scripting/ZAmmo.sp deleted file mode 100644 index 8d7acbd..0000000 --- a/ZAmmo/scripting/ZAmmo.sp +++ /dev/null @@ -1,203 +0,0 @@ -#include -#include -#include - -/* BOOLS */ -bool g_bEnabled; -bool g_bActive[MAXPLAYERS+1]; - -/* CONVARS */ -ConVar g_hCVar_Enabled; -ConVar g_hCVar_Duration; -ConVar g_hCVar_Cost ; - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public Plugin myinfo = -{ - name = "ZAmmo", - author = "Neon", - description = "Unlimited ammo for a short period of time", - version = "1.0.0" -}; - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void OnPluginStart() -{ - g_hCVar_Enabled = CreateConVar("zr_zammo_enabled", "1", "", FCVAR_NONE, true, 0.0, true, 1.0); - g_hCVar_Duration = CreateConVar("zr_zammo_duration", "5", "", FCVAR_NONE, true, 1.0); - g_hCVar_Cost = CreateConVar("zr_zammo_cost", "5000", "", FCVAR_NONE, true, 1.0); - - g_bEnabled = g_hCVar_Enabled.BoolValue; - if (g_bEnabled) - HookEvent("weapon_fire", Event_WeaponFire); - g_hCVar_Enabled.AddChangeHook(ConVarChanged); - - HookEvent("round_start", Event_RoundStart); - - RegConsoleCmd("sm_zammo", Command_ZAmmo); - - AutoExecConfig(); -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void ConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue) -{ - g_bEnabled = convar.BoolValue; - - if (g_bEnabled) - HookEvent("weapon_fire", Event_WeaponFire); - else - UnhookEvent("weapon_fire", Event_WeaponFire); -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public Action Command_ZAmmo(int client, int args) -{ - if (!g_bEnabled) - { - ReplyToCommand(client, "[ZAmmo] is currently disabled."); - return Plugin_Handled; - } - if (client == 0) - { - ReplyToCommand(client, "[ZAmmo] Can't use this from console."); - return Plugin_Handled; - } - if (!IsPlayerAlive(client)) - { - ReplyToCommand(client, "[ZAmmo] This feature requires you to be alive."); - return Plugin_Handled; - } - if (!ZR_IsClientHuman(client)) - { - ReplyToCommand(client, "[ZAmmo] This feature requires you to be Human."); - return Plugin_Handled; - } - if(g_bActive[client]) - { - ReplyToCommand(client, "[ZAmmo] is already active for you."); - return Plugin_Handled; - } - int iCost = g_hCVar_Cost.IntValue; - if (GetEntProp(client, Prop_Send, "m_iAccount") < iCost) - { - ReplyToCommand(client, "[ZAmmo] Insufficent funds (%d).", iCost); - return Plugin_Handled; - } - int iDuration = g_hCVar_Duration.IntValue; - - SetEntProp(client, Prop_Send, "m_iAccount", GetEntProp(client, Prop_Send, "m_iAccount") - iCost); - - SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime()); - SetEntProp(client, Prop_Send, "m_iProgressBarDuration", iDuration); - CreateTimer(float(iDuration), Timer_Disable, GetClientSerial(client), TIMER_FLAG_NO_MAPCHANGE); - - g_bActive[client] = true; - ReplyToCommand(client, "[ZAmmo] Enabling Infinite Ammo for %d seconds in exchange for %d$.", iDuration, iCost); - return Plugin_Handled; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void OnClientDisconnect(int client) -{ - g_bActive[client] = false; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void Event_RoundStart(Handle hEvent, char[] name, bool dontBroadcast) -{ - for (int client = 1; client <= MaxClients; client++) - { - g_bActive[client] = false; - } -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void Event_WeaponFire(Handle hEvent, char[] name, bool dontBroadcast) -{ - int client = GetClientOfUserId(GetEventInt(hEvent, "userid")); - if(!g_bActive[client]) - return; - - int weapon = GetEntPropEnt(client, Prop_Data, "m_hActiveWeapon", 0); - if(IsValidEntity(weapon)) - { - if(weapon == GetPlayerWeaponSlot(client, 0) || weapon == GetPlayerWeaponSlot(client, 1)) - { - if(GetEntProp(weapon, Prop_Send, "m_iState", 4, 0) == 2 && GetEntProp(weapon, Prop_Send, "m_iClip1", 4, 0)) - { - int toAdd = 1; - char weaponClassname[128]; - GetEntityClassname(weapon, weaponClassname, sizeof(weaponClassname)); - - if(StrEqual(weaponClassname, "weapon_glock", true) || StrEqual(weaponClassname, "weapon_famas", true)) - { - if(GetEntProp(weapon, Prop_Send, "m_bBurstMode")) - { - switch (GetEntProp(weapon, Prop_Send, "m_iClip1")) - { - case 1: - { - toAdd = 1; - } - case 2: - { - toAdd = 2; - } - default: - { - toAdd = 3; - } - } - } - } - SetEntProp(weapon, Prop_Send, "m_iClip1", GetEntProp(weapon, Prop_Send, "m_iClip1", 4, 0) + toAdd, 4, 0); - } - } - } - - return; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn) -{ - if (!g_bActive[client]) - return; - - SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime()-1); - SetEntProp(client, Prop_Send, "m_iProgressBarDuration", 0); - - g_bActive[client] = false; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public Action Timer_Disable(Handle timer, int iSerial) -{ - g_bActive[client] = false; - - int client; - if ((client = GetClientFromSerial(iSerial)) == 0) - return; - - SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime()-1); - SetEntProp(client, Prop_Send, "m_iProgressBarDuration", 0); -} diff --git a/ZSkills/content/sound/unloze/extinguish.wav b/ZSkills/content/sound/unloze/extinguish.wav new file mode 100644 index 0000000..9e8c2e6 Binary files /dev/null and b/ZSkills/content/sound/unloze/extinguish.wav differ diff --git a/ZSkills/scripting/ZSkills.sp b/ZSkills/scripting/ZSkills.sp new file mode 100644 index 0000000..9652944 --- /dev/null +++ b/ZSkills/scripting/ZSkills.sp @@ -0,0 +1,359 @@ +#include +#include +#include + +/* BOOLS */ +bool g_bZAmmo_Enabled; +bool g_bZAmmo_Active[MAXPLAYERS+1]; + +bool g_bZCleanse_Enabled; +bool g_bZCleanse_Active[MAXPLAYERS+1]; +bool g_bLastButtonReload[MAXPLAYERS+1]; + +/* CONVARS */ +ConVar g_hCVar_ZAmmo_Enabled; +ConVar g_hCVar_ZAmmo_Duration; +ConVar g_hCVar_ZAmmo_Cost; + +ConVar g_hCVar_ZCleanse_Enabled; +ConVar g_hCVar_ZCleanse_Duration; +ConVar g_hCVar_ZCleanse_Uses; + +/* INTEGERS */ +int g_bZCleanse_Uses[MAXPLAYERS+1]; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "ZSkills", + author = "Neon", + description = "Skills?!", + version = "1.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + g_hCVar_ZAmmo_Enabled = CreateConVar("zr_zammo_enabled", "1", "", FCVAR_NONE, true, 0.0, true, 1.0); + g_hCVar_ZAmmo_Duration = CreateConVar("zr_zammo_duration", "6", "", FCVAR_NONE, true, 1.0); + g_hCVar_ZAmmo_Cost = CreateConVar("zr_zammo_cost", "4500", "", FCVAR_NONE, true, 1.0); + g_bZAmmo_Enabled = g_hCVar_ZAmmo_Enabled.BoolValue; + if (g_bZAmmo_Enabled) + HookEvent("weapon_fire", Event_WeaponFire); + g_hCVar_ZAmmo_Enabled.AddChangeHook(ConVarChanged); + + g_hCVar_ZCleanse_Enabled = CreateConVar("zr_zcleanse_enabled", "1", "", FCVAR_NONE, true, 0.0, true, 1.0); + g_hCVar_ZCleanse_Duration = CreateConVar("zr_zcleanse_duration", "5", "", FCVAR_NONE, true, 1.0); + g_hCVar_ZCleanse_Uses = CreateConVar("zr_zcleanse_uses", "5", "", FCVAR_NONE, true, 1.0); + g_bZCleanse_Enabled = g_hCVar_ZCleanse_Enabled.BoolValue; + g_hCVar_ZCleanse_Enabled.AddChangeHook(ConVarChanged); + + + RegConsoleCmd("sm_zammo", Command_ZAmmo); + RegConsoleCmd("sm_zcleanse", Command_ZCleanse); + + + + + HookEvent("round_start", Event_RoundStart); + AutoExecConfig(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + PrecacheSound("unloze/extinguish.wav"); + AddFileToDownloadsTable("sound/unloze/extinguish.wav"); +} + + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_bZAmmo_Enabled = convar.BoolValue; + if (g_bZAmmo_Enabled) + HookEvent("weapon_fire", Event_WeaponFire); + else + UnhookEvent("weapon_fire", Event_WeaponFire); + + g_bZCleanse_Enabled = g_hCVar_ZCleanse_Enabled.BoolValue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_ZAmmo(int client, int args) +{ + if (client == 0) + { + ReplyToCommand(client, "[ZAmmo] Can't use this from console."); + return Plugin_Handled; + } + if (!g_bZAmmo_Enabled) + { + PrintToChat(client, "[ZAmmo] is currently disabled."); + return Plugin_Handled; + } + if (!IsPlayerAlive(client)) + { + PrintToChat(client, "[ZAmmo] This feature requires you to be alive."); + return Plugin_Handled; + } + if (!ZR_IsClientHuman(client)) + { + PrintToChat(client, "[ZAmmo] This feature requires you to be Human."); + return Plugin_Handled; + } + if(g_bZAmmo_Active[client]) + { + PrintToChat(client, "[ZAmmo] is already active on you."); + return Plugin_Handled; + } + int iCost = g_hCVar_ZAmmo_Cost.IntValue; + if (GetEntProp(client, Prop_Send, "m_iAccount") < iCost) + { + PrintToChat(client, "[ZAmmo] Insufficent funds (%d).", iCost); + return Plugin_Handled; + } + int iDuration = g_hCVar_ZAmmo_Duration.IntValue; + + SetEntProp(client, Prop_Send, "m_iAccount", GetEntProp(client, Prop_Send, "m_iAccount") - iCost); + + SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime()); + SetEntProp(client, Prop_Send, "m_iProgressBarDuration", iDuration); + CreateTimer(float(iDuration), Timer_Disable_ZAmmo, GetClientSerial(client), TIMER_FLAG_NO_MAPCHANGE); + + g_bZAmmo_Active[client] = true; + PrintToChat(client, "[ZAmmo] Enabling Infinite Ammo for %d seconds in exchange for %d$.", iDuration, iCost); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_ZCleanse(int client, int args) +{ + if (client == 0) + { + ReplyToCommand(client, "[ZCleanse] Can't use this from console."); + return Plugin_Handled; + } + if (!g_bZCleanse_Enabled) + { + PrintToChat(client, "[ZCleanse] is currently disabled."); + return Plugin_Handled; + } + if (!IsPlayerAlive(client)) + { + PrintToChat(client, "[ZCleanse] This feature requires you to be alive."); + return Plugin_Handled; + } + if (!ZR_IsClientZombie(client)) + { + PrintToChat(client, "[ZCleanse] This feature requires you to be Zombie."); + return Plugin_Handled; + } + if(g_bZCleanse_Active[client]) + { + PrintToChat(client, "[ZCleanse] is already active on you."); + return Plugin_Handled; + } + int iMaxUses = g_hCVar_ZCleanse_Uses.IntValue; + if (g_bZCleanse_Uses[client] >= iMaxUses) + { + PrintToChat(client, "[ZCleanse] Already used (%d/%d) times this round.", g_bZCleanse_Uses[client], iMaxUses); + return Plugin_Handled; + } + int iDuration = g_hCVar_ZCleanse_Duration.IntValue; + + SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime()); + SetEntProp(client, Prop_Send, "m_iProgressBarDuration", iDuration); + NapalmExtinguishEntity(client); + CreateTimer(float(iDuration), Timer_Disable_ZCleanse, GetClientSerial(client), TIMER_FLAG_NO_MAPCHANGE); + + g_bZCleanse_Active[client] = true; + g_bZCleanse_Uses[client]++; + PrintToChat(client, "[ZCleanse] You are immune against napalm for the next %d seconds. (%d/%d) uses.", iDuration, g_bZCleanse_Uses[client], iMaxUses); + //EmitSoundToClient(client, "unloze/extinguish.wav", .volume=1.0); + EmitSoundToAll("unloze/extinguish.wav", .entity=client, .volume=0.4); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_bZAmmo_Active[client] = false; + g_bZCleanse_Active[client] = false; + g_bZCleanse_Uses[client] = 0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void Event_RoundStart(Handle hEvent, char[] name, bool dontBroadcast) +{ + for (int client = 1; client <= MaxClients; client++) + { + g_bZAmmo_Active[client] = false; + g_bZCleanse_Active[client] = false; + g_bZCleanse_Uses[client] = 0; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void Event_WeaponFire(Handle hEvent, char[] name, bool dontBroadcast) +{ + int client = GetClientOfUserId(GetEventInt(hEvent, "userid")); + if(!g_bZAmmo_Active[client]) + return; + + int weapon = GetEntPropEnt(client, Prop_Data, "m_hActiveWeapon", 0); + if(IsValidEntity(weapon)) + { + if(weapon == GetPlayerWeaponSlot(client, 0) || weapon == GetPlayerWeaponSlot(client, 1)) + { + if(GetEntProp(weapon, Prop_Send, "m_iState", 4, 0) == 2 && GetEntProp(weapon, Prop_Send, "m_iClip1", 4, 0)) + { + int toAdd = 1; + char weaponClassname[128]; + GetEntityClassname(weapon, weaponClassname, sizeof(weaponClassname)); + + if(StrEqual(weaponClassname, "weapon_glock", true) || StrEqual(weaponClassname, "weapon_famas", true)) + { + if(GetEntProp(weapon, Prop_Send, "m_bBurstMode")) + { + switch (GetEntProp(weapon, Prop_Send, "m_iClip1")) + { + case 1: + { + toAdd = 1; + } + case 2: + { + toAdd = 2; + } + default: + { + toAdd = 3; + } + } + } + } + SetEntProp(weapon, Prop_Send, "m_iClip1", GetEntProp(weapon, Prop_Send, "m_iClip1", 4, 0) + toAdd, 4, 0); + } + } + } + + return; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn) +{ + if (!g_bZAmmo_Active[client]) + return; + + SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime()-1); + SetEntProp(client, Prop_Send, "m_iProgressBarDuration", 0); + + g_bZAmmo_Active[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void NapalmExtinguishEntity(int client) +{ + int iFire = GetEntPropEnt(client, Prop_Data, "m_hEffectEntity"); + if (IsValidEntity(iFire)) + { + char sClassName[64]; + GetEdictClassname(iFire, sClassName, sizeof(sClassName)); + if (StrEqual(sClassName, "entityflame", false)) + SetEntPropFloat(iFire, Prop_Data, "m_flLifetime", 0.0); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action ZR_OnClientIgnite(int &client, float &duration) +{ + if(g_bZCleanse_Active[client]) + return Plugin_Handled; + + return Plugin_Continue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Timer_Disable_ZAmmo(Handle timer, int iSerial) +{ + int client; + if ((client = GetClientFromSerial(iSerial)) == 0) + return; + + SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime()-1); + SetEntProp(client, Prop_Send, "m_iProgressBarDuration", 0); + + g_bZAmmo_Active[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Timer_Disable_ZCleanse(Handle timer, int iSerial) +{ + int client; + if ((client = GetClientFromSerial(iSerial)) == 0) + return; + + SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime()-1); + SetEntProp(client, Prop_Send, "m_iProgressBarDuration", 0); + + g_bZCleanse_Active[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnPlayerRunCmd(int client, int &buttons) +{ + if(!IsPlayerAlive(client)) + return Plugin_Continue; + + if(!ZR_IsClientZombie(client)) + return Plugin_Continue; + + if (g_bZCleanse_Active[client]) + return Plugin_Continue; + + bool bPressingReload = view_as(buttons & IN_RELOAD); + if (!bPressingReload) + { + g_bLastButtonReload[client] = false; + return Plugin_Continue; + } + + if (!g_bLastButtonReload[client]) + { + g_bLastButtonReload[client] = true; + Command_ZCleanse(client, 0); + } + return Plugin_Continue; +} \ No newline at end of file