GOM引擎变量赋值MOV INC DEC脚本教程 - 角色变量读写与跨对象调试
摘要:本文围绕GOM引擎MOV、INC、DEC变量操作命令,讲普通NPC段里MOV赋值与INC、DEC加减的基本写法,重点拆解攻击触发、被攻击触发等跨人物场景取值规则:当前对象常量用C点字段、变量用CSTR,比自己的STR多一个C;配合SetCurrTarget手动指定目标人物,附字符型与数字型运算差异与不生效排查。…
昨晚在本地服务端写攻击触发脚本,想把攻击者身上的字符变量值抄一份给被攻击人,照着普通NPC里的写法往下填,结果两边变量互相覆盖,测试时数值全乱。问题不在MOV命令本身,而在攻击触发这种跨人物场景里,取值对象变了,写法也要跟着变——这就是变量赋值里最容易栽跟头的地方。
普通写法和跨对象写法的差别就一个字母。自己给自己赋值用STR取值,要取当前攻击对象的变量则要写成CSTR,前面多一个C。少这个C,在攻击触发里取到的还是自己,不是对面那个人。
下面把MOV INC DEC变量赋值在跨对象场景下的取值规则、SetCurrTarget手动切换对象的方法,以及脚本调试中常见不生效的排查点按调试顺序讲清楚。

MOV与CSTR变量读写格式
MOV是变量赋值命令,把右边的值写进左边的变量。在普通NPC对话段里,变量默认指代当前对话的这个人,直接赋值即可。
但在攻击触发、被攻击触发、死亡触发,以及查看出售角色其他信息这类触发段里,脚本上下文里同时存在两个人物:触发者和当前对象。这时候要取对方的数据,常量前面加个点号,变量前面加个C。
当前对象的私人常量写法形如<$C.HP>、<$C.PKPOINT>、<$C.GOLDCOUNT>、<$C.GAMEGOLD>、<$C.USERNAME>、<$C.LEVEL>。当前对象的私人变量写法形如<$CSTR(S1)>、<$CSTR(A1)>、<$CSTR(T1)>、<$CSTR(U1)>、<$CHUMAN(QQQQ)>、<$CGUILD(WWWW)>。相比查看自己的变量<$STR(S1)>,取当前对象的版本只是在前面多一个C。
攻击触发段的标准写法如下,把自己的字符变量抄给被攻击人,再把对方数字变量抄回自己身上:
[@Attack]
#IF
CHECKCURRTARGETRACE = 0
#ACT
MOV <$CSTR(S1)> <$STR(S1)>
SENDMSG 6 把我的S1变量值传递给被攻击人的S1变量里
MOV <$STR(N1)> <$CSTR(N1)>
SENDMSG 6 把对方的N1变量值传递给我的N1变量里
SENDMSG 6 你攻击了人物【<$C.USERNAME>】。使用魔法ID=<$CURRRUSEMAGICID>
BREAK

变量类型与参数说明
GOM引擎的变量按存储内容分数字型和字符型,赋值命令通用但运算方式不同。多参数写法对照如下。
| 参数位置 | 参数释义 | 实操用法 |
|---|---|---|
| MOV目标来源 | 把来源值写入目标变量 | 给字符变量赋文本,给全局数字变量清零 |
| INC目标增量 | 目标变量加上增量 | 数字变量在自身基础上加上另一个变量的值 |
| DEC目标减量 | 目标变量减去减量 | 全局变量每次自减固定值,写法与INC对称 |
| CSTR取值 | 取当前对象的变量值 | 攻击触发里抄对方变量时用,比自己的STR多一个C |
| C点字段 | 取当前对象的常量字段 | 取对方当前HP、对方名字等固定字段 |
| SetCurrTarget | 手动指定当前对象 | 按变量里存的人物名把对象切过去,空参数清空 |
数字型变量P0到P9、G0到G499、M0到M99、I0到I99都用同一套MOV、INC、DEC做读写。G是全局数字型,全服共享;M和I是私人数字型,各自独立。字符型变量S、A存文本,直接拼接是字符串连接,不是数值相加。
常见坑点
报错现象:跨对象赋值后变量没变化
在攻击触发里写了把自己变量传给对方的语句,测试时被攻击人那边始终读不到值。核心成因是触发段里没有先确认当前对象存在,或者CHECKCURRTARGETRACE条件没拦住。排查时先加SENDMSG把当前对象名字打出来看是不是空对象,再确认MOV语句确实落在执行段里。
报错现象:字符型变量相加结果变成拼接
想让字符变量做加法,写完增量命令结果从5变成52。核心成因是字符变量走文本连接,不是数值运算。正确做法是先把字符值读进数字变量,在数字变量上做乘或加,再写回字符变量。
报错现象:SetCurrTarget切对象后检测不通过
用SetCurrTarget设置了对象,但对比名字的检测始终失败。核心成因是变量里存的人物名和实际在线人物名对不上,或者名字带了多余空格。先用SENDMSG把当前对象名字和变量原值分别打出来对照,名字一致后再做后续抄值。

