当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

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

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

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

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

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

示例:

IF
ACT
SortHumVarToListHUMAN积分..QuestDiary在线积分排行.txt1

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

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

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

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

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

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

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

示例:

IF
ACT
SortHumVar在线积分S积分排行N积分排行1110

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

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

VARIntegerHUMAN在线积分

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

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

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

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

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

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