传奇SKY引擎针对短信充值平台元宝作弊防护脚本与校验代码配置教程

来源: 作者: 点击:
SKY引擎对接短信充值平台后,容易出现伪造充值回调、重复领取元宝、多次提交充值订单等作弊行为,依靠脚本校验订单编号、充值时间、领取标记,可拦截非法请求,杜绝元宝刷取漏洞。整套防护逻辑依托人物变量、订单记录校验、单次领取限制实现,明文代码可直接添加到充值领取NPC脚本,适配SKY原生指令,修改参数后重载NPC即可生效。

[@main]
MESSAGEBOX \
充值领奖中心\
请确认充值订单无误后领取元宝奖励\
<领取充值元宝/@GetRechargeGold>\
<查询订单领取状态/@CheckOrder>\
<离开/@Close>
[@GetRechargeGold]
#IF
;检测订单参数是否为空
CHECKVAR HUMAN RECHARGE_ORDER = ""
#ACT
MESSAGEBOX 订单信息异常,无法领取奖励。
RETURN
#ENDIF
#IF
;校验该订单是否已经领取过
CHECKVAR HUMAN ORDER_$\({RECHARGE_ORDER} = 1
#ACT
MESSAGEBOX 该订单奖励已经领取,不可重复获取。
RETURN
#ENDIF
#IF
;校验订单金额对应的元宝数量,可按需修改
CHECKVAR HUMAN RECHARGE_AMOUNT > 0
#ACT
;标记该订单已领取,防止重复领取
SETVAR HUMAN ORDER_\)${RECHARGE_ORDER} 1
;发放元宝,SKY引擎元宝指令
GAMEGOLD + <$HUMAN(RECHARGE_AMOUNT)>
SENDMSG 5 \(HUMAN(RECHARGE_AMOUNT)>
SENDMSG 5 订单【<\)<$HUMAN(RECHARGE_ORDER)>\(HUMAN(RECHARGE_ORDER)>】领取成功,获得<\)<$HUMAN(RECHARGE_AMOUNT)>元宝。
;记录领取时间,用于日志追溯
SETVAR HUMAN RECHARGE_TIME <$DATETIME>
#ELSEACT
MESSAGEBOX 充值金额参数错误,领取失败。
RETURN
#ENDIF
[@CheckOrder]
#IF
CHECKVAR HUMAN RECHARGE_ORDER = ""
#ACT
MESSAGEBOX 当前无待领取充值订单。
RETURN
#ENDIF
#IF
CHECKVAR HUMAN ORDER_${RECHARGE_ORDER} = 1
#ACT
MESSAGEBOX \(HUMAN(RECHARGE_AMOUNT)>
SENDMSG 5 订单【<\)<$HUMAN(RECHARGE_ORDER)>】已于<$HUMAN(RECHARGE_TIME)>完成领取。
#ELSEACT
MESSAGEBOX \(HUMAN(RECHARGE_AMOUNT)>
SENDMSG 5 订单【<\)<$HUMAN(RECHARGE_ORDER)>】待领取,可前往领取元宝。
#ENDIF
#ENDACT
[@Close]
#ACT
CLOSE
#ENDACT

短信充值平台对接原理,平台回调接口会将订单号、充值金额传递到游戏服务端,写入人物临时变量RECHARGE_ORDER与RECHARGE_AMOUNT,玩家点击NPC领取元宝时,脚本读取变量进行校验。核心防护点就是订单唯一标记,每一条充值订单生成独立标记,标记一旦设置,同订单无法再次执行发放元宝逻辑,解决重复回调、多次点击领取的作弊手段。

全局订单过期清理脚本,放置在Robot_def机器人脚本,定时清理过期订单变量,避免人物变量持续堆积占用内存。
[Robot]
Timer=3600
[@Timer]
#ACT
;清理超过72小时未领取的充值订单标记
CLEARVAR HUMAN RECHARGE_ORDER
CLEARVAR HUMAN RECHARGE_AMOUNT
SENDMSG 6 系统自动清理过期充值订单缓存。
#ENDACT