脚本配置实操
下面在QFunction-0.txt的攻击触发段里,做一次从攻击者到被攻击人的变量互抄,走通完整链路。
第一步,打开本地服务端Envir目录下的QFunction-0.txt,找到或新建攻击触发段,在判断条件下写CHECKCURRTARGETRACE = 0,确保当前锁定的是一个人物目标。
第二步,在执行段下写MOV <$CSTR(S1)> <$STR(S1)>,把自己的字符变量写进被攻击人身上;再写MOV <$STR(N1)> <$CSTR(N1)>,把对方的数字变量抄回自己身上。
第三步,用SENDMSG 6在屏幕打印中间变量,把当前对象名字和两边变量值都打出来,保存脚本后在M2里重新加载QF脚本。
第四步,进游戏找另一个号互砍,观察被攻击人身上字符变量是否变成攻击者的值、自己身上数字变量是否变成对方的值,对得上说明跨对象取值生效。
拓展变量传值案例
初级案例:NPC对话里给字符变量赋文本。在执行段写MOV加变量名加文本,在NPC对话框里用STR读取就能把这段文本显示出来,改文本只需改MOV后面那串字。
中级案例:手动切换对象抄数据。先把目标名字存进一个变量,再用SetCurrTarget把当前对象切到这个人物,接着用当前对象名字确认切换成功,最后把自己的字符变量写到对方身上。手动切对象的完整写法如下:
[@main]
#IF
#ACT
MOV S1 测试人物
SetCurrTarget S1
#IF
CompareText <$C.USERNAME> S1
#ACT
SENDMSG 6 当前对象名称=【<$C.USERNAME>】
MOV <$CSTR(S1)> <$STR(S1)>
MOV <$STR(N1)> <$CSTR(N1)>
高级案例:做一个连杀计数。用INC全局变量每次击杀加1,DEC全局变量每次死亡减1,全局变量作为全服共享数字变量,再配合SENDMSG把连杀数滚动公告出来。
问答汇总
1. 问:攻击触发里什么时候必须用CSTR取对方变量?
在攻击触发、被攻击触发、死亡触发这些同时涉及两个人物的段里,只要读的是当前锁定对象的数据,常量就用C点字段写法,变量就用CSTR写法。在普通NPC对话段里只有当前对话人一个对象,直接用STR即可,不需要加C前缀。(来源:百度知道,2018-03检索,已去隐私)
2. 问:INC和DEC分别怎么对变量做加减运算?
INC目标变量加增量,把目标变量加上增量;DEC目标变量减减量,把目标变量减去减量。写法上第一个参数直接写变量名,后续要取另一个变量值时必须用STR包裹。例如INC N2加另一个变量,等价于N2在自身基础上加上对方值,DEC N2同理做减法。(来源:百度知道,2018-03检索,已去隐私)
3. 问:字符型S变量能不能直接做加法计算?
不能直接加。字符变量存的是文本,增量命令做的是文本连接,5加2会变成52而不是7。要做数值运算,先把字符值读进数字型变量,在数字变量上用INC或MUL算完,再写回字符变量。(来源:百度知道,2013-11检索,已去隐私)
4. 问:P、G、M、I这些数字型变量都用什么命令操作?
P0到P9是私人数字变量,G0到G499是全局数字变量,M0到M99和I0到I99也是私人数字变量,它们统一用MOV赋值、INC加、DEC减、MUL乘,配合equal、small、large做大小判断。G变量全服共享,M、I、P各人物独立,选哪个取决于数据要不要全服共用。(来源:百度知道,2019-08检索,已去隐私)
5. 问:MOV写了但对方变量没变化怎么排查?
先确认是不是在跨对象段里漏写了C,把STR误当成取对方;再用SENDMSG打印当前对象名字看是不是空;接着检查MOV是否落在执行段而不是判断段;最后确认M2已重新加载QF脚本。这几步排完,脚本调试中绝大多数不生效都能定位。
6. 问:SetCurrTarget和直接CSTR取值有什么区别?
在攻击触发里当前对象就是被锁定的目标,直接用CSTR即可。SetCurrTarget用于非战斗场景手动指定一个对象,比如按变量里存的名字把当前对象切过去,之后所有C点字段、CSTR都指向这个手动指定的人。不写SetCurrTarget,CSTR取的就是触发上下文里的当前对象。
7. 问:怎么清零或重置一个G变量?
G是全局数字变量,重置最直接的办法就是用MOV把它重新赋值为0。如果要批量清,也可以在M2控制台的管理菜单里找到文件管理,执行清除全局G变量。脚本里推荐用MOV显式清零,避免依赖后台手动操作。
核心要点回顾
MOV负责赋值、INC做加、DEC做减,这三个命令在普通段和跨对象段的差别只在取值前缀。自己用STR,对方用CSTR,常量用C点字段,手动切对象用SetCurrTarget。把对象指对、把变量类型分清,变量赋值在跨对象传值场景里就能跑通。
本文涉及MOV、INC、DEC配合CSTR与SetCurrTarget的跨人物取值写法,均在本地GOM引擎攻击触发段实测通过;该套C前缀变量规则属于GOM引擎专属实现,换到其他引擎前请先自行验证兼容差异。仅供单机本地学习调试。
扫描二维码推送至手机访问。
本文章M2GM发布,如需转载请注明出处。如有侵权请联系站长删除。
本文内容仅供个人单机学习研究、功能调试、玩法逻辑测试使用,不涉及任何公网搭建、商业运营、资源交易行为,仅用于个人学习与实操体验。
本文链接:https://www.m2gm.com/tech/gom/gom-yin-qingmov-inc-dec-j/






