Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- TOOL.Category = "Construction"
- TOOL.Name = "Lamp - Advanced"
- TOOL.Command = nil
- TOOL.ConfigName = ""
- if !SinglePlayer() then return end
- TOOL.ClientConVar["r"] = "255"
- TOOL.ClientConVar["g"] = "255"
- TOOL.ClientConVar["b"] = "255"
- TOOL.ClientConVar["a"] = "200"
- TOOL.ClientConVar["lightfov"] = "90"
- TOOL.ClientConVar["nearz"] = "4"
- TOOL.ClientConVar["farz"] = "750"
- TOOL.ClientConVar["enableshadows"] = "0"
- TOOL.ClientConVar["shadowquality"] = "1"
- TOOL.ClientConVar["texture"] = "effects/flashlight001"
- TOOL.ClientConVar["lightworld"] = "1"
- TOOL.ClientConVar["lightonlytarget"] = "0"
- function TOOL:LeftClick(tr)
- if self:GetStage() > 0 then return false end
- if ValidEntity(tr.Entity) and tr.Entity:GetClass() == "prop_dynamic" then
- if !ValidEntity(tr.Entity.projtex) then return false end
- local e = tr.Entity.projtex
- local r = self:GetClientNumber("r",255)
- local g = self:GetClientNumber("g",255)
- local b = self:GetClientNumber("b",255)
- local a = self:GetClientNumber("a",200)
- local lightfov = self:GetClientNumber("lightfov",90)
- local nearz = self:GetClientNumber("nearz",4)
- local farz = self:GetClientNumber("farz",750)
- local enableshadows = self:GetClientNumber("enableshadows",0)
- local shadowquality = self:GetClientNumber("shadowquality",1)
- local texture = self:GetClientInfo("texture","effects/flashlight001")
- local lightworld = self:GetClientNumber("lightworld",1)
- local lightonlyontarget = self:GetClientNumber("lightonlyontarget",0)
- local red = 255
- if enableshadows == 0 then red = 0 end
- local gr = 255
- if lightworld == 0 then gr = 0 end
- local bl = 255
- if lightonlyontarget == 0 then bl = 0 end
- tr.Entity:SetColor(red,gr,bl,255)
- e:SetKeyValue("lightcolor",r.." "..g.." "..b.." "..a)
- e:SetKeyValue("lightfov",lightfov)
- e:SetKeyValue("nearz",nearz)
- e:SetKeyValue("farz",farz)
- e:SetKeyValue("enableshadows",enableshadows)
- e:SetKeyValue("shadowquality",shadowquality)
- e:Input("SpotlightTexture",NULL,NULL,texture)
- e:SetKeyValue("lightworld",lightworld)
- e:SetKeyValue("lightonlyontarget",lightonlyontarget)
- return true
- else
- local ent = ents.Create("prop_dynamic")
- ent:SetModel("models/props_wasteland/prison_lamp001c.mdl")
- ent:SetPos(tr.HitPos + Vector(0,0,20))
- ent:SetAngles(Angle(0,0,0))
- ent:Spawn()
- ent:SetSolid(SOLID_VPHYSICS)
- ent:SetNotSolid(false)
- ent:DrawShadow(false)
- ent:SetNWBool("IsLamp",true)
- local e = ents.Create("env_projectedtexture")
- e:SetParent(ent)
- e:SetLocalPos(Vector(0,0,-5))
- e:SetLocalAngles(Angle(90,90,90))
- e:Spawn()
- local r = self:GetClientNumber("r",255)
- local g = self:GetClientNumber("g",255)
- local b = self:GetClientNumber("b",255)
- local a = self:GetClientNumber("a",200)
- local lightfov = self:GetClientNumber("lightfov",90)
- local nearz = self:GetClientNumber("nearz",4)
- local farz = self:GetClientNumber("farz",750)
- local enableshadows = self:GetClientNumber("enableshadows",0)
- local shadowquality = self:GetClientNumber("shadowquality",1)
- local texture = self:GetClientInfo("texture","effects/flashlight001")
- local lightworld = self:GetClientNumber("lightworld",1)
- local lightonlyontarget = self:GetClientNumber("lightonlyontarget",0)
- local red = 255
- if enableshadows == 0 then red = 0 end
- local gr = 255
- if lightworld == 0 then gr = 0 end
- local bl = 255
- if lightonlyontarget == 0 then bl = 0 end
- tr.Entity:SetColor(red,gr,bl,255)
- e:SetKeyValue("lightcolor",r.." "..g.." "..b.." "..a)
- e:SetKeyValue("lightfov",lightfov)
- e:SetKeyValue("nearz",nearz)
- e:SetKeyValue("farz",farz)
- e:SetKeyValue("enableshadows",enableshadows)
- e:SetKeyValue("shadowquality",shadowquality)
- e:Input("SpotlightTexture",NULL,NULL,texture)
- e:SetKeyValue("lightworld",lightworld)
- e:SetKeyValue("lightonlyontarget",lightonlyontarget)
- ent.projtex = e
- local idx = 1
- local cont = true
- while cont do
- if !ValidEntity(ents.FindByName("projtex"..idx)[1]) then
- ent:SetName("projtex"..idx)
- cont = false
- else
- idx = idx + 1
- end
- end
- return true
- end
- end
- function TOOL:RightClick(tr)
- if self:GetStage() < 1 then
- if !ValidEntity(tr.Entity) or tr.Entity:GetClass() != "prop_dynamic" then return false end
- if !ValidEntity(tr.Entity.projtex) then return false end
- self.SelectedEnt = tr.Entity.projtex
- self:SetStage(1)
- return true
- else
- if !ValidEntity(tr.Entity) then return false end
- if tr.Entity == self.SelectedEnt then
- self:SetStage(0)
- return true
- end
- self.SelectedEnt:SetEntity("target",tr.Entity)
- self:SetStage(0)
- return true
- end
- end
- function TOOL:Think()
- local tr = self:GetOwner():GetEyeTrace()
- if !ValidEntity(tr.Entity) or tr.Entity:GetClass() != "prop_dynamic" or !ValidEntity(tr.Entity.projtex) then
- self:GetOwner():SetNWBool("DrawField",false)
- return
- end
- local kv = tr.Entity.projtex:GetKeyValues()
- self:GetOwner():SetNWString("advlamp_lightcolor",kv.lightcolor)
- self:GetOwner():SetNWString("advlamp_lightfov",kv.lightfov)
- self:GetOwner():SetNWString("advlamp_nearz",kv.nearz)
- self:GetOwner():SetNWString("advlamp_farz",kv.farz)
- self:GetOwner():SetNWBool("advlamp_DrawField",true)
- end
- if CLIENT then
- language.Add("Tool_advancedlamp_name","Advanced Lamp Tool")
- language.Add("Tool_advancedlamp_desc","Create lamps with advanced settings.")
- language.Add("Tool_advancedlamp_0","Left Click to create lamp or edit settings of an existing one. Right click a lamp to select a target for it.")
- language.Add("Tool_advancedlamp_1","Right click again to select a target for the lamp.")
- function TOOL.BuildCPanel(CPanel)
- CPanel:AddControl("Header",{Text = "Advanced Lamp Tool",Description = "Create lamps with advanced settings."})
- CPanel:AddControl( "Color", {Label = "#Color",
- Red = "advancedlamp_r",
- Green = "advancedlamp_g",
- Blue = "advancedlamp_b",
- ShowAlpha = 1,
- ShowHSV = 1,
- ShowRGB = 1,
- Multiplier = 255 } )
- CPanel:NumSlider("Power","advancedlamp_a",0,2048,0)
- CPanel:NumSlider("FOV","advancedlamp_lightfov",1,180,0)
- CPanel:NumSlider("NearZ","advancedlamp_nearz",1,500,2)
- CPanel:NumSlider("FarZ","advancedlamp_farz",1,10000,2)
- CPanel:CheckBox("Enable Shadows","advancedlamp_enableshadows")
- CPanel:CheckBox("High shadow quality","advancedlamp_shadowquality")
- CPanel:TextEntry("Texture","advancedlamp_texture")
- CPanel:CheckBox("Light World","advancedlamp_lightworld")
- CPanel:CheckBox("Light only target","advancedlamp_lightonlytarget")
- end
- function TOOL:DrawHUD()
- if !self:GetOwner():GetNWBool("DrawField") then return end
- local lightcolor = string.Explode(" ",self:GetOwner():GetNWString("advlamp_lightcolor"))[4]
- local power = lightcolor[4]
- local fov = self:GetOwner():GetNWString("advlamp_lightfov")
- local nearz = self:GetOwner():GetNWString("advlamp_lightfov")
- local farz = self:GetOwner():GetNWString("advlamp_lightfov")
- local text = "Color: "..lightcolor[1].." "..lightcolor[2].." "..lightcolor[3].."\nPower: "..power.."\nFOV: "..fov.."\nNearZ: "..nearz.."\nFarZ: "..farz
- draw.WordBox(4,ScrW() / 2,ScrH() / 2,text,"Default",Color(255,255,150,255),Color(0,0,0,255))
- end
- end
Add Comment
Please, Sign In to add comment