传奇之家 - 传奇开区一条龙服务网站

当前位置:传奇之家 > 开区脚本 > > 详细页面

脚本变量分四类:G、A、P 和字符变量,清零时机错了就会串档

脚本变量分四类:G、A、P 和字符变量,清零时机错了就会串档

脚本变量分四类:G、A、P 和字符变量,清零时机错了就会串档

作者:传奇之家类别:开区脚本

更新:2026-11-08查看次数:168

脚本写到后面,出问题的往往不是命令不会用,而是变量放错了地方。活动开关用了 P 变量,服务端一重启活动就没了;签到状态用了 P 变量,玩家小退再上线又能领一次;全服计数用了 A 变量,结果每个玩家各算各的,排行榜永远对不上。命令都没错,错的是“这个东西该活多久”。

下面把四类变量的作用域和生命周期对齐,再给三段可以直接抄的写法,最后是串档的排查顺序。

一、四类变量,各管一件事

G 变量:全服共享,所有玩家读写的都是同一份。适合活动开关、全服进度、跨地图计数。它存在服务端,重启后还在,所以活动做完了必须手动清零,不然下次开区还是“活动已结束”。

A 变量:人物私有,跟着角色存档一起保存。下线、小退、重启都还在,适合签到记录、任务阶段、累计充值返利这类“属于这个人的进度”。

P 变量:人物私有,只在本次在线期间有效。下线清空,部分引擎重启也会清空。适合战斗内计数、本次登录的临时状态,别拿它存任何需要过夜的东西。

S / N 变量:字符型和数字型扩展变量。S 存文本,比如上次领奖时间、玩家填的兑换码;N 存数值,用于超出 P 变量范围的计数。命令写法和前三种一致,区别只在存的内容。

二、什么时候会“没”:四个时间点

小退或大退:P 变量清空,A、G 保留。服务端重启:P 变量可能清空,A、G 保留,但要看引擎是否即时落盘。合区:G 变量容易冲突,两个区都从 0 开始,或者后合并的覆盖先合并的。清档:只清人物不清全局,就会出现“人没了,活动还开着”。

判断标准很简单:问自己“玩家下线再上线,这个值该不该还在”。该在就用 A,不该在就用 P,全服共用就用 G。

三、编号先规划,再写脚本

很多串档问题的根源不是类型选错,而是编号随手写。今天写签到用了 A10,下个月做任务又用了 A10,两段脚本都能跑,但玩家签到完再去做任务,进度直接从 1 开始。等到玩家反馈“任务做不了”,你根本想不到是编号撞了。

开区前先给变量编号划区,写进文档,后面所有脚本照着用:G0 到 G49 留给活动开关,G50 到 G99 留给全服计数;A0 到 A49 留给任务进度,A50 到 A99 留给签到和福利;P0 到 P49 是战斗临时状态;N 变量按功能单独分配。编号一旦定下来就不要复用,废弃的功能留着编号空着,不要回收。

换引擎或者换版本时,这张编号表比脚本本身更重要。脚本可以照着命令改,编号错位则要一条条对存档,工作量完全不是一个量级。

四、三段能直接用的写法

全服活动开关,用 G 变量,注意“开”之前先判断,避免重复公告:

; G10 = 0 关闭,1 开启
[@活动开启]
#IF
EQUAL G10 0
#ACT
MOV G10 1
SENDMSG 0 全服双倍爆率活动开启,持续 60 分钟!

每日签到,用 A 变量记录“已签到到第几天”,再用一个全服日期序号判断是否跨天:

; G20 由 Robot_def 每天 00:00 自增一次,作为日期序号
[@每日签到]
#IF
NOT EQUAL A10 G20
#ACT
MOV A10 G20
GIVE 金创药(大) 5
GAMEGOLD + 50
SENDMSG 6 签到成功,今日奖励已发放,明天再来。

如果你的引擎不支持变量对变量比较,把条件换成 EQUAL <$STR(A10)> <$STR(G20)>,效果一样。

限次领取,用 N 变量存次数,先加后判,顺序别反:

; 每人每天限领 3 次
[@限次领取]
#IF
LARGE N1 2
#ACT
SENDMSG 6 今日次数已用完,明天再来。
BREAK
#IF
#ACT
INC N1 1
GIVE 随机传送卷 1
SENDMSG 6 领取成功,今日第 <$STR(N1)> / 3 次。

注意 BREAK 的位置:条件成立时先提示再中断,别让脚本继续往下跑,否则提示和发奖会同时出现。

五、四个最常见的写法错误

先加后判,顺序反了:限次领取写成先 INC 再判断,结果第 4 次也能领到东西。正确顺序永远是先判断、再执行、最后加次数。

漏写 BREAK:条件成立时只写了提示,没写 BREAK,脚本继续往下跑,提示和发奖同时出现。玩家看到“次数已用完”,背包里却多了东西。

把 A 变量当临时变量用:战斗里不断累加 A 变量,一次战斗写几百次,存档体积越来越大,还容易和任务进度撞号。战斗计数一律用 P 变量。

用 P 变量存签到:测试时一直在线,看起来正常;玩家小退再上线又能领一次,第二天被刷爆。凡是“跨天还在”的东西,都不用 P 变量。

六、串档的三个原因

合区没合并全局变量:两个区的 G 变量各自独立,合完区后一个区的活动进度直接归零,玩家看到的公告对不上。合区前先把 G 变量导出,定好保留哪一边,再执行合并。

清档只清了一半:删角色不重置 G 变量,新赛季第一天活动显示“已结束”,玩家会以为你没开。开区前固定跑一次全局变量初始化。

换引擎后编号含义变了:旧脚本里 A10 是签到标记,新脚本里 A10 被拿去存别的,旧存档一读就错位。换引擎后要么重新规划编号,要么在开区前统一清零。

七、排查顺序

第一步确认变量类型有没有选错,第二步确认清零的触发点在哪(NPC 脚本、Robot_def、还是手动命令),第三步用 GM 命令把值打出来看,别靠猜。三步走完,八成的问题当场就能定位。

排查时最好准备一张表,把变量编号、用途、类型、清零方式四列填满。以后再遇到“数据不对”,先查表再查脚本,速度会快很多。