不少使用 IGE 引擎的传奇私人服务器,会遇到攻沙领奖 NPC 的问题:原本设置 “只能领取一次”,但更换行会掌门后,新掌门又能重复领取。核心需求是实现 “单日仅一次领取权限,无论掌门是否更换”,关键在于通过脚本命令绑定 “行会 + 日期” 双维度检测,而非仅绑定掌门角色 ID。以下是具体检测逻辑与可直接使用的脚本命令。
一、问题根源:原脚本的检测漏洞
原脚本 “换掌门就能重领”,多因检测逻辑仅绑定 “掌门角色” 或 “临时变量”,未锁定行会与时间:
若原脚本用@CheckUserVar 沙奖领取(检测单个角色变量),更换掌门后新角色无该变量,自然能重领;
若用@CheckGuildVar 沙奖领取但未加日期限制,仅能限制单次领取,无法实现 “单日唯一”;
若变量未设置 “持久化” 或 “日期绑定”,服务器重启或跨天后变量丢失,也会导致重复领取。
解决核心:用 “行会唯一变量 + 日期变量” 组合检测,让权限绑定行会而非掌门,且每天自动重置权限。
二、核心检测命令:单日唯一 + 跨掌门无效
IGE 脚本需通过 “获取日期→检测行会变量→执行领取 / 拒绝” 三步实现,关键命令如下,可直接复制到 NPC 脚本中:
1. 第一步:获取当日日期(生成每日唯一标识)
先定义 “当日日期变量”,确保每天的检测依据不同,代码如下:
#IF
#ACT
SetVar HJ_Date = %DATE% // 读取系统日期(格式如20240520),存入变量HJ_Date
SaveVar HJ_Date // 持久化日期变量,避免服务器重启丢失
作用:每天生成不同的日期标识(如 5 月 20 日为 20240520,21 日为 20240521),为 “单日唯一” 提供时间依据。
2. 第二步:检测行会是否已领取(核心判断命令)
通过 “行会变量 + 日期” 组合检测,无论掌门是否更换,只要行会当天领过,就拒绝重复领取,代码如下:
#IF
CheckGuildVar 沙奖领取_%HJ_Date% = 1 // 检测行会是否存在“当日沙奖领取”变量(如沙奖领取_20240520)
#SAY
今日本行会已领取过攻沙奖励,次日0点后可重新领取!\
<关闭/@exit>
#ELSE
Goto 领取奖励 // 未领取则跳转至领取流程
关键逻辑:沙奖领取_%HJ_Date%是 “变量名 + 日期” 的组合,每个行会每天对应唯一变量(如 20240520 当天,行会 A 的变量是 “沙奖领取_20240520”),更换掌门后,行会不变,变量仍存在,故无法重领。
3. 第三步:领取成功后写入行会变量(锁定权限)
领取奖励时,自动给行会添加 “当日已领取” 变量,避免后续重复领取,代码如下:
[@领取奖励]
#IF
CheckGuildLeader // 仅允许当前掌门领取(可选,确保领取者为行会负责人)
#ACT
Give 元宝 1000 // 发放奖励(可替换为装备、道具等)
SetGuildVar 沙奖领取_%HJ_Date% = 1 // 给行会添加当日领取变量,值设为1(表示已领取)
SaveGuildVar // 持久化行会变量,服务器重启不丢失
#SAY
攻沙奖励领取成功!今日本行会已锁定领取权限,次日自动解锁。\
<关闭/@exit>
补充说明:若无需限制 “仅掌门领取”,可删除CheckGuildLeader判断,允许行会任意成员领取,但领取后行会变量仍会锁定,确保全行会当日仅一次机会。
三、完整脚本片段(可直接套用)
将上述逻辑整合为 NPC 对话脚本,替换原领取代码即可,完整片段如下:
[@攻沙领奖]
#ACT
SetVar HJ_Date = %DATE%
SaveVar HJ_Date
#IF
CheckGuildVar 沙奖领取_%HJ_Date% = 1
#SAY
今日本行会已领取过攻沙奖励,次日0点后可重新领取!\
<关闭/@exit>
#ELSE
#IF
CheckGuildLeader // 可选:仅掌门能领,删除则任意成员可领
#ACT
Give 元宝 1000 // 替换为实际奖励(如Give 屠龙 1)
SetGuildVar 沙奖领取_%HJ_Date% = 1
SaveGuildVar
#SAY
攻沙奖励领取成功!今日本行会已锁定领取权限,次日自动解锁。\
<关闭/@exit>
#ELSE
#SAY
仅行会掌门可领取攻沙奖励,请联系本行会掌门操作!\
<关闭/@exit>
四、关键命令说明与注意事项
变量持久化:必须加SaveVar HJ_Date和SaveGuildVar,否则服务器重启后变量丢失,会导致重复领取;
日期重置:%DATE%变量会随系统日期自动更新,次日 0 点后生成新变量(如 20240521),无需手动重置,实现 “单日唯一”;
行会变量优势:SetGuildVar绑定行会 ID 而非角色 ID,即使更换掌门,行会不变则变量不变,从根源解决 “换掌门重领” 问题;
检测命令扩展:若需 “单角色单日仅领一次”(非行会),可将CheckGuildVar改为CheckUserVar 沙奖领取_%HJ_Date% = 1,变量绑定角色而非行会。
五、常见问题排查
问题 1:次日仍无法领取?→ 检查%DATE%变量是否正常获取,可在脚本中添加#SAY 今日日期:%HJ_Date%测试,若显示空值,需更新 IGE 引擎至支持%DATE%变量的版本;
问题 2:更换行会仍能领取?→ 确认用的是CheckGuildVar(行会变量)而非CheckUserVar(角色变量),行会变量会随行会切换而变化,符合 “不同行会各领一次” 的逻辑;
问题 3:变量不持久?→ 确保脚本路径正确(通常在MirServer\Mir200\Envir\QuestDiary\目录下),且服务器开启 “变量持久化” 功能(在 IGE 引擎设置中勾选 “SaveVar Enable”)。
传奇 IGE 脚本实现 “攻沙领奖单日唯一” 的核心,是用 “行会变量 + 日期变量” 替代单一角色变量,通过CheckGuildVar 沙奖领取_%HJ_Date%命令锁定权限,无论掌门是否更换,只要行会当天领过,就会被检测拦截,且次日自动重置领取权限,无需手动操作。
传奇 IGE 脚本:攻沙领奖单日唯一设置(换掌门也无法重复领取)
来源:
作者:
点击:

