【问题标题】:Lua Timer(s) on commandLua Timer(s) 上的命令
【发布时间】:2012-08-03 05:50:46
【问题描述】:

抱歉,这个问题可能被某些人称为开放式问题。

我正在尝试发出一个命令,如果有人说 !spectate,他们就会进入观看模式,并在那里停留 30 秒。到目前为止,我完全不成功,因此,我真的不知道我在做什么,所以没有错误的代码可用:(

以下几点可能会对回答的人有所帮助:

要将一个人置于观看模式,在有人说 !spectate(没有 30 秒限制)之后,您可以这样做:

if Message == "!spectate" then
  InputConsole("spectate %d", pID)
end

将使用的游戏是命令与征服:叛徒

很抱歉,我帮不上忙,我在这里完全超出了我的能力范围!

【问题讨论】:

    标签: timer lua


    【解决方案1】:

    但是,您将针对 Renegade 的 Lua API 执行此操作。我自己从未使用过它,但全能的 Google 认为 Renegades 使用的是 LuaTT,API 文档对此表示:

    您只能将 255 个脚本附加到对象。对于定时器,基于 OnThink 和 os.time 制作自己的 api

    文档不是特别好,但快速查看here 找到的示例代码表明,这些内容会起作用:

    local timers = {
      { time = 1343910384, cb = function() doSomething() end }
    }
    
    function OnThink()  -- this is called every frame
      for i = 1, #timers do
        if os.time() > timers[i].time then 
          timers[i].cb()
          table.remove(timers, i)
        end
      end
    end
    

    您发布的代码将如下所示:

    if Message == "!spectate" then
      InputConsole("spectate %d", pID) -- move player to spectators
      table.insert(timers, {
        time = os.time() + 30,                                 -- 30 seconds from now,
        cb   = function() InputConsole("spectate %d", pID) end -- remove player from spectators
      })
    end
    

    【讨论】:

    • furq,你一次又一次地来帮助我!你真的是一个传奇:P
    • 嗯,虽然有些地方不太对劲 ;o 另外,你是否错过了右括号关闭(计时器,?无论如何,它把我变成了旁观者,但不会把我拉出来以后再说吧。
    • 你能在回调中放一个 print() 或其他东西以确保它肯定被解雇了吗?
    • 回调是你放入timers的函数; cb = function() InputConsole("spectate %d", pID); Console_Output("callback fired") end.
    • 啊,我明白了...好吧,控制台中没有出现任何内容(我假设您预计“回调已触发”),但它仍然没有让我摆脱它。
    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2016-07-29
    • 2018-03-02
    • 2017-08-16
    • 2015-11-29
    • 2020-03-20
    相关资源
    最近更新 更多