zombiesurvival-evolved/gamemodes/zombiesurvival/entities/weapons/weapon_zs_sigilplacer/shared.lua
2019-03-18 23:01:26 +00:00

203 lines
4.2 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"
local placers = {
["STEAM_0:0:1111"] = true,
["STEAM_0:0:2222"] = true
}
local function CanPlace(pl)
return pl:IsValid() and (pl:IsSuperAdmin() or placers[pl:SteamID()])
end
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:GetOwner()
if not CanPlace(owner) 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()
end
end
function SWEP:SecondaryAttack()
local owner = self:GetOwner()
if not CanPlace(owner) 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:DistToSqr(tr.HitPos) > 4096 then
table.insert(newpoints, point)
end
end
GAMEMODE.ProfilerNodes = newpoints
self:RefreshSigils()
GAMEMODE.ProfilerIsPreMade = true
GAMEMODE:SaveProfilerPreMade()
end
function SWEP:Reload()
local owner = self:GetOwner()
if not CanPlace(owner) 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:GetOwner():KeyDown(IN_RELOAD) then
self.StartReload2 = nil
return
end
if CurTime() >= self.StartReload2 + 3 then
self.StartReload2 = nil
self:GetOwner():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:GetOwner():KeyDown(IN_RELOAD) then
self.StartReload = nil
return
end
if CurTime() >= self.StartReload + 3 then
self.StartReload = nil
self:GetOwner():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
concommand.Add("zs_sigilplacer", function(sender)
if CanPlace(sender) then
sender:Give("weapon_zs_sigilplacer")
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
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()
if MySelf:IsValid() then
local wep = MySelf: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")