The script below is in a StarterCharacterScripts and the other script is in ServerScriptService
--// Services \\-- local ReplicatedStorage = game:GetService("ReplicatedStorage") local UserInputService = game:GetService("UserInputService") --// Varaibles \\-- local plr = game.Players.LocalPlayer local Char = plr.Character or plr.CharacterAdded:Wait() local Remote = ReplicatedStorage.FireBallEvent local Mouse = plr:GetMouse() --// Settings \\-- local Debounce = true local Key = 'Q' UserInputService.InputBegan:Connect(function(Input, IsTyping) if IsTyping then return end local KeyPressed = Input.KeyCode if KeyPressed == Enum.KeyCode[Key] and Debounce and Char then Debounce = false Remote:FireServer(Mouse.Hit) wait(1) Debounce = true end end)
I understand that this Debounce thing will make a little delay But I don't know how IsTyping prevent players from activating Q while they are chatting.
Other Script:
--// Services \\-- local ReplicatedStorage = game:GetService("ReplicatedStorage") --// Variables \\-- local Remote = ReplicatedStorage.FireBallEvent --// Settings \\-- local Damage = 10 Remote.OnServerEvent:Connect(function(plr, Mouse) local Char = plr.Character or plr.CharacterAdded:Wait() local Part = Instance.new('Part') Part.Shape = Enum.PartType.Ball Part.Anchored = false Part.CanCollide = false Part.Transparency = 0.5 Part.Color = Color3.fromRGB(255,0,0) Part.Material = Enum.Material.Neon Part.Size = Vector3.new(3,3,3) Part.Name = 'FireBall' Part.CFrame = Char.HumanoidRootPart.CFrame Part.Parent = workspace local BodyVelocity = Instance.new("BodyVelocity") BodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge) BodyVelocity.Velocity = Mouse.lookVector*30 BodyVelocity.Parent = Part local Debounce = true Part.Touched:Connect(function(h) if h.Parent:FindFirstChild('Humanoid') and h.Parent.Name ~= plr.Name and Debounce then Debounce = false local Enemy = h.Parent.Humanoid Enemy:TakeDamage(Damage) Part:Destroy() wait(1) Debounce = true end end) end)