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

