SHARE
TWEET

Untitled

a guest Aug 14th, 2019 68 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. if CLIENT then return end
  2.  
  3. -- This entire thing is just the portion of my Door Locker code that allows for the door to be broken down.
  4. -- Its all my code but the idea started as a copy of a concept I saw on Coderhire but I didnt want to pay for
  5. -- Edited by Rynoxx (http://steamcommunity.com/profiles/76561198004177027) to allow doors to automaticly respawn and be respawned by command(s).
  6.  
  7. CreateConVar("db_doorhealth", 300, {FCVAR_SERVER_CAN_EXECUTE, FCVAR_ARCHIVE, FCVAR_NOTIFY},"How strong the doors are.")
  8. CreateConVar("db_respawntimer", 30, {FCVAR_SERVER_CAN_EXECUTE, FCVAR_ARCHIVE, FCVAR_NOTIFY},"How long it should take for doors to respawn.")
  9. CreateConVar("db_lockopen", 1, {FCVAR_SERVER_CAN_EXECUTE, FCVAR_ARCHIVE, FCVAR_NOTIFY},"Whether or not doors should be opened and unlocked after being shot open.")
  10.  
  11. cvars.AddChangeCallback("db_doorhealth", function()
  12.     for k,v in pairs(ents.GetAll() ) do
  13.         if v:GetClass() == "prop_door_rotating" then
  14.             local health = GetConVar("db_doorhealth"):GetInt()
  15.             v:SetHealth(health)
  16.         end
  17.     end
  18.     print("[DoorBuster] Health changed. Updating doors...")
  19. end)
  20.  
  21. hook.Add( "InitPostEntity", "ITSALLIIIVVEEE", function()
  22.     timer.Simple(5, function()
  23.         for k,v in pairs( ents.GetAll() ) do
  24.             if v:GetClass() == "prop_door_rotating" then
  25.                 local health = GetConVar("db_doorhealth"):GetInt()
  26.                 v:SetHealth(health)
  27.             end
  28.         end
  29.         print("[DoorBuster] All doors have been prepped")
  30.     end )
  31. end)
  32.  
  33. knockedDoors = knockedDoors or {}
  34.  
  35. hook.Add("EntityTakeDamage","BigBadWolfIsJealous", function(prop, dmginfo)
  36.     if (prop:GetClass() == "prop_door_rotating" and IsValid(prop) and dmginfo:GetAttacker():GetActiveWeapon() == "m9k_spas12")then
  37.         local doorhealth = prop:Health()
  38.         local dmgtaken = dmginfo:GetDamage()
  39.        
  40.         prop:SetHealth(doorhealth - dmgtaken)  -- Takes damage for the door
  41.    
  42.         if prop:Health() <= 0 and (!prop.phys_door or !IsValid(prop.phys_door)) then
  43.            
  44.             -- Now we create a prop version of the door to be knocked down for looks
  45.             local dprop = ents.Create( "prop_physics" )
  46.             dprop:SetCollisionGroup(COLLISION_GROUP_INTERACTIVE)
  47.             dprop:SetMoveType(MOVETYPE_VPHYSICS)
  48.             dprop:SetSolid(SOLID_BBOX)
  49.             dprop:SetPos( prop:GetPos() + Vector(0, 0, 2))
  50.             dprop:SetAngles( prop:GetAngles() )
  51.             dprop:SetModel( prop:GetModel() )
  52.             dprop:SetSkin( prop:GetSkin() )
  53.             table.insert(knockedDoors, prop)
  54.             -- prop:Remove() -- do NOT remove the door
  55.             prop:Extinguish() -- A fix for the fire glitch
  56.             prop:SetNoDraw(true) -- Instead we're going to hide it
  57.             prop:SetNotSolid(true) -- And remove the collision of it
  58.  
  59.             if GetConVar("db_lockopen"):GetInt() > 0 then
  60.                 prop:Fire("unlock", 0)
  61.                 prop:Fire("open", 0)
  62.             end
  63.  
  64.             dprop:Spawn()
  65.             -- Who doesnt like a little pyrotechnics eh?
  66.             dprop:EmitSound( "physics/wood/wood_crate_break3.wav" )
  67.             local effectdata = EffectData()
  68.             effectdata:SetOrigin( dprop:GetPos() + dprop:OBBCenter() )
  69.             effectdata:SetMagnitude( 5 )
  70.             effectdata:SetScale( 2 )
  71.             effectdata:SetRadius( 5 )
  72.             util.Effect( "Sparks", effectdata )
  73.  
  74.             prop.phys_door = dprop
  75.  
  76.             if GetConVar("db_respawntimer"):GetInt() > 0 then
  77.                 timer.Simple(GetConVar("db_respawntimer"):GetInt(), function()
  78.                     ResetDoor(prop)
  79.                 end)
  80.             end
  81.         end
  82.     end
  83. end)
  84.  
  85. function ResetDoor(prop)
  86.     if IsValid(prop) then
  87.         prop:SetHealth(GetConVar("db_doorhealth"):GetInt())
  88.         prop:SetNoDraw(false)
  89.         prop:SetNotSolid(false)
  90.         if IsValid(prop.phys_door) then
  91.             SafeRemoveEntity(prop.phys_door)
  92.             prop.phys_door = nil
  93.         end
  94.  
  95.         for i = 1, #knockedDoors do
  96.             if knockedDoors[i] == prop then
  97.                 knockedDoors[i] = nil
  98.             end
  99.         end
  100.     end
  101. end
  102.  
  103. function ResetAllDoors()
  104.     for i = 1, #knockedDoors do
  105.         ResetDoor(knockedDoors[i])
  106.     end
  107. end
  108.  
  109. concommand.Add("db_resetdoors", function(ply)
  110.     if IsValid(ply) and !ply:IsAdmin() then return end -- Admin and RCon/Server Console only
  111.     ResetAllDoors()
  112. end)
  113.  
  114. hook.Add("PlayerSay", "DoorsAndDoorAccessories", function(ply, text) -- Chat commands to make life easier
  115.     local text = string.lower(text)
  116.  
  117.     if ( string.sub( text, 1, 11 ) == "!checkdoor" ) then
  118.         local tr = ply:GetEyeTrace()
  119.         local door = tr.Entity
  120.         if (IsValid(door)) then
  121.             if door:GetClass() == "prop_door_rotating" then
  122.                 ply:ChatPrint("That is a valid door!")
  123.             else
  124.                 ply:ChatPrint("That is not a valid door!")
  125.             end
  126.         else
  127.             ply:ChatPrint("That is not a door!")
  128.         end
  129.         return false
  130.     end
  131.    
  132.     if ( string.sub( text, 1, 11 ) == "!doorhealth" ) then
  133.         local tr = ply:GetEyeTrace()
  134.         local door = tr.Entity
  135.         if (IsValid(door) and door:GetClass() == "prop_door_rotating") then
  136.             ply:ChatPrint("That door's health is " .. door:Health())
  137.         else
  138.             ply:ChatPrint("That is not a valid door!")
  139.         end
  140.         return false
  141.     end
  142.  
  143.     if ( string.sub(text, 1, 11) == "!resetdoor" ) then
  144.         if ply:IsAdmin() or ply:IsSuperAdmin() then
  145.             ResetAllDoors()
  146.         end
  147.     end
  148. end)
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top