如何在其他脚本中使局部变量成为另一个局部变量的值

时间:2019-05-16 22:02:16

标签: scripting roblox

我正在做一个跳跃游戏,我希望排行榜上的JumpBoost值为该对象的JumpBoost的值

<script src="baz.com/foo"></script>
<script>
    foo.bar();
</script>

我尝试了这个,但是没有用,我想不出另一种方式

如果我测试游戏并在触摸物体后跳跃,则我的跳跃是正常的,而不是领导者的统计量

2 个答案:

答案 0 :(得分:0)

我认为您的问题是您根本没有正确访问Leaderstats值。

您在game.Players中找到的播放器与game.Workspace中的播放器有所不同。 game.Players中的一个是Leaderstats文件夹所在的位置,game.Workspace中的一个是玩家的人形生物所在的位置。

要更改leaderstats值,您需要使用人形机器人来了解哪个玩家触摸了零件,然后从game.Players获取实际的Player对象以正确访问该文件夹。

local boostPart = script.Parent

local function onPartTouch(otherPart)
    -- get the player that touched the boost block
    local partParent = otherPart.Parent
    local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
    if ( humanoid ) then
        -- a player touched this, prevent more collisions
        boostPart.CanCollide = false

        -- get the current player's jump power by looking into the players leaderstats
        local playerService = game.Players
        local playerName = partParent.Name
        local currentPlayer = playerService[playerName]
        local playerGold = currentPlayer.leaderstats.gold.Value -- << gold?

        -- give the player a temporary boost
        local currentJumpPower = humanoid.JumpPower
        if ( currentJumpPower < playerGold) then
            humanoid.JumpPower = playerGold

            -- reset the player's jump power
            wait(5)
            humanoid.JumpPower = currentJumpPower
        end
    end
end
boostPart.Touched:Connect(onPartTouch)

这应该使您能够正确读取Leaderstats值。如果要更改它们,则可以使用同一系统导航到Players文件夹并更改值。

答案 1 :(得分:0)

要回答标题问题“如何使局部变量成为另一个脚本中的局部变量的值”,Roblox拥有使用BindableEventsBindableFunctions传递数据的系统。 / p>

一个简单的示例假设您在工作区中有一个BindableEvent。

本地脚本1:

local myValue = 1
local bEvent = game.Workspace.BindableEvent

-- listen for actions fired from other scripts
bEvent.Event:Connect(function(newValue)
    myValue = newValue
    print("Script 1 - myValue has changed to ", myValue)
end

print("Script 1 - myValue originally equals ", myValue)

本地脚本2:

wait(1)
local bEvent = game.Workspace.BindableEvent

-- tell the other scripts that the value has changed
print("Script 2 - firing change signal")
bEvent:Fire(10)

如果您有许多不同的运动部件,并且希望通过集中方式传达更改信息,并且不想构建自定义数据传递系统,则这种系统非常有用。