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")