传奇男战士天下第一攻击封号脚本修复:添加变量解决重复封号

来源: 作者: 点击:
针对你在男战士 “天下第一攻击” 封号申请中遇到的 “新玩家申请成功后,新旧玩家同时保留封号” 问题,核心原因是原脚本缺少 “实时判定当前最高攻击玩家” 的变量逻辑,导致旧玩家封号删除命令执行不严谨。以下是添加变量后的完整修复脚本及逻辑说明,可直接替换原脚本使用。
一、原脚本核心问题分析
随机逻辑干扰:原脚本中random 1(50% 概率执行)导致 “删除旧封号”“更新最高攻击” 等关键操作存在随机性,可能出现新玩家申请成功却未删除旧玩家封号的情况;
对比逻辑模糊:未明确 “新玩家攻击力必须>当前最高攻击” 的刚性判断,仅靠small S0 < $STR(S1)和EQUAL S0 < $STR(S1),存在逻辑冗余且未确保 “仅高于时执行更新”;
变量未联动:虽使用A7(当前最高玩家)、G32(当前最高攻击)变量,但未在删除旧封号前验证 “旧玩家是否仍为当前最高”,可能误删非最高玩家的封号。
二、修复思路:添加 “当前最高状态变量”
新增 2 个全局变量用于实时标记最高攻击状态,确保每次申请时精准判定:
变量 1:CUR_TOP_PLAYER:存储当前最高攻击男战士的角色名(关联原A7,但强化状态绑定);
变量 2:CUR_TOP_DC:存储当前最高攻击数值(关联原G32,确保对比时数据实时同步);
核心逻辑:新玩家申请时,先读取这两个变量,仅当新玩家攻击力>CUR_TOP_DC时,才执行 “删除旧玩家封号→更新变量→给新玩家封号” 的流程,避免重复或误删。
三、修改后的完整脚本
[@main]
#ACT
; 加载当前最高攻击状态变量(首次使用时若为空,默认初始化)
MOV CUR_TOP_PLAYER <$STR(A7)>
MOV CUR_TOP_DC <$STR(G32)>
#SAY
最高攻击男战士:【<$STR(CUR_TOP_PLAYER)>】\
所属行会:【<$STR(A8)>】\
最大攻击为:【<$STR(CUR_TOP_DC)>】\
申请时间:【<$STR(A9)>】\
\ \
【<申请最高攻击男战士/@申请第一>】 【<申请说明/@第一说明>】 【<离开/@exit>】

[@第一说明]
#SAY
想为自己树立一尊雕像,从此天下扬名吗?机会来了!\
如果你对自己的攻击力有充分的自信,\
那就在这里提交申请吧。\
只要你的攻击力比本雕像显示的这位英雄高,\
本雕像就将以你为名!\
注意:申请的时候可别搞错职业和性别哦。\
\ \
<申请/@申请第一> <离开/@exit>

[@申请第一]
; 第一步:检查是否已为当前最高玩家
#IF
checknamelist ..\QuestDiary\数据文件\天下第一\男战士.txt
#ACT
#SAY
你已经是最高攻击男战士了!
#BREAK

; 第二步:检查等级资格(40级以上)
#IF
CHECKLEVELex < 40 ; 原脚本“<39”等同于“≤38”,修正为直接判断40级门槛
#ACT
#SAY
看来你很有信心,不过你还没有达到资格,\
必须超过40级,才能在此申请最高男战士攻击\
现在来申请最高男战士称号恐怕还嫌早.\
<离开/@exit>
#BREAK

; 第三步:检查职业和性别(仅男战士可申请)
#IF
gender man
checkjob warrior
#ACT
mov S0 <$MAXDC> ; 存储申请人当前最大攻击
goto @男战申请
#ELSESAY
你似乎找错申请对象了吧!
#BREAK

