传奇脚本排序在线人物自定义变量:SortHumVarToList与SortHumVar命令参数配置全流程

来源: 作者: 点击:
传奇里要按自定义变量对在线玩家排序,核心命令就是 SortHumVarToList 和 SortHumVar。前者多见于传统M2类引擎,后者在996等三端引擎里更常见。两者都能把在线玩家的变量值按升序或降序排好,再写入文本文件或直接写入脚本变量,方便做排行榜、在线统计、活动排名和GM查看。

传统M2类引擎常用 SortHumVarToList。这个命令只排在线人物,离线玩家不参与。 基本格式是:

SortHumVarToList 变量类型 变量名 保存路径 排序模式 名字路径

变量类型支持 HUMAN、GUILD、GLOBAL,分别对应人物、行会和全局变量。排序模式填 0 为升序,1 为降序。保存路径一般写在 ..QuestDiary 目录下,例如 ..QuestDiary在线排行.txt。名字路径可选,如果填了,文件里只保存角色名,不保存变量值;如果不填,文件里会同时保存角色名和变量值。

示例:

IF
ACT
SortHumVarToList HUMAN 积分 ..QuestDiary在线积分排行.txt 1

这段脚本会把当前在线玩家的“积分”自定义变量按降序写入文件。GM读取文件后就能看到谁积分最高。

部分版本还会用到 SortHumVarToListEx。这个命令支持更多参数,包括变量路径、保存路径、保存模式、是否使用绝对路径等。格式大致是:

SortHumVarToListEx 变量名 变量路径 排序模式 保存路径 保存模式 变量文件是否绝对路径 保存文件是否绝对路径

排序模式同样是 0 升序、1 降序。 使用这个命令前要先确认当前引擎是否支持,不同M2版本参数数量可能不同。

996引擎更常用 SortHumVar。它的优势是排序结果可以直接写入脚本变量,不用每次都读文件。格式为:

SortHumVar 变量名 写入字符变量 写入数字变量 范围 排序 取前N名

范围参数 0 表示全服,1 表示在线玩家,2 表示行会变量。排序 0 升序,1 降序。取前N名可以控制只取前几名,比如只取前10名做排行榜。

示例:

IF
ACT
SortHumVar 在线积分 S积分排行 N积分排行 1 1 10

这段脚本会把当前在线玩家的“在线积分”按降序排序,前10名写入 S积分排行1 到 S积分排行10,对应数值写入 N积分排行1 到 N积分排行10。之后可以直接用 SENDMSG、#SAY 或界面显示命令把排行展示出来。

变量类型要提前声明。自定义变量不能以 P、D、M、N、S、I、G、A 开头,否则会和系统变量冲突。 声明方式通常是:

VAR Integer HUMAN 在线积分

声明后配合 INC、DEC、CALCVAR 等命令更新数值,再用排序命令读取。保存个人变量用 SAVEVAR HUMAN,保存全局变量用 SAVEVAR GLOBAL,保存行会变量用 SAVEGuildVAR。

做排行榜时,建议先用 SortHumVar 把结果写入变量,再用循环或固定索引显示。比如:

SENDMSG 0 第1名:<STR(S积分排行1)> 积分:<STR(N积分排行1)>
SENDMSG 0 第2名:<STR(S积分排行2)> 积分:<STR(N积分排行2)>

如果做在线玩家统计,可以排序后读取文件行数,或者用取前N名参数控制数量。不要把所有在线玩家全部显示到聊天框,容易刷屏。更稳妥的做法是写入NPC界面,让玩家自己点击查看。

排查问题时先看变量是否已经赋值。排序命令只排已有值的在线玩家,如果变量未初始化,可能不会出现在结果里。其次确认排序范围,SortHumVar 的范围参数填 0 会包含离线玩家,填 1 才只排在线玩家。 再看保存路径是否有写入权限,QuestDiary 目录不存在时文件可能无法生成。最后确认排序后是否重新读取,文件写入后如果脚本继续读取旧内容,需要重新 LOADVAR 或改用变量直接读取。

实际配置可以按这个顺序走:先在脚本或QM里声明自定义变量;在玩家触发事件时更新变量值;使用 SortHumVarToList 或 SortHumVar 排序;把结果写入文件或脚本变量;在NPC、公告或GM面板中读取显示。传统M2类引擎优先用 SortHumVarToList,996引擎优先用 SortHumVar,两者不要混用,否则容易提示未知命令。