Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.71 KB | None | 0 0
  1.  
  2. -----------------------------------------------------
  3. TOOL.Category = "Инструменты"
  4. TOOL.Name = "#tool.light.name"
  5.  
  6. TOOL.ClientConVar[ "ropelength" ] = "64"
  7. TOOL.ClientConVar[ "ropematerial" ] = "cable/rope"
  8. TOOL.ClientConVar[ "r" ] = "255"
  9. TOOL.ClientConVar[ "g" ] = "255"
  10. TOOL.ClientConVar[ "b" ] = "255"
  11. TOOL.ClientConVar[ "brightness" ] = "2"
  12. TOOL.ClientConVar[ "size" ] = "256"
  13. TOOL.ClientConVar[ "key" ] = "-1"
  14. TOOL.ClientConVar[ "toggle" ] = "1"
  15.  
  16. cleanup.Register( "lights" )
  17.  
  18. function TOOL:LeftClick( trace, attach )
  19.  
  20. if trace.Entity && trace.Entity:IsPlayer() then return false end
  21. if ( CLIENT ) then return true end
  22. if ( attach == nil ) then attach = true end
  23.  
  24. -- If there's no physics object then we can't constraint it!
  25. if ( SERVER && attach && !util.IsValidPhysicsObject( trace.Entity, trace.PhysicsBone ) ) then return false end
  26.  
  27. local ply = self:GetOwner()
  28.  
  29. local pos, ang = trace.HitPos + trace.HitNormal * 8, trace.HitNormal:Angle() - Angle( 90, 0, 0 )
  30.  
  31. local r = math.Clamp( self:GetClientNumber( "r" ), 0, 255 )
  32. local g = math.Clamp( self:GetClientNumber( "g" ), 0, 255 )
  33. local b = math.Clamp( self:GetClientNumber( "b" ), 0, 255 )
  34. local brght = math.Clamp( self:GetClientNumber( "brightness" ), 0, 255 )
  35. local size = self:GetClientNumber( "size" )
  36. local toggle = self:GetClientNumber( "toggle" ) != 1
  37.  
  38. local key = self:GetClientNumber( "key" )
  39.  
  40. -- Clamp for multiplayer
  41. if ( !game.SinglePlayer() ) then
  42. size = math.Clamp( size, 0, 512 )
  43. brght = math.Clamp( brght, 0, 1 )
  44. end
  45.  
  46. if ( IsValid( trace.Entity ) && trace.Entity:GetClass() == "gmod_light" && trace.Entity:GetPlayer() == ply ) then
  47.  
  48. trace.Entity:SetColor( Color( r, g, b, 255 ) )
  49. trace.Entity.r = r
  50. trace.Entity.g = g
  51. trace.Entity.b = b
  52. trace.Entity.Brightness = brght
  53. trace.Entity.Size = size
  54.  
  55. trace.Entity:SetBrightness( brght )
  56. trace.Entity:SetLightSize( size )
  57. trace.Entity:SetToggle( !toggle )
  58.  
  59. trace.Entity.KeyDown = key
  60.  
  61. numpad.Remove( trace.Entity.NumDown )
  62. numpad.Remove( trace.Entity.NumUp )
  63.  
  64. trace.Entity.NumDown = numpad.OnDown( ply, key, "LightToggle", trace.Entity, 1 )
  65. trace.Entity.NumUp = numpad.OnUp( ply, key, "LightToggle", trace.Entity, 0 )
  66.  
  67. return true
  68.  
  69. end
  70.  
  71. if ( !self:GetSWEP():CheckLimit( "lights" ) ) then return false end
  72.  
  73. local lamp = MakeLight( ply, r, g, b, brght, size, toggle, !toggle, key, { Pos = pos, Angle = ang } )
  74.  
  75. if ( !attach ) then
  76.  
  77. undo.Create( "Light" )
  78. undo.AddEntity( lamp )
  79. undo.SetPlayer( self:GetOwner() )
  80. undo.Finish()
  81.  
  82. return true
  83.  
  84. end
  85.  
  86. local length = math.Clamp( self:GetClientNumber( "ropelength" ), 4, 1024 )
  87. local material = self:GetClientInfo( "ropematerial" )
  88.  
  89. local LPos1 = Vector( 0, 0, 5 )
  90. local LPos2 = trace.Entity:WorldToLocal( trace.HitPos )
  91.  
  92. if ( IsValid( trace.Entity ) ) then
  93.  
  94. local phys = trace.Entity:GetPhysicsObjectNum( trace.PhysicsBone )
  95. if ( IsValid( phys ) ) then
  96. LPos2 = phys:WorldToLocal( trace.HitPos )
  97. end
  98.  
  99. end
  100.  
  101. local constraint, rope = constraint.Rope( lamp, trace.Entity, 0, trace.PhysicsBone, LPos1, LPos2, 0, length, 0, 1, material )
  102.  
  103. undo.Create( "Light" )
  104. undo.AddEntity( lamp )
  105. undo.AddEntity( rope )
  106. undo.AddEntity( constraint )
  107. undo.SetPlayer( ply )
  108. undo.Finish()
  109.  
  110. return true
  111.  
  112. end
  113.  
  114. function TOOL:RightClick( trace )
  115.  
  116. return self:LeftClick( trace, false )
  117.  
  118. end
  119.  
  120. if ( SERVER ) then
  121.  
  122. function MakeLight( pl, r, g, b, brght, size, toggle, on, KeyDown, Data )
  123.  
  124. if ( IsValid( pl ) && !pl:CheckLimit( "lights" ) ) then return false end
  125.  
  126. local lamp = ents.Create( "gmod_light" )
  127.  
  128. if ( !IsValid( lamp ) ) then return end
  129.  
  130. duplicator.DoGeneric( lamp, Data )
  131.  
  132. lamp:SetColor( Color( r, g, b, 255 ) )
  133. lamp:SetBrightness( brght )
  134. lamp:SetLightSize( size )
  135. lamp:SetToggle( !toggle )
  136. lamp:SetOn( on )
  137.  
  138. lamp:Spawn()
  139.  
  140. duplicator.DoGenericPhysics( lamp, pl, Data )
  141.  
  142. lamp:SetPlayer( pl )
  143.  
  144. if ( IsValid( pl ) ) then
  145. pl:AddCount( "lights", lamp )
  146. pl:AddCleanup( "lights", lamp )
  147. end
  148.  
  149. lamp.lightr = r
  150. lamp.lightg = g
  151. lamp.lightb = b
  152. lamp.Brightness = brght
  153. lamp.Size = size
  154. lamp.KeyDown = KeyDown
  155. lamp.on = on
  156.  
  157. lamp.NumDown = numpad.OnDown( pl, KeyDown, "LightToggle", lamp, 1 )
  158. lamp.NumUp = numpad.OnUp( pl, KeyDown, "LightToggle", lamp, 0 )
  159.  
  160. return lamp
  161.  
  162. end
  163. duplicator.RegisterEntityClass( "gmod_light", MakeLight, "lightr", "lightg", "lightb", "Brightness", "Size", "Toggle", "on", "KeyDown", "Data" )
  164.  
  165. local function Toggle( pl, ent, onoff )
  166.  
  167. if ( !IsValid( ent ) ) then return false end
  168. if ( !ent:GetToggle() ) then ent:SetOn( onoff == 1 ) return end
  169.  
  170. if ( numpad.FromButton() ) then
  171.  
  172. ent:SetOn( onoff == 1 )
  173. return
  174.  
  175. end
  176.  
  177. if ( onoff == 0 ) then return end
  178.  
  179. return ent:Toggle()
  180.  
  181. end
  182. numpad.Register( "LightToggle", Toggle )
  183.  
  184. end
  185.  
  186. function TOOL:UpdateGhostLight( ent, player )
  187.  
  188. if ( !IsValid( ent ) ) then return end
  189.  
  190. local tr = util.GetPlayerTrace( player )
  191. local trace = util.TraceLine( tr )
  192. if ( !trace.Hit ) then return end
  193.  
  194. if ( trace.Entity:IsPlayer() || trace.Entity:GetClass() == "gmod_light" ) then
  195.  
  196. ent:SetNoDraw( true )
  197. return
  198.  
  199. end
  200.  
  201. ent:SetPos( trace.HitPos + trace.HitNormal * 8 )
  202. ent:SetAngles( trace.HitNormal:Angle() - Angle( 90, 0, 0 ) )
  203.  
  204. ent:SetNoDraw( false )
  205.  
  206. end
  207.  
  208. function TOOL:Think()
  209.  
  210. if ( !IsValid( self.GhostEntity ) || self.GhostEntity:GetModel() != "models/MaxOfS2D/light_tubular.mdl" ) then
  211. self:MakeGhostEntity( "models/MaxOfS2D/light_tubular.mdl", Vector( 0, 0, 0 ), Angle( 0, 0, 0 ) )
  212. end
  213.  
  214. self:UpdateGhostLight( self.GhostEntity, self:GetOwner() )
  215.  
  216. end
  217.  
  218. local ConVarsDefault = TOOL:BuildConVarList()
  219.  
  220. function TOOL.BuildCPanel( CPanel )
  221.  
  222. CPanel:AddControl( "Header", { Description = "#tool.light.desc" } )
  223.  
  224. CPanel:AddControl( "ComboBox", { MenuButton = 1, Folder = "light", Options = { [ "#preset.default" ] = ConVarsDefault }, CVars = table.GetKeys( ConVarsDefault ) } )
  225.  
  226. CPanel:AddControl( "Numpad", { Label = "#tool.light.key", Command = "light_key", ButtonSize = 22 } )
  227.  
  228. CPanel:AddControl( "Slider", { Label = "#tool.light.ropelength", Command = "light_ropelength", Type = "Float", Min = 0, Max = 256 } )
  229. CPanel:AddControl( "Slider", { Label = "#tool.light.brightness", Command = "light_brightness", Type = "Float", Min = 0, Max = 10 } )
  230. CPanel:AddControl( "Slider", { Label = "#tool.light.size", Command = "light_size", Type = "Float", Min = 0, Max = 1024 } )
  231.  
  232. CPanel:AddControl( "Checkbox", { Label = "#tool.light.toggle", Command = "light_toggle" } )
  233.  
  234. CPanel:AddControl( "Color", { Label = "#tool.light.color", Red = "light_r", Green = "light_g", Blue = "light_b" } )
  235.  
  236. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement