你提供的沙城主奖励脚本中,“老区每日奖励”出现无限领取漏洞,核心症结是变量控制逻辑断裂。本文结合脚本代码逐行拆解问题,给出可直接落地的修复方案。
一、漏洞现象:老区奖励为何能无限领?
脚本中“老区每日城主奖励200易点”的领取入口关联@lqc1标签,沙城主点击领取后,道具和元宝正常到账,但再次点击仍能重复领取。问题并非权限校验失效,而是控制领取次数的变量没起到作用。
二、漏洞根源:变量“判断与扣减”完全脱节
传奇脚本控制“单次/每日领取”的核心逻辑是“变量判断资格→发放奖励→修改变量锁死资格”。你的脚本打破了这个闭环,具体问题出在@lqc1和@yd两个关键标签中。
1. 资格判断:只认g211,却没锁住它
@lqc1标签是领取资格的“守门人”,逻辑上只允许g211=1的沙城主进入领取环节,代码如下:
[@lqc1]
#if
EQUAL g211 0
#ACT
goto @wb ; g211=0时跳转到“奖励已发”提示
#if
equal g211 1
#act
goto @yd ; g211=1时允许进入领取环节
这段逻辑本身没问题,但“守门人”只查不锁——领取后没有将g211从1改为0,导致下次判断时资格仍有效。
2. 奖励发放:扣错变量,等于没锁门
沙城主进入@yd标签领取奖励后,脚本执行了道具发放和元宝增加操作,但关键的变量扣减命令用错了变量名,代码如下:
[@yd]
#if
HOUR 22 22 ; 时间校验
MIN 1 59 ; 时间校验
ISCASTLEMASTER ; 沙城主身份校验
#act
give 城主之刃 2 ; 道具发放(省略部分道具命令)
GameGold + 8000 ; 元宝发放
dec g212 1 ; 错误核心:扣减了无关变量g212
sendmsg 0 沙城主%s,已经成功领取攻城奖励!
核心矛盾:判断资格用的是g211,领取后却扣减了g212——这个g212在整个脚本中既没初始化,也没参与任何判断,扣减它对g211的状态毫无影响。相当于“用A钥匙开门,却把B钥匙掰断锁门”,自然锁不住。
3. 附加问题:变量初始化缺失
控制老区奖励的g211变量,仅在@qc标签中被赋值为1,非管理员进入脚本时不会触发@qc,可能导致g211初始状态混乱,出现“该领的领不了,不该领的能重复领”的随机问题。
三、完整修复方案:3步补全变量控制闭环
修复思路:让“判断变量”和“扣减变量”统一为g211,同时补全变量初始化,确保每次领取后资格被正确锁死。
步骤1:给g211加“初始状态”,避免混乱
在@main标签的管理员分支中,添加g211的初始化命令,确保每天重置后状态正确。修改后的@main标签代码:
传奇沙城主奖励脚本漏洞排查 无限领取问题根源与修复
来源:
作者:
点击:

