Help with modding Murder gamemode..

Alright so I own a Murder server and it’s relatively basic as far as addons and whatnot.

My goal is to make it so that whenever a Bystander kills another Bystander, they are instantly ignited via the ULX command “ulx ignite <player>” as punishment for killing an innocent.

Is this possible? If so, how might I go about it?

Check if both bystander, dont know ulx, find whatever function it is to ignite and set it on attacker

Doesnt know anything about Murder but do something like this:

[LUA]function IgniteBystander(victim,inflictor,attacker)

if victim:IsBystander() and attacker:IsBystander() then
	attacker:Ignite() 
end 

end
hook.Add(“PlayerDeath”, “BystanderPunishment”, IgniteBystander)[/LUA]

Alright, so I was digging around through all the Murder gamemode files and the “sv_player.lua” seems to be the one to add the code. (at least that’s my guess)

I found this bit of code within the script that looks like it may be what i’m looking to modify. I’m just not sure WHAT exactly to change/modify. (I’m a lua noob)


function GM:DoPlayerDeath( ply, attacker, dmginfo )

	for k, weapon in pairs(ply:GetWeapons()) do
		if weapon:GetClass() == "weapon_mu_magnum" then
			ply:DropWeapon(weapon)
		end
	end

	ply:Freeze(false) // why?, *sigh*
	ply:CreateRagdoll()

	local ent = ply:GetNWEntity("DeathRagdoll")
	if IsValid(ent) then
		ply:CSpectate(OBS_MODE_CHASE, ent)
	end

	ply:AddDeaths( 1 )

	if ( attacker:IsValid() && attacker:IsPlayer() ) then

		if ( attacker == ply ) then
			attacker:AddFrags( -1 )
		else
			attacker:AddFrags( 1 )
		end

	end

end

local plyMeta = FindMetaTable("Player")

function plyMeta:CalculateSpeed()
	// set the defaults
	local walk,run,canrun = 250,310,false
	local jumppower = 200

	if self:GetMurderer() then
		canrun = true
	end

	if self.LastTKTime then
		walk = walk * 0.7
		run = run * 0.7
		jumppower = jumppower * 0.5
	end

	// handcuffs
	-- if self:GetHandcuffed() then
	-- 	walk = walk * 0.3
	-- 	jumppower = 150
	-- 	canrun = false
	-- end
	-- if self:GetTasered() then
	-- 	walk = 40
	-- 	jumppower = 100
	-- 	canrun = false
	-- end

	// set out new speeds
	if canrun then
		self:SetRunSpeed(run)
	else
		self:SetRunSpeed(walk)
	end
	self.CanRun = canrun
	self:SetWalkSpeed(walk)
	self:SetJumpPower(jumppower)
end

local function isValid() return true end
local function getPos(self) return self.pos end

local function generateSpawnEntities(spawnList)
	local tbl = {}

	for k, pos in pairs(spawnList) do
		local t = {}
		t.IsValid = isValid
		t.GetPos = getPos
		t.pos = pos
		table.insert(tbl, t)
	end

	return tbl
end

function GM:PlayerSelectTeamSpawn( TeamID, pl )

	local SpawnPoints = team.GetSpawnPoints( TeamID )

	SpawnPoints = generateSpawnEntities(TeamSpawns["spawns"])

	if ( !SpawnPoints || table.Count( SpawnPoints ) == 0 ) then return end
	
	local ChosenSpawnPoint = nil
	
	for i=0, 6 do
	
		local ChosenSpawnPoint = table.Random( SpawnPoints )
		if ( GAMEMODE:IsSpawnpointSuitable( pl, ChosenSpawnPoint, i==6 ) ) then
			return ChosenSpawnPoint
		end
	
	end
	
	return ChosenSpawnPoint

end


function GM:PlayerDeathSound()
	// don't play sound
	return true
end

function GM:ScalePlayerDamage( ply, hitgroup, dmginfo )
	// Don't scale it depending on hitgroup
end

