From 323989c0e8916ae59ce3c884ec79a05467558c34 Mon Sep 17 00:00:00 2001 From: strafe Date: Tue, 20 Jun 2017 20:00:17 +0100 Subject: [PATCH] Add shavit_misc_removeragdolls --- scripting/shavit-misc.sp | 48 +++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/scripting/shavit-misc.sp b/scripting/shavit-misc.sp index d67af587..6f4ded8f 100644 --- a/scripting/shavit-misc.sp +++ b/scripting/shavit-misc.sp @@ -89,6 +89,7 @@ ConVar gCV_StaticPrestrafe = null; ConVar gCV_NoclipMe = null; ConVar gCV_AdvertisementInterval = null; ConVar gCV_Checkpoints = null; +ConVar gCV_RemoveRagdolls = null; // cached cvars int gI_GodMode = 3; @@ -112,6 +113,7 @@ bool gB_StaticPrestrafe = true; int gI_NoclipMe = true; float gF_AdvertisementInterval = 600.0; bool gB_Checkpoints = true; +int gI_RemoveRagdolls = 1; // dhooks Handle gH_GetPlayerMaxSpeed = null; @@ -239,6 +241,7 @@ public void OnPluginStart() gCV_NoclipMe = CreateConVar("shavit_misc_noclipme", "1", "Allow +noclip, sm_p and all the noclip commands?\n0 - Disabled\n1 - Enabled\n2 - requires 'admin_noclipme' override or ADMFLAG_CHEATS flag.", 0, true, 0.0, true, 2.0); gCV_AdvertisementInterval = CreateConVar("shavit_misc_advertisementinterval", "600.0", "Interval between each chat advertisement.\nConfiguration file for those is configs/shavit-advertisements.cfg.\nSet to 0.0 to disable.\nRequires server restart for changes to take effect.", 0, true, 0.0); gCV_Checkpoints = CreateConVar("shavit_misc_checkpoints", "1", "Allow players to save and teleport to checkpoints.", 0, true, 0.0, true, 1.0); + gCV_RemoveRagdolls = CreateConVar("shavit_misc_removeragdolls", "1", "Remove ragdolls after death?\n0 - Disabled\n1 - Only remove replay bot ragdolls.\n2 - Remove all ragdolls.", 0, true, 0.0, true, 2.0); gCV_GodMode.AddChangeHook(OnConVarChanged); gCV_PreSpeed.AddChangeHook(OnConVarChanged); @@ -261,6 +264,7 @@ public void OnPluginStart() gCV_NoclipMe.AddChangeHook(OnConVarChanged); gCV_AdvertisementInterval.AddChangeHook(OnConVarChanged); gCV_Checkpoints.AddChangeHook(OnConVarChanged); + gCV_RemoveRagdolls.AddChangeHook(OnConVarChanged); AutoExecConfig(); @@ -395,6 +399,7 @@ public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] n gI_NoclipMe = gCV_NoclipMe.IntValue; gF_AdvertisementInterval = gCV_AdvertisementInterval.FloatValue; gB_Checkpoints = gCV_Checkpoints.BoolValue; + gI_RemoveRagdolls = gCV_RemoveRagdolls.IntValue; } public void OnMapStart() @@ -681,6 +686,16 @@ void UpdateScoreboard(int client) } } +void RemoveRagdoll(int client) +{ + int iEntity = GetEntPropEnt(client, Prop_Send, "m_hRagdoll"); + + if(iEntity != INVALID_ENT_REFERENCE) + { + AcceptEntityInput(iEntity, "Kill"); + } +} + public Action OnPlayerRunCmd(int client, int &buttons) { if(!IsPlayerAlive(client) || IsFakeClient(client)) @@ -1555,13 +1570,36 @@ public Action Player_Notifications(Event event, const char[] name, bool dontBroa event.BroadcastDisabled = true; } - if(gF_AutoRespawn > 0.0 && StrEqual(name, "player_death")) - { - int client = GetClientOfUserId(event.GetInt("userid")); + int client = GetClientOfUserId(event.GetInt("userid")); - if(!IsFakeClient(client)) + if(gF_AutoRespawn > 0.0 && StrEqual(name, "player_death") && !IsFakeClient(client)) + { + CreateTimer(gF_AutoRespawn, Respawn, GetClientSerial(client), TIMER_FLAG_NO_MAPCHANGE); + } + + switch(gI_RemoveRagdolls) + { + case 0: { - CreateTimer(gF_AutoRespawn, Respawn, GetClientSerial(client), TIMER_FLAG_NO_MAPCHANGE); + return Plugin_Continue; + } + + case 1: + { + if(IsFakeClient(client)) + { + RemoveRagdoll(client); + } + } + + case 2: + { + RemoveRagdoll(client); + } + + default: + { + return Plugin_Continue; } }