多层校验逻辑补充,增加IP校验,对比充值提交IP和游戏角色登录IP,IP不一致直接拦截,防范他人盗用订单领取元宝。增加订单时间校验,订单创建超过指定时长未领取直接失效,防止囤积旧订单批量刷取。
[@GetRechargeGold]
#IF
CHECKVAR HUMAN RECHARGE_ORDER = ""
#ACT
MESSAGEBOX 订单信息异常,无法领取奖励。
RETURN
#ENDIF
#IF
CHECKVAR HUMAN ORDER_$\({RECHARGE_ORDER} = 1
#ACT
MESSAGEBOX 该订单奖励已经领取,不可重复获取。
RETURN
#ENDIF
#IF
;对比充值IP和当前登录IP
CHECKVAR HUMAN RECHARGE_IP <> <\)$IP>
#ACT
MESSAGEBOX 订单IP与当前登录IP不匹配,领取拦截。
RETURN
#ENDIF
#IF
CHECKVAR HUMAN RECHARGE_AMOUNT > 0
#ACT
SETVAR HUMAN ORDER_${RECHARGE_ORDER} 1
GAMEGOLD + <$HUMAN(RECHARGE_AMOUNT)>
SETVAR HUMAN RECHARGE_TIME <$DATETIME>
SETVAR HUMAN RECHARGE_IP <$IP>
SENDMSG 5 \(HUMAN(RECHARGE_AMOUNT)>
SENDMSG 5 订单【<\)<$HUMAN(RECHARGE_ORDER)>\(HUMAN(RECHARGE_ORDER)>】领取成功,获得<\)<$HUMAN(RECHARGE_AMOUNT)>元宝。
#ELSEACT
MESSAGEBOX 充值金额参数错误,领取失败。
RETURN
#ENDIF

脚本部署操作,新建文本文档,粘贴充值NPC脚本,保存编码选择ANSI,放置于Envir\Market_Def目录。打开NPC注册列表,添加NPC名称、地图坐标、脚本文件名,保存注册信息。机器人清理脚本放入Envir\Robot_def目录,在Robot.txt注册脚本。修改完成后执行重载NPC、重载机器人脚本,无需重启服务端。短信平台回调接口需要配合脚本变量命名,平台参数名称必须和脚本内RECHARGE_ORDER、RECHARGE_AMOUNT保持一致,参数名不匹配,变量无法写入,玩家无法领取奖励。

参数调整方式,机器人Timer单位为秒,示例3600秒执行一次清理,可修改清理周期。订单过期时长根据运营需求调整,未领取订单超过时间自动清空缓存变量。元宝发放指令GAMEGOLD为SKY引擎原生元宝指令,不要替换为其他引擎元宝命令,指令写错元宝不会增加。可以增加黑名单判定,将违规账号加入黑名单,黑名单账号直接拦截充值奖励领取。

功能测试流程,正常充值流程,提交短信充值,平台回调写入订单变量,玩家打开NPC领取元宝,再次点击领取,提示订单已领取,无法重复获取。测试伪造订单,手动填写不存在订单号,提示订单异常。测试IP篡改,更换IP登录账号领取订单,触发IP不匹配拦截。测试过期订单,等待定时脚本执行清理后,订单变量清空,无法领取。

常见故障排查,充值成功但NPC无法领取元宝,优先核对短信平台回调参数名,确认变量写入成功,查看M2日志检查回调接收记录。订单可以重复领取,检查订单标记SETVAR指令是否成功执行,变量名称书写错误会造成标记失效。IP校验一直拦截,核对平台传递的IP变量名称,部分平台传递的是外网IP,和游戏登录IP存在差异,可根据需求关闭IP校验。机器人不清理变量,检查机器人脚本注册状态,重载机器人脚本。

额外安全加固方案,平台侧开启订单状态二次校验,服务端领取元宝前主动回传查询短信平台接口,确认订单状态为已支付,不单纯依靠本地变量标记。本地脚本只做二次防护,核心订单真伪校验放在充值平台接口,双重防护大幅降低作弊概率。关闭服务端多余GM元宝发放指令,防止账号权限泄露被恶意刷元宝。定期导出充值订单日志,核对平台订单记录和游戏内元宝发放记录,便于异常订单追溯。

所有脚本修改完成后,完整测试充值回调、领取、重复领取拦截、IP校验、过期清理全流程,确认不存在重复发元宝、伪造订单领取、变量堆积等问题。上线之后持续查看M2充值相关日志,及时发现异常领取行为。