当前位置:首页 > 实操教程 > GOM引擎 > 正文内容

GOM引擎脚本程序变量怎么选?私人与全局变量区别

M2GM2026-07-31GOM引擎92
摘要:本文梳理GOM引擎脚本程序变量十一类段,P、D、M、N、S为私人变量,I、G、A为全局变量,U、T、J为可保存私人变量。逐段说明下线保存、重启重置、存档路径与取值范围,对比STR与CSTR、<$CONST(X)>常量写法,附三级运算案例和七条常见问答,帮助版本搭建者选对变量段避免数据丢失。…
[TOCM]

GOM引擎的脚本程序变量一共分P、D、M、N、S、I、G、A、U、T、J十一段,选对变量段是脚本不串值、不丢值的前提。

想做杀怪计数、存玩家名字、跨NPC传递数据这类玩法,都要先分清哪些变量下线保留、哪些重启清零,否则玩家小退一次数据就空了。这篇把十一段变量的保存规则、取值范围和常见报错一次理清,属于版本调试里绕不开的脚本变量排错内容,也是新手必须掌握的变量实操用法。

GOM引擎脚本程序变量分类配图 - M2GM

程序变量类型与取值范围

程序变量按保存特性分成私人变量和全局变量两大类。私人变量挂在单个玩家身上,全局变量在全本地服务端范围内唯一。十一段变量的性质和保存规则如下表:

变量段 性质 保存与重置规则
P0-P999 私人数字型 关闭对话框重置为0
D0-D999 私人数字型 下线不保存,摇筛子变量
M0-M999 私人数字型 下线不保存,切换地图清空
N0-N999 私人数字型 下线不保存,小退归0
S0-S999 私人字符型 下线不保存,小退归0
I0-I999 全局数字型 不可保存,本地服务端重启自动重置为0
G0-G999 全局数字型 可保存,存放在Mir200目录下的GlobalVal.ini
A0-A999 全局字符型 可保存,存放在Mir200目录下的GlobalVal.ini
U0-U254 私人数字型 可保存,存人物数据库Mir.db,取值正负21亿
T0-T254 私人字符型 可保存,存Mir.db,字符长度200,1个字母算1字符、1个汉字算2字符
J0-J254 私人数字型 可保存,每晚12点自动重置,存Mir.db,取值正负21亿

显示变量值时,查看自己用<$STR(S0)>,查看当前对象用<$CSTR(S0)>,比自己的写法多一个C。当前对象的常量则用<$C.HP>这类写法,在攻击、被攻击、死亡等触发段里取对方数值。

GOM引擎脚本程序变量取值范围示意图 - M2GM

变量使用误区

第一个坑是自定义变量名撞了保留字母。源文档明确提醒:自定义变量名称不要以P、D、M、N、S、I、G、A、U、T、J开头,否则引擎会把它当成保留变量段解析,取到意料之外的值。

第二个坑是用了N98和N99。这两个变量是游戏里鼠标在地图上的坐标数字,值一直跟着鼠标动,拿它存计数会被坐标冲掉,源文档专门提醒不要使用。

第三个坑是把全局变量当私人变量用。G、A段全局变量不属于任何人物,任何人运算都会改同一个值,想给每个玩家单独计数必须用U、T、J这类私人可保存变量。

遇到地图名和变量名撞车时,用<$CONST(X)>把它标记成常量字符,例如MAP <$CONST(N0)>表示传送到地图名叫N0的那张图,而不是把N0当变量取值。

变量运算拓展案例

初级用法:用P段做临时计数,配合goto实现仿for循环,对话关闭自动归0,不用手动清理。

#IF
small P0 5
#ACT
MOV N0 3
INC P0 1
GOTO @计数段

中级用法:用S段存玩家输入的名字,对话里用<$STR(S0)>把名字读出来拼进提示文字,小退后自动清空,适合一次性登记场景。

#IF
check ...
#ACT
SENDMSG 你输入的名字是<$STR(S0)>

高级用法:用U段存需要长期保留的数字,例如玩家累计充值次数,下线再上还在;用J段存每日刷新的计数,到点自动归零,不用自己写定时器清。

GOM引擎脚本程序变量配置示意图 - M2GM

变量赋值实操

第一步,先想清楚这个值要不要下线保留:要临时算一遍就选P段,要跨NPC传但下线清空选D段,要长期存人物身上选U或T段。

第二步,数字用字母后面跟数字的段,名字文字用S、A、T这类字符段,别把数字塞进字符段再做加减。

第三步,在NPC脚本里用MOV赋值、INC或DEC做加减,取值时按查看自己加STR、查看对象加CSTR的规则写。

第四步,改完脚本在本地服务端重载NPC,进游戏小退再上线,确认变量值是否按预期保留或清零。

问题排查

1. 问:私人变量P、D、M、N、S下线后都会清空吗?

这五段都是下线不保存的私人变量,但清空时机不同:P段关对话框就归0,M段切地图清空,N段和S段小退归0,D段要等到下线才清空。想长期保留玩家数据,私人变量里只有U、T、J三段是写进Mir.db的。(本条问题整理自百度知道真实提问:传奇脚本全局所有变量使用说明)

2. 问:P变量为什么换个NPC就变成0了?

P变量只在当前对话NPC内有效,中途点其他NPC或者对话被close关闭,所有P变量一起归0,它本身没有NPC间传递性。这是设计如此,不是报错。需要跨NPC传递就改用D段,D段在人物不下线时对全局NPC通用。(本条问题整理自百度知道真实提问:传奇变量的名词解释,大师进来指点一下(NPC的传递性))

