Advertisement
Guest User

Fading door wire support team restriction

a guest
Jul 11th, 2017
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 27.79 KB | None | 0 0
  1. TOOL.Category = "Construction"
  2. TOOL.Name = "#Fading Doors"
  3.  
  4. TOOL.ClientConVar["key"] = "41"
  5. TOOL.ClientConVar["swap"] = "0"
  6. TOOL.ClientConVar["reversed"] = "0"
  7. TOOL.ClientConVar["mat"] = "sprites/heatwave"
  8. TOOL.ClientConVar["opensound"] = "0"
  9. TOOL.ClientConVar["loopsound"] = "0"
  10. TOOL.ClientConVar["closesound"] = "0"
  11.  
  12. list.Add("FDoorMaterials", "sprites/heatwave")
  13. list.Add("FDoorMaterials", "models/wireframe")
  14. list.Add("FDoorMaterials", "debug/env_cubemap_model")
  15. list.Add("FDoorMaterials", "models/shadertest/shader3")
  16. list.Add("FDoorMaterials", "models/shadertest/shader4")
  17. list.Add("FDoorMaterials", "models/shadertest/shader5")
  18. list.Add("FDoorMaterials", "models/shiny")
  19. list.Add("FDoorMaterials", "models/debug/debugwhite")
  20. list.Add("FDoorMaterials", "Models/effects/comball_sphere")
  21. list.Add("FDoorMaterials", "Models/effects/comball_tape")
  22. list.Add("FDoorMaterials", "Models/effects/splodearc_sheet")
  23. list.Add("FDoorMaterials", "Models/effects/vol_light001")
  24. list.Add("FDoorMaterials", "models/props_combine/stasisshield_sheet")
  25. list.Add("FDoorMaterials", "models/props_combine/portalball001_sheet")
  26. list.Add("FDoorMaterials", "models/props_combine/com_shield001a")
  27. list.Add("FDoorMaterials", "models/props_c17/frostedglass_01a")
  28. list.Add("FDoorMaterials", "models/props_lab/Tank_Glass001")
  29. list.Add("FDoorMaterials", "models/props_combine/tprings_globe")
  30. list.Add("FDoorMaterials", "models/rendertarget")
  31. list.Add("FDoorMaterials", "models/screenspace")
  32. list.Add("FDoorMaterials", "brick/brick_model")
  33. list.Add("FDoorMaterials", "models/props_pipes/GutterMetal01a")
  34. list.Add("FDoorMaterials", "models/props_pipes/Pipesystem01a_skin3")
  35. list.Add("FDoorMaterials", "models/props_wasteland/wood_fence01a")
  36. list.Add("FDoorMaterials", "models/props_foliage/tree_deciduous_01a_trunk")
  37. list.Add("FDoorMaterials", "models/props_c17/FurnitureFabric003a")
  38. list.Add("FDoorMaterials", "models/props_c17/FurnitureMetal001a")
  39. list.Add("FDoorMaterials", "models/props_c17/paper01")
  40. list.Add("FDoorMaterials", "models/flesh")
  41.  
  42. if SERVER then
  43.     util.AddNetworkString("DrawFadeDoor")
  44. end
  45.  
  46. local Sounds = {}
  47. Sounds[1] = Sound("doors/doorstop1.wav")
  48. Sounds[2] = Sound("npc/turret_floor/retract.wav")
  49. Sounds[3] = Sound("npc/roller/mine/combine_mine_deactivate1.wav")
  50. Sounds[4] = Sound("npc/roller/mine/combine_mine_deploy1.wav")
  51. Sounds[5] = Sound("npc/roller/mine/rmine_taunt1.wav")
  52. Sounds[6] = Sound("npc/scanner/scanner_nearmiss2.wav")
  53. Sounds[7] = Sound("npc/scanner/scanner_siren1.wav")
  54. Sounds[8] = Sound("npc/barnacle/barnacle_gulp1.wav")
  55. Sounds[9] = Sound("npc/barnacle/barnacle_gulp2.wav")
  56. Sounds[10] = Sound("npc/combine_gunship/attack_start2.wav")
  57. Sounds[11] = Sound("npc/combine_gunship/attack_stop2.wav")
  58. Sounds[12] = Sound("npc/dog/dog_pneumatic1.wav")
  59. Sounds[13] = Sound("npc/dog/dog_pneumatic2.wav")
  60.  
  61. util.PrecacheSound(Sounds[1])
  62. util.PrecacheSound(Sounds[2])
  63. util.PrecacheSound(Sounds[3])
  64. util.PrecacheSound(Sounds[4])
  65. util.PrecacheSound(Sounds[5])
  66. util.PrecacheSound(Sounds[6])
  67. util.PrecacheSound(Sounds[7])
  68. util.PrecacheSound(Sounds[8])
  69. util.PrecacheSound(Sounds[9])
  70. util.PrecacheSound(Sounds[10])
  71. util.PrecacheSound(Sounds[11])
  72. util.PrecacheSound(Sounds[12])
  73. util.PrecacheSound(Sounds[13])
  74.  
  75. local LoopSounds = {}
  76. LoopSounds[1] = "ambient/machines/machine6.wav"
  77. LoopSounds[2] = "ambient/energy/force_field_loop1.wav"
  78. LoopSounds[3] = "physics/metal/canister_scrape_smooth_loop1.wav"
  79. LoopSounds[4] = "ambient/levels/citadel/citadel_drone_loop5.wav"
  80. LoopSounds[5] = "ambient/levels/citadel/citadel_drone_loop6.wav"
  81. LoopSounds[6] = "ambient/atmosphere/city_rumble_loop1.wav"
  82. LoopSounds[7] = "ambient/machines/city_ventpump_loop1.wav"
  83. LoopSounds[8] = "ambient/machines/combine_shield_loop3.wav"
  84. LoopSounds[9] = "npc/manhack/mh_engine_loop1.wav"
  85. LoopSounds[10] = "npc/manhack/mh_engine_loop2.wav"
  86.  
  87. if CLIENT then
  88.     language.Add("Tool.fading_door.name", "Fading Doors")
  89.     language.Add("Tool.fading_door.desc", "Makes anything into a fadable door")
  90.     language.Add("Tool.fading_door.0", "Click on something to make it a fading door. Right click to copy data. Reload to remove fading door.")
  91.    
  92.     function TOOL:BuildCPanel()
  93.         self:AddControl("Header",   {Text = "#Tool.fading_door.name", Description = "#Tool.fading_door.desc"})
  94.         self:AddControl("CheckBox", {Label = "Reversed", Command = "fading_door_reversed"})
  95.         self:AddControl("CheckBox", {Label = "Toggle Active", Command = "fading_door_swap"})
  96.        
  97.         local DoorOpenSound = vgui.Create("CtrlListBox", self)
  98.         DoorOpenSound:AddOption("None", {fading_door_opensound = "0"})
  99.         if file.Exists("sound/doors/doorstop1.wav", "GAME") then DoorOpenSound:AddOption("1", {fading_door_opensound = "1"}) end
  100.         if file.Exists("sound/npc/turret_floor/retract.wav", "GAME") then DoorOpenSound:AddOption("2", {fading_door_opensound = "2"}) end
  101.         if file.Exists("sound/npc/roller/mine/combine_mine_deactivate1.wav", "GAME") then DoorOpenSound:AddOption("3", {fading_door_opensound = "3"}) end
  102.         if file.Exists("sound/npc/roller/mine/combine_mine_deploy1.wav", "GAME") then DoorOpenSound:AddOption("4", {fading_door_opensound = "4"}) end
  103.         if file.Exists("sound/npc/roller/mine/rmine_taunt1.wav", "GAME") then DoorOpenSound:AddOption("5", {fading_door_opensound = "5"}) end
  104.         if file.Exists("sound/npc/scanner/scanner_nearmiss2.wav", "GAME") then DoorOpenSound:AddOption("6", {fading_door_opensound = "6"}) end
  105.         if file.Exists("sound/npc/scanner/scanner_siren1.wav", "GAME") then DoorOpenSound:AddOption("7", {fading_door_opensound = "7"}) end
  106.         if file.Exists("sound/npc/barnacle/barnacle_gulp1.wav", "GAME") then DoorOpenSound:AddOption("8", {fading_door_opensound = "8"}) end
  107.         if file.Exists("sound/npc/barnacle/barnacle_gulp2.wav", "GAME") then DoorOpenSound:AddOption("9", {fading_door_opensound = "9"}) end
  108.         if file.Exists("sound/npc/combine_gunship/attack_start2.wav", "GAME") then DoorOpenSound:AddOption("10", {fading_door_opensound = "10"}) end
  109.         if file.Exists("sound/npc/combine_gunship/attack_stop2.wav", "GAME") then DoorOpenSound:AddOption("11", {fading_door_opensound = "11"}) end
  110.         if file.Exists("sound/npc/dog/dog_pneumatic1.wav", "GAME") then DoorOpenSound:AddOption("12", {fading_door_opensound = "12"}) end
  111.         if file.Exists("sound/npc/dog/dog_pneumatic2.wav", "GAME") then DoorOpenSound:AddOption("13", {fading_door_opensound = "13"}) end
  112.        
  113.         local left = vgui.Create("DLabel", self)
  114.         left:SetText("Open Sound")
  115.         left:SetDark(true)
  116.         DoorOpenSound:SetHeight(25)
  117.         DoorOpenSound:Dock(TOP)
  118.        
  119.         self:AddItem(left, DoorOpenSound)
  120.        
  121.         local DoorActiveSound = vgui.Create("CtrlListBox", self)
  122.         DoorActiveSound:AddOption("None", {fading_door_loopsound = "0"})
  123.         if file.Exists("sound/"..LoopSounds[1], "GAME") then DoorActiveSound:AddOption("1", {fading_door_loopsound = "1"}) end
  124.         if file.Exists("sound/"..LoopSounds[2], "GAME") then DoorActiveSound:AddOption("2", {fading_door_loopsound = "2"}) end
  125.         if file.Exists("sound/"..LoopSounds[3], "GAME") then DoorActiveSound:AddOption("3", {fading_door_loopsound = "3"}) end
  126.         if file.Exists("sound/"..LoopSounds[4], "GAME") then DoorActiveSound:AddOption("4", {fading_door_loopsound = "4"}) end
  127.         if file.Exists("sound/"..LoopSounds[5], "GAME") then DoorActiveSound:AddOption("5", {fading_door_loopsound = "5"}) end
  128.         if file.Exists("sound/"..LoopSounds[6], "GAME") then DoorActiveSound:AddOption("6", {fading_door_loopsound = "6"}) end
  129.         if file.Exists("sound/"..LoopSounds[7], "GAME") then DoorActiveSound:AddOption("7", {fading_door_loopsound = "7"}) end
  130.         if file.Exists("sound/"..LoopSounds[8], "GAME") then DoorActiveSound:AddOption("8", {fading_door_loopsound = "8"}) end
  131.         if file.Exists("sound/"..LoopSounds[9], "GAME") then DoorActiveSound:AddOption("9", {fading_door_loopsound = "9"}) end
  132.         if file.Exists("sound/"..LoopSounds[10], "GAME") then DoorActiveSound:AddOption("10", {fading_door_loopsound = "10"}) end
  133.        
  134.         local left = vgui.Create("DLabel", self)
  135.         left:SetText("Active Sound")
  136.         left:SetDark(true)
  137.         DoorActiveSound:SetHeight(25)
  138.         DoorActiveSound:Dock(TOP)
  139.        
  140.         self:AddItem(left, DoorActiveSound)
  141.        
  142.         local DoorCloseSound = vgui.Create("CtrlListBox", self)
  143.         DoorCloseSound:AddOption("None", {fading_door_closesound = "0"})
  144.         if file.Exists("sound/doors/doorstop1.wav", "GAME") then DoorCloseSound:AddOption("1", {fading_door_closesound = "1"}) end
  145.         if file.Exists("sound/npc/turret_floor/retract.wav", "GAME") then DoorCloseSound:AddOption("2", {fading_door_closesound = "2"}) end
  146.         if file.Exists("sound/npc/roller/mine/combine_mine_deactivate1.wav", "GAME") then DoorCloseSound:AddOption("3", {fading_door_closesound = "3"}) end
  147.         if file.Exists("sound/npc/roller/mine/combine_mine_deploy1.wav", "GAME") then DoorCloseSound:AddOption("4", {fading_door_closesound = "4"}) end
  148.         if file.Exists("sound/npc/roller/mine/rmine_taunt1.wav", "GAME") then DoorCloseSound:AddOption("5", {fading_door_closesound = "5"}) end
  149.         if file.Exists("sound/npc/scanner/scanner_nearmiss2.wav", "GAME") then DoorCloseSound:AddOption("6", {fading_door_closesound = "6"}) end
  150.         if file.Exists("sound/npc/scanner/scanner_siren1.wav", "GAME") then DoorCloseSound:AddOption("7", {fading_door_closesound = "7"}) end
  151.         if file.Exists("sound/npc/barnacle/barnacle_gulp1.wav", "GAME") then DoorCloseSound:AddOption("8", {fading_door_closesound = "8"}) end
  152.         if file.Exists("sound/npc/barnacle/barnacle_gulp2.wav", "GAME") then DoorCloseSound:AddOption("9", {fading_door_closesound = "9"}) end
  153.         if file.Exists("sound/npc/combine_gunship/attack_start2.wav", "GAME") then DoorCloseSound:AddOption("10", {fading_door_closesound = "10"}) end
  154.         if file.Exists("sound/npc/combine_gunship/attack_stop2.wav", "GAME") then DoorCloseSound:AddOption("11", {fading_door_closesound = "11"}) end
  155.         if file.Exists("sound/npc/dog/dog_pneumatic1.wav", "GAME") then DoorCloseSound:AddOption("12", {fading_door_closesound = "12"}) end
  156.         if file.Exists("sound/npc/dog/dog_pneumatic2.wav", "GAME") then DoorCloseSound:AddOption("13", {fading_door_closesound = "13"}) end
  157.        
  158.         local left = vgui.Create("DLabel", self)
  159.         left:SetText("Close Sound")
  160.         left:SetDark(true)
  161.         DoorCloseSound:SetHeight(25)
  162.         DoorCloseSound:Dock(TOP)
  163.        
  164.         self:AddItem(left, DoorCloseSound)
  165.         self:AddControl("Numpad", {Label = "Button", ButtonSize = "22", Command = "fading_door_key"})
  166.         self:MatSelect("fading_door_mat", list.Get("FDoorMaterials"), true, 0.33, 0.33)
  167.     end
  168.    
  169.     local EFFECT = {}
  170.    
  171.     net.Receive("DrawFadeDoor",function()
  172.         local String = net.ReadString()
  173.         if String == "0" then
  174.             EFFECT.Type = nil
  175.             EFFECT.Ent = nil
  176.             if EFFECT.Remove == false then EFFECT.Remove = true end
  177.         else
  178.             EFFECT.Type = nil
  179.             EFFECT.Ent = nil
  180.             if EFFECT.Remove == nil then util.Effect("render_fade_door", EffectData()) end
  181.             EFFECT.Remove = false
  182.            
  183.             local Table = string.Explode("_",String)
  184.             local Ent = ents.GetByIndex(tonumber(Table[1]))
  185.             if IsValid(Ent) then
  186.                 EFFECT.Type = tonumber(Table[2])
  187.                 EFFECT.Ent = Ent
  188.             end
  189.         end
  190.     end)
  191.    
  192.     function EFFECT:Init(data) end
  193.  
  194.     function EFFECT:Think()
  195.         -- This makes the effect always visible.
  196.         local pl = LocalPlayer()
  197.         local Pos = pl:EyePos()
  198.         local Trace = {}
  199.         Trace.start = Pos
  200.         Trace.endpos = Pos+(pl:GetAimVector()*10)
  201.         Trace.filter = {pl}
  202.         local TR = util.TraceLine(Trace)
  203.         self:SetPos(TR.HitPos)
  204.        
  205.         -- Remove when ent is not valid.
  206.         if !IsValid(EFFECT.Ent) then
  207.             EFFECT.Type = nil
  208.             EFFECT.Ent = nil
  209.             EFFECT.Remove = true
  210.         end
  211.        
  212.         if EFFECT.Remove or EFFECT.Remove == nil then
  213.             EFFECT.Remove = nil
  214.             return false
  215.         end
  216.         return true
  217.     end
  218.    
  219.     function EFFECT:Render()
  220.         if IsValid(EFFECT.Ent) then
  221.             if EFFECT.Type == 1 then
  222.                 halo.Add({EFFECT.Ent}, Color(255, 255, 255, 255), 10, 10, 1, true, false)
  223.             elseif EFFECT.Type == 2 then
  224.                 halo.Add({EFFECT.Ent}, Color(100, 255, 100, 255), 10, 10, 1, true, false)
  225.             else
  226.                 halo.Add({EFFECT.Ent}, Color(255, 150, 50, 255), 10, 10, 1, true, false)
  227.             end
  228.         end
  229.     end
  230.    
  231.     effects.Register(EFFECT,"render_fade_door",true)
  232.    
  233.     function TOOL:LeftClick(tr)
  234.         if !tr.Entity or !tr.Entity:IsValid() then return false end
  235.         if tr.Entity:IsPlayer() or tr.HitWorld then return false end
  236.         return true
  237.     end
  238.    
  239.     function TOOL:RightClick(tr)
  240.         if !tr.Entity or !tr.Entity:IsValid() then return false end
  241.         if tr.Entity:IsPlayer() or tr.HitWorld then return false end
  242.         return true
  243.     end
  244.  
  245.     function TOOL:Reload(tr)
  246.         if !tr.Entity or !tr.Entity:IsValid() then return false end
  247.         if tr.Entity:IsPlayer() or tr.HitWorld then return false end
  248.         return true
  249.     end
  250.    
  251.     return
  252. end
  253.  
  254. local function fadeActivate(self)
  255.     if self.fadeActive then return end
  256.     self.fadeActive = true
  257.     self.fadeMaterial = self:GetMaterial()
  258.     self.fadeDoorMaterial = self.fadeDoorMaterial or "sprites/heatwave"
  259.     self:SetMaterial(self.fadeDoorMaterial)
  260.     self:DrawShadow(false)
  261.     if self.fadeCanDisableMotion then self:SetNotSolid(true) else self:SetCollisionGroup(COLLISION_GROUP_WORLD) end
  262.     local phys = self:GetPhysicsObject()
  263.     if IsValid(phys) then
  264.         self.fadeMoveable = phys:IsMoveable()
  265.         phys:EnableMotion(false)
  266.     end
  267.    
  268.     if self.fadeDoorOpenSound and Sounds and Sounds[self.fadeDoorOpenSound] then
  269.         self:EmitSound(Sounds[self.fadeDoorOpenSound],350,100)
  270.     end
  271.    
  272.     if self.fadeDoorLoopSound and LoopSounds and LoopSounds[self.fadeDoorLoopSound] and !self.FadeDoorSound then
  273.         self.FadeDoorSound = CreateSound(self, LoopSounds[self.fadeDoorLoopSound])
  274.         self.FadeDoorSound:Play()
  275.     end
  276.    
  277.     if WireLib then
  278.         Wire_TriggerOutput(self,  "FadeActive",  1)
  279.     end
  280. end
  281.  
  282. local function fadeDeactivate(self)
  283.     self.fadeActive = false
  284.     if self:GetMaterial() == self.fadeDoorMaterial and self.fadeMaterial then self:SetMaterial(self.fadeMaterial) end
  285.     self:DrawShadow(true)
  286.     if self.fadeCanDisableMotion then self:SetNotSolid(false) else self:SetCollisionGroup(COLLISION_GROUP_NONE) end
  287.     local phys = self:GetPhysicsObject()
  288.     if IsValid(phys) then
  289.         phys:EnableMotion(self.fadeMoveable or false)
  290.         phys:Wake()
  291.     end
  292.    
  293.     if self.fadeDoorCloseSound and Sounds and Sounds[self.fadeDoorCloseSound] then
  294.         self:EmitSound(Sounds[self.fadeDoorCloseSound],350,100)
  295.     end
  296.    
  297.     if self.FadeDoorSound then self.FadeDoorSound:Stop() end
  298.     self.FadeDoorSound = nil
  299.    
  300.     if WireLib then
  301.         Wire_TriggerOutput(self,  "FadeActive",  0)
  302.     end
  303. end
  304.  
  305. local function onUp(pl, Ent)
  306.     if IsValid(Ent) then
  307.         local Activate = false
  308.         if Ent.fadeToggle then
  309.             if Ent.fadeReversed then
  310.                 Activate = !Ent.fadeActive
  311.             else
  312.                 Activate = Ent.fadeActive
  313.             end
  314.         elseif Ent.fadeReversed then
  315.             Activate = true
  316.         end
  317.         if Activate then
  318.             if !Ent.fadeActive then Ent:fadeActivate() end
  319.         else
  320.             if Ent.fadeActive then Ent:fadeDeactivate() end
  321.         end
  322.     end
  323. end
  324. numpad.Register("Fading Door onUp", onUp)
  325.  
  326. local function onDown(pl, Ent)
  327.     if IsValid(Ent) then
  328.         local Activate = true
  329.         if Ent.fadeToggle then
  330.             if Ent.fadeReversed then
  331.                 Activate = Ent.fadeActive
  332.             else
  333.                 Activate = !Ent.fadeActive
  334.             end
  335.         elseif Ent.fadeReversed then
  336.             Activate = false
  337.         end
  338.         if Activate then
  339.             if !Ent.fadeActive then Ent:fadeActivate() end
  340.         else
  341.             if Ent.fadeActive then Ent:fadeDeactivate() end
  342.         end
  343.     end
  344. end
  345. numpad.Register("Fading Door onDown", onDown)
  346.  
  347. local function getWireInputs(Ent)
  348.     local inputs = Ent.Inputs
  349.     local names, types, descs = {}, {}, {}
  350.     if inputs then
  351.         local num
  352.         for _, data in pairs(inputs) do
  353.             num = data.Num
  354.             names[num] = data.Name
  355.             types[num] = data.Type
  356.             descs[num] = data.Desc
  357.         end
  358.     end
  359.     return names, types, descs
  360. end
  361.  
  362. local function doWireInputs(Ent)
  363.     local inputs = Ent.Inputs
  364.     if !inputs then
  365.         Wire_CreateInputs(Ent, {"Fade"})
  366.         return
  367.     end
  368.     local names, types, descs = {}, {}, {}
  369.     local num
  370.     for _, data in pairs(inputs) do
  371.         num = data.Num
  372.         names[num] = data.Name
  373.         types[num] = data.Type
  374.         descs[num] = data.Desc
  375.     end
  376.     table.insert(names, "Fade")
  377.     WireLib.AdjustSpecialInputs(Ent, names, types, descs)
  378. end
  379.  
  380. local function doWireOutputs(Ent)
  381.     local outputs = Ent.Outputs
  382.     if !outputs then
  383.         Wire_CreateOutputs(Ent, {"FadeActive"})
  384.         return
  385.     end
  386.     local names, types, descs = {}, {}, {}
  387.     local num
  388.     for _, data in pairs(outputs) do
  389.         num = data.Num
  390.         names[num] = data.Name
  391.         types[num] = data.Type
  392.         descs[num] = data.Desc
  393.     end
  394.     table.insert(names, "FadeActive")
  395.     WireLib.AdjustSpecialOutputs(Ent, names, types, descs)
  396. end
  397.  
  398. local function TriggerInput(self, name, value, ...)
  399.     if name == "Fade" then
  400.         if value == 0 then onUp(nil, self) else onDown(nil, self) end
  401.     elseif self.fadeTriggerInput then
  402.         return self:fadeTriggerInput(name, value, ...)
  403.     end
  404. end
  405.  
  406. local function PreEntityCopy(self)
  407.     if self then
  408.         local info = WireLib.BuildDupeInfo(self)
  409.         if info then duplicator.StoreEntityModifier(self, "WireDupeInfo", info) end
  410.         if self.fadePreEntityCopy then self:fadePreEntityCopy() end
  411.     end
  412. end
  413.  
  414. local function PostEntityPaste(self, pl, Ent, ents)
  415.     if self then
  416.         if self.EntityMods and self.EntityMods.WireDupeInfo then WireLib.ApplyDupeInfo(pl, self, self.EntityMods.WireDupeInfo, function(id) return ents[id] end) end
  417.         if self.fadePostEntityPaste then self:fadePostEntityPaste(pl, Ent, ents) end
  418.     end
  419. end
  420.  
  421. local function onRemove(self)
  422.     if self.fadeDeactivate then self:fadeDeactivate() end
  423.     self.isFadingDoor = nil
  424.     self.PreEntityCopy = self.fadePreEntityCopy
  425.     self.fadePreEntityCopy = nil
  426.     self.PostEntityPaste = self.fadePostEntityPaste
  427.     self.fadePostEntityPaste = nil
  428.     self.TriggerInput = self.fadeTriggerInput
  429.     self.fadeTriggerInput = nil
  430.     duplicator.ClearEntityModifier(self, "Fading Door")
  431.     if self.fadeUpNum then numpad.Remove(self.fadeUpNum) end
  432.     if self.fadeDownNum then numpad.Remove(self.fadeDownNum) end
  433.     self.fadeActive = nil
  434.     self.fadeMaterial = nil
  435.     if IsValid(self.FadingDoorDummy) then self.FadingDoorDummy:Remove() end
  436.     self.FadingDoorDummy = nil
  437.     self.fadeToggle = nil
  438.     self.fadeDoorMaterial = nil
  439.     self.fadeMoveable = nil
  440.     self.fadeCanDisableMotion = nil
  441.     self.fadeDoorOpenSound = nil
  442.     self.fadeDoorCloseSound = nil
  443.     self.fadeDoorLoopSound = nil
  444.     self.fadeDeactivate = nil
  445.     self.fadeUpNum = nil
  446.     self.fadeDownNum = nil
  447.     self.fadeToggleActive = nil
  448.     self.fadeReversed = nil
  449.     self.fadeActivate = nil
  450.     self.fadeKey = nil
  451.     if self.OnDieFunctions then
  452.         self.OnDieFunctions["UndoFadingDoor"..self:EntIndex()] = nil
  453.         self.OnDieFunctions["Fading Doors"] = nil
  454.     end
  455.     if WireLib then
  456.         if self.Inputs then
  457.             Wire_Link_Clear(self, "Fade")
  458.             self.Inputs['Fade'] = nil
  459.             WireLib._SetInputs(self)
  460.         end
  461.         if self.Outputs then
  462.             local port = self.Outputs['FadeActive']
  463.             if port then
  464.                 for i,inp in ipairs(port.Connected) do
  465.                     if inp.Entity:IsValid() then
  466.                         Wire_Link_Clear(inp.Entity, inp.Name)
  467.                     end
  468.                 end
  469.             end
  470.             self.Outputs['FadeActive'] = nil
  471.             WireLib._SetOutputs(self)
  472.         end
  473.     end
  474.     if self.EntityMods and self.EntityMods.WireDupeInfo and self.EntityMods.WireDupeInfo.Wires then self.EntityMods.WireDupeInfo.Wires.Fade = nil end
  475. end
  476.  
  477. local function RemoveKeys(self)
  478.     if self.FadeDoorSound then self.FadeDoorSound:Stop() end
  479.     numpad.Remove(self.fadeUpNum)
  480.     numpad.Remove(self.fadeDownNum)
  481. end
  482.  
  483. local function customCheck(pl)
  484.     return table.HasValue({TEAM_GANG}, pl:Team())
  485. end
  486.  
  487. local function dooEet(pl, Ent, stuff)
  488.     if Ent.isFadingDoor then
  489.         if Ent.fadeDeactivate then Ent:fadeDeactivate() end
  490.         RemoveKeys(Ent)
  491.     else
  492.         Ent.isFadingDoor = true
  493.         Ent.fadeActivate = fadeActivate
  494.         Ent.fadeDeactivate = fadeDeactivate
  495.         Ent.fadeToggleActive = fadeToggleActive
  496.         Ent:CallOnRemove("Fading Doors", RemoveKeys)
  497.         if WireLib and customCheck(pl) then
  498.             doWireInputs(Ent)
  499.             doWireOutputs(Ent)
  500.             Ent.fadeTriggerInput = Ent.fadeTriggerInput or Ent.TriggerInput
  501.             Ent.TriggerInput = TriggerInput
  502.             if !Ent.IsWire then
  503.                 if !Ent.fadePreEntityCopy and Ent.PreEntityCopy then Ent.fadePreEntityCopy = Ent.PreEntityCopy end
  504.                 Ent.PreEntityCopy = PreEntityCopy
  505.                 if !Ent.fadePostEntityPaste and Ent.PreEntityCopy then Ent.fadePostEntityPaste = Ent.PostEntityPaste end
  506.                 Ent.PostEntityPaste = PostEntityPaste
  507.             end
  508.         end
  509.     end
  510.     Ent.fadeUpNum = numpad.OnUp(pl, stuff.key, "Fading Door onUp", Ent)
  511.     Ent.fadeDownNum = numpad.OnDown(pl, stuff.key, "Fading Door onDown", Ent)
  512.     Ent.fadeToggle = stuff.toggle
  513.     Ent.fadeReversed = stuff.reversed
  514.     Ent.fadeKey = stuff.key
  515.     Ent.fadeCanDisableMotion = stuff.CanDisableMotion
  516.     Ent.fadeDoorMaterial = stuff.DoorMaterial
  517.     Ent.fadeDoorOpenSound = stuff.DoorOpenSound
  518.     Ent.fadeDoorLoopSound = stuff.DoorLoopSound
  519.     Ent.fadeDoorCloseSound = stuff.DoorCloseSound
  520.     if stuff.reversed then Ent:fadeActivate() end
  521.     duplicator.StoreEntityModifier(Ent, "Fading Door", stuff)
  522.     return true
  523. end
  524.  
  525. duplicator.RegisterEntityModifier("Fading Door", dooEet)
  526. hook.Add("Initialize", "FadingDoor1", function() duplicator.RegisterEntityModifier("Fading Door", dooEet) end)  -- No overwrite.
  527.  
  528. if !FadingDoor then
  529.     local function legacy(pl, Ent, data)
  530.         return dooEet(pl, Ent, {
  531.             key                 = data.Key,
  532.             toggle              = data.Toggle,
  533.             reversed            = data.Inverse,
  534.             CanDisableMotion    = data.CanDisableMotion,
  535.             DoorMaterial        = data.DoorMaterial,
  536.             DoorOpenSound       = data.DoorOpenSound,
  537.             DoorLoopSound       = data.DoorLoopSound,
  538.             DoorCloseSound      = data.DoorCloseSound
  539.         })
  540.     end
  541.     duplicator.RegisterEntityModifier("FadingDoor", legacy)
  542.     hook.Add("Initialize", "FadingDoor2", function() duplicator.RegisterEntityModifier("FadingDoor", legacy) end)   -- No overwrite.
  543. end
  544.  
  545. function TOOL:LeftClick(tr)
  546.     if !tr.Entity or !tr.Entity:IsValid() then return false end
  547.     if tr.Entity:IsPlayer() or tr.HitWorld then return false end
  548.     if CLIENT then return true end
  549.    
  550.     local Ent = tr.Entity
  551.     local pl = self:GetOwner()
  552.    
  553.     if !IsValid(pl) then return false end
  554.    
  555.     local phys = Ent:GetPhysicsObject()
  556.     local CanDisableMotion = false
  557.    
  558.     if phys:IsValid() then
  559.         local MotionEnabled = phys:IsMotionEnabled()
  560.         phys:EnableMotion(!MotionEnabled)
  561.         CanDisableMotion = MotionEnabled != phys:IsMotionEnabled()
  562.         phys:EnableMotion(MotionEnabled)
  563.     end
  564.    
  565.     if self.AimEnt then
  566.         self.AimEnt[pl] = nil
  567.         net.Start("DrawFadeDoor")
  568.         net.WriteString("0")
  569.         net.Send(pl)
  570.     end
  571.    
  572.     dooEet(pl, Ent, {
  573.         key                 = self:GetClientNumber("key"),
  574.         toggle              = self:GetClientNumber("swap") == 1,
  575.         reversed            = self:GetClientNumber("reversed") == 1,
  576.         CanDisableMotion    = CanDisableMotion,
  577.         DoorMaterial        = self:GetClientInfo("mat"),
  578.         DoorOpenSound       = self:GetClientNumber("opensound"),
  579.         DoorLoopSound       = self:GetClientNumber("loopsound"),
  580.         DoorCloseSound      = self:GetClientNumber("closesound")
  581.     })
  582.    
  583.     if !IsValid(Ent.FadingDoorDummy) then
  584.         local Dummy = ents.Create("info_null")
  585.         Dummy.Owner = pl
  586.         Dummy.Door = Ent
  587.         undo.Create("Undo fading door")
  588.         undo.AddEntity(Dummy)
  589.         Ent.FadingDoorDummy = Dummy
  590.         local UndoT = {Ent,self:GetOwner(),self}
  591.         undo.AddFunction(function(Undo, UndoT)
  592.             local Ent = UndoT[1]
  593.             local pl = UndoT[2]
  594.             local Tool = UndoT[3]
  595.             if IsValid(Ent) then onRemove(Ent) end
  596.             if IsValid(pl) then
  597.                 if Tool and Tool.AimEnt then Tool.AimEnt[pl] = nil end
  598.                 net.Start("DrawFadeDoor")
  599.                 net.WriteString("0")
  600.                 net.Send(pl)
  601.             end
  602.         end, UndoT)
  603.         undo.SetPlayer(pl)
  604.         undo.SetCustomUndoText("Undone Fading Door")
  605.         undo.Finish()
  606.        
  607.         Ent:CallOnRemove("UndoFadingDoor"..Ent:EntIndex(),function(Ent)
  608.             if Ent.FadingDoorDummy and Ent.FadingDoorDummy:IsValid() then
  609.                 if IsValid(Ent.FadingDoorDummy.Owner) then
  610.                     local PlayerID = Ent.FadingDoorDummy.Owner:UniqueID()
  611.                     local PlayerUndo = undo:GetTable()[PlayerID]
  612.                     if PlayerUndo then
  613.                         for k,v in pairs(PlayerUndo) do
  614.                             if PlayerUndo[k] and PlayerUndo[k].Name and PlayerUndo[k].Name == "Undo fading door" and PlayerUndo[k].Entities and IsValid(PlayerUndo[k].Entities[1]) and PlayerUndo[k].Entities[1]:GetTable().Door == Ent then
  615.                                 undo:GetTable()[PlayerID][k] = nil
  616.                                 break
  617.                             end
  618.                         end
  619.                     end
  620.                 end
  621.                 Ent.FadingDoorDummy:Remove()
  622.             end
  623.         end,Ent)
  624.     end
  625.    
  626.     return true
  627. end
  628.  
  629. function TOOL:RightClick(tr)
  630.     if !tr.Entity or !tr.Entity:IsValid() then return false end
  631.     if tr.Entity:IsPlayer() or tr.HitWorld then return false end
  632.     if CLIENT then return true end
  633.     local Ent = tr.Entity
  634.     if Ent.isFadingDoor then
  635.         local pl = self:GetOwner()
  636.         if !IsValid(pl) then return false end
  637.         if Ent.fadeKey != nil then pl:ConCommand("fading_door_key "..tostring(Ent.fadeKey)) end
  638.         if Ent.fadeToggle != nil then if Ent.fadeToggle then pl:ConCommand("fading_door_swap 1") else pl:ConCommand("fading_door_swap 0") end end
  639.         if Ent.fadeReversed != nil then if Ent.fadeReversed then pl:ConCommand("fading_door_reversed 1") else pl:ConCommand("fading_door_reversed 0") end end
  640.         if Ent.fadeDoorMaterial != nil then pl:ConCommand("fading_door_mat "..Ent.fadeDoorMaterial) end
  641.         if Ent.fadeDoorOpenSound != nil then pl:ConCommand("fading_door_opensound "..tostring(Ent.fadeDoorOpenSound)) end
  642.         if Ent.fadeDoorLoopSound != nil then pl:ConCommand("fading_door_loopsound "..tostring(Ent.fadeDoorLoopSound)) end
  643.         if Ent.fadeDoorCloseSound != nil then pl:ConCommand("fading_door_closesound "..tostring(Ent.fadeDoorCloseSound)) end
  644.         return true
  645.     end
  646. end
  647.  
  648. function TOOL:Reload(tr)
  649.     if !tr.Entity or !tr.Entity:IsValid() then return false end
  650.     if tr.Entity:IsPlayer() or tr.HitWorld then return false end
  651.     if CLIENT then return true end
  652.     local Ent = tr.Entity
  653.    
  654.     if Ent.isFadingDoor then
  655.         if IsValid(Ent.FadingDoorDummy) then
  656.             if IsValid(Ent.FadingDoorDummy.Owner) then
  657.                 local PlayerID = Ent.FadingDoorDummy.Owner:UniqueID()
  658.                 local PlayerUndo = undo:GetTable()[PlayerID]
  659.                 if PlayerUndo then
  660.                     for k,v in pairs(PlayerUndo) do
  661.                         if PlayerUndo[k] and PlayerUndo[k].Name and PlayerUndo[k].Name == "Undo fading door" and PlayerUndo[k].Entities and IsValid(PlayerUndo[k].Entities[1]) and PlayerUndo[k].Entities[1]:GetTable().Door == Ent then
  662.                             undo:GetTable()[PlayerID][k] = nil
  663.                             break
  664.                         end
  665.                     end
  666.                 end
  667.             end
  668.             Ent.FadingDoorDummy:Remove()
  669.         end
  670.         onRemove(Ent)
  671.         net.Start("DrawFadeDoor")
  672.         net.WriteString(tostring(Ent:EntIndex()).."_1")
  673.         net.Send(self:GetOwner())
  674.         return true
  675.     end
  676. end
  677.  
  678. function TOOL:Holster()
  679.     if CLIENT then return end
  680.     local pl = self:GetOwner()
  681.     if !IsValid(pl) then return false end
  682.     if self.AimEnt and self.AimEnt[pl] != nil then
  683.         self.AimEnt[pl] = nil
  684.         net.Start("DrawFadeDoor")
  685.         net.WriteString("0")
  686.         net.Send(pl)
  687.     end
  688. end
  689.  
  690. function TOOL:Think()
  691.     if CLIENT then return end
  692.     if self.Hold then return end
  693.     local pl = self:GetOwner()
  694.     local trace = pl:GetEyeTrace()
  695.    
  696.     if trace.Hit and trace.Entity and trace.Entity:IsValid() and !trace.Entity:IsPlayer() then
  697.         if !self.AimEnt then self.AimEnt = {} end
  698.         if !self.OldKey then self.OldKey = {} end
  699.         if !self.OldToggle then self.OldToggle = {} end
  700.         if !self.OldReversed then self.OldReversed = {} end
  701.        
  702.         if !IsValid(pl) then return false end
  703.        
  704.         if trace.Entity != self.AimEnt[pl] or self:GetClientNumber("key") != self.OldKey[pl] or self:GetClientNumber("swap") != self.OldToggle[pl] or self:GetClientNumber("reversed") != self.OldReversed[pl] then
  705.             self.AimEnt[pl] = trace.Entity
  706.             local Key = self:GetClientNumber("key")
  707.             self.OldKey[pl] = Key
  708.             local Toggle = self:GetClientNumber("swap")
  709.             self.OldToggle[pl] = Toggle
  710.             local Reversed = self:GetClientNumber("reversed")
  711.             self.OldReversed[pl] = Reversed
  712.             if trace.Entity.isFadingDoor then
  713.                 Toggle = Toggle == 1
  714.                 Reversed = Reversed == 1
  715.                 if trace.Entity.fadeKey == Key and trace.Entity.fadeReversed == Reversed and trace.Entity.fadeToggle == Toggle then
  716.                     net.Start("DrawFadeDoor")
  717.                     net.WriteString(tostring(trace.Entity:EntIndex()).."_2")
  718.                     net.Send(pl)
  719.                 else
  720.                     net.Start("DrawFadeDoor")
  721.                     net.WriteString(tostring(trace.Entity:EntIndex()).."_3")
  722.                     net.Send(pl)
  723.                 end
  724.             else
  725.                 net.Start("DrawFadeDoor")
  726.                 net.WriteString(tostring(trace.Entity:EntIndex()).."_1")
  727.                 net.Send(pl)
  728.             end
  729.         end
  730.     elseif self.AimEnt and self.AimEnt[pl] != nil then
  731.         self.AimEnt[pl] = nil
  732.         net.Start("DrawFadeDoor")
  733.         net.WriteString("0")
  734.         net.Send(pl)
  735.     end
  736. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement