检测人物是否正在使用改变颜色功能,核心命令是CHECKHEARMSGCOLOR。该命令用于判断目标人物当前是否处于玄绿、玄紫、玄褐三种颜色状态中的任意一种,条件成立时返回真,不成立时返回假。
## 命令基本格式与参数说明
CHECKHEARMSGCOLOR不带任何参数,直接写在#IF条件段落中即可使用。
基本语法结构如下:
```
#IF
CHECKHEARMSGCOLOR
#SAY
你正在使用改变颜色功能
#ELSESAY
你没有使用改变颜色功能
```
该命令的判断对象为脚本执行时的当前人物。在NPC对话脚本中直接调用时,检测的是正在与NPC对话的玩家角色。如果在定时器或全局触发脚本中使用,检测对象为触发脚本执行的当前角色。
该命令支持的三种颜色状态分别对应玄绿、玄紫、玄褐。当人物通过物品、技能或其他脚本命令获得了这三种颜色效果中的任意一种时,CHECKHEARMSGCOLOR条件成立。颜色效果消失或切换到其他颜色时,条件不成立。
## 完整脚本范例
以下为可在NPC脚本中直接部署的完整检测脚本,包含检测分支和对应的处理逻辑:
```
[@变色检测]
#IF
CHECKHEARMSGCOLOR
#ACT
SENDMSG 6 检测结果:当前处于变色状态
GOTO @变色处理
#ELSEACT
SENDMSG 6 检测结果:当前未使用变色功能
GOTO @正常状态
[@变色处理]
#SAY
你正在使用改变颜色功能。\
请选择后续操作:\
〖<取消变色/@取消变色>〗 〖<保持当前/@main>〗\
[@取消变色]
#IF
CHECKHEARMSGCOLOR
#ACT
GMEXECUTE TestStatus 0 0
SENDMSG 6 变色状态已清除
#ELSEACT
SENDMSG 6 当前没有变色状态
[@正常状态]
#SAY
你当前没有使用变色功能。\
〖<返回/@main>〗\
```
该脚本的逻辑解读:进入[@变色检测]段落时,首先使用CHECKHEARMSGCOLOR判断人物是否处于变色状态。条件成立走#ACT分支,发送系统提示后跳转到变色处理段落;条件不成立走#ELSEACT分支,跳转到正常状态段落。变色处理段落中,使用GMEXECUTE调用TestStatus命令清除变色效果,TestStatus的第一个参数0代表状态类型,第二个参数0代表清空所有颜色。
## 结合幸运值检测的复合用法
CHECKHEARMSGCOLOR常与CHECKLUCKYPOINT命令配合使用,用于实现幸运值达到特定数值时自动变色、幸运值不足时自动恢复的功能。
CHECKLUCKYPOINT命令用于检测人物的幸运值,格式为CHECKLUCKYPOINT 数量,当人物当前幸运值大于或等于指定数量时条件成立。例如CHECKLUCKYPOINT 9表示检测幸运值是否达到9点。
以下为幸运值触发自动变色的完整脚本:
```
[@幸运变色检测]
#IF
CHECKLUCKYPOINT 9
#ACT
GMEXECUTE TestStatus 4 65535
SENDMSG 6 幸运值达到9点,变色效果已激活
BREAK
#IF
CHECKHEARMSGCOLOR
#ACT
GMEXECUTE TestStatus 0 0
SENDMSG 6 幸运值不足9点,变色效果已移除
```
该脚本的逻辑为:首先检测幸运值是否达到9点,达到时通过GMEXECUTE执行TestStatus 4激活紫色变色状态,65535表示持续时间无限。如果幸运值不足9点但人物当前处于变色状态,则执行TestStatus 0 0清除颜色效果。
## 在脚本中作为前置条件使用
CHECKHEARMSGCOLOR可以作为其他功能脚本的前置判断条件,控制某些操作仅在人物处于特定颜色状态时才允许执行。例如,仅允许变色状态下的玩家进入特定地图:
```
[@进入条件判断]
#IF
CHECKHEARMSGCOLOR
CHECKLEVELEX > 50
#ACT
MAPMOVE 3 330 330
SENDMSG 6 欢迎进入
#ELSEACT
MESSAGEBOX 需要处于变色状态且等级大于50级才能进入
```
该写法将颜色状态检测与等级检测组合在同一个#IF段落中,两个条件必须同时满足才会执行#ACT分支的传送操作。这种复合条件的写法适用于需要多条件限制的场景。
## 结合全局变量记录变色状态
如果需要在一个脚本中判断人物是否曾经使用过变色功能,可以配合全局变量进行状态记录。CHECKHEARMSGCOLOR只能检测当前是否处于变色状态,无法判断历史使用记录,需要通过变量标记来实现。
```
[@记录变色状态]
#IF
CHECKHEARMSGCOLOR
#ACT
SET [100] 1
SENDMSG 6 变色状态已记录
#ELSEACT
SET [100] 0
SENDMSG 6 当前无变色状态
[@查询记录]
#IF
CHECK [100] 1
#SAY
你曾经使用过变色功能
#ELSESAY
你从未使用过变色功能
```
该脚本使用SET命令将检测结果写入全局变量[100],值为1表示处于变色状态,值为0表示未处于变色状态。后续脚本通过CHECK命令读取该变量的值进行判断。全局变量在角色小退或下线后是否保留,取决于引擎的变量持久化设置。
## 常见问题排查
CHECKHEARMSGCOLOR检测结果始终为假。首先确认当前引擎版本是否支持该命令。CHECKHEARMSGCOLOR属于仿盛大系列脚本命令,在部分引擎版本中可能未内置该命令。可以尝试在Command.ini文件中查找是否存在CHECKHEARMSGCOLOR的字段定义,若不存在则需要更换引擎或使用替代检测方案。
检测结果与实际不符。部分第三方颜色补丁或自定义颜色效果可能不被CHECKHEARMSGCOLOR识别。该命令仅识别玄绿、玄紫、玄褐三种标准颜色状态,如果人物使用的颜色效果来自其他来源(如自定义UI补丁、第三方插件),检测命令可能无法正确识别。
脚本不执行。检查CHECKHEARMSGCOLOR是否写在了正确的条件段落中,该命令必须放在#IF和#ACT或#SAY之间,不能单独出现在#ACT段落内。确认脚本文件编码为ANSI或GBK,UTF-8编码可能导致引擎无法正确解析命令。

