Advertisement
Firebirdzz

Example 3.1

Dec 19th, 2024
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.25 KB | None | 0 0
  1. -- Controllable Water beam - Ground lock (clientSided)
  2.  
  3. local tool = script.Parent.Parent
  4. local player = game.Players.LocalPlayer
  5. local char = player.Character
  6. local hmrp = char.HumanoidRootPart
  7. local character = player.Character
  8. local userInputService = game:GetService("UserInputService")
  9. local isPressing = false
  10. local equipped = false
  11. local effects = tool.Effects.C
  12. local remoteEvents = effects.RemoteEvents
  13.  
  14. hasToBeForced = false
  15. Mouse = player:GetMouse()
  16.  
  17. renderStep = nil
  18.  
  19. local MaxPlaceDistance = 250
  20.  
  21. raycastParams = nil
  22. counter = 0
  23.  
  24. -- // Cooldown Debug for smoothening the beam --
  25. firedOnce = false
  26. firedCooldown = 2
  27. firedCooldownOver = false
  28.  
  29. globalVelocity = nil
  30. globalLocalCFrame = nil
  31.  
  32. --[[ IMPORTANT DEBUG NOTE
  33.    Since for some reason the raycastparams do not work, until i get it working, i empty the servereffectstorage on the client.
  34.    - Solved]]
  35.  
  36. tool.Equipped:Connect(function()
  37.     equipped = true
  38. end)
  39.  
  40. tool.Unequipped:Connect(function()
  41.     equipped = false
  42.     if isPressing == true then
  43.         isPressing = false
  44.     end
  45. end)
  46.  
  47. local shakeDuration = 0
  48. local shakeMagnitude = 0
  49. local shakeTime = 0
  50. local Camera = workspace.CurrentCamera
  51.  
  52. local function Trigger(duration, magnitude)
  53.     shakeDuration = duration
  54.     shakeMagnitude = magnitude
  55.     shakeTime = 0
  56. end
  57.  
  58. local function LoadUpdate(dt)
  59.     if shakeDuration > 0 then
  60.         shakeTime = shakeTime + dt
  61.         if shakeTime >= shakeDuration then
  62.             shakeDuration = 0
  63.             shakeMagnitude = 0
  64.         else
  65.             local dx = math.random(-shakeMagnitude, shakeMagnitude) * .1
  66.             local dy = math.random(-shakeMagnitude, shakeMagnitude) * .1
  67.             local dz = math.random(-shakeMagnitude, shakeMagnitude) * .1
  68.             Camera.CFrame = Camera.CFrame * CFrame.new(dx,dy,dz)
  69.         end
  70.     end
  71. end
  72.  
  73. game:GetService("RunService").RenderStepped:Connect(LoadUpdate)
  74.  
  75. userInputService.InputBegan:Connect(function(input, gameprocess)
  76.     if gameprocess then return end
  77.     if input.KeyCode == Enum.KeyCode.C and equipped == true then
  78.        
  79.         print(player.Name.." has pressed Z. It's being held down. Charging attack.")
  80.         isPressingZ = true
  81.        
  82.         local localCFrame = character.HumanoidRootPart.CFrame
  83.        
  84.         while isPressingZ == true do
  85.             counter += 1
  86.             Trigger(.67, 1)
  87.             print("Attack is being charged. Current level: "..counter)
  88.             if counter < 6 then
  89.             remoteEvents.ChargeUp:FireServer(counter, localCFrame)
  90.             end
  91.             wait(script.ChargeTime.Value)
  92.             if counter == 5 then
  93.                 print("Cannot Charge past charge 5. Any additional charge will be useless.")
  94.             end
  95.            
  96.             if counter == 3 then
  97.             end
  98.            
  99.             if counter == 4 then
  100.             end
  101.            
  102.                 if counter == 12 then
  103.                 isPressingZ = false
  104.                     print("Creating forced attack.")
  105.                    
  106.                 -- Creating forced attack after 7 seconds --
  107.  
  108.                     Trigger(.67, 1)
  109.                     print("Attack is being forced. Current level must be 5. It is: "..counter)
  110.                                
  111.                     remoteEvents.StartAttack:FireServer(counter, localCFrame)
  112.                    
  113.                     local canFireTheBeam = true
  114.                    
  115.                     raycastParams = RaycastParams.new()
  116.                     raycastParams.FilterDescendantsInstances = {player.Character:GetChildren(),workspace:WaitForChild("ServerEffectStorage"):GetDescendants()}
  117.                     warn(raycastParams.FilterDescendantsInstances)
  118.                     raycastParams.FilterType = Enum.RaycastFilterType.Exclude
  119.  
  120.                     for _, obj in pairs(raycastParams.FilterDescendantsInstances) do
  121.                         warn(obj)
  122.                     end
  123.  
  124.                     Trigger(tool.Configuration.C:WaitForChild("Charge 5 ShakeDuration").Value, 9)
  125.  
  126.                     task.delay(tool.Configuration.C:WaitForChild("Charge 5 ShakeDuration").Value, function()
  127.                         canFireTheBeam = false
  128.                         effects.RemoteEvents.EndBeam:FireServer()
  129.                     end)
  130.  
  131.                     renderStep = game:GetService("RunService").RenderStepped:Connect(function()
  132.                         if canFireTheBeam == true then
  133.  
  134.                             local mouseHitPosition = Mouse.Hit.Position
  135.                             local direction = (mouseHitPosition - player.Character.HumanoidRootPart.Position).Unit
  136.                             local distance = (mouseHitPosition - player.Character.HumanoidRootPart.Position).Magnitude
  137.  
  138.                             if distance > MaxPlaceDistance then
  139.                                 distance = MaxPlaceDistance
  140.                             end
  141.  
  142.                             local targetPosition = player.Character.HumanoidRootPart.Position + direction * distance
  143.  
  144.                             local rayOrigin = targetPosition
  145.                             local rayDirection = Vector3.new(0,-1000,0)
  146.  
  147.                             local raycastResult = workspace:Raycast(rayOrigin, rayDirection, raycastParams)
  148.  
  149.                             if raycastResult then
  150.                                 targetPosition = raycastResult.Position
  151.                             end
  152.  
  153.                             local TargetCFrame = CFrame.new(targetPosition) * CFrame.new(0,tool.Configuration.C:WaitForChild("Charge 5 Y Offset"),0)
  154.                             localCFrame = character.HumanoidRootPart.CFrame
  155.                             effects.RemoteEvents.StartBeam:FireServer(TargetCFrame, localCFrame)
  156.                         else
  157.                             Trigger(.1, 10)
  158.                             --  task.delay(.1, function()
  159.                             renderStep:Disconnect()
  160.                             print("Renderstep disconnected.")
  161.                             renderStep = nil --end)
  162.                             raycastParams = nil
  163.  
  164.                                 end
  165.                             end)
  166.                         counter = 0
  167.                         isPressing = false
  168.                         hasToBeForced = false
  169.                    
  170.             end
  171.         end
  172.     end
  173. end)
  174.  
  175.  
  176.  
  177. userInputService.InputEnded:Connect(function(output, gameprocess)
  178.     if gameprocess then return end
  179.     if output.KeyCode == Enum.KeyCode.C and equipped == true then
  180.        
  181.         local canFireTheBeam = true
  182.        
  183.         isPressingZ = false
  184.         print(player.Name.." has stopped pressing Z.")
  185.         print("Current counter level: "..counter)
  186.        
  187.         local localCFrame = character.HumanoidRootPart.CFrame
  188.        
  189.         if counter ~= 4 and counter ~=5 and counter ~=6 and counter ~=7 and counter ~=8 and counter ~=9 and counter ~=10 and counter ~=11 and counter ~=12 then
  190.         remoteEvents.StartAttack:FireServer(counter, localCFrame)
  191.         end
  192.        
  193.         if counter == 4 then
  194.            
  195.             raycastParams = RaycastParams.new()
  196.             raycastParams.FilterDescendantsInstances = {player.Character:GetChildren(),workspace:WaitForChild("ServerEffectStorage"):GetDescendants()}
  197.             warn(raycastParams.FilterDescendantsInstances)
  198.             raycastParams.FilterType = Enum.RaycastFilterType.Exclude
  199.  
  200.             for _, obj in pairs(raycastParams.FilterDescendantsInstances) do
  201.                 warn(obj)
  202.             end
  203.            
  204.             -- DEBUG --
  205.             local desc = workspace.ServerEffectStorage:GetDescendants()
  206.             for _, child in pairs(desc) do
  207.                 if child:IsA("Model") then
  208.                     child:Destroy()
  209.                 end
  210.             end
  211.             -- DEBUG --
  212.            
  213.             Trigger(tool.Configuration.C:WaitForChild("Charge 4 ShakeDuration").Value, 5)
  214.            
  215.             task.delay(tool.Configuration.C:WaitForChild("Charge 4 Duration").Value, function()
  216.                 canFireTheBeam = false
  217.                 effects.RemoteEvents.EndMiniBeam:FireServer()
  218.             end)
  219.            
  220.             renderStep = game:GetService("RunService").RenderStepped:Connect(function()
  221.                 if canFireTheBeam == true then
  222.                    
  223.                     local mouseHitPosition = Mouse.Hit.Position
  224.                     local direction = (mouseHitPosition - player.Character.HumanoidRootPart.Position).Unit
  225.                     local distance = (mouseHitPosition - player.Character.HumanoidRootPart.Position).Magnitude
  226.                    
  227.                     if distance > MaxPlaceDistance then
  228.                         distance = MaxPlaceDistance
  229.                     end
  230.                    
  231.                     local targetPosition = player.Character.HumanoidRootPart.Position + direction * distance
  232.                    
  233.                     local rayOrigin = targetPosition
  234.                     local rayDirection = Vector3.new(0,-1000,0)
  235.                    
  236.                     local raycastResult = workspace:Raycast(rayOrigin, rayDirection, raycastParams)
  237.                    
  238.                     if raycastResult then
  239.                         targetPosition = raycastResult.Position
  240.                     end
  241.                    
  242.                     local TargetCFrame = CFrame.new(targetPosition) * CFrame.new(0,tool.Configuration.C:WaitForChild("Charge 4 Y Offset"),0)
  243.                     localCFrame = character.HumanoidRootPart.CFrame
  244.                     effects.RemoteEvents.StartMiniBeam:FireServer(TargetCFrame, localCFrame)
  245.                     Trigger(.1, 10)
  246.                 else
  247.                     Trigger(.1, 10)
  248.                     renderStep:Disconnect()
  249.                     print("Renderstep disconnected.")
  250.                     renderStep = nil
  251.                     raycastParams = nil
  252.                 end
  253.             end)
  254.         end
  255.        
  256.         if counter == 5 or counter == 6 or counter == 7 or counter == 8 or counter == 9 or counter == 10 or counter == 11 then
  257.            
  258.             raycastParams = RaycastParams.new()
  259.             raycastParams.FilterDescendantsInstances = {player.Character:GetChildren(),workspace:WaitForChild("ServerEffectStorage"):GetDescendants()}
  260.             warn(raycastParams.FilterDescendantsInstances)
  261.             raycastParams.FilterType = Enum.RaycastFilterType.Exclude
  262.            
  263.             for _, obj in pairs(raycastParams.FilterDescendantsInstances) do
  264.                 warn(obj)
  265.             end    
  266.            
  267.             -- FoV --
  268.             local camera = workspace.CurrentCamera
  269.             local tweenService = game:GetService("TweenService")
  270.  
  271.             --camera.FieldOfView = 70
  272.  
  273.             local tweenInfo = TweenInfo.new(.25, Enum.EasingStyle.Sine, Enum.EasingDirection.Out, 0, false)
  274.             local tweenFov = tweenService:Create(camera, tweenInfo, { FieldOfView = 100 })
  275.  
  276.             tweenFov:Play()
  277.  
  278.             -- FoV II --
  279.  
  280.             tweenFov.Completed:Connect(function()
  281.                 wait(6.5)
  282.                
  283.                 local tweenInfo2 = TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.Out, 0, true)
  284.                 local tweenFov2 = tweenService:Create(camera, tweenInfo2, { FieldOfView = 140 })
  285.  
  286.                 tweenFov2:Play()
  287.                
  288.                 tweenFov2.Completed:Connect(function()
  289.                     wait()
  290.                     local tweenInfo3 = TweenInfo.new(.8, Enum.EasingStyle.Sine, Enum.EasingDirection.Out, 0, false)
  291.                     local tweenFov3 = tweenService:Create(camera, tweenInfo3, { FieldOfView = 70 })
  292.  
  293.                     tweenFov3:Play()
  294.                 end)
  295.             end)
  296.            
  297.             --
  298.            
  299.             Trigger(tool.Configuration.C:WaitForChild("Charge 5 ShakeDuration").Value, 9)
  300.            
  301.             task.delay(tool.Configuration.C:WaitForChild("Charge 5 Duration").Value, function()
  302.                 canFireTheBeam = false
  303.                 effects.RemoteEvents.EndBeam:FireServer()
  304.             end)
  305.            
  306.             renderStep = game:GetService("RunService").RenderStepped:Connect(function()
  307.                 if canFireTheBeam == true then
  308.                    
  309.                     local mouseHitPosition = Mouse.Hit.Position
  310.                     local direction = (mouseHitPosition - player.Character.HumanoidRootPart.Position).Unit
  311.                     local distance = (mouseHitPosition - player.Character.HumanoidRootPart.Position).Magnitude
  312.  
  313.                     if distance > MaxPlaceDistance then
  314.                         distance = MaxPlaceDistance
  315.                     end
  316.  
  317.                     local targetPosition = player.Character.HumanoidRootPart.Position + direction * distance
  318.  
  319.                     local rayOrigin = targetPosition
  320.                     local rayDirection = Vector3.new(0,-1000,0)
  321.  
  322.                     local raycastResult = workspace:Raycast(rayOrigin, rayDirection, raycastParams)
  323.  
  324.                     if raycastResult then
  325.                         targetPosition = raycastResult.Position
  326.                     end
  327.  
  328.                     local TargetCFrame = CFrame.new(targetPosition) * CFrame.new(0,tool.Configuration.C:WaitForChild("Charge 5 Y Offset"),0)
  329.                     localCFrame = globalLocalCFrame -- character.HumanoidRootPart.CFrame
  330.                    
  331.                     effects.RemoteEvents.StartBeam:FireServer(TargetCFrame, localCFrame)
  332.                    
  333.             --[[    if firedOnce == false then
  334.                         effects.RemoteEvents.StartBeam:FireServer(TargetCFrame, localCFrame)
  335.                         firedOnce = true
  336.                     elseif firedOnce == true then
  337.                         if firedCooldownOver == false then
  338.                         task.delay(2, function()
  339.                             firedCooldownOver = true
  340.                         end)
  341.                         elseif firedCooldownOver == true then
  342.                             effects.RemoteEvents.StartBeam:FireServer(TargetCFrame, localCFrame)
  343.                         end
  344.                     end]]
  345.                    
  346.                 else
  347.                     Trigger(.1, 10)
  348.                 --  task.delay(.1, function()
  349.                     renderStep:Disconnect()
  350.                     print("Renderstep disconnected.")
  351.                     renderStep = nil --end)
  352.                     raycastParams = nil
  353.                    
  354.                 end
  355.             end)
  356.         end
  357.        
  358.         counter = 0
  359.        
  360.     end
  361. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement