如何正确地使脚本随机选择要执行的功能?

问题描述 投票:1回答:1

我正在尝试为视频游戏制作随机数,但是不断遇到游戏崩溃,循环播放所有视频而无所事事,或者只是反复选择一个选项(取决于我添加的内容和位置)的问题。并删除内容)

function main()
    functable = {
        pedspawner(),
        justdie(),
        haveacar(),
        locking(),
    }
    repeat 
        math.random(functable)
        Wait(30000)
    until
    PedIsDead(player)
end

这基本上是我目前正在做的事情,显然非常不正确,但对我还能做些什么很感兴趣。我尝试为math.random添加更多的args,使其更像{pedspawner}等。

任何尝试解决这种怪异的尝试都会受到赞赏,我可以做的其他所有事情,仅仅是我的“使函数执行随机化”,我遇到了麻烦:)

lua
1个回答
0
投票

注意,我正在使用Lua 5.3.5。

[首先,请记住通过调用math.randomseed来植入Lua的随机数生成器。提供给该函数的参数通常是调用os.time的结果。

math.randomseed(os.time())

第二,就语法而言,您应该使用关键字local,尤其是对于函数内部的变量。]​​>

就像您所做的一样,我通常在Lua中编写C样式的main函数。我不知道您是否需要访问脚本中的命令行参数,但是argc是参数的数量,argv是提供的所有参数的表。

local function main(argc, argv)
    -- FIXME: function body
    return 0
end
main(#arg, arg)

关于功能表,在每个元素后删除()。 Lua具有一流的功能,这意味着它们被视为变量。在functable或更高版本中,main的声明将正确编写为:

local functable = {
    pedspawner,
    justdie,
    haveacar,
    locking
}

Lua,与C / C ++不同,它没有常量。但是,如果您希望functable的内容保持不变,建议您在main函数外部声明它,并将其名称大写为FUNCTABLE

为了生成一个介于1和functable长度之间的数字,首先需要检索表的长度。您在注释中提到长度运算符#给您带来了问题,因此您可以改用函数rawlen

local len = rawlen(functable)

使用所有这些片段,我看到您的脚本看起来像这样:

-- Functions PedIsDead, Wait, and those within FUNCTABLE are defined above or
-- in modules that have been included.

local FUNCTABLE = {
    pedspawner,
    justdie,
    haveacar,
    locking
}

local function main(argc, argv)
    math.randomseed(os.time())

    -- As long as you neither add members nor subtract elements from FUNCTABLE, you 
    -- need only retrieve its length once.
    local len = rawlen(FUNCTABLE)

    -- Lua's repeat-until loop works, but I prefer while loops. I assume PedIsDead
    -- returns a boolean.
    while (not PedIsDead(player)) do
        -- Generate an index between 1 and len; then, retrieve the element, a
        -- function, at i and call it.
        local i = math.random(len)
        local func = FUNCTABLE[i]
        func()

        -- Finally, wait the specified amount of time.
        Wait(30000)
    end
    return 0
end
main(#arg, arg)
© www.soinside.com 2019 - 2024. All rights reserved.