#pragma semicolon 1
#include <sourcemod>
#include <sdkhooks>
#include <sdktools>
new Handle:g_ConVar_Cleaner_Timer_Hndl = INVALID_HANDLE;
new Handle:g_Cleaner_Timer_Hndl = INVALID_HANDLE;
new Float:g_ConVar_Cleaner_Timer = 0.0;
new bool:g_StopCleaner = true;
public Plugin:myinfo =
{
name = "Weapon Clean up",
author = "CS:GO Port Team",
description = "Cleans up dropped weapons",
version = "1.0",
url = "http://SourceMod.net"
};
public OnPluginStart()
{
g_ConVar_Cleaner_Timer_Hndl = CreateConVar("sm_weaponcleaner_timer", "15.0", "How long the weapon cleaner should run each round (in seconds). 0 = never stop.", 0, true, 0.0);
// Cache the convar
g_ConVar_Cleaner_Timer = GetConVarFloat(g_ConVar_Cleaner_Timer_Hndl);
HookConVarChange(g_ConVar_Cleaner_Timer_Hndl, OnConVarChanged);
HookEvent("round_start", OnRoundStartPost);
for (new client = 1; client <= MaxClients; client++)
{
if (!IsClientInGame(client))
{
continue;
}
OnClientPutInServer(client);
}
}
public OnConVarChanged(Handle:cvar, const String:oldVal[], const String:newVal[])
{
g_ConVar_Cleaner_Timer = StringToFloat(newVal);
}
public OnMapEnd()
{
g_Cleaner_Timer_Hndl = INVALID_HANDLE;
}
public OnRoundStartPost(Handle:event, const String:name[], bool:dontBroadcast)
{
g_StopCleaner = false;
if (g_ConVar_Cleaner_Timer <= 0.0)
{
return;
}
if (g_Cleaner_Timer_Hndl != INVALID_HANDLE)
{
KillTimer(g_Cleaner_Timer_Hndl);
g_Cleaner_Timer_Hndl = INVALID_HANDLE;
}
g_Cleaner_Timer_Hndl = CreateTimer(g_ConVar_Cleaner_Timer, DisableCleaner, _, TIMER_FLAG_NO_MAPCHANGE);
}
public Action:DisableCleaner(Handle:timer)
{
g_Cleaner_Timer_Hndl = INVALID_HANDLE;
g_StopCleaner = true;
}
public OnClientPutInServer(client)
{
SDKHook(client, SDKHook_WeaponDrop, OnWeaponDropPost);
}
public OnWeaponDropPost(client, weapon)
{
if (g_StopCleaner == true)
{
return;
}
if (!IsValidEdict(weapon))
{
return;
}
decl String:TargetName[255];
GetEntPropString(weapon, Prop_Data, "m_iName", TargetName, sizeof(TargetName));
if (TargetName[0] !='\0')
{
// Weapon has a targetname, do not touch.
return;
}
new child = GetEntPropEnt(weapon, Prop_Data, "m_hMoveChild");
if (child != -1)
{
// Entity has a child
return;
}
AcceptEntityInput(weapon, "Kill");
}