Lua 对于下一个循环,一旦所有状态为真,则结束

Lua 对于下一个循环,一旦所有状态为真,则结束,lua,Lua,我正在为我将要制作的游戏地图编写脚本。这有点像s4联赛中的追逐者系统 我的问题是,一旦每个人都将其“waschaser”设置为true,脚本应该发出一个“close map”通知,但一旦每个人都成为了chaser,什么都不会发生,我也不知道为什么 我的桌子是这样摆的 chaserdb_players = { } chaserdb_players[charname] = { score = 0, death = 0, kill = 0, waschaser = false } 现在,一旦地图启动

我正在为我将要制作的游戏地图编写脚本。这有点像s4联赛中的追逐者系统

我的问题是,一旦每个人都将其“waschaser”设置为true,脚本应该发出一个“close map”通知,但一旦每个人都成为了chaser,什么都不会发生,我也不知道为什么

我的桌子是这样摆的

chaserdb_players = { }
chaserdb_players[charname] = { score = 0, death = 0, kill = 0, waschaser = false }
现在,一旦地图启动,它将使用waschaser=false搜索下一个可用的人

   for characterName,i in next, chaserdb_players do
     if (i.waschaser == false) then
      local player = getPlayerByName(characterName, map_copy)
      if (player ~= nil) then
        addChaserState(player)
        break
       end
      end
    end
在addChaserState(player)函数中,它为该角色切换waschaser=true

我遇到的问题是,一旦地图上的每个人都有了他们的wascaser=true,我就需要一个系统通知来启动,我已经尝试这样做了

for characterName,i in next, chaserdb_players do
          if (i.waschaser == false) then
            local player = getPlayerByName(characterName, map_copy)
            if (player ~= nil) then
                addChaserState(player)
                break
            end
        else
            Notice("All players have been chaser! The map will close in 30 seconds!")
            map_close = true
        end
    end
下面是getPlayerByName函数

function getPlayerByName(name, map_copy)
BeginGetMapCopyPlayerCha(map_copy)
for i = 0 , chaserdb_playercount - 1 , 1 do
    local player = GetMapCopyNextPlayerCha ( map_copy )
    if (player == 0 or player == nil) then 
        return nil
    else
        local playerName = GetChaDefaultName(player)
        if (playerName == name) then
            return player
        end
    end
end
end
但这是行不通的


有人能帮忙吗?如果您需要更多信息,请随时告诉我,我会添加它。

将您的通知移出for循环。并使用布尔标志检查任何可能的错误:

local bFlag = true
for i,characterName in next, chaserdb_players do
    if (characterName.waschaser == false) then
    local player = getPlayerByName(i, map_copy)
        if (player ~= nil) then
            addChaserState(player)
            break
        end
    else
        bFlag = false
    end
end
if bFlag then
    Notice("All players have been chaser! The map will close in 30 seconds!")
    map_close = true
end

将通知移到for循环之外。并使用布尔标志检查任何可能的错误:

local bFlag = true
for i,characterName in next, chaserdb_players do
    if (characterName.waschaser == false) then
    local player = getPlayerByName(i, map_copy)
        if (player ~= nil) then
            addChaserState(player)
            break
        end
    else
        bFlag = false
    end
end
if bFlag then
    Notice("All players have been chaser! The map will close in 30 seconds!")
    map_close = true
end

稍微地道一点:

local allChased = true
for name, character in pairs(chaserdb_players) do
    if not character.waschaser then
        local player = getPlayerByName(name, map_copy)
        if player then
            addChaserState(player)
            break
        end
    else
        allChased = false
    end
end
if allChased then
    Notice("All players have been chaser! The map will close in 30 seconds!")
    map_close = true
end
将其包装在函数中效果良好:

function nextChaser()
    for name, character in ipairs(chaserdb_players) do
        if not character.waschaser then
            local player = getPlayerByName(name, map_copy)
            if player then
                return player
            end
        end
    end
end

local player = nextChaser()
if player then
    addChaserState(player)
else
    Notice("All players have been chaser! The map will close in 30 seconds!")
    map_close = true
end

稍微地道一点:

local allChased = true
for name, character in pairs(chaserdb_players) do
    if not character.waschaser then
        local player = getPlayerByName(name, map_copy)
        if player then
            addChaserState(player)
            break
        end
    else
        allChased = false
    end
end
if allChased then
    Notice("All players have been chaser! The map will close in 30 seconds!")
    map_close = true
end
将其包装在函数中效果良好:

function nextChaser()
    for name, character in ipairs(chaserdb_players) do
        if not character.waschaser then
            local player = getPlayerByName(name, map_copy)
            if player then
                return player
            end
        end
    end
end

local player = nextChaser()
if player then
    addChaserState(player)
else
    Notice("All players have been chaser! The map will close in 30 seconds!")
    map_close = true
end

不应该
getPlayerByName(i,map\u copy)
be
getPlayerByName(characterName,map\u copy)
?或者
i
实际上是字符名,而
characterName
是其他的吗?不,getPlayerByName(i,map\u copy)是正确的名称啊,我是字符名,抱歉,我给它贴错了标签-我用
i
修复了你的
getPlayerByName
函数循环,但没有在函数中的任何其他地方使用
i
getPlayerByName(i,map\u copy)
不应该是
getPlayerByName(characterName,map\u copy)
,或者
i
实际上是字符名,还有
characterName
其他东西吗?不,getPlayerByName(i,map\u copy)是正确的一个啊,我是字符名,很抱歉我给它贴错了标签-我用
i
修复了你的
getPlayerByName
函数循环,但在函数中的任何其他地方都没有使用
i
,当我尝试这个时,它只会发出关闭的通知,即使他们没有被追赶yetSee我对你的问题的评论。看起来您的变量命名有点混乱。查看我的更新,它现在应该可以工作了。不,不工作。我编辑了我的主题。我添加了getPlayerByName函数当我尝试此功能时,它只会发送关闭通知,即使他们没有被chaser yetSee我对您的问题的评论。看起来您的变量命名有点混乱。查看我的更新,它现在应该可以工作了。不,不工作。我编辑了我的主题。我添加了getPlayerByName函数这也不起作用,它仍然在表中重复循环寻找下一个。这也不起作用,它仍然在表中重复循环寻找下一个