Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local UserInputService = game:GetService("UserInputService")
- local ReplicatedStorage = game:GetService("ReplicatedStorage")
- local Players = game:GetService("Players")
- local Debris = game:GetService("Debris")
- local Workspace = game:GetService("Workspace")
- local HitboxModule = require(ReplicatedStorage:WaitForChild("Modules"):WaitForChild("HitboxModule"))
- local Config = require(ReplicatedStorage:WaitForChild("Modules"):WaitForChild("Config"))
- local Remotes = ReplicatedStorage:WaitForChild("Remotes")
- local Player = Players.LocalPlayer
- local PlayerGui = Player.PlayerGui
- local MobileUI = PlayerGui:WaitForChild("MobileUI")
- local MainFrame_Mobile = MobileUI:WaitForChild("Main")
- local Attack_Mobile = MainFrame_Mobile:WaitForChild("Attack")
- local Block_Mobile = MainFrame_Mobile:WaitForChild("Block")
- local Temp = {}
- local Character: Model, Humanoid: Humanoid, Animator: Animator
- local AnimPrefix = "rbxassetid://"
- local HitAnimationId = 85710625600514
- local DownslamAnimationId = 132755135725741
- local UppercutAnimationId = 97693103786628
- local BlockingAnimTrack
- local Data = {
- Punch = {
- OnDebounce = false;
- DebounceTime = 0.5;
- MaxDebounceTime = 1.5;
- OnNum = 0;
- MaxNum = 4;
- HitPlayers = {};
- BlockingPlayers = {};
- ResetTime = 2;
- PunchThread = nil;
- LastPunchTime = 0;
- Uppercut = false;
- },
- }
- local function OnCharacterAdded(Char: Model)
- Character = Char :: Model
- Humanoid = Character:WaitForChild("Humanoid") :: Humanoid
- Animator = Humanoid:WaitForChild("Animator") :: Animator
- end
- OnCharacterAdded(Player.Character or Player.CharacterAdded:Wait())
- local function PlayAnim(Id: string)
- local AnimId = AnimPrefix..Id
- local Animation = Instance.new("Animation")
- Animation.AnimationId = AnimId
- local AnimTrack = Animator:LoadAnimation(Animation)
- AnimTrack:Play()
- end
- local function CheckMobile()
- if UserInputService.TouchEnabled then
- MobileUI.Enabled = true
- end
- end
- local function IsInAir()
- local S = Humanoid:GetState()
- return (S == Enum.HumanoidStateType.Freefall or
- S == Enum.HumanoidStateType.FallingDown or
- S == Enum.HumanoidStateType.Jumping)
- end
- local function GetState()
- if IsInAir() and Data.Punch.OnNum == Data.Punch.MaxNum then
- warn("Downslam")
- return "Slam"
- end
- return "Normal"
- end
- local function _Input(Plr: Player, Char: Model)
- if Humanoid and Humanoid.Health <= 0 then
- return
- end
- local SelectedChar, CharDataTable = Remotes.GetCharacterInfo:InvokeServer()
- if not (SelectedChar and CharDataTable) then return end
- if Data.Punch.OnDebounce then return end
- Data.Punch.OnDebounce = true
- if Data.Punch.OnNum + 1 > Data.Punch.MaxNum then
- Data.Punch.OnNum = 1
- else
- Data.Punch.OnNum += 1
- end
- local State = GetState()
- if Data.Punch.Uppercut then
- State = "Uppercut"
- end
- Data.Punch.LastPunchTime = tick()
- if State == "Slam" then
- PlayAnim(DownslamAnimationId)
- elseif State == "Uppercut" then
- PlayAnim(UppercutAnimationId)
- else
- local AnimId = CharDataTable.Animations.PunchAnimations[Data.Punch.OnNum]
- if AnimId then
- PlayAnim(AnimId)
- end
- end
- Remotes.Attack:FireServer(Data.Punch.OnNum, State)
- if Data.Punch.PunchThread then
- task.cancel(Data.Punch.PunchThread)
- end
- Data.Punch.PunchThread = task.delay(Data.Punch.ResetTime, function()
- Data.Punch.OnNum = 0
- Data.Punch.PunchThread = nil
- end)
- local WaitTime = (Data.Punch.OnNum == Data.Punch.MaxNum) and Data.Punch.MaxDebounceTime or Data.Punch.DebounceTime
- task.delay(WaitTime, function()
- Data.Punch.OnDebounce = false
- end)
- end
- CheckMobile()
- local function _Block(Plr: Player, Hum: Humanoid, IsBlocking: boolean)
- Remotes.Block:FireServer(IsBlocking)
- if IsBlocking then
- local SelectedCharacter = Player.SelectedCharacter.Value
- local Character = Player.Character
- if SelectedCharacter then
- local CharModule = require(ReplicatedStorage:WaitForChild("Modules"):WaitForChild("CharacterModule"):WaitForChild("Characters")[SelectedCharacter])
- if CharModule then
- local BlockingAnim = CharModule.Animations.Blocking
- if BlockingAnim then
- local AnimId = AnimPrefix .. BlockingAnim
- local Animation = Instance.new("Animation")
- Animation.AnimationId = AnimId
- BlockingAnimTrack = Animator:LoadAnimation(Animation)
- BlockingAnimTrack:Play()
- end
- end
- end
- else
- if BlockingAnimTrack then
- BlockingAnimTrack:Stop()
- end
- end
- end
- Attack_Mobile.MouseButton1Click:Connect(function()
- _Input(Player, Character)
- end)
- Block_Mobile.MouseButton1Down:Connect(function()
- _Block(Player, Humanoid, true)
- end)
- Block_Mobile.MouseButton1Up:Connect(function()
- _Block(Player, Humanoid, false)
- end)
- Block_Mobile.MouseLeave:Connect(function()
- _Block(Player, Humanoid, false)
- end)
- UserInputService.InputBegan:Connect(function(Input: InputObject, GameProcessedEvent: boolean)
- if GameProcessedEvent then return end
- if Input.UserInputType == Enum.UserInputType.MouseButton1 then
- _Input(Player, Character)
- end
- if Input.KeyCode == Enum.KeyCode.F then
- _Block(Player, Humanoid, true)
- end
- if Input.UserInputType == Enum.UserInputType.Touch then
- _Block(Player, Humanoid, false)
- end
- if Input.KeyCode == Enum.KeyCode.Space then
- local DT = tick() - Data.Punch.LastPunchTime
- if DT <= 0.5 and Data.Punch.OnNum == Data.Punch.MaxNum then
- warn("Uppercut")
- Data.Punch.Uppercut = true
- _Input(Player, Character)
- Data.Punch.Uppercut = false
- end
- end
- end)
- UserInputService.InputEnded:Connect(function(Input: InputObject, GameProcessedEvent: boolean)
- if GameProcessedEvent then return end
- if Input.KeyCode == Enum.KeyCode.F then
- _Block(Player, Humanoid, false)
- end
- end)
- Player.CharacterAdded:Connect(OnCharacterAdded)
Advertisement
Add Comment
Please, Sign In to add comment