UserInputService reacts only to all letters that are in the American keyboard layout, but, for example, in Russian it does not work, why do I press the place where there is an American letter “C” and the Russian one is also in this place - but this is not implemented - why?
Code:
local function onInputBegan(input, gameProcessed)
if input.KeyCode == Enum.KeyCode.LeftShift then
shiftPressed = true
elseif input.KeyCode == Enum.KeyCode.C then
controlPressed = true
if shiftPressed and not gameProcessed and run and isCrouching == false then
if Humanoid.FloorMaterial == Enum.Material.Air then return end
local camera = workspace.CurrentCamera
local slideSpeed = 45 -- Начальная скорость слайда
local deceleration = 2 -- Скорость замедления
local lerpFactor = 0.05 -- Фактор интерполяции для плавного изменения направления
kd = true
Humanoid.HipHeight = 0.1
run = false
sliding = true
Humanoid.Parent.Stats.Sliding.Value = true
slided:Play(0.2)
local ee = sound2:Clone()
local sus = e:Clone()
plr.Character.Stats.Inventory.Value = false
sus.Parent = character["Left Leg"]
sus.Smoke.Rate = 30
ee.Parent = character.Torso
Stamina.Value -= 25
ee:Play()
-- Устанавливаем BodyVelocity для начального толчка
local boost = Instance.new("BodyVelocity")
boost.MaxForce = Vector3.new(math.huge, 0, math.huge) * 45
boost.Velocity = character.HumanoidRootPart.CFrame.LookVector * slideSpeed
boost.Parent = character.HumanoidRootPart
wait(0.3)
-- Начинаем цикл, чтобы проверять состояние персонажа во время слайда
while Humanoid.Parent.Stats.Sliding.Value == true do
-- Обновляем направление слайда в зависимости от направления камеры
local cameraDirection = camera.CFrame.LookVector
boost.Velocity = boost.Velocity:Lerp(character.HumanoidRootPart.CFrame.LookVector * slideSpeed, lerpFactor) -- Плавное изменение направления
-- Проверяем наличие преграды перед персонажем
local rayOrigin = character.HumanoidRootPart.Position
local rayDirection = character.HumanoidRootPart.CFrame.LookVector * 10 -- Длина луча
local ray = Ray.new(rayOrigin, rayDirection)
local hitPart, hitPosition = workspace:FindPartOnRay(ray, character)
if hitPart then
-- Если есть преграда, останавливаем слайд
Humanoid.Parent.Stats.Sliding.Value = false
break
end
if boost.Velocity.Magnitude > 5 then
-- Проверяем, находится ли персонаж на земле
local result = workspace:Raycast(character.HumanoidRootPart.Position, Vector3.new(0, -4.5, 0), params)
if result then
local slopeAngle = math.deg(math.acos(result.Normal:Dot(Vector3.new(0, 1, 0)))) -- угол наклона
if slopeAngle < 10 then -- если угол наклона меньше 45 градусов
-- Уменьшаем скорость
slideSpeed = slideSpeed - deceleration
if slideSpeed < 0 then
slideSpeed = 0
end
boost.Velocity = boost.Velocity:Lerp(character.HumanoidRootPart.CFrame.LookVector * slideSpeed, lerpFactor) -- Плавное изменение направления
else
slideSpeed = slideSpeed + 1
boost.Velocity = boost.Velocity:Lerp(character.HumanoidRootPart.CFrame.LookVector * slideSpeed, lerpFactor)
end
else
Humanoid.Parent.Stats.Sliding.Value = false
break
end
-- Устанавливаем WalkSpeed и JumpPower в 0, чтобы предотвратить движение
Humanoid.WalkSpeed = 0
Humanoid.JumpPower = 0
wait(0.01) -- Небольшая пауза
else
-- Если скорость слишком низкая, останавливаем слайд
Humanoid.Parent.Stats.Sliding.Value = false
break
end
end
-- Удаляем BodyVelocity после завершения слайда
boost:Destroy()
Humanoid.HipHeight = 0
getuped:Play()
slided:Stop(0.2)
Humanoid.WalkSpeed = 13
Humanoid.JumpPower = 45
sus.Smoke.Rate = 0
plr.Character.Stats.Inventory.Value = true
if ee then
ee:Destroy()
end
sus:Destroy()
Humanoid.Parent.Stats.Sliding.Value = false
sliding = false
wait(4)
kd = false
end
end
end
game.UserInputService.InputBegan:Connect(onInputBegan)
(sorry for my bad english heh)