SKY传奇动态显示封号非自定义变量设置与脚本调用方法

来源: 作者: 点击:
在SKY引擎或同类传奇引擎中,人物名字上方显示的封号通常不是靠自定义变量直接显示,而是通过称号系统、名称显示格式和脚本指令来控制。常见做法是使用 SETRANKLEVELNAME 指令,配合 string.ini 中的显示格式,实现玩家名字上方动态显示封号。

一、封号显示的基本原理

传奇中的封号显示一般由两部分组成:

string.ini 中的名称显示格式
脚本中通过 SETRANKLEVELNAME 设置具体封号内容

string.ini 决定名字、封号、行会、称号等内容如何组合显示。
脚本决定当前玩家应该显示哪一个封号。

所以“非自定义变量”的意思是:封号显示不依赖 P、D、S、G、H、A 这类自定义变量,而是使用引擎自带的称号或名称显示系统。

二、先开启称号显示系统

打开服务端配置文件:

MirServerMir200!setup.txt

找到称号相关设置:

ShowRankLevelName=1

如果值为 0,称号系统可能不会生效。
需要改成:

ShowRankLevelName=1

保存后重启服务端或重新加载配置,具体看引擎是否支持热加载。

三、配置 string.ini 显示格式

打开:

MirServerMir200Envirstring.ini

找到名称显示相关项,例如:

HumanShowName=%chrname%guildname%dearname%mastername

其中:

%chrname 表示人物名称
%guildname 表示行会名称
%dearname 表示配偶称呼
%mastername 表示师徒称呼
通常用于换行或分层显示

如果希望人物名字上方显示封号,可以保留或加入封号显示位置,例如:

HumanShowName=%chrname%guildname%dearname%mastername

具体格式以当前引擎和版本为准。如果版本中已经有封号显示项,不要随意删除。

四、设置默认封号

在 string.ini 中可以设置一个默认封号,当玩家没有满足任何特殊条件时,就显示这个默认称号。

例如:

RankLevelName=%s平民

这里的 %s 代表玩家名字。
后面的“平民”就是显示在名字上方或旁边的封号内容。

也可以改成其他文字:

RankLevelName=%s新手勇士

如果不想显示默认封号,可以设置成空内容,但不同引擎支持情况不同,建议保留一个基础称号。

五、使用 SETRANKLEVELNAME 动态设置封号

动态封号主要通过脚本指令实现:

SETRANKLEVELNAME %s封号内容]

例如:

SETRANKLEVELNAME %s沙城霸主]

这条指令的作用是:把当前玩家的封号设置为“沙城霸主”。

常见写法:

SETRANKLEVELNAME %s传奇新手]
SETRANKLEVELNAME %s沙城城主]
SETRANKLEVELNAME %s行会精英]
SETRANKLEVELNAME %sVIP会员]

注意:

%s 通常代表当前玩家名字
后面写封号文字
封号内容可以用中括号、符号、汉字等组合
不要写成自定义变量格式,例如不要写成 <P1>、<S1> 这种形式

六、按等级动态显示封号脚本示例

可以在登录触发或管理脚本中写条件判断,根据玩家等级显示不同封号。

示例:

[@main]
IF
CHECKLEVELEX > 99
ACT
SETRANKLEVELNAME %s传奇战神]
Break

IF
CHECKLEVELEX > 79
ACT
SETRANKLEVELNAME %s沙城将军]
Break

IF
CHECKLEVELEX > 59
ACT
SETRANKLEVELNAME %s精英勇士]
Break

IF
CHECKLEVELEX > 39
ACT
SETRANKLEVELNAME %s江湖高手]
Break

IF
CHECKLEVELEX > 19
ACT
SETRANKLEVELNAME %s初入江湖]
Break

IF
CHECKLEVELEX > 0
ACT
SETRANKLEVELNAME %s新手玩家]
Break

这段脚本的逻辑是:

等级大于99级,显示“传奇战神”
等级大于79级,显示“沙城将军”
等级大于59级,显示“精英勇士”
等级大于39级,显示“江湖高手”
等级大于19级,显示“初入江湖”
其他情况显示“新手玩家”

