当前位置:首页 > 实操教程 > HGE引擎 > 正文内容

HGE引擎GetRandomName随机取文本脚本教程 - 文本名单配置指南

M2GM2026-10-01HGE引擎2
摘要:本文详解HGE引擎GetRandomName从文本文件随机抽一行到变量的命令。给出格式与五个参数说明,讲清字符串变量支持S、N、G、A类型但不能用<$STR(G0)>格式的限制,区分指定行填0随机与填行号固定读取的差异,与RANDOM命令对比,搭一个随机头衔NPC脚本并给出三阶案例,含Force刷新方法。…
[TOCM]

很多人在问怎么从一个txt名单里随机抽一条名字出来用,比如随机奖励头衔、随机装备名、随机对话台词,总不能把几十条文本全写死在脚本里。随机取文本这条GetRandomName命令就是干这个的,把文本名单提前存进txt,执行时随机抽一行塞进变量。

这条GetRandomName用法在HGE引擎帮助文档里归在功能操作类,格式行短但参数细节不少,尤其是变量类型和指定行参数的用法,新手容易踩坑。不管是做随机名字生成还是做文本名单读取,核心都是把内容维护在外部txt里,脚本只负责抽一行。下面把格式、参数、名单文件配置和三阶案例完整讲一遍。

随机取文本配图 - M2GM

命令格式详解

GetRandomName的作用是从指定文本文件中随机取一行文本,存进指定的字符串变量。如果填了指定行参数就读那一行,不填指定行就随机抽。帮助文档给出的标准格式如下。

;示例脚本
[@Main]
#If 
#Act
GetRandomName 装备列表.txt S0
#Say
取回的文本是: <$STR(S0)>

第一参数是文本文件路径,第二参数是接收文本的字符串变量,第三参数是指定行号,第四参数控制相对路径还是绝对路径,最后一个参数Force用于强制从文件重新加载。

随机取文本内容示意图 - M2GM

参数说明

帮助文档明确:字符串变量参数支持S、N、G、A四类,也支持<$S()>、<$N()>这种写法;但S、N、G、A变量不能使用<$STR(G0)>这种格式。这个限制要特别注意,取回文本后显示时用<$STR(S0)>包裹变量取值。

参数位置 参数内容 参数释义 实操用法
第1参数 文本文件路径 名单txt的位置 相对路径以Envir为基准,写装备列表.txt即可
第2参数 字符串变量 接收抽到的文本 填S0、N0、G0、A0这类变量名
第3参数 指定行 读指定行号 填0表示随机抽,填具体行号就读那一行
第4参数 路径类型 相对或绝对 0相对路径版本内,1绝对路径
第5参数 读取模式 Force强制加载 文件被外部改动后加Force刷新缓存

指定行参数填0就是随机抽取;填非0数字时,引擎直接读取那一行,不再随机。想做随机头衔就填0,想固定读某一行调试就填具体行号。

与随机数命令的区别

RANDOM命令是随机出一个数字到变量里,比如RANDOM 100随机出0到99之间的整数,它本身不带文本内容。GetRandomName是直接从文本文件里抽一行文本,抽到什么内容取决于txt里写了什么。

两者经常配合使用:用RANDOM随机出数字做概率分支,用GetRandomName随机抽头衔或台词。做随机奖励时,如果奖励是数值就用RANDOM算比例,如果奖励是一段文本名字就用GetRandomName从名单里抽。

对比项 GetRandomName RANDOM
输出类型 一行文本 一个数字
数据来源 外部txt名单文件 脚本内概率
典型用途 随机头衔、随机台词 随机概率分支

随机取文本配置示意图 - M2GM

配置实战脚本

第一步,在Envir目录下建一个名单txt,比如装备列表.txt,每行写一个装备名字,一行一条,不要有空行。

第二步,在NPC脚本里写[@Main]段,#Act执行GetRandomName读取装备列表.txt到S0。

第三步,#Say用<$STR(S0)>把抽到的文本显示给玩家。

[@随机头衔]
#IF
#ACT
GetRandomName 头衔列表.txt S0
#SAY
恭喜你获得随机头衔:<$STR(S0)>\
〖<再次抽取/@随机头衔>〗 〖<返回/@main>〗

头衔列表.txt每行写一个头衔名,比如”屠龙勇士””法神使者””道术宗师”,玩家点一次按钮就随机抽一个。路径只写文件名时基准目录是D:\mirserver\Mir200\Envir\,txt文件直接放在Envir下即可。

三阶拓展案例