[@男战申请]
; 关键修复:读取当前最高攻击变量,与申请人攻击对比
#IF
; 申请人攻击 ≤ 当前最高攻击 → 申请失败
S0 <= <$STR(CUR_TOP_DC)>
#ACT
#SAY
对不起!你目前的最大攻击(<$STR(S0)>)未超过当前最高(<$STR(CUR_TOP_DC)>),\
暂无法获得最高攻击男战士称号!
<离开/@exit>
#BREAK

; 申请人攻击 > 当前最高攻击 → 执行封号更新流程
#IF
S0 > <$STR(CUR_TOP_DC)>
#ACT
; 1. 先删除旧最高玩家的“天魔”封号(确保仅删除当前最高,避免误删)
RECYCFENGHAO <$STR(CUR_TOP_PLAYER)> 天魔
; 2. 给新申请人添加“天魔”封号
GIVEFENGHAO <$USERNAME> 天魔
; 3. 更新全局变量:当前最高玩家、当前最高攻击、申请时间
mov A7 <$USERNAME> ; 覆盖原最高玩家变量
mov G32 <$STR(S0)> ; 覆盖原最高攻击变量
mov A8 <$GUILDNAME> ; 更新所属行会(无行会则为“暂无”)
mov A9 <$DATETIME> ; 更新申请时间
mov CUR_TOP_PLAYER <$USERNAME> ; 同步新最高玩家到新增变量
mov CUR_TOP_DC <$STR(S0)> ; 同步新最高攻击到新增变量
; 4. 更新数据文件:清除旧记录,添加新记录
CLEARNAMELIST ..\QuestDiary\数据文件\天下第一\男战士.txt
addnamelist ..\QuestDiary\数据文件\天下第一\男战士.txt
; 5. 全服通知+触发调整
SENDMSG 0 %s成功申请了全区最高攻击男战士!他在烽烟四起的<$SERVERNAME>中修炼成为全区最高攻击男战士,明天将会是谁呢?
Gmexecute 全服触发 @全服封号调整
#SAY
申请成功!目前本区最高攻击男战士是<$USERNAME>(最大攻击:<$STR(S0)>),\
旧最高玩家<$STR(CUR_TOP_PLAYER)>的“天魔”封号已自动删除!
\ \
<离开/@exit>

; 补充:无行会时行会变量赋值(原逻辑整合)
#IF
NOT HAVEGUILD
#ACT
mov A8 暂无

四、关键变量与逻辑说明
新增变量 CUR_TOP_PLAYER/CUR_TOP_DC:
这两个变量用于 “实时锚定当前最高攻击玩家”,避免原脚本依赖A7/G32时可能出现的读取延迟。每次申请前先加载这两个变量,确保对比的是最新数据,删除旧封号时也能精准定位到 “上一任最高玩家”。
删除冗余随机逻辑:
原脚本中的random 1(50% 执行概率)已全部删除,因为 “天下第一攻击” 申请应是 “攻击力达标即通过” 的确定性流程,随机逻辑会导致功能异常,修复后仅靠 “攻击力>当前最高” 这一硬条件判定。
优化等级判断:
原脚本 “CHECKLEVELex < 39” 实际限制的是 “≤38 级”,与文字描述 “超过 40 级” 不符,修正为 “CHECKLEVELex < 40”,确保 40 级及以上玩家才能申请,逻辑与文字一致。
封号删除时机:
仅当新玩家攻击力确实超过当前最高时,才执行RECYCFENGHAO <$STR(CUR_TOP_PLAYER)> 天魔,避免原脚本可能出现的 “未对比就删除” 或 “对比失败仍删除” 的问题,确保封号仅保留当前最高玩家。
五、使用方法
将上述脚本替换原 “男战士天下第一申请” 相关脚本段落;
首次使用前,可手动在脚本初始化阶段添加 “mov CUR_TOP_DC 0”“mov CUR_TOP_PLAYER 无”,确保初始状态变量不为空;
测试流程:用 40 级以上男战士账号(攻击力低于当前最高)申请→提示失败;用攻击力更高的账号申请→成功后查看旧最高玩家封号是否已删除,新玩家是否获得封号,全服通知是否正常。