Added admin module (blind, jail, strip, etc)
This commit is contained in:
parent
125bcc4fd4
commit
7418b53f7b
2 changed files with 319 additions and 0 deletions
26
modules/client/cl_admin.txt
Normal file
26
modules/client/cl_admin.txt
Normal file
|
@ -0,0 +1,26 @@
|
|||
--@name
|
||||
--@author
|
||||
--@client
|
||||
|
||||
do
|
||||
blind = nil
|
||||
|
||||
net.receive("LSFT-SBlind", function()
|
||||
if net.readEntity() == player() then
|
||||
if holograms.canSpawn() then
|
||||
--print(holograms.hologramsLeft())
|
||||
blind = holograms.create(eyePos()-Vector(0,0,45), Angle(0,0,0), "models/holograms/hq_sphere.mdl", Vector(-5,5,5))
|
||||
blind:setParent(player(), player():lookupAttachment("chest"))
|
||||
blind:setColor(Color(0,0,0))
|
||||
blind:suppressEngineLighting(true)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
net.receive("LSFT-SUnblind", function()
|
||||
if net.readEntity() == player() and blind ~= nil then
|
||||
blind:remove()
|
||||
blind = nil
|
||||
end
|
||||
end)
|
||||
end
|
293
modules/server/sv_admin.txt
Normal file
293
modules/server/sv_admin.txt
Normal file
|
@ -0,0 +1,293 @@
|
|||
--@name
|
||||
--@author
|
||||
--@server
|
||||
|
||||
--[[
|
||||
TODO: Check if serverside hologram is there every n seconds and if not recreate it
|
||||
TODO: Cloak(?), Slay (with multiple damage methods), Slap & Whip (with multiple damage methods), Freeze, Pseudogod, Ignite
|
||||
--]]
|
||||
|
||||
do
|
||||
local players = {}
|
||||
for i,v in pairs(find.allPlayers()) do
|
||||
players[v] = {}
|
||||
end
|
||||
|
||||
-- Blind
|
||||
|
||||
local function unblind(args)
|
||||
local target = core:get_entity(args[1])
|
||||
if target == nil then
|
||||
return
|
||||
end
|
||||
|
||||
if players[target].blind ~= nil then
|
||||
players[target].blind:remove()
|
||||
players[target].blind = nil
|
||||
core:log(log.INFO, target:getName().." has been unblinded!")
|
||||
else
|
||||
core:log(log.ERROR, target:getName().." wasn't blinded!")
|
||||
end
|
||||
end
|
||||
|
||||
local function unsblind(args)
|
||||
local target = core:get_entity(args[1])
|
||||
if target == nil then
|
||||
return
|
||||
end
|
||||
|
||||
net.start("LSFT-SUnblind")
|
||||
net.writeEntity(target)
|
||||
net.send()
|
||||
-- Just gonna do some blind faith here, lazy
|
||||
core:log(log.INFO, target:getName().." has been unblinded!")
|
||||
end
|
||||
|
||||
local function blind(args)
|
||||
local target = core:get_entity(args[1])
|
||||
if target == nil then
|
||||
return
|
||||
end
|
||||
|
||||
if players[target].blind ~= nil then
|
||||
core:log(log.ERROR, target:getName().." is already blinded!")
|
||||
return
|
||||
end
|
||||
|
||||
if holograms.canSpawn() then
|
||||
--print(holograms.hologramsLeft())
|
||||
players[target].blind = holograms.create(target:getEyePos(), Angle(0,0,0), "models/holograms/hq_sphere.mdl", Vector(-5,5,5))
|
||||
players[target].blind:setParent(target, "chest")
|
||||
players[target].blind:setColor(Color(0,0,0))
|
||||
players[target].blind:suppressEngineLighting(true)
|
||||
|
||||
if args[2] ~= nil and tonumber(args[2]) > 0 then
|
||||
timer.simple(tonumber(args[2]), function()
|
||||
unblind({target})
|
||||
end)
|
||||
end
|
||||
|
||||
core:log(log.INFO, target:getName().." has been blinded "..((args[2] ~= nil and tonumber(args[2]) > 0) and "for "..tonumber(args[2]).." seconds!" or "indefinitely!"))
|
||||
else
|
||||
core:log(log.ERROR, target:getName().." could not be blinded!")
|
||||
end
|
||||
end
|
||||
|
||||
local function sblind(args)
|
||||
local target = core:get_entity(args[1])
|
||||
if target == nil then
|
||||
return
|
||||
end
|
||||
|
||||
if args[2] ~= nil and tonumber(args[2]) > 0 then
|
||||
timer.simple(tonumber(args[2]), function()
|
||||
unsblind({target})
|
||||
end)
|
||||
end
|
||||
|
||||
net.start("LSFT-SBlind")
|
||||
net.writeEntity(target)
|
||||
net.send()
|
||||
core:log(log.INFO, target:getName().." has been silently blinded "..((args[2] ~= nil and tonumber(args[2]) > 0) and "for "..tonumber(args[2]).." seconds!" or "indefinitely!"))
|
||||
end
|
||||
|
||||
|
||||
-- Jail
|
||||
|
||||
local function unjail(args)
|
||||
local target = core:get_entity(args[1])
|
||||
if target == nil then
|
||||
return
|
||||
end
|
||||
|
||||
if timer.exists("Jail"..target:getSteamID64()) then
|
||||
timer.remove("Jail"..target:getSteamID64())
|
||||
end
|
||||
|
||||
if players[target].jail ~= nil then
|
||||
if players[target].jail:isValid() then
|
||||
players[target].jail:remove()
|
||||
end
|
||||
players[target].jail = nil
|
||||
core:log(log.INFO, target:getName().." has been unjailed!")
|
||||
else
|
||||
core:log(log.ERROR, target:getName().." wasn't jailed!")
|
||||
end
|
||||
end
|
||||
|
||||
local function jail(args)
|
||||
local target = core:get_entity(args[1])
|
||||
if target == nil then
|
||||
return
|
||||
end
|
||||
|
||||
if players[target].jail ~= nil then
|
||||
core:log(log.ERROR, target:getName().." is already jailed!")
|
||||
return
|
||||
end
|
||||
|
||||
local function createJail(target)
|
||||
if prop.canSpawn() then
|
||||
local jailprop = prop.create(target:getPos() + Vector(0,0,45), Angle(0,0,0), "models/hunter/misc/shell2x2.mdl", true)
|
||||
--players[target].jail:setParent(target, "chest")
|
||||
jailprop:setColor(Color(0,0,0,100))
|
||||
jailprop:setMaterial("models/debug/debugwhite")
|
||||
jailprop:setMass(50000)
|
||||
|
||||
return jailprop
|
||||
end
|
||||
end
|
||||
|
||||
if prop.canSpawn() then
|
||||
players[target].jail = createJail(target)
|
||||
|
||||
timer.create("Jail"..target:getSteamID64(), 1, 0, function()
|
||||
if not players[target].jail:isValid() then
|
||||
players[target].jail = createJail(target)
|
||||
core:log(log.WARNING, target:getName().."'s jail prop was removed! Correcting.")
|
||||
end
|
||||
if players[target].jail:isValid() and (target:getPos()+Vector(0,0,45)):getDistance(players[target].jail:getPos()) > 50 and not target:isNoclipped() then
|
||||
players[target].jail:setPos(target:getPos()+Vector(0,0,45))
|
||||
end
|
||||
end)
|
||||
|
||||
if args[2] ~= nil and tonumber(args[2]) > 0 then
|
||||
timer.simple(tonumber(args[2]), function()
|
||||
unjail({target})
|
||||
end)
|
||||
end
|
||||
|
||||
core:log(log.INFO, target:getName().." has been jailed "..((args[2] ~= nil and tonumber(args[2]) > 0) and "for "..tonumber(args[2]).." seconds!" or "indefinitely!"))
|
||||
else
|
||||
core:log(log.ERROR, target:getName().." could not be jailed!")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Strip
|
||||
|
||||
local function unstrip(args)
|
||||
local target = core:get_entity(args[1])
|
||||
if target == nil then
|
||||
return
|
||||
end
|
||||
|
||||
if players[target].strip ~= nil then
|
||||
xpcall(hook.remove("tick", "Strip"..target:getSteamID64()), function() end)
|
||||
|
||||
if players[target].strip:isValid() then
|
||||
players[target].strip:remove()
|
||||
end
|
||||
|
||||
players[target].strip = nil
|
||||
core:log(log.INFO, target:getName().." has been unstripped!")
|
||||
else
|
||||
core:log(log.ERROR, target:getName().." wasn't stripped!")
|
||||
end
|
||||
end
|
||||
|
||||
local function strip(args)
|
||||
local target = core:get_entity(args[1])
|
||||
if target == nil then
|
||||
return
|
||||
end
|
||||
|
||||
if players[target].strip ~= nil then
|
||||
core:log(log.ERROR, target:getName().." is already stripped!")
|
||||
return
|
||||
end
|
||||
|
||||
-- Can probably make this it's own function outside of jail and strip
|
||||
local function createStripJail(target)
|
||||
if prop.canSpawn() then
|
||||
local jailprop = prop.create(target:getPos() + Vector(0,0,45), Angle(0,0,0), "models/hunter/misc/sphere2x2.mdl", true)
|
||||
--players[target].jail:setParent(target, "chest")
|
||||
jailprop:setColor(Color(0,0,0,0))
|
||||
jailprop:setMaterial("models/debug/debugwhite")
|
||||
jailprop:setMass(1)
|
||||
jailprop:setNocollideAll(true)
|
||||
|
||||
return jailprop
|
||||
end
|
||||
end
|
||||
|
||||
if prop.canSpawn() then
|
||||
players[target].strip = createStripJail(target)
|
||||
|
||||
hook.add("tick", "Strip"..target:getSteamID64(), function()
|
||||
if not players[target].strip:isValid() then
|
||||
players[target].strip = createStripJail(target)
|
||||
core:log(log.WARNING, target:getName().."'s strip prop was removed! Correcting.")
|
||||
end
|
||||
if players[target].strip:isValid() and not target:isNoclipped() then
|
||||
players[target].strip:setPos(target:getPos()+Vector(0,0,45))
|
||||
end
|
||||
end)
|
||||
|
||||
if args[2] ~= nil and tonumber(args[2]) > 0 then
|
||||
timer.simple(tonumber(args[2]), function()
|
||||
unstrip({target})
|
||||
end)
|
||||
end
|
||||
|
||||
core:log(log.INFO, target:getName().." has been stripped "..((args[2] ~= nil and tonumber(args[2]) > 0) and "for "..tonumber(args[2]).." seconds!" or "indefinitely!"))
|
||||
else
|
||||
core:log(log.ERROR, target:getName().." could not be stripped!")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- L-SFT Integration
|
||||
|
||||
core.modules.admin = {
|
||||
version = 1,
|
||||
desc = "Provides pseudo-administrative functions.",
|
||||
commands = {
|
||||
--Blind
|
||||
blind = {
|
||||
usage = "blind <target> [time]",
|
||||
desc = "Prevents a player from seeing. Takes an optional amount of time in seconds.",
|
||||
func = blind,
|
||||
},
|
||||
unblind = {
|
||||
usage = "unblind <target>",
|
||||
desc = "Unblinds a blinded player.",
|
||||
func = unblind,
|
||||
},
|
||||
sblind = {
|
||||
usage = "sblind <target> [time]",
|
||||
desc = "Prevents a player from seeing. Blinder is created clientside. Takes an optional amount of time in seconds.",
|
||||
func = sblind,
|
||||
},
|
||||
unsblind = {
|
||||
usage = "unsblind <target>",
|
||||
desc = "Unblinds a clientside blinded player.",
|
||||
func = unsblind,
|
||||
},
|
||||
|
||||
--Jail
|
||||
jail = {
|
||||
usage = "jail <target> [time]",
|
||||
desc = "Prevents a player from moving. Takes an optional amount of time in seconds.",
|
||||
func = jail,
|
||||
},
|
||||
unjail = {
|
||||
usage = "unjail <target>",
|
||||
desc = "Unjails a trapped player.",
|
||||
func = unjail,
|
||||
},
|
||||
|
||||
--Strip
|
||||
strip = {
|
||||
usage = "strip <target> [time]",
|
||||
desc = "Prevents a player from shooting. Takes an optional amount of time in seconds.",
|
||||
func = strip,
|
||||
},
|
||||
unstrip = {
|
||||
usage = "unjail <target>",
|
||||
desc = "Unstrips a stripped player.",
|
||||
func = unstrip,
|
||||
},
|
||||
},
|
||||
}
|
||||
end
|
Loading…
Reference in a new issue