197 lines
4.1 KiB
Lua
197 lines
4.1 KiB
Lua
|
SWEP.PrintName = "Sigil Placer"
|
||
|
|
||
|
SWEP.ViewModel = "models/weapons/c_pistol.mdl"
|
||
|
SWEP.WorldModel = "models/weapons/w_pistol.mdl"
|
||
|
SWEP.UseHands = true
|
||
|
|
||
|
SWEP.Primary.ClipSize = -1
|
||
|
SWEP.Primary.DefaultClip = -1
|
||
|
SWEP.Primary.Automatic = false
|
||
|
SWEP.Primary.Ammo = "none"
|
||
|
|
||
|
SWEP.Secondary.ClipSize = -1
|
||
|
SWEP.Secondary.DefaultClip = -1
|
||
|
SWEP.Secondary.Automatic = false
|
||
|
SWEP.Secondary.Ammo = "none"
|
||
|
|
||
|
function SWEP:Initialize()
|
||
|
if SERVER then
|
||
|
self:RefreshSigils()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function SWEP:Deploy()
|
||
|
if SERVER then
|
||
|
self:RefreshSigils()
|
||
|
end
|
||
|
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
function SWEP:Holster()
|
||
|
if SERVER then
|
||
|
for _, ent in pairs(ents.FindByClass("point_fakesigil")) do
|
||
|
ent:Remove()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
function SWEP:PrimaryAttack()
|
||
|
local owner = self.Owner
|
||
|
if not owner:IsSuperAdmin() then return end
|
||
|
|
||
|
owner:DoAttackEvent()
|
||
|
|
||
|
if CLIENT then return end
|
||
|
|
||
|
local tr = owner:TraceLine(10240)
|
||
|
if tr.HitWorld and tr.HitNormal.z >= 0.8 then
|
||
|
table.insert(GAMEMODE.ProfilerNodes, tr.HitPos)
|
||
|
|
||
|
self:RefreshSigils()
|
||
|
GAMEMODE.ProfilerIsPreMade = true
|
||
|
|
||
|
GAMEMODE:SaveProfilerPreMade(GAMEMODE.ProfilerNodes)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function SWEP:SecondaryAttack()
|
||
|
local owner = self.Owner
|
||
|
if not owner:IsSuperAdmin() then return end
|
||
|
|
||
|
owner:DoAttackEvent()
|
||
|
|
||
|
if CLIENT then return end
|
||
|
|
||
|
local tr = owner:TraceLine(10240)
|
||
|
|
||
|
local newpoints = {}
|
||
|
for _, point in pairs(GAMEMODE.ProfilerNodes) do
|
||
|
if point:Distance(tr.HitPos) > 64 then
|
||
|
table.insert(newpoints, point)
|
||
|
end
|
||
|
end
|
||
|
GAMEMODE.ProfilerNodes = newpoints
|
||
|
|
||
|
self:RefreshSigils()
|
||
|
GAMEMODE.ProfilerIsPreMade = true
|
||
|
|
||
|
GAMEMODE:SaveProfilerPreMade(GAMEMODE.ProfilerNodes)
|
||
|
end
|
||
|
|
||
|
function SWEP:Reload()
|
||
|
local owner = self.Owner
|
||
|
if not owner:IsSuperAdmin() then return end
|
||
|
|
||
|
owner:DoAttackEvent()
|
||
|
|
||
|
if CLIENT then return end
|
||
|
|
||
|
if not self.StartReload and not self.StartReload2 then
|
||
|
self.StartReload = CurTime()
|
||
|
owner:ChatPrint("Keep holding reload to clear all pre-made sigil points.")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if SERVER then
|
||
|
function SWEP:Think()
|
||
|
if self.StartReload2 then
|
||
|
if not self.Owner:KeyDown(IN_RELOAD) then
|
||
|
self.StartReload2 = nil
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if CurTime() >= self.StartReload2 + 3 then
|
||
|
self.StartReload2 = nil
|
||
|
|
||
|
self.Owner:ChatPrint("Deleted everything including generated nodes. Turned off generated mode.")
|
||
|
|
||
|
GAMEMODE.ProfilerIsPreMade = true
|
||
|
GAMEMODE:DeleteProfilerPreMade()
|
||
|
GAMEMODE.ProfilerNodes = {}
|
||
|
GAMEMODE:SaveProfiler()
|
||
|
|
||
|
self:RefreshSigils()
|
||
|
end
|
||
|
elseif self.StartReload then
|
||
|
if not self.Owner:KeyDown(IN_RELOAD) then
|
||
|
self.StartReload = nil
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if CurTime() >= self.StartReload + 3 then
|
||
|
self.StartReload = nil
|
||
|
|
||
|
self.Owner:ChatPrint("Deleted all pre-made sigil points and reverted to generated mode. Keep holding reload to delete ALL nodes.")
|
||
|
|
||
|
GAMEMODE.ProfilerIsPreMade = false
|
||
|
GAMEMODE:DeleteProfilerPreMade()
|
||
|
GAMEMODE:LoadProfiler()
|
||
|
|
||
|
self:RefreshSigils()
|
||
|
|
||
|
self.StartReload2 = CurTime()
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function SWEP:RefreshSigils()
|
||
|
for _, ent in pairs(ents.FindByClass("point_fakesigil")) do
|
||
|
ent:Remove()
|
||
|
end
|
||
|
|
||
|
for _, point in pairs(GAMEMODE.ProfilerNodes) do
|
||
|
local ent = ents.Create("point_fakesigil")
|
||
|
if ent:IsValid() then
|
||
|
ent:SetPos(point)
|
||
|
ent:Spawn()
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
concommand.Add("zs_sigilplacer", function(sender)
|
||
|
if sender:IsValid() and sender:IsSuperAdmin() then
|
||
|
sender:Give("weapon_zs_sigilplacer")
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
local ENT = {}
|
||
|
|
||
|
ENT.Type = "anim"
|
||
|
|
||
|
function ENT:Initialize()
|
||
|
self:DrawShadow(false)
|
||
|
self:SetModelScale(1.1, 0)
|
||
|
self:SetModel("models/props_wasteland/medbridge_post01.mdl")
|
||
|
self:SetMoveType(MOVETYPE_NONE)
|
||
|
self:SetSolid(SOLID_NONE)
|
||
|
end
|
||
|
|
||
|
if CLIENT then
|
||
|
ENT.RenderGroup = RENDERGROUP_TRANSLUCENT
|
||
|
function ENT:DrawTranslucent()
|
||
|
local lp = LocalPlayer()
|
||
|
if lp:IsValid() then
|
||
|
local wep = lp:GetActiveWeapon()
|
||
|
if wep:IsValid() and wep:GetClass() == "weapon_zs_sigilplacer" then
|
||
|
cam.IgnoreZ(true)
|
||
|
render.SetBlend(0.5)
|
||
|
render.SetColorModulation(1, 0, 0)
|
||
|
render.SuppressEngineLighting(true)
|
||
|
|
||
|
self:DrawModel()
|
||
|
|
||
|
render.SuppressEngineLighting(false)
|
||
|
render.SetColorModulation(1, 1, 1)
|
||
|
render.SetBlend(1)
|
||
|
cam.IgnoreZ(false)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
scripted_ents.Register(ENT, "point_fakesigil")
|