Lua "if...then"语句不响应

我是一个新手,在Operation Flashpoint: Dragon Rising的任务编辑器中使用LUA制作任务。我试图在一周左右的时间里完成脚本,搜索了谷歌,编辑了脚本,并查阅了编辑器的帮助索引,直到眼睛都流血了,但是所有的努力最终都落空了。

我遇到的问题是这个"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 --这似乎一切正常,没有什么可看的。

--OFP:isAlive(单位或实体集的名称)
function isAlive() --给这个函数命名之后,一个棘手的 "'<name>' expected near 'if'" 错误消失了,这很好。
if OFP:isAlive("enemy1") == (false) --这个"if..Then"语句应该在"enemy1"死亡时生成"enemy2"。
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",但在游戏中它几乎不存在,它不起作用。

以下是命名我的函数,下一行代码原本是 "'' expected near 'if'",直到我这样写:

function isAlive()

这应该跟踪"enemy1"是否仍然存活,如果返回false,则应该生成"enemy2"。

if OFP:isAlive("enemy1") == (false)
then
OFP:activateEntitySet("enemy2");
end
点赞
用户2858170
用户2858170

以下是代码:

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

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

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

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,
    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() 函数。它最有可能实现了一个函数,当任务开始时由游戏调用。

如果我没有记错,您添加了以下代码:

-- OFP:isAlive(部队名称或实体集名称)
function isAlive() -- 在为该函数命名后,一个令人恼火的 "'<name>' expected near 'if'" 错误消失了,这很好。
  if OFP:isAlive("enemy1") == (false) -- 当“enemy1”死亡时,该“if...then”语句应该生成“enemy2”。
  then
    OFP:activateEntitySet("enemy2");
  end

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

这也定义了一个函数。isAlive() 函数被谁调用以及何时调用?

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

解释所有这些内容超出了该社区的范围。只需阅读 http://www.suderman.com/OFPDR/DROPP/reference.html 中的所有内容和 http://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,
    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,
}
2018-03-06 20:47:23