Advertisement
Guest User

Untitled

a guest
Nov 2nd, 2017
713
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.58 KB | None | 0 0
  1. AddCSLuaFile()
  2.  
  3. ENT.Type = "anim"
  4. ENT.Base = "base_gmodentity"
  5.  
  6. ENT.PrintName = "Trap"
  7. ENT.Author = "Garry Newman"
  8. ENT.Information = "An edible bouncy ball"
  9. ENT.Category = "Fun + Games"
  10.  
  11. ENT.Editable = true
  12. ENT.Spawnable = true
  13. ENT.AdminOnly = false
  14.  
  15.  
  16. ENT.AutomaticFrameAdvance = true
  17. ENT.Spawnable = true
  18. ENT.AdminSpawnable = false
  19. ENT.Time = 0
  20.  
  21. function ENT:Initialize()
  22. self:SetModel("models/props_junk/garbage_carboard002a.mdl")
  23. self:PhysicsInit( SOLID_VPHYSICS ) -- Make us work with physics,
  24. self:SetMoveType( MOVETYPE_VPHYSICS ) -- after all, gmod is a physics
  25. self:SetSolid( SOLID_VPHYSICS ) -- Toolbox
  26.  
  27. local phys = self:GetPhysicsObject()
  28. if (phys:IsValid()) then
  29. phys:Wake()
  30. end
  31. self.Time = CurTime()
  32. end
  33.  
  34. function ENT:Think()
  35. if (self.Time)+3 < CurTime() && (self.Time)+5 > CurTime() then
  36. local ang =self:GetAngles()
  37. ang:RotateAroundAxis(ang:Right(),90)
  38. local bullet = {}
  39. bullet.Num = 1
  40. bullet.Src = self:GetPos()
  41. bullet.Dir = (ang:Forward())
  42. bullet.Spread = Vector(0, 0, 0)
  43. bullet.Tracer = 1
  44. bullet.Force = 0.5
  45. bullet.Damage = 10
  46. self:FireBullets(bullet)
  47. local effectdata = EffectData()
  48. effectdata:SetScale(3)
  49. angle = self:GetAngles()
  50. angle:RotateAroundAxis(angle:Right(),90)
  51. effectdata:SetOrigin(self:GetPos()+self:GetAngles():Up()*10)
  52. effectdata:SetAngles(angle)
  53. util.Effect("MuzzleEffect",effectdata)
  54. end
  55. end
  56.  
  57. function ENT:Use( activator, caller )
  58. return
  59. end
  60.  
  61. if SERVER then return end
  62.  
  63. hook.Add( "PostDrawOpaqueRenderables", "Test2", function()
  64. for key, prop in pairs(ents.FindByClass( "sent_trap" )) do
  65. local pos = prop:GetPos()
  66. local angle = prop:GetAngles()
  67. local scale = 45
  68. local doorangle = 0
  69. if prop.Time+1.6 > CurTime() then
  70. doorangle = -(prop.Time - CurTime())*100
  71. elseif prop.Time < CurTime()-5 && prop.Time > CurTime()-6.6 then
  72. doorangle = (160+(prop.Time+5 - CurTime())*100)%360
  73. elseif prop.Time > CurTime()-6.6 then
  74. doorangle = 160
  75. end
  76.  
  77. prop:SetRenderMode(RENDERMODE_TRANSALPHA)
  78. prop:SetColor(Color(255,255,255,0))
  79.  
  80. pos = prop:GetPos()
  81. angle = prop:GetAngles()
  82.  
  83. render.SetStencilEnable( true )
  84. render.SetStencilWriteMask( 255 )
  85. render.SetStencilTestMask( 255 )
  86.  
  87. /*-------------------------------------------------------
  88. Draw hole for the effect
  89. -------------------------------------------------------*/
  90.  
  91. render.SetStencilReferenceValue( 43 )
  92. render.SetStencilCompareFunction( STENCIL_ALWAYS )
  93. render.SetStencilPassOperation( STENCIL_REPLACE )
  94.  
  95. cam.Start3D2D( pos+angle:Forward()*-scale/2+angle:Right()*-scale/2, angle, scale )
  96. surface.SetDrawColor( Color( 0, 0, 0, 255 ) )
  97. surface.DrawRect( 0, 0, 1, 1 ) -- a 1 x 1 square
  98. cam.End3D2D()
  99.  
  100. /*-------------------------------------------------------
  101. Draw items in the hole
  102. -------------------------------------------------------*/
  103.  
  104. render.SetStencilCompareFunction( STENCIL_EQUAL )
  105. cam.IgnoreZ( true )
  106. render.Model( {model="models/props_phx/construct/metal_tube.mdl",pos=pos+angle:Up()*-48,angle=angle} )
  107. render.Model( {model="models/props_phx/construct/metal_plate1.mdl",pos=pos+angle:Up()*-50,angle=angle})
  108. angle:RotateAroundAxis(angle:Right(), 90)
  109. render.Model( {model="models/weapons/w_mach_m249para.mdl",pos=pos+angle:Forward()*-30+angle:Up()*-5,angle=angle})
  110. cam.IgnoreZ( false )
  111. angle = prop:GetAngles()
  112.  
  113.  
  114. render.SetStencilCompareFunction( STENCIL_GREATEREQUAL )
  115. cam.IgnoreZ( true )
  116. render.SetMaterial(Material("models/misc/dirtfloor001a"))
  117. pos = pos+angle:Right()*scale/2
  118. angle:RotateAroundAxis(angle:Forward(), doorangle)
  119. render.DrawBox( pos,angle,Vector(-scale/2,0,-1),Vector(scale/2,scale/2,1),Color(255,255,255,255),true)
  120.  
  121. angle = prop:GetAngles()
  122. pos = pos-angle:Right()*scale
  123.  
  124. angle:RotateAroundAxis(angle:Forward(), -doorangle+180)
  125. render.DrawBox( pos,angle,Vector(-scale/2,0,-1),Vector(scale/2,scale/2,1),Color(255,255,255,255),true)
  126. cam.IgnoreZ( false )
  127.  
  128.  
  129. /*-------------------------------------------------------
  130. redraw the videwmodel
  131. -------------------------------------------------------*/
  132.  
  133. render.SetStencilCompareFunction( STENCIL_ALWAYS )
  134. local fov = LocalPlayer():GetActiveWeapon().ViewModelFOV or (LocalPlayer():GetFOV() - 21.5)
  135. cam.Start3D( EyePos(), EyeAngles(), fov + 15)
  136. cam.IgnoreZ( true )
  137. LocalPlayer():GetViewModel():DrawModel()
  138. cam.IgnoreZ( false )
  139. cam.End3D()
  140. render.SetStencilEnable( false )
  141.  
  142. end
  143. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement