Previous topicNext topic
 Gameofmir Help
Help > 游戏引擎功能系统 > 功能操作命令 > 字符文本类 >
从长字符串中随机出一段字符串

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$怪物名)>

注意事项

如果需要连续抽取不重复内容,建议使用 RandomSplit 保存剩余内容,再把剩余内容传给下一次 RandomSplit