当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇沙城主奖励脚本漏洞排查无限领取问题根源与修复

热度:
你提供的沙城主奖励脚本中,“老区每日奖励”出现无限领取漏洞,核心症结是变量控制逻辑断裂。本文结合脚本代码逐行拆解问题,给出可直接落地的修复方案。

一、漏洞现象:老区奖励为何能无限领?

脚本中“老区每日城主奖励200易点”的领取入口关联@lqc1标签,沙城主点击领取后,道具和元宝正常到账,但再次点击仍能重复领取。问题并非权限校验失效,而是控制领取次数的变量没起到作用。

二、漏洞根源:变量“判断与扣减”完全脱节

传奇脚本控制“单次/每日领取”的核心逻辑是“变量判断资格→发放奖励→修改变量锁死资格”。你的脚本打破了这个闭环,具体问题出在@lqc1和@yd两个关键标签中。

1.资格判断:只认g211,却没锁住它

@lqc1标签是领取资格的“守门人”,逻辑上只允许g211=1的沙城主进入领取环节,代码如下:

[@lqc1]
#if
EQUALg2110
#ACT
goto@wb;g211=0时跳转到“奖励已发”提示
#if
equalg2111
#act
goto@yd;g211=1时允许进入领取环节

这段逻辑本身没问题,但“守门人”只查不锁——领取后没有将g211从1改为0,导致下次判断时资格仍有效。

2.奖励发放:扣错变量,等于没锁门

沙城主进入@yd标签领取奖励后,脚本执行了道具发放和元宝增加操作,但关键的变量扣减命令用错了变量名,代码如下:

[@yd]
#if
HOUR2222;时间校验
MIN159;时间校验
ISCASTLEMASTER;沙城主身份校验
#act
give城主之刃2;道具发放(省略部分道具命令)
GameGold+8000;元宝发放
decg2121;错误核心:扣减了无关变量g212
sendmsg0沙城主%s已经成功领取攻城奖励!

核心矛盾:判断资格用的是g211,领取后却扣减了g212——这个g212在整个脚本中既没初始化,也没参与任何判断,扣减它对g211的状态毫无影响。相当于“用A钥匙开门,却把B钥匙掰断锁门”,自然锁不住。

3.附加问题:变量初始化缺失

控制老区奖励的g211变量,仅在@qc标签中被赋值为1,非管理员进入脚本时不会触发@qc,可能导致g211初始状态混乱,出现“该领的领不了,不该领的能重复领”的随机问题。

三、完整修复方案:3步补全变量控制闭环

修复思路:让“判断变量”和“扣减变量”统一为g211,同时补全变量初始化,确保每次领取后资格被正确锁死。

步骤1:给g211加“初始状态”,避免混乱

在@main标签的管理员分支中,添加g211的初始化命令,确保每天重置后状态正确。修改后的@main标签代码:
[顶部]