传奇NPC对话框多色选择配置参数详解与GOM/GEE/HGE三引擎脚本实例对照

来源: 作者: 点击:
NPC对话框的颜色控制依靠颜色代码与标签语法的组合实现。不同引擎的语法存在差异,核心分为固定颜色名、十六进制色值和数字索引三种体系,下面逐一展开。

一、颜色代码体系

颜色代码有三套并行体系,引擎通常同时支持其中两到三种。

第一套是数字索引,取值范围0至255。这是最通用的体系,GOM、GEE、HERO、LEG等引擎均支持。250对应亮红色,254对应亮白色,251对应亮黄色,253对应粉红色,180对应蓝色,69对应浅蓝色,168对应绿色。数字越接近255颜色越亮,越接近0颜色越暗。SCOLOR和FCOLOR标签均使用这套数值。

第二套是预定义英文颜色名,主要用于COLOR标签。可用的颜色名包括clBlack、clMaroon、clGreen、clOlive、clNavy、clPurple、clTeal、clGray、clSilver、clRed、clLime、clYellow、clBlue、clFuchsia、clAqua、clLtGray、clDkGray、clWhite、clMoneyGreen、clSkyBlue、clCream、clMedGray。写法为 `<COLOR=clSkyBlue 你好!>` ,注意颜色名后面直接跟空格再接文字。

第三套是十六进制色值,格式为#RRGGBB,例如#FF0000为纯红,#00FF00为纯绿,#0000FF为纯蓝,#FFFF00为黄色,#9900FF为紫色。HGE引擎的fc属性同时支持数字索引和十六进制两种写法,例如 `fc=255` 或 `fc=#FF00FF` 效果等价。

二、基础单色变色语法

最常用的固定单色变色写法为:

```
<显示文字/FCOLOR=颜色代码>
```

尖括号是引擎识别颜色标签的边界符号,FCOLOR后面等号连接0至255的数值。例如 `<领取新手奖励/FCOLOR=254>` 显示亮白色文字,`<警告:本次操作将扣除10000金币/FCOLOR=250>` 显示亮红色警告。

另一种写法是SCOLOR标签,格式为在文字末尾附加 `/SCOLOR=数值`。例如 `<游戏伴随我/#sCOLOR=250>` 显示为250号颜色。SCOLOR标签在LEG引擎中尤为常见,GOM和GEE引擎同样兼容。

COLOR标签的写法不同,颜色值放在标签内部:

```
<COLOR=clRed 红色文字>
<COLOR=#FF0000 自定义红色>
```

COLOR标签用尖括号包裹颜色定义,不需要在文字后追加闭合标签,写法更简洁。

三、多色选项的具体实现

以福利NPC的功能选项为例,将免费选项设为绿色、付费选项设为红色、稀有选项设为紫色:

```
[@福利NPC]
#ACT
ASK请选择您需要的服务:\
1.<color=00FF00>免费领金疮药</color>\
2.<color=FF0000>付费开狂暴(100元宝)</color>\
3.<color=9900FF>稀有道具兑换</color>\
4.<关闭/@exit>
ANSWER1
GIVE 金疮药 10
SENDMSG 2 已领取10个金疮药!
break
ANSWER2
#IF
CHECKGAMEGOLD > 99
#ACT
GAMEGOLD - 100
SETUSERPROP 狂暴状态 1
SENDMSG 2 狂暴状态已激活!
break
#ELSEACT
MESSAGEBOX 元宝不足
break
```

这段脚本中,选项1使用 `color=00FF00` 包裹文字,显示为绿色;选项2使用 `color=FF0000`,显示为红色;选项3使用 `color=9900FF`,显示为紫色。每个 `<color=>` 标签必须用对应的 `</color>` 闭合,否则后续所有文字都会继承该颜色。

如果使用FCOLOR写法,同一脚本改为:

```
ASK请选择您需要的服务:\
1.<免费领金疮药/FCOLOR=168>\
2.<付费开狂暴(100元宝)/FCOLOR=250>\
3.<稀有道具兑换/FCOLOR=253>\
4.<关闭/@exit>
```

FCOLOR标签直接跟在文字后面,无需闭合标签,写法更简洁但可控制的样式属性少于COLOR标签。

四、动态变色与七彩循环

变量内容的变色写法与固定文字不同,格式为:

