内置变量
变量用法
一、% 变量:可以在条件判断、ACT 参数和对话文本中使用
1. 玩家信息
| 变量 | 含义 |
|---|---|
%USERNAME |
角色名 |
%USERID |
账号(邮箱/登录账号) |
%USERMAP |
当前地图文件名(如 3) |
%USERMAPNAME |
当前地图中文名 |
%USERX / %USERY |
当前坐标 X / Y |
%USERJF |
元宝 = 积分(账号级 GameGold) |
%USERREBORNCOUNT |
转生次数 |
| %在线时长分钟 | 玩家在线多少分钟 |
2. 开服时间(来自 Server.ini ServiceOpeningTime)
| 变量 | 含义 |
|---|---|
%CURWEEK |
开服至今第几周 |
%CURDAY |
开服至今第几天 |
%CURHOUR |
开服至今第几小时 |
| %服务器启动时间 | 服务器启动时间 |
| %服务器当前时间 | 服务器当前时间 |
未配置开服时间时全部返回 0。
3. 按钮参数 / 输入框
| 变量 | 含义 |
|---|---|
%ARG(1) ~ %ARG(n) |
按钮 @标签(a,b,c) 括号里的第 n 个实参,从 1 开始;越界返回 0 |
%INPUTSTR |
@@按钮 弹出输入框后玩家输入的内容 |
4. 自定义变量(数量最多、最常用)
| 写法 | 说明 |
|---|---|
%D4``%P1``%S2``%N3 |
D/P/S/N 加一位数字,写入时自动规范化成整数(非数字归 0) |
%任意中文名 |
变量名支持字母/数字/下划线/中文,任意命名 |
⚠️ 重要:这些自定义变量存在 MapObject.NPCVar(内存 List)里,源码中没有任何落库逻辑 —— 玩家下线就全部丢失。要存持久数据,得用:
| 持久方案 | 说明 |
|---|---|
%USERZDY1 ~ %USERZDY9 |
角色级持久变量,存 CharacterInfo.UserZdy1~9 |
CHECK 索引 0/1 |
角色级持久标志位(位图,索引 0~1023) |
二、<$ 变量>:只能写在 #SAY 的对话文本里
1. 基础信息(42 个里最常用的)
| 写法 | 输出 |
|---|---|
<$NPCNAME> |
当前 NPC 的名字 |
<$USERNAME> |
角色名 |
<$LEVEL> |
等级 |
<$CLASS> |
职业(枚举名,如 Warrior) |
<$MAP> |
地图文件名 |
<$X_COORD> / <$Y_COORD> |
坐标 |
<$HP> / <$MAXHP> |
当前血 / 最大血 |
<$MP> / <$MAXMP> |
当前蓝 / 最大蓝 |
<$GAMEGOLD> |
金币(见下方注意事项) |
<$USERJF> |
元宝 / 积分(账号级 GameGold) |
<$PKPOINT> |
PK 值 |
<$DATE> |
当天日期(短格式) |
<$USERCOUNT> |
当前在线人数 |
<$GUILDNAME> |
行会名,无行会输出“没有...” |
<$OUTPUT(A1)> |
输出自定义变量的值;D/P/S/N+数字 未定义时显示 0 |
2. 装备显示(没穿会输出“没有装备XX”)
<$ARMOUR> 衣服 · <$WEAPON> 武器 · <$HELMET> 头盔 · <$NECKLACE> 项链
<$BRACELET_L>``<$BRACELET_R> 手镯 · <$RING_L>``<$RING_R> 戒指
<$BOOTS> 鞋 · <$AMULET> 护身符 · <$STONE> 宝石 · <$TORCH> 火把
3. 攻城专用(参数是变量名,用得少)
<$CONQUESTOWNER(C1)> 城主 · <$CONQUESTGOLD(C1)> 资金
<$CONQUESTRATE(C1)> 比率 · <$CONQUESTSCHEDULE(C1)> 日程
<$CONQUESTGUARD(C1,G1)> 守卫 · <$CONQUESTGATE(C1,G1)> 城门 · <$CONQUESTWALL(C1,G1)> 城墙 · <$CONQUESTSIEGE(C1,G1)> 攻城车
括号里是存放索引的变量名,例如先用 SETVAR 把城堡序号写进 C1。
三、5 个需要注意的问题(建议重点标记)
<$GAMEGOLD>输出的是金币,不是元宝。 源码里是player.Gold;要显示元宝必须用<$USERJF>。<$PARCELAMOUNT>也是金币(player.Gold),名字叫“包裹数量”但完全不对应,不要相信名字。<$GUILDWARTIME>/<$GUILDWARFEE>已经失效:switch 里对应分支被注释掉了,newValue一直是空串,写了会显示空白。%D4这类自定义变量不会持久保存,下线就丢失。需要跨登录保留的数据,必须用%USERZDY1~9或CHECK标志位。- 变量名大小写不敏感(内部统一
ToUpper匹配),但%和<$两种写法不能混用:%USERNAME在 SAY 文本里能用(会被替换),<$USERNAME>在#IF条件里不能用。
另外提醒一句:% 变量在 #IF 的检测参数里同样生效,所以可以写 CHECKLEVEL > %D1、CHECKGAMEGOLD >= %NEEDGOLD 这种动态阈值,比写死数字灵活很多。