diff --git a/UNLOZE_KnifeMadness/scripting/UNLOZE_KnifeMadness.sp b/UNLOZE_KnifeMadness/scripting/UNLOZE_KnifeMadness.sp
new file mode 100644
index 00000000..f9cecf26
--- /dev/null
+++ b/UNLOZE_KnifeMadness/scripting/UNLOZE_KnifeMadness.sp
@@ -0,0 +1,324 @@
+#include <sourcemod>
+#include <sdktools>
+#include <multicolors>
+#include <zombiereloaded>
+
+#pragma semicolon 1
+#pragma newdecls required
+
+/* CONVARS */
+ConVar g_hCVar_Delay;
+
+Handle g_hTriggerTimer = INVALID_HANDLE;
+Handle g_hTriggerResetTimer = INVALID_HANDLE;
+
+/* BOOLS */
+bool g_bZMwasKnifed[MAXPLAYERS+1];
+//----------------------------------------------------------------------------------------------------
+// Purpose:
+//----------------------------------------------------------------------------------------------------
+public Plugin myinfo =
+{
+	name        = "UNLOZE Knife Madness",
+	author      = "Neon",
+	description = "UNLOZE Knife Madness",
+	version     = "1.0",
+	url         = "https://steamcommunity.com/id/n3ontm"
+};
+
+//----------------------------------------------------------------------------------------------------
+// Purpose:
+//----------------------------------------------------------------------------------------------------
+public void OnPluginStart()
+{
+	g_hCVar_Delay = CreateConVar("sm_knife_madness_kill_delay", "3", "Delay before ZMs die after being knifed by a human.", 0, true, 0.0);
+
+	HookEvent("player_spawn", 	OnClientSpawn);
+	HookEvent("player_hurt", 		OnClientHurt);
+	HookEvent("round_start",  	OnRoundStart);
+}
+
+//----------------------------------------------------------------------------------------------------
+// Purpose:
+//----------------------------------------------------------------------------------------------------
+public void OnClientSpawn(Event hEvent, const char[] sEvent, bool bDontBroadcast)
+{
+	int client = GetClientOfUserId(hEvent.GetInt("userid"));
+	g_bZMwasKnifed[client] = false;
+}
+
+//----------------------------------------------------------------------------------------------------
+// Purpose:
+//----------------------------------------------------------------------------------------------------
+public void OnClientHurt(Event hEvent, const char[] sEvent, bool bDontBroadcast)
+{
+	int attacker = GetClientOfUserId(hEvent.GetInt("attacker"));
+	int victim = GetClientOfUserId(hEvent.GetInt("userid"));
+
+	if (!IsValidClient(attacker, false))
+		return;
+
+	if (!(IsPlayerAlive(attacker) && IsPlayerAlive(victim) && ZR_IsClientHuman(attacker) && ZR_IsClientZombie(victim)))
+		return;
+
+	char sWeapon[32];
+	GetEventString(hEvent, "weapon", sWeapon, sizeof(sWeapon));
+
+	if(!StrEqual(sWeapon, "knife", false))
+		return;
+
+	g_bZMwasKnifed[victim] = true;
+	CPrintToChat(attacker, "{unique}[Knife Madness] {white}You have knifed {lime}%N{white}. He will die in %ds if he doesnt infect a human.", victim, g_hCVar_Delay.IntValue);
+	CPrintToChat(victim, "{unique}[Knife Madness] {white}You have been knifed by {lime}%N{white}. You will die in %ds if you do not infect a human.", attacker, g_hCVar_Delay.IntValue);
+
+	SetEntPropFloat(victim, Prop_Send, "m_flProgressBarStartTime", GetGameTime());
+	SetEntProp(victim, Prop_Send, "m_iProgressBarDuration", g_hCVar_Delay.IntValue);
+
+	DataPack pack;
+	CreateDataTimer(g_hCVar_Delay.FloatValue, KillZM, pack, TIMER_FLAG_NO_MAPCHANGE);
+	pack.WriteCell(GetClientUserId(attacker));
+	pack.WriteCell(GetClientUserId(victim));
+}
+
+//----------------------------------------------------------------------------------------------------
+// Purpose:
+//----------------------------------------------------------------------------------------------------
+public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast)
+{
+	ResetTriggers();
+
+	if (g_hTriggerTimer != INVALID_HANDLE)
+	{
+		PrintToChatAll("trigger active, needs kill");
+		KillTimer(g_hTriggerTimer);
+		g_hTriggerTimer = INVALID_HANDLE;
+	}
+
+	if (g_hTriggerResetTimer != INVALID_HANDLE)
+	{
+		PrintToChatAll("reset active, needs kill");
+		KillTimer(g_hTriggerResetTimer);
+		g_hTriggerResetTimer = INVALID_HANDLE;
+	}
+
+	float fRandomInterval = GetRandomFloat(12.0, 50.0);
+	g_hTriggerTimer = CreateTimer(fRandomInterval, SpecialTrigger, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE);
+	g_hTriggerResetTimer = CreateTimer(fRandomInterval + 10.0, ResetTriggerTimer, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE);
+}
+
+//----------------------------------------------------------------------------------------------------
+// Purpose:
+//----------------------------------------------------------------------------------------------------
+public Action SpecialTrigger(Handle timer)
+{
+	int iRandom = GetRandomInt(0, 8);
+	if (iRandom == 0)
+	{
+		ServerCommand("sv_gravity 300");
+		CPrintToChatAll("{unique}[Knife Madness] {white}Low gravity activated!");
+	}
+	else if (iRandom == 1)
+	{
+		for (int client = 1; client <= MaxClients; client++)
+		{
+			if (IsValidClient(client, false) && IsPlayerAlive(client))
+				SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", 3.0);
+		}
+		CPrintToChatAll("{unique}[Knife Madness] {white}Speed activated!");
+	}
+	if (iRandom == 2)
+	{
+		ServerCommand("sm plugins load disabled/autobhop");
+		CPrintToChatAll("{unique}[Knife Madness] {white}Auto-Bhop activated!");
+	}
+	if (iRandom == 3)
+	{
+		for (int client = 1; client <= MaxClients; client++)
+		{
+			if (IsValidClient(client, false) && IsPlayerAlive(client))
+				SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", GetRandomFloat(0.2, 5.0));
+		}
+		CPrintToChatAll("{unique}[Knife Madness] {white}Random speed for everyone!");
+	}
+	if (iRandom == 4)
+	{
+		ServerCommand("sv_friction 0.1");
+		CPrintToChatAll("{unique}[Knife Madness] {white}Slippery ground!");
+	}
+	if (iRandom == 5)
+	{
+		ServerCommand("sv_accelerate -5");
+		ServerCommand("sv_airaccelerate -1");
+		CPrintToChatAll("{unique}[Knife Madness] {white}Inverted controls!");
+	}
+	if (iRandom == 6)
+	{
+		CPrintToChatAll("{unique}[Knife Madness] {white}Seems like we chillin...");
+	}
+	if (iRandom == 7)
+	{
+		for (int client = 1; client <= MaxClients; client++)
+		{
+			if (!(IsValidClient(client, false) && IsPlayerAlive(client)))
+				continue;
+
+			for(int j = 0; j < 5; j++)
+			{
+				int w = -1;
+
+				while ((w = GetPlayerWeaponSlot(client, j)) != -1)
+				{
+					if(IsValidEntity(w) && IsValidEdict(w))
+					{
+						RemovePlayerItem(client, w);
+						AcceptEntityInput(w, "Kill");
+					}
+				}
+			}
+		}
+		CPrintToChatAll("{unique}[Knife Madness] {white}Time for a break...");
+	}
+	if (iRandom == 8)
+	{
+		iRandom = GetRandomInt(0, 1);
+
+		if (iRandom == 0)
+			CPrintToChatAll("{unique}[Knife Madness] {white}Zombies lost their knives...");
+		else if (iRandom == 1)
+			CPrintToChatAll("{unique}[Knife Madness] {white}Humans lost their knives...");
+
+		for (int client = 1; client <= MaxClients; client++)
+		{
+			if (!(IsValidClient(client, false) && IsPlayerAlive(client)))
+				continue;
+
+			if (iRandom == 0)
+			{
+				if (ZR_IsClientHuman(client))
+					continue;
+			}
+			else if (iRandom == 1)
+			{
+				if (ZR_IsClientZombie(client))
+					continue;
+			}
+
+			for(int j = 0; j < 5; j++)
+			{
+				int w = -1;
+
+				while ((w = GetPlayerWeaponSlot(client, j)) != -1)
+				{
+					if(IsValidEntity(w) && IsValidEdict(w))
+					{
+						RemovePlayerItem(client, w);
+						AcceptEntityInput(w, "Kill");
+					}
+				}
+			}
+		}
+	}
+	EmitGameSoundToAll("Bot.Stuck1");
+	g_hTriggerTimer = INVALID_HANDLE;
+
+	float fRandomInterval = GetRandomFloat(11.0, 60.0);
+	g_hTriggerTimer = CreateTimer(fRandomInterval, SpecialTrigger);
+	g_hTriggerResetTimer = CreateTimer(fRandomInterval + 10.0, ResetTriggerTimer);
+}
+
+//----------------------------------------------------------------------------------------------------
+// Purpose:
+//----------------------------------------------------------------------------------------------------
+public Action ResetTriggerTimer(Handle timer)
+{
+	g_hTriggerResetTimer = INVALID_HANDLE;
+	ResetTriggers();
+	EmitGameSoundToAll("Bot.Stuck2");
+}
+
+//----------------------------------------------------------------------------------------------------
+// Purpose:
+//----------------------------------------------------------------------------------------------------
+public void ResetTriggers()
+{
+	ServerCommand("sv_gravity 800");
+	for (int client = 1; client <= MaxClients; client++)
+	{
+		if (IsValidClient(client, false) && IsPlayerAlive(client))
+		{
+			SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", 1.0);
+
+			int w = -1;
+			w = GetPlayerWeaponSlot(client, 2);
+			if(!(IsValidEntity(w) && IsValidEdict(w)))
+				GivePlayerItem(client, "weapon_knife");
+		}
+	}
+	ServerCommand("sm plugins unload disabled/autobhop");
+	ServerCommand("sv_friction 4");
+	ServerCommand("sv_accelerate 5");
+	ServerCommand("sv_airaccelerate 10");
+}
+
+//----------------------------------------------------------------------------------------------------
+// Purpose:
+//----------------------------------------------------------------------------------------------------
+public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn)
+{
+	if (!IsValidClient(attacker))
+		return;
+
+	if(g_bZMwasKnifed[attacker])
+	{
+		g_bZMwasKnifed[attacker] = false;
+		SetEntProp(attacker, Prop_Send, "m_iProgressBarDuration", 0);
+		CPrintToChat(attacker, "{unique}[Knife Madness] {white}You have successfully infected a human and prevented your death.");
+	}
+}
+
+//----------------------------------------------------------------------------------------------------
+// Purpose:
+//----------------------------------------------------------------------------------------------------
+public Action KillZM(Handle timer, DataPack pack)
+{
+	int attacker = 0;
+	int client = 0;
+
+	pack.Reset();
+	attacker = GetClientOfUserId(pack.ReadCell());
+	client = GetClientOfUserId(pack.ReadCell());
+
+	if (client == 0)
+		return;
+
+	if (!(IsValidClient(client, false) && IsPlayerAlive(client) && ZR_IsClientZombie(client) && g_bZMwasKnifed[client]))
+		return;
+
+	ForcePlayerSuicide(client);
+
+	if (!(IsValidClient(attacker, false)))
+		return;
+
+	Event hEvent = CreateEvent("player_death");
+	if (hEvent == null)
+		return;
+
+	hEvent.SetInt("userid", GetClientUserId(client));
+	hEvent.SetInt("attacker", GetClientUserId(attacker));
+	hEvent.SetString("weapon", "knife");
+	hEvent.SetBool("headshot", false);
+	hEvent.SetInt("dominated", 0);
+	hEvent.SetInt("revenge", 0);
+	hEvent.Fire();
+}
+
+//----------------------------------------------------------------------------------------------------
+// Purpose:
+//----------------------------------------------------------------------------------------------------
+stock int IsValidClient(int client, bool nobots = true)
+{
+	if (client <= 0 || client > MaxClients || !IsClientConnected(client) || (nobots && IsFakeClient(client)))
+		return false;
+
+	return IsClientInGame(client);
+}
\ No newline at end of file