function GM:PlayerDeath(ply, Inflictor, attacker )

	self:DoRoundDeaths(ply, attacker)

	if !ply:GetMurderer() then

		self.MurdererLastKill = CurTime()
		local murderer
		local players = team.GetPlayers(2)
		for k,v in pairs(players) do
			if v:GetMurderer() then
				murderer = v
			end
		end
		if murderer then
			murderer:SetMurdererRevealed(false)
		end

		if IsValid(attacker) && attacker:IsPlayer() then
			if attacker:GetMurderer() then
				-- self:SendMessageAll("The murderer has struck again")
			elseif attacker != ply then
				if self.ShowBystanderTKs:GetBool() then
					local ct = ChatText()
					local col = attacker:GetPlayerColor()
					ct:Add(attacker:Nick() .. ", " .. attacker:GetBystanderName(), Color(col.x * 255, col.y * 255, col.z * 255))
					ct:Add(" killed an innocent bystander")
					ct:SendAll()
				end
				attacker.LastTKTime = CurTime()
				attacker:CalculateSpeed()
				timer.Simple(0, function () 
					if IsValid(attacker) && attacker:HasWeapon("weapon_mu_magnum") then
						local wep = attacker:GetWeapon("weapon_mu_magnum")
						wep.LastTK = attacker
						wep.LastTKTime = CurTime()
						attacker:DropWeapon(wep)
					end
				end)
			end
		else
			-- self:SendMessageAll("An bystander died in mysterious circumstances")
		end
	else
		if attacker != ply && IsValid(attacker) && attacker:IsPlayer() then
			local ct = ChatText()
			local col = attacker:GetPlayerColor()
			ct:Add(attacker:Nick() .. ", " .. attacker:GetBystanderName(), Color(col.x * 255, col.y * 255, col.z * 255))
			ct:Add(" killed the murderer")
			ct:SendAll()
		else
			local ct = ChatText()
			ct:Add("The murderer died in mysterious circumstances")
			ct:SendAll()
		end
	end

	ply.NextSpawnTime = CurTime() + 5
	ply.DeathTime = CurTime()
	ply.SpectateTime = CurTime() + 4

	umsg.Start("rp_death", ply)
	umsg.Long(5)
	umsg.Long(4)
	umsg.End()
	
	if ( Inflictor && Inflictor == attacker && (Inflictor:IsPlayer() || Inflictor:IsNPC()) ) then
	
		Inflictor = Inflictor:GetActiveWeapon()
		if ( !Inflictor || Inflictor == NULL ) then Inflictor = attacker end
	
	end

	self:RagdollSetDeathDetails(ply, Inflictor, attacker)
end

function GM:PlayerDeathThink(ply)
	if self:CanRespawn(ply) then
		ply:Spawn()
	else
		self:ChooseSpectatee(ply)
	end
	
end

function EntityMeta:GetPlayerColor()
	return self.playerColor or Vector()
end

function EntityMeta:SetPlayerColor(vec)
	self.playerColor = vec
	self:SetNWVector("playerColor", vec)
end

function GM:PlayerFootstep(ply, pos, foot, sound, volume, filter)
	self:FootstepsOnFootstep(ply, pos, foot, sound, volume, filter)
end

function GM:PlayerCanPickupWeapon( ply, ent )

	// can't pickup a weapon twice
	if ply:HasWeapon(ent:GetClass()) then
		return false
	end

	if ent:GetClass() == "weapon_mu_magnum" then
		// murderer can't have the gun
		if ply:GetMurderer() then
			return false
		end

		// penalty for killing a bystander
		if ply.LastTKTime && ply.LastTKTime + self:GetTKPenaltyTime() > CurTime() then
			if ply.TempGiveMagnum then
				ply.TempGiveMagnum = nil
				return true
			end
			return false
		end
	end

	if ent:GetClass() == "weapon_mu_knife" then
		// bystanders can't have the knife
		if !ply:GetMurderer() then
			return false
		end
	end

	return true
end

I just want to make sure it ONLY affects bystanders that kill EACHOTHER, and not when they kill the murderer.