I have a LocalScript inside the player(s), which records if a player presses, and releases a certain key, which in this case, is Z. Pressing the key fires the GomuPistolEvent and KeyHeld = true, releasing the key fires the GomuPistolEvent and KeyHeld = false. My problem is that the script I have in ServerScriptService that is supposed to check for the event runs the remote the first time, during the "if KeyHeld then", but not the second time, during the "elseif not KeyHeld then". Could anyone explain what am I doing wrong?
Thanks!
LocalScript:
--//Services
local UserInputService = game:GetService('UserInputService')
local ReplicatedStorage = game:GetService('ReplicatedStorage')
local ServerStorage = game:GetService('ServerStorage')
local ServerScriptService = game:GetService('ServerScriptService')
local Players = game:GetService('Players')
local GomuRemotes = ReplicatedStorage.Remotes.DevilFruits:WaitForChild('GomuGomu')
--//Variables
local GomuPistolEvent = GomuRemotes.GomuPistol:WaitForChild('GomuPistolEvent')
local Player = game.Players.LocalPlayer
local KeyHeld = true
local Debounce = false
--//Coding
function onKeyPress(input, gameEvent)
if not Debounce and not gameEvent then
Debounce = true
if input.KeyCode == Enum.KeyCode.Z then
KeyHeld = true
GomuPistolEvent:FireServer(Player, KeyHeld)
print('Z')
end
if input.KeyCode == Enum.KeyCode.X then
end
if input.KeyCode == Enum.KeyCode.C then
end
if input.KeyCode == Enum.KeyCode.V then
end
if input.KeyCode == Enum.KeyCode.B then
end
Debounce = false
end
end
function onKeyRelease(input, gameEvent)
if input.KeyCode == Enum.KeyCode.Z then
KeyHeld = false
GomuPistolEvent:FireServer(Player, KeyHeld)
print('ZRelease')
end
if input.KeyCode == Enum.KeyCode.X then
end
if input.KeyCode == Enum.KeyCode.C then
end
if input.KeyCode == Enum.KeyCode.V then
end
if input.KeyCode == Enum.KeyCode.B then
end
end
UserInputService.InputBegan:Connect(onKeyPress)
UserInputService.InputEnded:Connect(onKeyRelease)
ServerScript:
--//Services
local UserInputService = game:GetService('UserInputService')
local ReplicatedStorage = game:GetService('ReplicatedStorage')
local ServerStorage = game:GetService('ServerStorage')
local ServerScriptService = game:GetService('ServerScriptService')
local Players = game:GetService('Players')
local GomuRemotes = ReplicatedStorage.Remotes.DevilFruits:WaitForChild('GomuGomu')
--//Variables
local GomuPistolEvent = GomuRemotes.GomuPistol:WaitForChild('GomuPistolEvent')
local DamageModule = require(ServerStorage.Server.DamageService)
--//Animations
local GomuPistolAnim = Instance.new('Animation')
GomuPistolAnim.AnimationId = 'rbxassetid://2188557970'
GomuPistolAnimTrack = nil
--//Coding
GomuPistolEvent.OnServerEvent:Connect(function(Player, KeyHeld)
local Character = game.Workspace:WaitForChild(Player.Name)
local Humanoid = Character:FindFirstChildOfClass('Humanoid')
local RightArm = Character:WaitForChild('RightLowerArm')
local RightHand = Character:WaitForChild('RightHand')
local LeftArm = Character:WaitForChild('LeftLowerArm')
local LeftHand = Character:WaitForChild('LeftHand')
local Mouse = Player:GetMouse()
local MousePosition = Mouse.Hit.p
local Damaging = false
local Attacking = false
local Damage = nil
local Cooldown = nil
local Range = nil
local BodyGyro = nil
local BodyPosition = nil
local ArmStretch = nil
local Weld = nil
if KeyHeld then
GomuPistolAnimTrack = Humanoid:LoadAnimation(GomuPistolAnim)
GomuPistolAnimTrack:Play()
GomuPistolAnimTrack.KeyframeReached:Connect(function(Keyframe)
if KeyHeld and Keyframe == 'Charge' then
GomuPistolAnimTrack:AdjustSpeed(0)
end
end)
print('pistolcharge')
Attacking = true
BodyGyro = Instance.new('BodyGyro', Character.LowerTorso)
BodyGyro.Name = 'SkillGyro'
BodyGyro.D = 100
BodyGyro.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
BodyPosition = Instance.new('BodyPosition', Character.LowerTorso)
BodyPosition.Name = 'SkillPosition'
BodyPosition.Position = Character.HumanoidRootPart.Position
BodyPosition.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
while KeyHeld do
MousePosition = Mouse.Hit.p
BodyGyro.CFrame = CFrame.new(Character.LowerTorso.Position, MousePosition) * CFrame.Angles(0, math.rad(-90) ,0)
wait()
end
elseif not KeyHeld then
GomuPistolAnimTrack:AdjustSpeed(1)
print('pistol')
BodyGyro.CFrame = CFrame.new(Character.LowerTorso.Position, MousePosition)
GomuPistolAnimTrack.KeyframeReached:Connect(function(Keyframe)
if Keyframe == 'Pistol' then
Damaging = true
ArmStretch = Instance.new('Part', Character)
ArmStretch.Name = 'ArmStretchRight'
ArmStretch.Color = RightArm.Color
ArmStretch.Size = RightArm.Size
ArmStretch.CanCollide = false
RightArm.Transparency = 1
RightHand.Transparency = 1
Weld = Instance.new('Weld', ArmStretch)
Weld.Part0 = ArmStretch
Weld.Part1 = RightArm
Weld.C0 = CFrame.new(0, 0, 0) * CFrame.new(0, 0, 0)
end
if Keyframe == 'End' then
Character.LowerTorso:WaitForChild('SkillGyro'):Destroy()
Character.LowerTorso:WaitForChild('SkillPosition'):Destroy()
Character:WaitForChild('ArmStretchRight'):Destroy()
if RightArm.Transparency == 1 then RightArm.Transparency = 0 end
if RightHand.Transparency == 1 then RightHand.Transparency = 0 end
BodyGyro = nil
BodyPosition = nil
ArmStretch = nil
Weld = nil
Attacking = false
end
end)
end
RightArm.Touched:Connect(function(hitPart)
if Attacking and hitPart.Parent:FindFirstChild('Humanoid') and Damaging then
Damaging = false
local HumanoidToDamage = hitPart.Parent:FindFirstChild('Humanoid')
DamageModule.Combat(HumanoidToDamage, Damage)
end
end)
LeftArm.Touched:Connect(function(hitPart)
if Attacking and hitPart.Parent:FindFirstChild('Humanoid') and Damaging then
Damaging = false
local HumanoidToDamage = hitPart.Parent:FindFirstChild('Humanoid')
DamageModule.Combat(HumanoidToDamage, Damage)
end
end)
end)

2 comments
Correct!!!
This did help, thank you so much. I just had to add "PlayerWhoSent" in the function arguments on the serverscript since the variables call for the name of the player, and their mouse. I tested it, and sure enough it worked.