【问题标题】:Lua "if...then" statement unresponsiveLua "if...then" 语句无响应
【发布时间】:2018-03-07 19:08:23
【问题描述】:

我是使用 LUA 执行任务的新手 Operation Flashpoint:Dragon Rising 的任务编辑器。我已经尝试了大约一周的时间来编写脚本,我搜索、编辑并搜索了编辑器的帮助索引,直到感觉我的眼睛在流血,这一切都导致了这一点。 我对这个“if...then”语句没有做任何事情有疑问。首先,这是整个事情:

function onMissionStart()
OFP:showLetterBoxOsd(false);
OFP:allowPlayerMovement(true);
OFP:allowPlayerFire(true);
OFP:setObjectiveState("Wave1","IN_PROGRESS");
OFP:setObjectiveState("Wave2","IN_PROGRESS");
OFP:activateEntitySet("enemy1");
end --This all seems to work fine, nothing to see here.

--OFP:isAlive(name of unit or entity set)
function isAlive() --After naming this function, a pesky "'<name>' expected near 'if'" error dissapeared so thats nice.
if OFP:isAlive("enemy1") == (false) --This "if..Then" statement should spawn "enemy2" when "enemy1" dies.                   
then
OFP:activateEntitySet("enemy2");
end

if OFP:isAlive("enemy2") == (false)
then
OFP:setObjectiveState("Wave2","COMPLETED")
OFP:missionCompleted() 
end
end

现在这就是给我带来麻烦的原因:

function isAlive() 
if OFP:isAlive("enemy1") == (false)                  
then
OFP:activateEntitySet("enemy2");
end

这应该在enemy1 死亡时生成enemy2,但在游戏中它可能不存在,它不起作用。

这为我的函数命名,下一行是在 if 附近抛出 '&lt;name&gt;',直到我这样做。

function isAlive() 

这应该跟踪enemy1是否还活着,如果它返回一个假,它应该产生enemy2

if OFP:isAlive("enemy1") == (false)                  
then
OFP:activateEntitySet("enemy2");
end

【问题讨论】:

  • Lua 在哪个宇宙中是一种“死语”?
  • 我个人只在旧游戏或 Minecraft 的 Computercraft 中看到过它。我也有几个从事代码工作的人也这么说。不过我是个菜鸟,所以 Lua 的应用可能比我想象的要多。
  • 您是否知道函数可能不存在,除非它们被调用?
  • “函数isAlive()”不是调用吗?还是我弄错了电话是什么?
  • 更新:我想出了如何调用这些函数。它仍然没有在我想要的时候产生我想要的东西,但我认为我只会让波浪从用户激活的对象中产生,可能更容易。

标签: lua if-this-then-that


【解决方案1】:

function onMissionStart 最有可能是任务开始时游戏调用的函数。我找不到任何官方参考手册,但游戏似乎有一些基于事件的脚本系统。

您提供的其余代码可能仅在文件加载时执行,因此在游戏过程中没有任何影响。

编辑由于评论:

function onMissionStart()
  OFP:showLetterBoxOsd(false);
  OFP:allowPlayerMovement(true);
  OFP:allowPlayerFire(true);
  OFP:setObjectiveState("Wave1","IN_PROGRESS");
  OFP:setObjectiveState("Wave2","IN_PROGRESS");
  OFP:activateEntitySet("enemy1");
end --This all seems to work fine, nothing to see here.

上面的代码定义了函数onMissionStart()。它很可能实现了一个在任务开始时被游戏调用的函数。

如果我没记错的话,你添加了以下代码:

--OFP:isAlive(name of unit or entity set)
function isAlive() --After naming this function, a pesky "'<name>' expected near 'if'" error dissapeared so thats nice.
  if OFP:isAlive("enemy1") == (false) --This "if..Then" statement should spawn "enemy2" when "enemy1" dies.                   
then
OFP:activateEntitySet("enemy2");
end

if OFP:isAlive("enemy2") == (false)
then
OFP:setObjectiveState("Wave2","COMPLETED")
OFP:missionCompleted() 
end
end

这也定义了一个函数。活着。但是谁调用该函数以及何时调用?

我在 DROPP 中找到了一个事件列表。我想这就是你所说的任务编辑器。在某些事件上,它将运行某些功能。如果所有玩家都死了,就会调用 onAllplayersDead()。

解释这一切超出了这个社区的范围。只需阅读所有http://www.suderman.com/OFPDR/DROPP/reference.htmlhttp://www.suderman.com/OFPDR/DROPP/download.html 中的所有文件

EventScripts =  {
    onAllPlayersDead = 0,
    onArriveAtWaypoint = 0,
    onCmdCompleted = 0,
    onDeath = 0,
    onDespawnEntitySet = 0,
    onDespawnEntity = 0,
    onDismount = 0,
    onEnter = 0,
    onEnterRVPoint = 0,
    onFirepowerKill = 0,
    onHit = 0,
    onIdentified = 0,
    onIncap = 0,
    onLand = 0,
    onLeave = 0,
    onMissionStart = 0,
    onMobilityKill = 0,
    onMount = 0,
    onMultiplayerMissionLoaded = 0,
    onNoAmmo = 0,
    onNoAmmoAll = 0,
    onObjectDamage = 0,
    onObjectDamage = 0,
    onObjectiveCompleted = 0,
    onObjectiveFailed = 0,
    onObjectiveVisible = 0,
    onOffboardSupp = 0,
    onPinned = 0,
    onPlaceableKill = 0,
    onPlayEnter = 0,
    onPlayDone = 0,
    onPlayFailed = 0,
    onPlayInvalid = 0,
    onPvPMissionEnd = 0,
    onRespawn = 0,
    onSpawnedReady = 0,
    onSpeechEnd = 0,
    onSuppressed = 0,
    onSuspected = 0,
    onUnsuppressed = 0,
}

【讨论】:

  • 你是在暗示我不应该从 onMissionStart() 开始吗?
  • 对不起垃圾邮件,我太早按下评论:我尝试切断 onMissionStart() 并没有产生任何东西。此外,我尝试将剩余的脚本组合到与 onMissionStart() 相同的块中,它只是使所有内容立即生成。我想我可能太无知了,无法理解为什么其余代码在游戏过程中不会产生任何影响,或者我应该怎么做。
  • @TheLocust911 见编辑。解释太多了。学习 Lua 做普通教程,然后你就会明白那些游戏相关脚本是怎么回事,然后你就可以修改它们了。
  • 你已经超越了很多,谢谢!我猜是回去学习了。
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
相关资源
最近更新 更多