3. 问:S变量和T变量都是字符型,该用哪个?

两段都是字符型,差别在保存:S段下线不保存、小退归0,适合一次性输入;T段可保存进Mir.db,字符长度200,1个字母算1字符、1个汉字算2字符,适合长期存玩家名字这类文本。要留存用T,临时用S。(本条问题整理自百度知道真实提问:传奇自定义字符变量怎么用)

4. 问:G变量和A变量存在哪个文件里?

G段数字型和A段字符型都是全局可保存变量,统一存放在Mir200目录下的GlobalVal.ini文件里。它们不属于任何人物,全本地服务端范围内唯一,任何人运算都会改同一个值,适合做全服计数器这类全局数据。

5. 问:J变量为什么每天零点自动清零?

J段是私人数字型可保存变量,存Mir.db,取值范围正负21亿,但它有个特殊规则:每晚12点自动重置。合区或关停本地服务端时要错开00:00这个时点,否则正好在重置边界容易丢当天数据。做每日签到、每日计数就用J段。

6. 问:脚本里变量取值为空或报错怎么排查?

先查变量段用对没有:数字段被塞进文字、字符段被拿来做加减都会取空。再查N98、N99这种被鼠标坐标占用的段有没有误用。最后看显示写法,查看自己用STR、查看对象用CSTR,少写那个C就会取不到当前对象的值。

7. 问:查看自己变量和查看当前对象变量写法差在哪?

查看自己的变量写<$STR(S0)>,查看当前对象的变量写<$CSTR(S0)>,差别就是多一个C。在攻击触发、被攻击触发、死亡触发这类面对另一方的段里,想取对方数值必须加C,否则读到的还是自己的值。

选段要点梳理

选变量段先看三件事:要不要下线保留、数字还是文字、单人还是全服。临时计数用P,跨NPC传值用D,长期存人物用U和T,每日刷新用J,全服唯一用G和A。脚本程序变量选对了段,计数和名字才不会小退就空、重启就丢。

上面这套P、D、M、N、S、I、G、A、U、T、J全类型变量的取值与保存规则,均在本地GOM引擎环境逐段赋值实测过;这些变量段命名与存储位置仅适配GOM引擎,换到其他引擎时段字母和存档路径未必一致,跨引擎使用前请自行搭环境验证。以下内容仅限单机本地学习调试。

扫描二维码推送至手机访问。

本文章M2GM发布,如需转载请注明出处。如有侵权请联系站长删除。

本文内容仅供个人单机学习研究、功能调试、玩法逻辑测试使用,不涉及任何公网搭建、商业运营、资源交易行为,仅用于个人学习与实操体验。

本文链接:https://www.m2gm.com/tech/gom/gom-yin-qing-jiao-ben-che/

分享给朋友:

相关文章

GOM引擎变量赋值MOV INC DEC脚本教程 - 角色变量读写与跨对象调试

GOM引擎变量赋值MOV INC DEC脚本教程 - 角色变量读写与跨对象调试

本文围绕GOM引擎MOV、INC、DEC变量操作命令,讲普通NPC段里MOV赋值与INC、DEC加减的基本写法,重点拆解攻击触发、被攻击触发等跨人物场景取值规则:当前对象常量用C点字段、变量用CSTR,比自己的STR多一个C;配合SetCurrTarget手动指定目标人物,附字符型与数字型运算差异与不生效排查。…

GOM引擎物品人物绑定BindUseItem命令脚本教程

GOM引擎物品人物绑定BindUseItem命令脚本教程

本文围绕GOM引擎BindUseItem物品人物绑定功能展开,讲清绑定命令的标准写法,拆解帐号、角色名、IP三种绑定维度与十二个装备部位参数,配合ShowUseItemInfo查看穿戴信息。附三个脚本案例、绑定不生效分步排查和七条问答,帮助版本搭建者在本地服务端完成装备锁定调试。…

HGE引擎CheckItemAtt脚本教程 - 物品Att属性ID与数值检测方法

HGE引擎CheckItemAtt脚本教程 - 物品Att属性ID与数值检测方法

本文针对HGE引擎CheckItemAtt系列脚本展开实操讲解,区分CheckItemAttId与CheckItemAttPoint的功能差异,详解全部参数含义、三阶实操案例与落地步骤,汇总新手避坑要点和常见报错修复方案,帮助零基础学习者快速掌握物品Att属性检测调试技巧。…

大秦插件查找键值命令用法详解 - 键值存在性判断教程

大秦插件查找键值命令用法详解 - 键值存在性判断教程

查找键值命令DQHashTableContainsKey放在#IF条件段判断单个标识是否存在,命中走#ACT分支,不区分大小写;它不做前缀模糊列出,只判断单条记录在不在,所谓模糊匹配键值是误传;常用于登录先查再读、活动开关判断、重复写入前拦截;读前先查存在、命中再读、未命中写默认值,形成查询闭环。…

大秦插件JZ扩展变量怎么开?J0J99数字Z0Z99字符脚本教程

大秦插件JZ扩展变量怎么开?J0J99数字Z0Z99字符脚本教程

JZ扩展变量J0-J99存数字Z0-Z99存字符;私人变量只属于当前玩家每人一份互不影响;先在M2插件选项扩展功能配置一里勾变量扩展开关再重启M2才生效;可保存跨大退重登不丢;每天零点自动清零不用手动重置;J管数字计数Z管文本名字;常用于每日签到、今日杀怪、今日充值、玩家专属任务进度。…