mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
224 lines
5.0 KiB
Lua
224 lines
5.0 KiB
Lua
|
|
--[[
|
||
|
|
| This file was obtained through the combined efforts
|
||
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
||
|
|
|
|
||
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
||
|
|
|
|
||
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||
|
|
--]]
|
||
|
|
|
||
|
|
if SAM_LOADED then return end
|
||
|
|
|
||
|
|
local add = not GAMEMODE and hook.Add or function(_, _, fn)
|
||
|
|
fn()
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Thanks to https://github.com/boxama/addons/blob/master/addons/ULX_Murder/lua/ulx/modules/sh/murder.lua
|
||
|
|
add("PostGamemodeLoaded", "SAM.Murder", function()
|
||
|
|
if GAMEMODE.Author ~= "MechanicalMind" then return end
|
||
|
|
if not isstring(GAMEMODE.Version) or GAMEMODE.Version < "28" then return end
|
||
|
|
|
||
|
|
local sam, command = sam, sam.command
|
||
|
|
|
||
|
|
command.set_category("Murder")
|
||
|
|
|
||
|
|
local autoslain_players = {}
|
||
|
|
|
||
|
|
command.new("slaynr")
|
||
|
|
:SetPermission("slaynr", "admin")
|
||
|
|
|
||
|
|
:AddArg("player")
|
||
|
|
:AddArg("number", {hint = "rounds", optional = true, default = 1, min = 1, max = 100, round = true})
|
||
|
|
|
||
|
|
:Help("Slays the target(s) at the beggining of the next round.")
|
||
|
|
|
||
|
|
:OnExecute(function(ply, targets, rounds)
|
||
|
|
for i = 1, #targets do
|
||
|
|
local v = targets[i]
|
||
|
|
v.MurdererChance = 0
|
||
|
|
|
||
|
|
if not v:IsBot() then
|
||
|
|
autoslain_players[v:AccountID()] = rounds
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
sam.player.send_message(nil, "{A} set {T} to be autoslain for {V} round(s)", {
|
||
|
|
A = ply, T = targets, V = rounds
|
||
|
|
})
|
||
|
|
end)
|
||
|
|
:End()
|
||
|
|
|
||
|
|
command.new("unslaynr")
|
||
|
|
:SetPermission("unslaynr", "admin")
|
||
|
|
|
||
|
|
:AddArg("player")
|
||
|
|
|
||
|
|
:Help("Remove target(s) autoslays.")
|
||
|
|
|
||
|
|
:OnExecute(function(ply, targets)
|
||
|
|
for i = 1, #targets do
|
||
|
|
local v = targets[i]
|
||
|
|
v.MurdererChance = 1
|
||
|
|
|
||
|
|
if not v:IsBot() then
|
||
|
|
autoslain_players[v:AccountID()] = nil
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
sam.player.send_message(nil, "Removed all autoslays for {T} ", {
|
||
|
|
A = ply, T = targets
|
||
|
|
})
|
||
|
|
end)
|
||
|
|
:End()
|
||
|
|
|
||
|
|
hook.Add("OnStartRound", "SAM.Murder", function()
|
||
|
|
timer.Simple(3, function()
|
||
|
|
local players = team.GetPlayers(2)
|
||
|
|
local targets = {admin = sam.console}
|
||
|
|
for i = 1, #players do
|
||
|
|
local v = players[i]
|
||
|
|
if not v:IsBot() then continue end
|
||
|
|
|
||
|
|
local slays = autoslain_players[v:AccountID()]
|
||
|
|
if not slays then continue end
|
||
|
|
|
||
|
|
v:Kill()
|
||
|
|
|
||
|
|
slays = slays - 1
|
||
|
|
|
||
|
|
targets[1] = v
|
||
|
|
sam.player.send_message(nil, "{A} autoslayed {T}, autoslays left: {V}.", {
|
||
|
|
A = sam.console, T = targets, V = slays
|
||
|
|
})
|
||
|
|
|
||
|
|
autoslain_players[v:AccountID()] = slays > 0 and slays or nil
|
||
|
|
end
|
||
|
|
end)
|
||
|
|
end)
|
||
|
|
|
||
|
|
hook.Add("PlayerInitialSpawn", "SAM.Murder", function(ply)
|
||
|
|
if autoslain_players[ply:AccountID()] then
|
||
|
|
ply.MurdererChance = 0
|
||
|
|
end
|
||
|
|
end)
|
||
|
|
|
||
|
|
command.new("respawn")
|
||
|
|
:SetPermission("respawn", "admin")
|
||
|
|
|
||
|
|
:AddArg("player", {single_target = true})
|
||
|
|
|
||
|
|
:Help("Respawn a target.")
|
||
|
|
|
||
|
|
:OnExecute(function(ply, targets)
|
||
|
|
local target = targets[1]
|
||
|
|
|
||
|
|
if target:Team() ~= 2 then
|
||
|
|
return ply:sam_add_text("You cannot respawn a spectator!")
|
||
|
|
end
|
||
|
|
|
||
|
|
target:Spectate(OBS_MODE_NONE)
|
||
|
|
target:Spawn()
|
||
|
|
|
||
|
|
sam.player.send_message(nil, "respawn", {
|
||
|
|
A = ply, T = targets
|
||
|
|
})
|
||
|
|
end)
|
||
|
|
:End()
|
||
|
|
|
||
|
|
local get_admins = function()
|
||
|
|
local admins = {}
|
||
|
|
|
||
|
|
local players = player.GetHumans()
|
||
|
|
for i = 1, #players do
|
||
|
|
local v = players[i]
|
||
|
|
if v:IsAdmin() then
|
||
|
|
table.insert(admins, v)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
return admins
|
||
|
|
end
|
||
|
|
|
||
|
|
command.new("givemagnum")
|
||
|
|
:SetPermission("givemagnum", "superadmin")
|
||
|
|
|
||
|
|
:AddArg("player", {single_target = true, optional = true})
|
||
|
|
|
||
|
|
:Help("Give the target a magnum.")
|
||
|
|
|
||
|
|
:OnExecute(function(ply, targets)
|
||
|
|
local target = targets[1]
|
||
|
|
|
||
|
|
if target:Team() ~= 2 then
|
||
|
|
return ply:sam_add_text("You cannot give spectator a magnum!")
|
||
|
|
end
|
||
|
|
|
||
|
|
target:Give("weapon_mu_magnum")
|
||
|
|
|
||
|
|
sam.player.send_message(get_admins(), "{A} gave {T} a {V}", {
|
||
|
|
A = ply, T = targets, V = "magnum"
|
||
|
|
})
|
||
|
|
end)
|
||
|
|
:End()
|
||
|
|
|
||
|
|
command.new("giveknife")
|
||
|
|
:SetPermission("giveknife", "superadmin")
|
||
|
|
|
||
|
|
:AddArg("player", {single_target = true, optional = true})
|
||
|
|
|
||
|
|
:Help("Give the target a knife.")
|
||
|
|
|
||
|
|
:OnExecute(function(ply, targets)
|
||
|
|
local target = targets[1]
|
||
|
|
|
||
|
|
if target:Team() ~= 2 then
|
||
|
|
return ply:sam_add_text("You cannot give spectator a knife!")
|
||
|
|
end
|
||
|
|
|
||
|
|
target:Give("weapon_mu_knife")
|
||
|
|
|
||
|
|
sam.player.send_message(get_admins(), "{A} gave {T} a {V}", {
|
||
|
|
A = ply, T = targets, V = "knife"
|
||
|
|
})
|
||
|
|
end)
|
||
|
|
:End()
|
||
|
|
|
||
|
|
command.new("forcemurderer")
|
||
|
|
:SetPermission("forcemurderer", "admin")
|
||
|
|
|
||
|
|
:AddArg("player", {single_target = true, optional = true})
|
||
|
|
|
||
|
|
:Help("Force the target to me a murderer next round.")
|
||
|
|
|
||
|
|
:OnExecute(function(ply, targets)
|
||
|
|
GAMEMODE.ForceNextMurderer = targets[1]
|
||
|
|
|
||
|
|
sam.player.send_message(get_admins(), "{A} set {T} to be the Murderer next round!", {
|
||
|
|
A = ply, T = targets
|
||
|
|
})
|
||
|
|
end)
|
||
|
|
:End()
|
||
|
|
|
||
|
|
command.new("getmurderers")
|
||
|
|
:SetPermission("getmurderers", "admin")
|
||
|
|
|
||
|
|
:Help("Print all murderers in chat.")
|
||
|
|
|
||
|
|
:OnExecute(function(ply)
|
||
|
|
local murderers = {admin = ply}
|
||
|
|
|
||
|
|
local players = team.GetPlayers(2)
|
||
|
|
for i = 1, #players do
|
||
|
|
local v = players[i]
|
||
|
|
if v:GetMurderer() then
|
||
|
|
table.insert(murderers, v)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
sam.player.send_message(ply, "Murderers are: {T}", {
|
||
|
|
T = murderers
|
||
|
|
})
|
||
|
|
end)
|
||
|
|
:End()
|
||
|
|
end)
|