条件顺序要从高到低写,避免低等级条件先被触发。

七、按身份动态显示封号示例

除了等级,也可以按身份判断封号。

示例:

[@main0]
IF
ISCASTLEMASTER
ACT
SETRANKLEVELNAME %s沙城城主]
Break

IF
ISGUILDMASTER
ACT
SETRANKLEVELNAME %s行会会长]
Break

这样沙城城主和行会会长可以显示不同封号。

如果版本支持更多身份判断,也可以继续扩展,例如:

是否加入行会
是否是沙城成员
是否达到指定转生等级
是否拥有指定物品
是否完成指定任务

八、登录时自动刷新封号

如果希望玩家一上线就显示正确封号,可以在登录触发脚本中调用封号判断。

常见路径:

MirServerMir200EnvirMapQuest_defQManage.txt

在登录相关段落中加入调用:

[@Login]
IF
CHECKLEVELEX > 0
ACT
CALL [登陆封号.txt] @称号

然后在对应脚本文件中写封号判断:

[@称号]
{
if
CHECKLEVELEX > 99
act
SETRANKLEVELNAME %s传奇战神]
break

if
CHECKLEVELEX > 59
act
SETRANKLEVELNAME %s精英勇士]
break

if
CHECKLEVELEX > 0
act
SETRANKLEVELNAME %s新手玩家]
break
}

具体触发标签名称以引擎为准,有些版本使用 [@Login],有些使用 [@main],有些需要放在 QFunction 或登录脚本中。

九、不显示封号的常见原因

如果设置后封号没有显示,可以按下面顺序检查。

ShowRankLevelName 没有开启

检查 !setup.txt:

ShowRankLevelName=1

如果是 0,封号系统可能不会生效。

string.ini 显示格式没有包含封号位置

检查 string.ini 中的名称显示格式,确认封号显示项没有被删除或覆盖。

脚本没有触发

检查脚本是否放在正确的触发位置。
如果写在 QManage.txt 中,需要确认登录触发标签是否正确。

条件判断顺序错误

例如:

if
CHECKLEVELEX > 0
act
SETRANKLEVELNAME %s新手玩家]
break

if
CHECKLEVELEX > 99
act
SETRANKLEVELNAME %s传奇战神]
break

这种写法会导致高等级玩家也被“大于0级”的条件先截断,最终只显示“新手玩家”。

正确做法是从高到低判断:

if
CHECKLEVELEX > 99
act
SETRANKLEVELNAME %s传奇战神]
break

if
CHECKLEVELEX > 0
act
SETRANKLEVELNAME %s新手玩家]
break

封号内容格式错误

正确写法示例:

SETRANKLEVELNAME %s封号内容]

不要写成:

SETRANKLEVELNAME <P1>

也不要写成:

SETRANKLEVELNAME <STR(S1)>

这类写法属于自定义变量显示,不是封号系统标准用法。

修改后没有重新加载

修改脚本或配置后,需要重新加载脚本或重启服务端。
部分引擎支持在M2或控制台重新加载脚本,不需要完全重启。

十、完整设置流程

完整流程可以按这个顺序操作:

打开 !setup.txt,设置 ShowRankLevelName=1
打开 string.ini,确认名称显示格式中包含封号显示项
设置默认封号,例如 RankLevelName=%s平民
编写封号脚本,使用 SETRANKLEVELNAME %s封号内容]
在登录触发或管理脚本中调用封号判断
保存文件后重新加载脚本或重启服务端
进入游戏查看人物名字上方是否正常显示封号

十一、注意事项

封号内容不要过长,过长可能影响游戏界面显示
特殊符号不要太多,部分符号可能导致显示异常
不同引擎对 、%s、SETRANKLEVELNAME 的支持可能有差异
如果当前版本不支持 SETRANKLEVELNAME,需要确认引擎是否开启称号系统
不要混淆封号显示和自定义变量显示
修改前建议备份 !setup.txt、string.ini 和相关脚本文件

按照这种方式设置后,传奇人物封号就可以通过等级、身份、登录触发等条件动态显示,而不需要依赖自定义变量。