Как мне сделать скрипт двойного прыжка, который делает силу второго прыжка значение значения статистики лидера игроков - PullRequest
0 голосов
/ 13 июня 2019

Я сделал этот код, думая, что он позволит игроку прыгать дважды, а второй прыжок будет силой его характеристики лидера, но вместо этого он даже не позволяет игроку прыгать во второй раз.

local UIS = game:GetService("UserInputService")
local player = game.Players.LocalPlayer
local character
local humanoid

local canDoubleJump = false
local hasDoubleJumped = false
local oldPower
local time_delay = 0.2
local jump_multiplier = player.leaderstats.JumpBoost.Value

function onJumpRequest()
    if not character or not humanoid or not 
character:IsDescendantOf(workspace) or humanoid:GetState() == 
Enum.HumanoidStateType.Dead then
        return
    end

    if canDoubleJump and not hasDoubleJumped then
        hasDoubleJumped = true
        humanoid.JumpPower = oldPower * jump_multiplier
        humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
    end
end

local function characterAdded(new)
    character = new
    humanoid = new:WaitForChild("Humanoid")
    hasDoubleJumped = false
    canDoubleJump = false
    oldPower = humanoid.JumpPower

    humanoid.StateChanged:connect(function(old, new)
        if new == Enum.HumanoidStateType.Landed then
            canDoubleJump = false
            hasDoubleJumped = false
            humanoid.JumpPower = oldPower
        elseif new == Enum.HumanoidStateType.Freefall then
            wait(time_delay)
            canDoubleJump = true
        end
    end)
end

if player.Character then
    characterAdded(player.Character)    
end

player.CharacterAdded:connect(characterAdded)
UIS.JumpRequest:connect(onJumpRequest)

Я ожидал, что игрок дважды прыгнет со вторым прыжком, имеющим силу показателя лидера (я только это и так выразил, потому что он говорит, что хочет больше деталей)

1 Ответ

0 голосов
/ 23 июня 2019

LocalScript не выполняются в game.Workspace: они работают только на клиентах, отсюда и термин «локальный»;Script s, с другой стороны, на стороне сервера.

Вы можете использовать Script, чтобы поместить свой скрипт двойного прыжка - LocalScript - в модели персонажей входящих игроков.

-- Server-side Script
local players = game:GetService("Players")
local jumpScript = script:WaitForChild("JumpScript") -- Assume the double-jump script is a LocalScript called 'JumpScript'.

players.PlayerAdded:Connect(function(player)
    player.CharacterAdded:Connect(function(char)
        -- Check to make sure the character model does not already contain the double-jump script, just in case.
        local clone = char:FindFirstChild("JumpScript")
        if (not clone) then
            clone = jumpScript:Clone()
            clone.Parent = char
        end
    end)
end)

Как примечание, этоХорошей практикой является размещение подобных серверных сценариев в ServerScriptStorage вместо workspace или Lighting.(Вы можете прочитать о безопасности ServerScriptStorage здесь .)

...