Advertisement
DortiftoSamurai

CSS like C4 | Starfall EX

Apr 20th, 2022 (edited)
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 14.31 KB | None | 0 0
  1. --@name CSS like C4 v2
  2. --@author Dick_Inside_Head
  3. --@shared
  4.  
  5. if SERVER then
  6.  
  7.    
  8.     local weapon_to_defus = {
  9.         ["weapon_crowbar"] = true,
  10.         ["weapon_knife"] = true
  11.     }
  12.        
  13.     local weapon_to_plant = {
  14.         ["none"] = true,
  15.     }
  16.    
  17.     function SpawnNewKega()
  18.         to_boom_check = 0
  19.         boom_bydlokod_indificator = 60
  20.         nextCount = 0
  21.         bomb_on_player = nil
  22.         bomb_defus_player = nil
  23.         bomb_planted = false
  24.         bomb_die = false
  25.        
  26.         boomb = prop.create(chip():localToWorld(Vector(0, 0, 5)), chip():localToWorldAngles(Angle(0,90,0)), "models/sprops/cuboids/height06/size_2/cube_12x18x6.mdl", false)
  27.         boomb:setNoDraw( 1 )
  28.         boomb:setCollisionGroup( 11 )
  29.         boomb:setMass( 1000 )
  30.        
  31.        
  32.        
  33.         bigHoloc4 = holograms.create( boomb:localToWorld(Vector(1, 0, -5)), boomb:localToWorldAngles(Angle(0,-90,0)), "models/weapons/w_c4.mdl", Vector( 1 ) )
  34.         bigHoloc4:setParent(boomb)
  35.         -- models/weapons/w_c4_planted.mdl
  36.         --BombTimerStart()        
  37.     end
  38.    
  39.     --Plant1 = prop.create(chip():localToWorld(Vector(0, 20, 0)), chip():localToWorldAngles(Angle(0,0,0)), "models/props_junk/sawblade001a.mdl", true)
  40.    
  41.     --Plant2 = prop.create(chip():localToWorld(Vector(0, -20, 0)), chip():localToWorldAngles(Angle(0,0,0)), "models/props_junk/sawblade001a.mdl", true)
  42.    
  43.     local kegaPos,kegaSpeed
  44.    
  45.     function BombBooom( pos )
  46.    
  47.         Bomb_Remove_to_save_Sounds()
  48.        
  49.         local BombBooom = prop.create( pos + Vector(0, 0, 10) , chip():localToWorldAngles(Angle(0,0,0)), "models/props_phx/cannonball_solid.mdl", false) --models/props_phx/cannonball_solid.mdl
  50.         BombBooom:setNoDraw( 1 )
  51.         BombBooom:setSolid( false )
  52.         BombBooom:breakEnt()
  53.        
  54.        
  55.     end
  56.    
  57.     function BombTimerStart()
  58.        
  59.         screen = prop.createComponent(boomb:localToWorld(Vector(-4, -2,0.2)), boomb:localToWorldAngles(Angle(0,-180,0)), "starfall_screen", "models/Gibs/HGIBS.mdl", true)
  60.         screen:setColor( Color(1, 1, 1, 1) )
  61.         screen:linkComponent(chip())
  62.         screen:setParent(boomb)
  63.         screen:setSolid( false )
  64.        
  65.         boomb:emitSound("radio/bombpl.wav",75,100,5)
  66.        
  67.         hook.add("think", "BombServerTimer", function()
  68.             if isValid(boomb) then
  69.                
  70.                 BombBeeep()
  71.                
  72.                 if timer.curtime() < nextCount then return end    
  73.                
  74.                 nextCount= timer.curtime() + 1
  75.                 to_boom_check = to_boom_check + 1
  76.                
  77.                
  78.                
  79.                 BoombPos = boomb:getPos()
  80.                
  81.                 if to_boom_check == boom_bydlokod_indificator then
  82.                     BombBooom( BoombPos ) hook.remove("think", "BombServerTimer")  boomb:emitSound("weapons/c4/c4_explode1.wav",175,100,5)
  83.                 end
  84.             else
  85.                 hook.remove("think", "BombServerTimer")
  86.             end
  87.         end)
  88.        
  89.        
  90.         net.start("plant")
  91.         net.send()
  92.        
  93.     end
  94.    
  95.     nextBeep = 1
  96.    
  97.     function BombBeeep()
  98.        
  99.         if timer.curtime() < nextBeep then return end
  100.        
  101.         if to_boom_check > 57 then
  102.             nextBeep = timer.curtime() + 3
  103.             boomb:emitSound("items/nvg_on.wav",75,100,5)
  104.         return end
  105.        
  106.         if to_boom_check > 50 then
  107.             nextBeep = timer.curtime() + 0.3
  108.             boomb:emitSound("weapons/c4/c4_beep1.wav",75,100,5)
  109.         return end
  110.        
  111.         if to_boom_check > 40 then
  112.             nextBeep = timer.curtime() + 0.55
  113.             boomb:emitSound("weapons/c4/c4_beep1.wav",75,100,5)
  114.         return end
  115.        
  116.         if to_boom_check > 30 then
  117.             nextBeep = timer.curtime() + 0.8
  118.             boomb:emitSound("weapons/c4/c4_beep1.wav",75,100,5)
  119.         return end
  120.        
  121.         nextBeep = timer.curtime() + 1
  122.         boomb:emitSound("weapons/c4/c4_beep1.wav",75,100,5)
  123.  
  124.     end
  125.    
  126.    
  127.     function BombStabilizer( freze )
  128.        
  129.         local def_pos,def_ang = boomb:localToWorld(Vector(1, 0, 0)), boomb:localToWorldAngles(Angle(0,-90,0))
  130.                        
  131.         bigHoloc4:setParent( boomb )
  132.        
  133.        
  134.         boomb:setSolid( true )  
  135.        
  136.         if freze then
  137.             bigHoloc4:setModel( "models/weapons/w_c4_planted.mdl" )
  138.             def_pos,def_ang = boomb:localToWorld(Vector(1, 0, -5)), boomb:localToWorldAngles(Angle(0,-90,0))
  139.             timer.create("Freze",3,1, function()
  140.                  if isValid(boomb) then
  141.                    
  142.                    
  143.                    
  144.                     boomb:enableMotion( false )
  145.                     boomb:setAngles( boomb:getAngles() * Angle(0, 0, 0) )
  146.                     --hook.remove("think", "CheckGround")
  147.                 end
  148.             end)
  149.         end
  150.        
  151.         bigHoloc4:setPos( def_pos )
  152.         bigHoloc4:setAngles( def_ang )
  153.        
  154.     end
  155.  
  156.     hololoadPos = holograms.create( Vector(0,0,0) , Angle(90,-90,0), "models/holograms/plane.mdl", Vector( 0.001 ) )
  157.    
  158.        
  159.     hololoadMain = holograms.create( hololoadPos:localToWorld(Vector(0, 0, -10)), hololoadPos:localToWorldAngles(Angle(0,0,0)), "models/holograms/plane.mdl", Vector( 0.001,0.01,0.001 ) )
  160.     hololoadMain:setParent(hololoadPos)
  161.     hololoadMain:setColor( Color(255,200,100,255) )
  162.     hololoadMain:suppressEngineLighting( true )    
  163.    
  164.     hololoadBack = holograms.create( hololoadPos:localToWorld(Vector(0, 0, -10.05)), hololoadPos:localToWorldAngles(Angle(0,0,0)), "models/holograms/plane.mdl", Vector( 0.03,0.7,0.02 ) )
  165.     hololoadBack:setParent(hololoadPos)
  166.     hololoadBack:setColor( Color(10,10,10,245) )
  167.     hololoadBack:suppressEngineLighting( true )
  168.    
  169.     function BombFollow_The_Man( ply )
  170.        
  171.         targetPos = ply:lookupBone( "ValveBiped.Bip01_Spine4" )
  172.        
  173.         targetHeadPos = ply:lookupBone( "ValveBiped.Bip01_Head1" )
  174.        
  175.         local UnoPosHolo, UnoAngHolo = ply:getBonePosition( targetPos )
  176.  
  177.         bigHoloc4:setParent( ply , "chest")
  178.         bigHoloc4:setPos( UnoPosHolo )
  179.         bigHoloc4:setAngles( UnoAngHolo + Angle(0 , 0 , 90)  )
  180.        
  181.         nextUse = 0
  182.        
  183.         local plantState = 0
  184.        
  185.         hook.add("think", "BombFolower", function()
  186.             if isValid(boomb) then
  187.                
  188.                 local PosHolo, AngHolo = ply:getBonePosition( targetPos )
  189.                
  190.                 local PosHeadHolo, AngHeadHolo = ply:getEyePos(), ply:getEyeAngles()
  191.                
  192.                 boomb:setPos( PosHolo  )
  193.                 boomb:setAngles( Angle(0 , 0 , 90) + AngHolo  )
  194.                
  195.                 boomb:setSolid( false )  
  196.                
  197.                
  198.                
  199.                 if timer.curtime() < nextUse then return end    
  200.                
  201.                 nextUse= timer.curtime() + 0.1
  202.                
  203.                
  204.                 --
  205.                
  206.                 if ply:keyDown(IN_KEY.USE) and weapon_to_plant[ ply:getActiveWeapon():getClass() ] then
  207.                    
  208.                     if ply:getVelocity():getLength() > 0 then hololoadPos:setPos( Vector(0,0,0) ) plantState = 0 hololoadMain:setScale( Vector( 0.02,0.01,0.02 ) ) return end
  209.                    
  210.                     hololoadMain:setScale( hololoadMain:getScale() + Vector(0, plantState/2000 ,0) )
  211.                    
  212.                     plantState = plantState + 1
  213.                    
  214.                     hololoadPos:setPos( PosHeadHolo )
  215.                     hololoadPos:setAngles( AngHeadHolo + Angle(-90, 0, 0) )
  216.                    
  217.                     local Check = hololoadMain:getScale().y
  218.                     --print( Check )
  219.                     if Check > 0.65 then
  220.                        
  221.                         hololoadMain:setScale( Vector( 0.02,0.01,0.02 ) )
  222.                         hololoadPos:setPos( Vector(0,0,0) )
  223.                        
  224.                         hook.remove("think","BombFolower")
  225.                         boomb:enableMotion( true )
  226.                         bomb_on_player = nil
  227.                         hololoadPos:setPos( Vector(0,0,0) )
  228.                         bomb_planted = true
  229.                         BombTimerStart()
  230.                         BombStabilizer( true )
  231.  
  232.                        
  233.                     end
  234.                     return
  235.                 else
  236.                     hololoadPos:setPos( Vector(0,0,0) )
  237.                     plantState = 0
  238.                     hololoadMain:setScale( Vector( 0.02,0.01,0.02 ) )
  239.                 end
  240.                
  241.                
  242.                
  243.                 if ply:keyDown(IN_KEY.SPEED) and ply:keyDown(IN_KEY.WALK) then
  244.                    
  245.                     hook.remove("think","BombFolower")
  246.                     boomb:enableMotion( true )
  247.                     bomb_on_player = nil
  248.                     boomb:setSolid( true )
  249.                     BombStabilizer( false )
  250.                 end
  251.                
  252.                 if !ply:isAlive() then
  253.                     hook.remove("think","BombFolower")
  254.                     boomb:enableMotion( true )
  255.                     bomb_on_player = nil
  256.                     boomb:setSolid( true )
  257.                     BombStabilizer( false )
  258.                 end
  259.             end
  260.         end)
  261.     end
  262.    
  263.     function BombDefuse_The_Man( ply )
  264.  
  265.        
  266.         targetHeadPos = ply:lookupBone( "ValveBiped.Bip01_Head1" )
  267.        
  268.         nextUse = 0
  269.        
  270.         boomb:emitSound("weapons/c4/c4_disarm.wav",75,100,5)
  271.        
  272.        
  273.         local plantState = 0
  274.        
  275.         hook.add("think", "BombDefuser", function()
  276.             if isValid(boomb) then
  277.                
  278.                 local temp = ply:getEyeTrace().Entity
  279.                
  280.                 if temp == boomb then  
  281.                
  282.                     local PosHeadHolo, AngHeadHolo = ply:getEyePos(), ply:getEyeAngles()
  283.                    
  284.                     if timer.curtime() < nextUse then return end    
  285.                    
  286.                     nextUse= timer.curtime() + 0.1
  287.                    
  288.                     if ply:keyDown(IN_KEY.USE) then
  289.                    
  290.                         if ply:getVelocity():getLength() > 0 then hololoadPos:setPos( Vector(0,0,0) ) plantState = 0 hololoadMain:setScale( Vector( 0.02,0.01,0.02 ) ) return end
  291.                        
  292.                         hololoadMain:setScale( hololoadMain:getScale() + Vector(0, plantState/3000 ,0) )
  293.                        
  294.                         plantState = plantState + 1
  295.                        
  296.                         hololoadPos:setPos( PosHeadHolo )
  297.                         hololoadPos:setAngles( AngHeadHolo + Angle(-90, 0, 0) )
  298.                        
  299.                         local Check = hololoadMain:getScale().y
  300.                         --print( Check )
  301.                         if Check > 0.65 then
  302.                        
  303.                            
  304.                            
  305.                             hololoadMain:setScale( Vector( 0.02,0.01,0.02 ) )
  306.                             hololoadPos:setPos( Vector(0,0,0) )
  307.                             hook.remove("think","BombDefuser")
  308.                             hook.remove("think", "BombServerTimer")
  309.        
  310.                             bomb_defus_player = nil
  311.                            
  312.                             Bomb_Remove_to_save_Sounds()
  313.                            
  314.                             boomb:emitSound("radio/bombdef.wav",75,100,5)
  315.                            
  316.                         end
  317.                     else
  318.                         hololoadPos:setPos( Vector(0,0,0) )
  319.                         plantState = 0
  320.                         hololoadMain:setScale( Vector( 0.02,0.01,0.02 ) )
  321.                         bomb_defus_player = nil
  322.                         hook.remove("think","BombDefuser")
  323.                     return end
  324.                    
  325.                    
  326.                 else
  327.                     bomb_defus_player = nil
  328.                     hook.remove("think","BombDefuser")
  329.                     hololoadPos:setPos( Vector(0,0,0) )
  330.                     plantState = 0
  331.                     hololoadMain:setScale( Vector( 0.02,0.01,0.02 ) )
  332.                 end
  333.             end
  334.         end)
  335.     end
  336.    
  337.     function Bomb_Remove_to_save_Sounds()
  338.         net.start("clear")
  339.         net.send()
  340.         bomb_die = true
  341.          timer.create("RemoveTimer", 5,1, function()
  342.             boomb:remove()
  343.         end)
  344.     end
  345.    
  346.    
  347.     timer.create("Tick", 1,0, function()
  348.             if !isValid(boomb) then
  349.                 SpawnNewKega()
  350.             end
  351.     end)
  352.    
  353.     hook.add("playeruse","use_a_bomb",function(ply,used)
  354.        
  355.         if bomb_die then return end
  356.        
  357.        
  358.         if ( used == boomb or used == screen ) and not bomb_planted then
  359.             if bomb_on_player == nil then
  360.                 bomb_on_player = ply
  361.                 BombFollow_The_Man( bomb_on_player )
  362.             end
  363.         end
  364.        
  365.         if ( used == boomb or screen ) and bomb_planted then
  366.             if weapon_to_defus[ ply:getActiveWeapon():getClass() ] then
  367.                 if bomb_defus_player == nil then
  368.                     bomb_defus_player = ply
  369.                     BombDefuse_The_Man( bomb_defus_player )
  370.                 end
  371.             end
  372.         end
  373.        
  374.     end)
  375.    
  376. else
  377.  
  378.  
  379. local font = render.createFont("Roboto",110)
  380. local TimeNumbers = 0
  381.  
  382. net.receive("plant", function()
  383.     TimerStart( 60 )
  384. end)
  385.  
  386. net.receive("clear", function()
  387.     timer.remove( "Tick" )
  388.     TimeNumbers = 0
  389. end)
  390.  
  391.  
  392. function TimerStart( time )
  393.     TimeNumbers = time
  394.     timer.create("Tick", 1,time, function()
  395.         TimeNumbers = TimeNumbers - 1
  396.     end)
  397. end
  398.  
  399. hook.add("render", "", function()
  400.  
  401.     ScrX, ScrY = render.getResolution()
  402.  
  403.     --if ( player():getPos() - chip():getPos() ):getLength() >= 200 then return end
  404.  
  405.     render.setFont(font)
  406.     render.setColor(Color((timer.curtime()*100+180)%360-180, 1, 1):hsvToRGB())
  407.     if TimeNumbers == 0 then
  408.         render.drawText(ScrX/2, 100, "No Boom :(", 1)
  409.     else
  410.         render.drawText(ScrX/2, 100, "Time: " .. TimeNumbers , 1)
  411.     end
  412.     --print( nextCount )
  413. end)
  414.  
  415. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement