我一直在玩一个.lua文件,该文件使用以下行传递一个随机短语:
SendChatMessage(GetRandomArgument("text1", "text2", "text3", "text4"), "RAID")
我的问题是我有很多短语,而且一行代码确实非常长。
有没有办法持有
text1
text2
text3
text3
在代码中的其他位置(或外部)列表中,并从主代码中调用随机值。这将使维护文本选项列表更容易。
答案 0 :(得分:3)
对于最多几百个元素的列表,以下内容将起作用:
messages = { "text1", "text2", "text3", "text4", -- ... } SendChatMessage(GetRandomArgument(unpack(messages)), "RAID")
对于较长的列表,您可以将GetRandomArgument
替换为GetRandomElement
,将单个表作为其参数,并从表中返回一个随机条目。
修改: Olle's answer显示了可能实施GetRandomElement
之类的方式。但它在Lua 5.1中不推荐使用的每个调用上使用table.getn
,并且其替换(table.maxn
)的运行时成本与表中元素的数量成比例。
仅当正在使用的表可能在其数组部分中缺少元素时,才需要函数table.maxn
。但是,在这种情况下要选择的项目列表中,可能没有理由需要在列表中允许漏洞。如果您需要在运行时编辑列表,可以始终使用table.remove
删除项目,因为它也会缩小差距。
如果保证文本数组没有间隙,那么您可以像这样实现GetRandomElement
:
function GetRandomElement(a) return a[math.random(#a)] end
这样你就可以发送这样的信息:
SendChatMessage(GetRandomElement(messages), "RAID")
答案 1 :(得分:2)
您希望表格包含您的短语,例如
phrases = { "tex1", "text2", "text3" }
table.insert(phrases ,"text4") -- alternative syntax
SendChatMessage(phrases[math.random(table.getn(phrases))], "RAID")
注意: getn
获取表格的大小; math.random
获取一个随机数(最大值为短语表的大小),phrases[]
语法返回[]
内索引处的表元素。