Guest User

Untitled

a guest
May 20th, 2018
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.08 KB | None | 0 0
  1.  
  2. TOOL.Category = "Construction"
  3. TOOL.Name = "Lamp - Advanced"
  4. TOOL.Command = nil
  5. TOOL.ConfigName = ""
  6.  
  7. if !SinglePlayer() then return end
  8.  
  9. TOOL.ClientConVar["r"] = "255"
  10. TOOL.ClientConVar["g"] = "255"
  11. TOOL.ClientConVar["b"] = "255"
  12. TOOL.ClientConVar["a"] = "200"
  13. TOOL.ClientConVar["lightfov"] = "90"
  14. TOOL.ClientConVar["nearz"] = "4"
  15. TOOL.ClientConVar["farz"] = "750"
  16. TOOL.ClientConVar["enableshadows"] = "0"
  17. TOOL.ClientConVar["shadowquality"] = "1"
  18. TOOL.ClientConVar["texture"] = "effects/flashlight001"
  19. TOOL.ClientConVar["lightworld"] = "1"
  20. TOOL.ClientConVar["lightonlytarget"] = "0"
  21.  
  22. function TOOL:LeftClick(tr)
  23.     if self:GetStage() > 0 then return false end
  24.     if ValidEntity(tr.Entity) and tr.Entity:GetClass() == "prop_dynamic" then
  25.         if !ValidEntity(tr.Entity.projtex) then return false end
  26.         local e = tr.Entity.projtex
  27.         local r = self:GetClientNumber("r",255)
  28.         local g = self:GetClientNumber("g",255)
  29.         local b = self:GetClientNumber("b",255)
  30.         local a = self:GetClientNumber("a",200)
  31.         local lightfov = self:GetClientNumber("lightfov",90)
  32.         local nearz = self:GetClientNumber("nearz",4)
  33.         local farz = self:GetClientNumber("farz",750)
  34.         local enableshadows = self:GetClientNumber("enableshadows",0)
  35.         local shadowquality = self:GetClientNumber("shadowquality",1)
  36.         local texture = self:GetClientInfo("texture","effects/flashlight001")
  37.         local lightworld = self:GetClientNumber("lightworld",1)
  38.         local lightonlyontarget = self:GetClientNumber("lightonlyontarget",0)
  39.         local red = 255
  40.         if enableshadows == 0 then red = 0 end
  41.         local gr = 255
  42.         if lightworld == 0 then gr = 0 end
  43.         local bl = 255
  44.         if lightonlyontarget == 0 then bl = 0 end
  45.         tr.Entity:SetColor(red,gr,bl,255)
  46.         e:SetKeyValue("lightcolor",r.." "..g.." "..b.." "..a)
  47.         e:SetKeyValue("lightfov",lightfov)
  48.         e:SetKeyValue("nearz",nearz)
  49.         e:SetKeyValue("farz",farz)
  50.         e:SetKeyValue("enableshadows",enableshadows)
  51.         e:SetKeyValue("shadowquality",shadowquality)
  52.         e:Input("SpotlightTexture",NULL,NULL,texture)
  53.         e:SetKeyValue("lightworld",lightworld)
  54.         e:SetKeyValue("lightonlyontarget",lightonlyontarget)
  55.         return true
  56.     else
  57.         local ent = ents.Create("prop_dynamic")
  58.         ent:SetModel("models/props_wasteland/prison_lamp001c.mdl")
  59.         ent:SetPos(tr.HitPos + Vector(0,0,20))
  60.         ent:SetAngles(Angle(0,0,0))
  61.         ent:Spawn()
  62.         ent:SetSolid(SOLID_VPHYSICS)
  63.         ent:SetNotSolid(false)
  64.         ent:DrawShadow(false)
  65.         ent:SetNWBool("IsLamp",true)
  66.         local e = ents.Create("env_projectedtexture")
  67.         e:SetParent(ent)
  68.         e:SetLocalPos(Vector(0,0,-5))
  69.         e:SetLocalAngles(Angle(90,90,90))
  70.         e:Spawn()
  71.         local r = self:GetClientNumber("r",255)
  72.         local g = self:GetClientNumber("g",255)
  73.         local b = self:GetClientNumber("b",255)
  74.         local a = self:GetClientNumber("a",200)
  75.         local lightfov = self:GetClientNumber("lightfov",90)
  76.         local nearz = self:GetClientNumber("nearz",4)
  77.         local farz = self:GetClientNumber("farz",750)
  78.         local enableshadows = self:GetClientNumber("enableshadows",0)
  79.         local shadowquality = self:GetClientNumber("shadowquality",1)
  80.         local texture = self:GetClientInfo("texture","effects/flashlight001")
  81.         local lightworld = self:GetClientNumber("lightworld",1)
  82.         local lightonlyontarget = self:GetClientNumber("lightonlyontarget",0)
  83.         local red = 255
  84.         if enableshadows == 0 then red = 0 end
  85.         local gr = 255
  86.         if lightworld == 0 then gr = 0 end
  87.         local bl = 255
  88.         if lightonlyontarget == 0 then bl = 0 end
  89.         tr.Entity:SetColor(red,gr,bl,255)
  90.         e:SetKeyValue("lightcolor",r.." "..g.." "..b.." "..a)
  91.         e:SetKeyValue("lightfov",lightfov)
  92.         e:SetKeyValue("nearz",nearz)
  93.         e:SetKeyValue("farz",farz)
  94.         e:SetKeyValue("enableshadows",enableshadows)
  95.         e:SetKeyValue("shadowquality",shadowquality)
  96.         e:Input("SpotlightTexture",NULL,NULL,texture)
  97.         e:SetKeyValue("lightworld",lightworld)
  98.         e:SetKeyValue("lightonlyontarget",lightonlyontarget)
  99.         ent.projtex = e
  100.         local idx = 1
  101.         local cont = true
  102.         while cont do
  103.             if !ValidEntity(ents.FindByName("projtex"..idx)[1]) then
  104.                 ent:SetName("projtex"..idx)
  105.                 cont = false
  106.             else
  107.                 idx = idx + 1
  108.             end
  109.         end
  110.         return true
  111.     end
  112. end
  113.  
  114. function TOOL:RightClick(tr)
  115.     if self:GetStage() < 1 then
  116.         if !ValidEntity(tr.Entity) or tr.Entity:GetClass() != "prop_dynamic" then return false end
  117.         if !ValidEntity(tr.Entity.projtex) then return false end
  118.         self.SelectedEnt = tr.Entity.projtex
  119.         self:SetStage(1)
  120.         return true
  121.     else
  122.         if !ValidEntity(tr.Entity) then return false end
  123.         if tr.Entity == self.SelectedEnt then
  124.             self:SetStage(0)
  125.             return true
  126.         end
  127.         self.SelectedEnt:SetEntity("target",tr.Entity)
  128.         self:SetStage(0)
  129.         return true
  130.     end
  131. end
  132.  
  133. function TOOL:Think()
  134.     local tr = self:GetOwner():GetEyeTrace()
  135.     if !ValidEntity(tr.Entity) or tr.Entity:GetClass() != "prop_dynamic" or !ValidEntity(tr.Entity.projtex) then
  136.         self:GetOwner():SetNWBool("DrawField",false)
  137.         return
  138.     end
  139.     local kv = tr.Entity.projtex:GetKeyValues()
  140.     self:GetOwner():SetNWString("advlamp_lightcolor",kv.lightcolor)
  141.     self:GetOwner():SetNWString("advlamp_lightfov",kv.lightfov)
  142.     self:GetOwner():SetNWString("advlamp_nearz",kv.nearz)
  143.     self:GetOwner():SetNWString("advlamp_farz",kv.farz)
  144.     self:GetOwner():SetNWBool("advlamp_DrawField",true)
  145. end
  146.  
  147. if CLIENT then
  148.  
  149. language.Add("Tool_advancedlamp_name","Advanced Lamp Tool")
  150. language.Add("Tool_advancedlamp_desc","Create lamps with advanced settings.")
  151. 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.")
  152. language.Add("Tool_advancedlamp_1","Right click again to select a target for the lamp.")
  153.  
  154. function TOOL.BuildCPanel(CPanel)
  155.     CPanel:AddControl("Header",{Text = "Advanced Lamp Tool",Description = "Create lamps with advanced settings."})
  156.    
  157.     CPanel:AddControl( "Color",  {Label = "#Color",
  158.     Red         = "advancedlamp_r",
  159.     Green       = "advancedlamp_g",
  160.     Blue        = "advancedlamp_b",
  161.     ShowAlpha   = 1,
  162.     ShowHSV     = 1,
  163.     ShowRGB     = 1,
  164.     Multiplier  = 255 } )  
  165.    
  166.     CPanel:NumSlider("Power","advancedlamp_a",0,2048,0)
  167.    
  168.     CPanel:NumSlider("FOV","advancedlamp_lightfov",1,180,0)
  169.    
  170.     CPanel:NumSlider("NearZ","advancedlamp_nearz",1,500,2)
  171.     CPanel:NumSlider("FarZ","advancedlamp_farz",1,10000,2)
  172.    
  173.     CPanel:CheckBox("Enable Shadows","advancedlamp_enableshadows")
  174.     CPanel:CheckBox("High shadow quality","advancedlamp_shadowquality")
  175.    
  176.     CPanel:TextEntry("Texture","advancedlamp_texture")
  177.    
  178.     CPanel:CheckBox("Light World","advancedlamp_lightworld")
  179.     CPanel:CheckBox("Light only target","advancedlamp_lightonlytarget")
  180. end
  181.  
  182. function TOOL:DrawHUD()
  183.     if !self:GetOwner():GetNWBool("DrawField") then return end
  184.     local lightcolor = string.Explode(" ",self:GetOwner():GetNWString("advlamp_lightcolor"))[4]
  185.     local power = lightcolor[4]
  186.     local fov = self:GetOwner():GetNWString("advlamp_lightfov")
  187.     local nearz = self:GetOwner():GetNWString("advlamp_lightfov")
  188.     local farz = self:GetOwner():GetNWString("advlamp_lightfov")
  189.     local text = "Color: "..lightcolor[1].." "..lightcolor[2].." "..lightcolor[3].."\nPower: "..power.."\nFOV: "..fov.."\nNearZ: "..nearz.."\nFarZ: "..farz
  190.     draw.WordBox(4,ScrW() / 2,ScrH() / 2,text,"Default",Color(255,255,150,255),Color(0,0,0,255))
  191. end
  192.  
  193. end
Add Comment
Please, Sign In to add comment