initial release: Buffshotguns

+ fix a small error for invalid edict s
This commit is contained in:
dogan 2020-11-10 15:24:47 +01:00
parent ae14cf0899
commit 807e6d71ff
2 changed files with 80 additions and 1 deletions

View File

@ -0,0 +1,76 @@
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <cstrike>
#include <zombiereloaded>
float g_fShotgunBuffMultiplier;
int g_hActiveWeapon;
public Plugin myinfo =
{
name = "BuffShotguns",
author = "Dogan",
description = "Simple Plugin to buff Shotguns (++damage)",
version = "1.0.0",
url = ""
}
public void OnPluginStart()
{
ConVar cvar;
HookConVarChange((cvar = CreateConVar("sm_buffshotguns_multiplier", "1.15", "damage multiplier for shotguns")), g_cvShotgunBuffMultiplier);
g_fShotgunBuffMultiplier = cvar.FloatValue;
delete cvar;
AutoExecConfig(true, "plugin.BuffShotguns");
g_hActiveWeapon = FindSendPropInfo("CBaseCombatCharacter", "m_hActiveWeapon");
if(g_hActiveWeapon == -1)
SetFailState("Couldn't find CBaseCombatCharacter::m_hActiveWeapon");
for(int i = 1; i <= MaxClients; i++)
{
if(IsClientInGame(i))
OnClientPostAdminCheck(i);
}
}
public void g_cvShotgunBuffMultiplier(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_fShotgunBuffMultiplier = convar.FloatValue;
}
public void OnClientPostAdminCheck(int client)
{
SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}
public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom)
{
if(attacker < 1 || attacker > MaxClients)
return Plugin_Continue;
if(!IsPlayerAlive(victim))
return Plugin_Continue;
if(!ZR_IsClientZombie(victim))
return Plugin_Continue;
char sWeapon[32];
int iWeapon = GetEntDataEnt2(attacker, g_hActiveWeapon);
if(iWeapon != INVALID_ENT_REFERENCE)
GetEdictClassname(iWeapon, sWeapon, sizeof(sWeapon));
else
return Plugin_Continue;
if(!StrEqual(sWeapon, "weapon_m3") && !StrEqual(sWeapon, "weapon_xm1014"))
return Plugin_Continue;
damage = float(RoundFloat(damage * g_fShotgunBuffMultiplier));
return Plugin_Changed;
}

View File

@ -187,7 +187,10 @@ public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &dam
char sWeapon[32]; char sWeapon[32];
int iWeapon = GetEntDataEnt2(attacker, g_hActiveWeapon); int iWeapon = GetEntDataEnt2(attacker, g_hActiveWeapon);
GetEdictClassname(iWeapon, sWeapon, sizeof(sWeapon)); if(iWeapon != INVALID_ENT_REFERENCE)
GetEdictClassname(iWeapon, sWeapon, sizeof(sWeapon));
else
return Plugin_Continue;
if(!StrEqual(sWeapon, "weapon_knife")) if(!StrEqual(sWeapon, "weapon_knife"))
return Plugin_Continue; return Plugin_Continue;