【问题标题】:Lua if statement using function in for loopLua if 语句在 for 循环中使用函数
【发布时间】:2021-02-10 17:47:11
【问题描述】:

我很想通过使用 WoW 本身的脚本来制作宏。 而且听说魔兽的剧本是基于Lua的。

虽然我已经使用 Obj-C 、Swift 和 C++ 好几年了,但尴尬的是,用 Lua 写一些代码还是很困难的。(尽管很短。)

我正在尝试通过 for 循环中的 if 语句的函数返回布尔值。

如果是Obj-C,会如下所示。

-(void) script {
   Bool on = NO;
   NSArray* zone = [@"Feralas",@"The hinterlands",@"Duskwood"];
   for(int i = 0 ; i < 3 ; i ++) {
      if([self clearCheck:i]) {
         NSLog(@"stone on! -> %@",zone[i]);
         on = YES;
      }
   }

   if (!on) { 
      NSLog(@"No Stone Today..");
   }
}

-(Bool) clearCheck:(int)index {
   return [C_QuestLog IsQuestFlaggedCompleted:index+44329];
}

我试过的 Lua 代码如下

local o,z=false,{"Feralas","The hinterlands","Duskwood"}
function f(x) return C_QuestLog.IsQuestFlaggedCompleted(44329+x) end

for i=1,3 do
   if f(i) then do
      print("stone on! -> ",z[i])
      o=true
   end
end

if not o then do 
   print("no stone today..")
end

我错过了什么?应该如何? 我希望有人能帮助我摆脱这个困难......

【问题讨论】:

  • 你应该解释你的问题是什么。如果您遇到错误消息或一些意外行为,请将该信息添加到您的问题中
  • @Piglet 很抱歉缺少信息。但我无法解释,因为我无法完全知道问题出在哪里。在游戏中,它只是不起作用,仅此而已..哈哈

标签: objective-c lua


【解决方案1】:

您可能会看到类似的错误消息

'end' 预期在

附近(在行 ... 处关闭 'if')

这是因为您的代码中有一个多余的do,它“窃取”了您为if 提供的end。因此,每个 if 语句都缺少一个 end

then 之后删除do

Lua 5.4 Reference Manual: 3.3.4 Control Structures

stat ::= if exp then block {elseif exp then block} [else 阻止] 结束

除此之外,您的代码在语法上是正确的。

【讨论】:

  • 语法正确吗???哦..那应该是魔兽脚本的其他问题..无论如何我都很感激!
猜你喜欢
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 2013-08-26
  • 2014-08-25
  • 2013-05-28
相关资源
最近更新 更多