当所有状态都为真时,下一次循环结束。

我正在编写一个游戏地图的脚本,类似于 S4 League 中的追逐者系统。

我的问题是,一旦所有人都将其“成为追逐者”设置为 true,脚本应该发出“关闭地图”通知,但是一旦每个人都成为追逐者,就什么也不会发生,我无法弄清原因。

下面是我的表格设置方式:

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。

我遇到的问题是,一旦地图中的每个人都有了 waschaser = 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

但这并不起作用。

有人可以帮忙吗?如果需要更多信息,请随时让我知道,我将添加它。

点赞
用户1190388
用户1190388

将通知移动到 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("所有玩家都成为了追逐者!地图将在 30 秒后关闭!")
    map_close = true
end
2013-06-01 07:23:17
用户102441
用户102441
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
2013-06-01 09:01:12