diff --git a/_autosilencer/scripting/autosilencer.sp b/_autosilencer/scripting/autosilencer.sp
new file mode 100644
index 00000000..72a3f7e2
--- /dev/null
+++ b/_autosilencer/scripting/autosilencer.sp
@@ -0,0 +1,130 @@
+#include <sourcemod>
+#include <sdktools>
+#include <sdkhooks>
+#include <clientprefs>
+
+Cookie g_CookieUsp = null;
+Cookie g_CookieM4a1 = null;
+bool g_bLateLoad = false;
+bool g_bM4A1Silenced[MAXPLAYERS] = true;
+bool g_bUSPSilenced[MAXPLAYERS] = false;
+
+public Plugin myinfo =
+{
+	name = "Auto Silencer",
+	author = "pan",
+	description = "",
+	version = "no.",
+	url = "unloze.gay"
+};
+
+public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
+{
+	g_bLateLoad = late;
+	return APLRes_Success;
+}
+
+public void OnPluginStart()
+{	
+	g_CookieUsp = new Cookie("usp_silence", "uh...", CookieAccess_Private);
+	g_CookieM4a1 = new Cookie("m4a1_silence", "eh...", CookieAccess_Private);
+	RegConsoleCmd("sm_sm4", Command_SM4, "Toggle M4 Silencer");
+	RegConsoleCmd("sm_susp", Command_SUSP, "Toggle USPS Silencer");
+	
+	if (g_bLateLoad)
+	{
+		for (int i = 1; i <= MaxClients; i++) 
+		{
+			if (IsClientConnected(i) && IsClientInGame(i)) 
+			{
+				OnClientPutInServer(i);
+			}
+		}
+	}
+}
+
+public void OnClientPutInServer(int client)
+{
+    SDKHook(client, SDKHook_WeaponEquip, Hook_OnWeaponEquip);
+}
+
+public Action Command_SM4(int client, int args) 
+{
+	g_bM4A1Silenced[client] = !g_bM4A1Silenced[client];
+	char buffer[2];
+	Format(buffer, sizeof(buffer), "%s", g_bM4A1Silenced[client] ? "1":"0");
+	g_CookieM4a1.Set(client, buffer);
+	PrintToChat(client, "Toggled Silencer for M4A1 to %s", g_bM4A1Silenced[client] ? "On":"Off")
+		
+	return Plugin_Handled;
+}
+
+public Action Command_SUSP(int client, int args) 
+{
+	g_bUSPSilenced[client] = !g_bUSPSilenced[client];
+	
+	char buffer[2];
+	Format(buffer, sizeof(buffer), "%s", g_bUSPSilenced[client] ? "1":"0");
+	g_CookieUsp.Set(client, buffer);
+	
+	PrintToChat(client, "Toggled Silencer for USP to %s", g_bUSPSilenced[client] ? "On":"Off")
+		
+	return Plugin_Handled;
+}
+
+public Action Hook_OnWeaponEquip(int client, int weapon)
+{
+	char item[20];
+	GetEdictClassname(weapon, item, sizeof(item));
+
+	if (StrEqual(item, "weapon_m4a1"))
+	{
+		if(g_bM4A1Silenced[client])
+		{
+			SetEntProp(weapon, Prop_Send, "m_bSilencerOn", 1);
+			SetEntProp(weapon, Prop_Send, "m_weaponMode", 1);
+		}
+		else
+		{
+			SetEntProp(weapon, Prop_Send, "m_bSilencerOn", 0);
+			SetEntProp(weapon, Prop_Send, "m_weaponMode", 0);
+		}
+	}
+	
+	if(StrEqual(item, "weapon_usp"))
+	{
+		if(g_bUSPSilenced[client])
+		{
+			SetEntProp(weapon, Prop_Send, "m_bSilencerOn", 1);
+			SetEntProp(weapon, Prop_Send, "m_weaponMode", 1);
+		}
+		else
+		{
+			SetEntProp(weapon, Prop_Send, "m_bSilencerOn", 0);
+			SetEntProp(weapon, Prop_Send, "m_weaponMode", 0);
+		}
+	}
+}
+
+public void OnClientCookiesCached(int client)
+{
+	//Get cookies
+	char strUSP[2], strM4A1[2];
+	g_CookieUsp.Get(client, strUSP, sizeof(strUSP));
+	g_CookieM4a1.Get(client, strM4A1, sizeof(strM4A1));
+	
+	if (StrEqual(strUSP, "")) //Means the cookie has never been set. Default is Off for USP, On for M4A1.
+	{
+		g_bM4A1Silenced[client] = true;
+		g_CookieM4a1.Set(client, "1");
+		
+		g_bUSPSilenced[client] = false;
+		g_CookieUsp.Set(client, "0");
+		
+		return;
+	}
+	
+	g_bM4A1Silenced[client] = StrEqual(strM4A1, "1");
+	g_bUSPSilenced[client] = StrEqual(strUSP, "1");
+	
+}
\ No newline at end of file