我一直在与通过使用下面一行随机短语.lua文件玩耍:从列表中选择随机短语
SendChatMessage(GetRandomArgument("text1", "text2", "text3", "text4"), "RAID")
我的问题是,我有很多的短语和一代码行的确很长。
有没有办法在代码(或外部)的列表其他地方举行
text1
text2
text3
text3
和调用,在主代码的随机值。将使维护文本选项列表更容易。
我一直在与通过使用下面一行随机短语.lua文件玩耍:从列表中选择随机短语
SendChatMessage(GetRandomArgument("text1", "text2", "text3", "text4"), "RAID")
我的问题是,我有很多的短语和一代码行的确很长。
有没有办法在代码(或外部)的列表其他地方举行
text1
text2
text3
text3
和调用,在主代码的随机值。将使维护文本选项列表更容易。
你想要一个表包含像你的短语
phrases = { "tex1", "text2", "text3" }
table.insert(phrases ,"text4") -- alternative syntax
SendChatMessage(phrases[math.random(table.getn(phrases))], "RAID")
注:getn
得到表的大小; math.random
得到一个随机数(最大长度为短语表的大小),phrases[]
语法返回[]
内部索引处的表元素。
对于名单多达几百个元素,那么下面的工作:
messages = { "text1", "text2", "text3", "text4", -- ... } SendChatMessage(GetRandomArgument(unpack(messages)), "RAID")
对于较长的列表,你会得到更好的服务,以取代GetRandomArgument
与GetRandomElement
这将需要一个表作为它的参数和从表中返回一个随机条目。
编辑:Olle's answer显示了一种方式,像GetRandomElement
可能实现。但它在每次调用时都使用table.getn
,在Lua 5.1中不推荐使用它,其替换(table.maxn
)的运行时成本与表中元素数成比例。
函数table.maxn
只有在正在使用的表可能在其数组部分中缺少元素时才需要。但是,在这种可供选择的项目列表中,可能没有理由需要在列表中允许出现漏洞。如果您需要在运行时编辑列表,则始终可以使用table.remove
删除项目,因为它也会缩小差距。
随着文字的阵列中的无间隙的保证,那么你就可以实现GetRandomElement
这样的:
function GetRandomElement(a) return a[math.random(#a)] end
所以您发送类似这样的消息:
SendChatMessage(GetRandomElement(messages), "RAID")
真棒 - 正是我在之后。十分感谢。乔 – Joe