RandomText / RandomSplit — 从长字符串中随机出一段字符串 使用说明
命令概述
RandomText 用于从一段长字符串中随机取出一段字符串,支持普通随机和带分数概率的随机方式。
RandomSplit 用于按 字符串#概率|字符串#概率 的格式随机取出一项,并可把未取中的剩余内容保存到变量。
这两个命令都属于 #ACT 动作命令,适合随机抽物品、随机称号、随机文本、随机任务目标等脚本场景。
RandomText 命令格式
RandomText 参数1 参数2 参数3
| 位置 | 参数 | 必填 | 说明 |
| 第 1 参 |
长字符串 |
是 |
需要随机的完整字符串。普通随机使用 NEWRANDOM*内容*,概率随机使用 RANDOM*{概率A/概率B}内容*。 |
| 第 2 参 |
分隔符 |
是 |
用于分割每一段内容的字符,一般使用 |。 |
| 第 3 参 |
保存变量 |
是 |
随机出的字符串保存到该变量。 |
RandomSplit 命令格式
RandomSplit 参数1 参数2 参数3 参数4(可为空) 参数5(可为空)
| 位置 | 参数 | 必填 | 说明 |
| 第 1 参 |
随机字符串 |
是 |
格式为 字符串#概率|字符串#概率,字符串分割符固定为 |,字符串顺序无要求。 |
| 第 2 参 |
结果返回模式 |
是 |
0 返回字符串,1 返回概率值,2 返回字符串#概率值。 |
| 第 3 参 |
结果保存变量 |
是 |
随机得到的结果保存到该变量。 |
| 第 4 参 |
剩余返回模式 |
否 |
填写第 5 参时有效,返回模式同第 2 参。 |
| 第 5 参 |
剩余保存变量 |
否 |
保存未被随机取中的剩余内容。 |
RandomSplit 返回模式
| 模式 | 返回内容 | 示例 |
| 0 | 只返回字符串 | 木剑 |
| 1 | 只返回概率值 | 2 |
| 2 | 返回字符串#概率值 | 木剑#2 |
脚本示例
示例一:RandomText 普通随机抽一个物品名
[@普通随机]
#IF
#ACT
RandomText NEWRANDOM*木剑|乌木剑|青铜剑|铁剑* | S$物品名
SENDMSG 6 本次随机得到:<$str(S$物品名)>
示例二:RandomText 按分数概率随机抽装备
[@概率随机]
#IF
#ACT
RandomText RANDOM*{1/20}屠龙|{1/10}怒斩|{1/5}裁决|{1/1}炼狱* | S$装备名
SENDMSG 6 本次抽到装备:<$str(S$装备名)>
示例三:RandomText 使用保底项
[@保底随机]
#IF
#ACT
RandomText RANDOM*{1/100}开天|{1/50}镇天|{1/20}玄天|{1/1}祝福油* | S$奖励
SENDMSG 6 你获得了:<$str(S$奖励)>
;前面概率都没抽中时,最后的 {1/1} 作为保底奖励
示例四:RandomText 随机一句提示文本
[@随机提示]
#IF
#ACT
RandomText NEWRANDOM*小心暗殿刷新|记得修理装备|组队挑战更安全|背包空间要留足* | S$提示
SENDMSG 6 <$str(S$提示)>
示例五:RandomSplit 返回随机到的字符串,并返回剩余字符串#概率
[@随机并保存剩余]
#IF
#ACT
RandomSplit 木剑#2|裁决#1|怒斩#3|屠龙#5 0 S$结果 2 S$剩余
;总事件数(概率分母):11=2+1+3+5
SENDMSG 6 随机取到字符串:<$str(S$结果)>
SENDMSG 6 剩余的字符串值:<$str(S$剩余)>
;假设上述结果得到木剑(取得木剑的概率为2/11)
;<$str(S$结果)> = 木剑
;<$str(S$剩余)> = 裁决#1|怒斩#3|屠龙#5
示例六:RandomSplit 返回字符串#概率值
[@返回完整项]
#IF
#ACT
RandomSplit 金币#50|元宝#10|声望#30|经验#100 2 S$奖励项
SENDMSG 6 本次随机项:<$str(S$奖励项)>
;可能返回:金币#50、元宝#10、声望#30、经验#100
示例七:RandomSplit 返回概率值
[@返回概率值]
#IF
#ACT
RandomSplit 普通奖励#80|高级奖励#15|极品奖励#5 1 N$概率
SENDMSG 6 本次抽中的概率权重:<$str(N$概率)>
示例八:RandomSplit 连续抽取不重复奖励
[@不重复抽取]
#IF
#ACT
RandomSplit 木剑#10|乌木剑#8|青铜剑#6|铁剑#4 0 S$第一次 2 S$剩余1
RandomSplit <$str(S$剩余1)> 0 S$第二次 2 S$剩余2
SENDMSG 6 第一次抽到:<$str(S$第一次)>
SENDMSG 6 第二次抽到:<$str(S$第二次)>
SENDMSG 6 剩余内容:<$str(S$剩余2)>
示例九:RandomSplit 剩余内容只保存字符串
[@剩余只要名字]
#IF
#ACT
RandomSplit 战士#3|法师#2|道士#1 0 S$职业 0 S$剩余职业
SENDMSG 6 抽中职业:<$str(S$职业)>
SENDMSG 6 未抽中的职业:<$str(S$剩余职业)>
;如果抽中战士,剩余职业返回:法师|道士
示例十:RandomSplit 按权重随机任务目标
[@随机任务]
#IF
#ACT
RandomSplit 半兽人#40|骷髅#30|僵尸#20|沃玛卫士#10 0 S$怪物名
SENDMSG 6 本次任务目标:击杀 <$str(S$怪物名)>
注意事项
RandomText 和 RandomSplit 都只能写在 #ACT 动作段。
RandomText 的普通随机格式为 NEWRANDOM*字符串|字符串*。
RandomText 的概率随机格式为 RANDOM*{概率A/概率B}字符串|{概率A/概率B}字符串*。
RandomText 中物品名不要包含 {、}、* 这些控制符号。
RandomText 概率随机推荐最后加一个 {1/1} 保底项,避免前面都没抽中时变量为空。
RandomSplit 的每一项必须包含 #概率,概率必须大于 0。
RandomSplit 的总概率为所有概率值相加,例如 木剑#2|裁决#1|怒斩#3|屠龙#5 的总概率为 11。
RandomSplit 第 4 参和第 5 参同时使用时,才会返回剩余内容。
如果需要连续抽取不重复内容,建议使用 RandomSplit 保存剩余内容,再把剩余内容传给下一次 RandomSplit。