```
{<$变量名>/FCOLOR=颜色代码}
```

大括号作为变量内容的边界标识,引擎先解析变量取值再渲染颜色。例如:

```
{<$USERNAME>/FCOLOR=254}当前金币:{<$GOLD>/FCOLOR=250}
剩余刷新时间:{<$REMAINTIME>/FCOLOR=168}
```

`<$USERNAME>` 自动获取玩家角色名,配合FCOLOR=254显示为亮白色;`<$GOLD>` 获取金币数量,配合FCOLOR=250显示为亮红色。

七彩自动变色使用AUTOCOLOR标签,格式为:

```
<文字/AUTOCOLOR=254,251,168,191,250,70,245,249,253>
```

多个颜色代码用逗号分隔,引擎按顺序循环切换颜色,形成彩虹滚动效果。GOM和GEE引擎均支持此写法,颜色代码数量不限,通常填入6至8个高辨识度数值即可。

五、点击跳转与选项颜色控制

可点击文字的颜色控制需要将颜色标签与跳转指令结合。GOM引擎的写法为:

```
<可以触发字段颜色{FCOLOR=250}/@跳转1>
<可以触发自动变色{AUTOCOLOR=254,251,168,191,250,70,245,249,253}/@跳转2>
```

颜色标签用大括号包裹,紧跟在文字之后,跳转指令 `@标签名` 用斜杠连接。

HGE引擎的新格式采用属性列表写法:

```
<{s=我是文字描述;fc=255}/@节点>
```

其中s为文字内容,fc为前景颜色,取值范围0至255或十六进制色值如#FF00FF。还可附加bc属性控制背景颜色,bold属性控制是否描边。HGE的旧格式 `<我是白色文字/FCOLOR=255>` 仍然兼容,但不支持点击链接。

铁血引擎使用FCO参数控制标签颜色,支持三种状态分别定义:

```
{文字=FCO=(正常色值,鼠标滑过色值,按下色值)}
```

例如 `{新热血传奇=FCO=(250,254,168)}` 表示正常显示250号色,鼠标滑过变254号色,按下变168号色。

六、引擎差异与兼容处理

GOM引擎的颜色标签以尖括号加斜杠加属性名形式为主,`<文字/FCOLOR=值>` 和 `<文字/AUTOCOLOR=值列表>` 是标准写法。可点击文字的语法为 `<文字{FCOLOR=值}/@标签>`,颜色定义放在大括号内。

GEE引擎的写法与GOM基本一致,FCOLOR和AUTOCOLOR标签通用。GEE额外支持十六进制写法 `<COLOR=FF0000>文字</COLOR>`,且要求十六进制字母大写,小写不生效。

HGE引擎区分新旧两套格式。新格式使用 `;fc=值` 属性列表,同时支持数字索引和十六进制;老格式使用FCOLOR标签,与GOM兼容但功能受限。HGE新格式还支持htfc和htbc属性,分别控制提示文字前景色和提示框背景色。

LEG引擎以COLOR标签为主,配合预定义英文颜色名使用,写法为 `<COLOR=clSkyBlue 你好!>`,颜色名后直接接空格和文字内容。

七、防刷加固要点

被刷元宝的漏洞常见于FilterStr.txt过滤不严。在版本目录下找到该文件,加入@recruit、@@、InputString、GAMEGOLD等敏感字符,阻断行会招募NPC和二级密码NPC的输入框写入通道。删除行会招募NPC中可写公告的功能,无实际用途的二级密码NPC直接移除。

M2控制台进入查看菜单,选择列表信息下的其他设置,确认用户过滤字符列表中上述字符已生效。检查M2功能设置中的灵符兑换元宝选项,将该兑换比例改为0。

涉及元宝增减的脚本段需加入封包来源校验。角色交易系统的出售金额字段增加正负值判断,防止通过封包输入负数出售金额刷取货币。双击使用类元宝物品的StdMode改为31,Reserved设为99,改为双击触发脚本消耗持久的方式。脚本中必须先检测背包是否存在对应物品,存在则加元宝并收走物品,不存在则判定为非法封包跳转。

脚本修改后需在M2控制器中重新加载脚本文件或重启服务端,仅保存文件不加载脚本不会执行。部分引擎的颜色标签对大小写敏感,十六进制色值必须大写,数字索引无此限制。