初级案例:直接用帮助文档示例,建一个装备列表.txt,每行写一个装备名,NPC点按钮随机抽一件装备名显示。这段脚本新手复制过去把txt文件名和提示语改掉就能用。

中级案例:把随机抽出来的文本和GIVE命令结合,抽到什么装备名就发什么装备。用GetRandomName从奖励列表.txt抽到S0后,用GIVE <$STR(S0)> 1把抽到的装备发给玩家。这样奖励内容只需要维护txt文件,不用改脚本。

高阶案例:建多个分类名单文件,新手村奖励、BOSS奖励、活动奖励各存一个txt,根据玩家等级或活动段跳到不同的GetRandomName段读取不同文件。再配合Force参数,运营过程中直接改txt内容不用重启,重载NPC后新名单即时生效。

常见问题

1. GetRandomName取回的文本怎么显示出来?

取回的文本存在第二参数指定的变量里,用#Say段加<$STR(S0)>包裹变量名就能显示。帮助文档示例就是GetRandomName读取装备列表.txt到S0之后,#Say写取回的文本是:<$STR(S0)>。注意变量类型要对应,S变量用<$STR(S0)>取值。(本条问题整理自百度知道真实提问:传奇脚本变量是什么2022-11)

2. 字符串变量为什么不能用<$STR(G0)>格式?

帮助文档明确:S、N、G、A变量支持作为GetRandomName的第二参数,但不能使用<$STR(G0)>这种格式包裹取值。取回文本后显示时,S变量用<$STR(S0)>即可,不要把G变量套进<$STR()>里。S是字符型变量,专门存文本,随机取文本优先用S变量接收。(本条问题整理自百度知道真实提问:传奇自定义字符变量怎么用2025-08)

3. 指定行参数填0和填具体行有什么区别?

填0表示随机抽取,引擎从文件所有行里随机挑一行塞进变量;填具体行号比如填5,引擎直接读取第5行,不再随机。调试名单时填固定行号看内容对不对,正式随机功能填0。文件行数不足时读到的就是空行。

4. 文件路径怎么写?相对路径基准在哪?

第四参数填0用相对路径,基准目录是D:\mirserver\Mir200\Envir\,名单txt直接放Envir下写文件名即可;第四参数填1用绝对路径,写完整磁盘路径。名单文件放在QuestDiary子目录下时,路径写成..\QuestDiary\头衔列表.txt。(本条问题整理自百度知道真实提问:传奇脚本全局所有变量使用说明2024-08)

5. 随机取文本取到空行怎么办?

名单txt里不要留空行,每行都写满内容。空行会被引擎当成一行抽出来,玩家就看到空白头衔。配完名单用记事本打开检查一遍,把多余空行删掉。行数不足时GetRandomNameEX类命令会补空行,但GetRandomName随机抽不会补,空行就是真空行。

6. GetRandomName和RANDOM随机数命令怎么配合用?

做随机奖励时,用GetRandomName从名单txt抽奖励文本名,用RANDOM算概率分支。比如RANDOM 10判断10%概率进入稀有奖励段,那段里再GetRandomName从稀有名单抽一件大奖。文本类内容交给GetRandomName,数值概率交给RANDOM,各司其职。

7. 改了名单txt游戏里没更新怎么办?

引擎会把名单文件缓存进内存,你直接改磁盘txt游戏里不会立刻变。两个办法:一是在GetRandomName最后加Force参数强制从文件重新加载;二是到M2控制台重载NPC。运营中频繁调名单就加Force,调试完去掉省性能。

写在最后

GetRandomName从txt名单随机抽一行文本塞进字符串变量,指定行填0走随机、填具体行走固定行,变量用S类接收、用<$STR(S0)>显示。名单文件按行写在Envir目录下,配合RANDOM概率分支就能搭出随机头衔、随机奖励这类玩法。名单维护全靠txt文件,改内容不用动脚本。

GetRandomName随机取文本相关案例已在本地HGE引擎环境逐项跑通;命令仅适配HGE引擎,部分其他引擎存在兼容可能性,跨引擎使用需要自行测试修改。随机取文本用于版本技术研究与功能测试,仅供单机本地学习调试。

扫描二维码推送至手机访问。

本文章M2GM发布,如需转载请注明出处。如有侵权请联系站长删除。

本文内容仅供个人单机学习研究、功能调试、玩法逻辑测试使用,不涉及任何公网搭建、商业运营、资源交易行为,仅用于个人学习与实操体验。

本文链接:https://www.m2gm.com/tech/hge/getrandomname/

分享给朋友: