Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- services
- local players = game:GetService('Players')
- local tweenService = game:GetService('TweenService')
- local replicatedStorage = game:GetService('ReplicatedStorage')
- local inputService = game:GetService('UserInputService')
- local runService = game:GetService('RunService')
- -- modules
- local functions = require(script:WaitForChild('Functions'))
- -- player
- local player = players.LocalPlayer
- -- remotes
- local doorEvent = replicatedStorage:WaitForChild('DoorEvent')
- -- objects
- local doors = workspace:WaitForChild('Doors')
- local doorModules = replicatedStorage:WaitForChild('DoorModules')
- -- variables
- local ACTIVATION_KEY = Enum.KeyCode.G
- local IMAGE_CLEARANCE = {
- [0] = nil,
- [1] = 4813020837,
- [2] = 4813021130,
- [3] = 4813021352,
- [4] = 4813021933,
- [5] = 4813022124,
- [6] = 4813022331,
- [7] = 4813023753,
- }
- local lastDoor = nil
- local doorData = {}
- -- events
- inputService.InputBegan:connect(function(input, processed)
- --if not processed then
- if (input.KeyCode == ACTIVATION_KEY) then
- local closest = functions.GetClosestDoor(player, doors)
- print(functions:GetClosestDoor(player, doors))
- local model = closest.doors
- local model2 = workspace.Doors.breach_door.Door1.Main.Animator.Tweens
- local opened = model2:FindFirstChild('DoorOpen')
- local module = require(doorModules[model.Name])
- if (closest.distance <= module.MAX_DISTANCE) and (tick() - doorData[model].lastActivation) >= module.DOOR_SPEED then
- doorData[model].opened = (not opened.Value)
- doorEvent:FireServer('ToggleDoor', model, doorData[model].opened)
- doorData[model].lastActivation = tick()
- end
- end
- --end
- end)
- runService.Heartbeat:connect(function()
- local closest = functions.GetClosestDoor(player, doors)
- print(closest)
- local model = closest.door
- local module = require(doorModules[model.Name])
- if closest then
- local doorClearance = (model:FindFirstChild('clr', true) and model:FindFirstChild('clr', true).Value) or -1
- local mainPart = model:FindFirstChild('MainPart', true) or closest.trigger
- local oldUI = (lastDoor and lastDoor:FindFirstChild('DoorUI', true)) or closest.trigger:FindFirstChild('DoorUI')
- doorClearance = math.min(doorClearance, #IMAGE_CLEARANCE)
- if (model ~= lastDoor) and oldUI then
- oldUI:Destroy()
- end
- if (closest.distance < module.MAX_DISTANCE) then
- if not oldUI then
- local newUI = script.DoorUI:Clone()
- local frame = newUI.Frame
- local uiScale = frame.UIScale
- local header = frame.Header
- local clearance = frame.Clearance
- tweenService:Create(uiScale, TweenInfo.new(.15), {Scale = 1}):Play()
- if (doorClearance > 0) then
- header.Size = UDim2.new(.7, 0, .435, 0)
- clearance.Visible = true
- clearance.Image = ('rbxassetid://' .. IMAGE_CLEARANCE[doorClearance])
- else
- clearance.Visible = false
- header.Size = UDim2.new(.95, 0, .435, 0)
- end
- newUI.Parent = closest.trigger
- end
- elseif oldUI then
- oldUI:Destroy()
- end
- end
- lastDoor = model or nil
- end)
- doorEvent.OnClientEvent:connect(function(arg, ...)
- local args = {...}
- if (arg == 'Tween') then
- local model = args[1]
- local part = args[2]
- local cframe = args[3]
- local bool = args[4]
- local module = require(doorModules:FindFirstChild(model.Name))
- local info = module.TWEEN_INFO
- if (model:IsDescendantOf(doors)) then
- tweenService:Create(part, TweenInfo.new(module.DOOR_SPEED, info.EasingStyle, info.EasingDirection), {
- CFrame = cframe
- }):Play()
- end
- end
- end)
- --for _, door in next, doors:GetChildren() do
- -- local value = door:WaitForChild('DoorOpened').Value
- -- doorData[door] = {
- -- opened = value,
- -- lastActivation = tick()
- -- }
- --end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement