【发布时间】:2015-07-20 10:58:44
【问题描述】:
我一直在尝试解决这个问题,但我担心我不会很快看到整个解决方案,现在我需要一个全新的视角来完成我需要的事情。
我有一个非常特殊的 MUD 脚本,可以帮助我在房间中区分 MOB 和玩家。脚本本身可以工作,但现在我想添加一个新元素来检查我的小组成员是否在同一个房间。这是我目前所拥有的:
function strends(s)
if s:match("%u%w+ is here%.") or s:match("%u%w+ is fighting .-%.") or s:match("%u%w+ is sleeping here%.") then
return true
else
return false
end
end
这很好 - 它检查房间中是否有大写名称并根据要求返回信息。
我有一个小组成员的表格,但我可能会发现将其作为字符串执行并执行 string.find 更容易。我遇到的问题是针对每个场景进行封装:
- 如果房间里有我组之外的玩家,则返回 true。
- 如果只有我组之外的玩家,则返回 true。
- 如果房间里除了我之外没有人,则返回 false。
在场景一中,它必须返回 true,即使我的组中有人以及我组之外的人。但是我的 Lua 知识还不够广泛,无法解决问题。非开头 string.matches 的原因是因为特定行之前可能有 xx 个字符。我应该如何处理这个问题,或者我应该怎么做才能实现我的目标?
编辑:修复了场景 2,因为出现了错误。以下是查看房间通常会得出的结果:
场景一:
(R) NonGroupMate is sleeping here.
(W)(R)(T) Groupmate is here.
预期结果?
return true -- the function checks if there are people outside my group in the room.
场景二:
(D)(W) NonGroupMate is fighting a mob!
(T)(W) NonGroupMateTwo is here.
预期结果?
return true
场景 3:
(T) GroupMate is here.
(W) GroupMateTwo is sleeping here.
GroupMateThree is fighting a mob!
预期结果?
return false
我希望这有助于澄清一些事情。如果您需要更多,请告诉我。
更多说明
我不是故意的。我认为以上所有内容都是需要的,但我会尝试将其分解。
当我在 MUD 中输入“look”时,我看到类似于以下内容:
Room name
Room Desc
[ Exits: <exits> ]
NameOne is here.
(G) NameTwo is here.
(R)(W) NameThree is sleeping here.
(W) NameFour is fighting a mob.
我已经有触发器可以在 [ Exits: ] 之后直接匹配项目,并且触发器会毫无问题地触发。它按照应有的方式评估每一行,并通过strends() 函数运行它。
我要解决的问题是创建一个函数,在该函数中评估线路并确定玩家的姓名是否在我的组中。如果他们在我的组中,strends() 应该返回false(因为strends() 返回房间里是否有我应该避免的玩家)。如果他们不在我的组中,则需要返回true。
那是我很难理解的;我该如何为此创建函数?我真正想要的功能是,一旦它确定一个不在小组中的玩家在房间里,让它休息并忽略所有其他结果。不过,我认为,要做到这一点,我必须将它们输入到一个表中并进行迭代,这样我就可以在任何给定点中断。我/可能/最终要做的是设置一个条件变量,该变量在开始时设置为 false,当设置为 true 时始终保持为 true。
现在更清楚了吗?如果没有,我不确定我还能添加什么。
更新
look 的输出不是单个字符串。从本质上讲,每一行都是单独处理的,从房间里的字符开始。例如:
NameOne is here. -- This is processed by itself, gets passed through strends.
NameTwo is sleeping here. -- This is also processed through strends, by itself.
NameThree is here. -- Yet again it's processed individually through strends.
我可以尝试将其全部放入一个表格中,但触发的代码最终会变得混乱。
【问题讨论】:
-
如果您的问题是关于模式匹配的,请提供输入预期结果的示例带代码。不清楚你说的房间里是否有我组以外的玩家。或其他情况。
-
我猜你的问题是 非开头 string.matches 的原因是因为特定行之前可能有 xx 个字符。 但我不知道也不明白。
-
没错。背景故事很有趣并且可能有用,但如果有一个明确的例子,你现在应该已经收到了 10 条回复。
-
(R) NonGroupMate is sleeping here.和(W)(R)(T) Groupmate is here.是存储在两个字符串还是一个字符串中? -
顺便说一句,我们真正期待的是a Minimal, Complete, and Verifiable example。
标签: lua lua-patterns