一、指定人物领取一次元宝限制脚本(单次永久限制)
1.1 核心逻辑
通过给指定人物绑定专属变量,领取元宝时检测变量状态,未触发则执行领取操作并修改变量值,已触发则拒绝领取,变量随人物数据永久保存,实现单次领取限制。
1.2 脚本编写(NPC触发模式)
脚本放置于NPC对话脚本文件中,以“新手福利NPC”为例,指定人物以“传奇勇士”为例,领取元宝数量设为1000,具体代码如下:
(@main)
#IF
#SAY
<╔───────────────────────────╗/SCOLOR=254>\
<│ 专属元宝福利 │/SCOLOR=254>\
<│ 指定人物可领取1000元宝(终身一次) │/SCOLOR=254>\
<│ <立即领取/@getyuanbao> │/SCOLOR=254>\
<╚───────────────────────────╝/SCOLOR=254>\
(@getyuanbao)
#IF
CHECKNAME 传奇勇士 // 检测是否为指定人物
#AND
CHECKVAR HUMAN 1001 = 0 // 检测人物变量1001是否为0(未领取)
#ACT
GAMEGOLD + 1000 // 发放1000元宝
SETVAR HUMAN 1001 1 // 将人物变量1001设为1(标记已领取)
SAVEVAR HUMAN // 保存人物变量
MESSAGEBOX 元宝领取成功!终身仅可领取一次。
#ELSEACT
#IF
NOT CHECKNAME 传奇勇士
MESSAGEBOX 你不是指定领取人物,无法领取!
#ELSE
MESSAGEBOX 你已领取过该元宝福利,不可重复领取!
#ENDIF
1.3 关键参数说明
- CHECKNAME 传奇勇士:核心检测命令,精准匹配指定人物名称,名称需与游戏内人物角色名完全一致,区分大小写。
- CHECKVAR HUMAN 1001 = 0:HUMAN代表人物专属变量,1001为变量编号(可自定义1-9999范围内数字),0为初始未领取状态。
- GAMEGOLD + 1000:发放元宝命令,“+1000”可修改为任意所需元宝数量,负数为扣除元宝。
- SAVEVAR HUMAN:强制保存人物变量,确保服务器重启后变量状态不丢失,避免重复领取漏洞。
1.4 多指定人物扩展写法
若需支持多个指定人物领取,可通过叠加CHECKNAME命令实现,示例如下:
(@getyuanbao)
#IF
(CHECKNAME 传奇勇士) OR (CHECKNAME 龙城守护者) OR (CHECKNAME 沙巴克先锋)
#AND
CHECKVAR HUMAN 1001 = 0
#ACT
GAMEGOLD + 1000
SETVAR HUMAN 1001 1
SAVEVAR HUMAN
MESSAGEBOX 元宝领取成功!终身仅可领取一次。
#ELSEACT
#IF
(NOT CHECKNAME 传奇勇士) AND (NOT CHECKNAME 龙城守护者) AND (NOT CHECKNAME 沙巴克先锋)
MESSAGEBOX 你不是指定领取人物,无法领取!
#ELSE
MESSAGEBOX 你已领取过该元宝福利,不可重复领取!
#ENDIF
二、指定人物领取一次元宝限制脚本(周期性限制)
2.1 核心逻辑
结合时间变量与人物变量,设置领取周期(如每日/每周一次),周期结束后自动重置变量,允许再次领取,兼顾限制与周期性福利需求。
2.2 每日一次领取脚本示例
(@main)
#IF
#SAY
<╔───────────────────────────╗/SCOLOR=254>\
<│ 每日专属元宝福利 │/SCOLOR=254>\
<│ 指定人物每日可领取500元宝 │/SCOLOR=254>\
<│ <立即领取/@dailymb> │/SCOLOR=254>\
<╚───────────────────────────╝/SCOLOR=254>\
(@dailymb)
#IF
CHECKNAME 传奇勇士
#AND
CHECKVAR HUMAN 1002 = 0 // 当日未领取标记
#ACT
GAMEGOLD + 500
SETVAR HUMAN 1002 1
SAVEVAR HUMAN
SETTIMERVAR HUMAN 1002 86400 0 // 86400秒(24小时)后重置变量为0
MESSAGEBOX 每日元宝领取成功!明日可再次领取。
#ELSEACT
#IF
NOT CHECKNAME 传奇勇士
MESSAGEBOX 你不是指定领取人物,无法领取!
#ELSE
MESSAGEBOX 你今日已领取过该福利,明日再来吧!
#ENDIF
2.3 周期重置关键命令
SETTIMERVAR HUMAN 1002 86400 0:定时器变量命令,HUMAN为人物变量范围,1002为变量编号,86400为倒计时秒数,0为倒计时结束后变量重置值,可根据需求修改秒数(如每周设为604800秒)。
三、IP限制元宝领取脚本(单次/周期性限制)
3.1 核心逻辑
利用Hero引擎获取玩家IP地址功能,将IP信息存储至全局变量或IP专属变量中,领取时检测当前IP是否已存在于变量内,存在则拒绝领取,实现单IP领取限制。
3.2 单IP终身一次领取脚本(全服通用)
脚本通过全局变量存储已领取IP,适用于全服玩家单IP终身一次领取场景,示例如下:
(@main)
#IF
#SAY
<╔───────────────────────────╗/SCOLOR=254>\
<│ IP专属元宝福利 │/SCOLOR=254>\
<│ 单个IP终身可领取800元宝 │/SCOLOR=254>\
<│ <立即领取/@iplimitmb> │/SCOLOR=254>\
<╚───────────────────────────╝/SCOLOR=254>\
(@iplimitmb)
#IF
NOT CHECKVAR GLOBAL IP_YUANBAO = <$IP> // 检测当前IP是否已存储
#ACT
GAMEGOLD + 800
SETVAR GLOBAL IP_YUANBAO <$IP> // 存储当前IP至全局变量
SAVEVAR GLOBAL // 保存全局变量
MESSAGEBOX 元宝领取成功!该IP终身仅可领取一次。
#ELSEACT
MESSAGEBOX 该IP已领取过福利,不可重复领取!
3.3 单IP每日一次领取脚本(全服通用)
结合定时器变量实现IP每日领取限制,当日领取后锁定,次日自动解锁,示例如下:
(@main)
#IF
#SAY
<╔───────────────────────────╗/SCOLOR=254>\
<│ IP每日元宝福利 │/SCOLOR=254>\
<│ 单个IP每日可领取300元宝 │/SCOLOR=254>\
<│ <立即领取/@dailyipmb> │/SCOLOR=254>\
<╚───────────────────────────╝/SCOLOR=254>\
(@dailyipmb)
#IF
NOT CHECKVAR GLOBAL IP_DAILY_<$IP> = 1 // 检测当前IP当日是否已领取
#ACT
GAMEGOLD + 300
SETVAR GLOBAL IP_DAILY_<$IP> 1 // 标记当前IP当日已领取
SAVEVAR GLOBAL
SETTIMERVAR GLOBAL IP_DAILY_<$IP> 86400 0 // 24小时后重置标记
MESSAGEBOX 每日IP元宝领取成功!明日可再次领取。
#ELSEACT
MESSAGEBOX 该IP今日已领取过福利,明日再来吧!
3.4 关键参数说明
- <$IP>:Hero引擎内置IP获取变量,自动读取当前玩家登录IP地址,无需手动配置。
- GLOBAL:全局变量标识,存储的IP信息全服可见,所有玩家领取时均会检测该变量。
- IP_DAILY_<$IP>:动态变量命名,将IP作为变量后缀,确保每个IP对应独立变量,避免相互干扰。
四、指定人物+IP双重限制脚本(高阶防刷)
4.1 核心逻辑
同时检测指定人物身份、人物领取变量、IP领取变量,三重校验确保福利仅能由指定人物在指定IP下领取一次,最大化防止刷取漏洞。
4.2 双重限制脚本示例
(@main)
#IF
#SAY
<╔───────────────────────────╗/SCOLOR=254>\
<│ 专属IP元宝福利 │/SCOLOR=254>\
<│ 指定人物+指定IP终身一次领取1000元宝 │/SCOLOR=254>\
<│ <立即领取/@doublelimitmb> │/SCOLOR=254>\
<╚───────────────────────────╝/SCOLOR=254>\
(@doublelimitmb)
#IF
CHECKNAME 传奇勇士 // 校验指定人物
#AND
CHECKVAR HUMAN 1003 = 0 // 校验人物未领取
#AND
NOT CHECKVAR GLOBAL IP_SPEC_<$IP> = 1 // 校验IP未领取
#AND
CHECKIP 192.168.1.0-192.168.1.255 // 限定IP段(可改为具体IP)
#ACT
GAMEGOLD + 1000
SETVAR HUMAN 1003 1
SETVAR GLOBAL IP_SPEC_<$IP> 1
SAVEVAR HUMAN
SAVEVAR GLOBAL
MESSAGEBOX 专属IP元宝领取成功!终身仅可领取一次。
#ELSEACT
#IF
NOT CHECKNAME 传奇勇士
MESSAGEBOX 你不是指定领取人物,无法领取!
#ELSEIF
CHECKVAR HUMAN 1003 = 1
MESSAGEBOX 你已领取过该福利,不可重复领取!
#ELSEIF
CHECKVAR GLOBAL IP_SPEC_<$IP> = 1
MESSAGEBOX 该IP已领取过福利,不可重复领取!
#ELSE
MESSAGEBOX 你不在指定IP范围内,无法领取!
#ENDIF
4.3 限定IP段/单个IP说明
CHECKIP 192.168.1.0-192.168.1.255:限定IP段领取,若需限定单个IP,可改为CHECKIP 192.168.1.100(替换为目标IP),支持多IP段叠加,格式为CHECKIP 192.168.1.100-192.168.1.200 AND CHECKIP 192.168.2.50-192.168.2.150。
五、脚本部署与测试要点
5.1 部署步骤
1. 打开传奇服务端目录,找到NPC脚本文件夹(通常为Envir/NPCs),选择目标NPC脚本文件(如新手村NPC.txt)。
2. 将编写好的脚本复制粘贴至NPC脚本文件末尾,确保脚本格式与原有内容一致,避免语法错误。
3. 保存文件后,登录服务端后台,执行“重新加载NPC脚本”命令,无需重启服务器即可生效。
5.2 测试要点
- 指定人物测试:使用指定名称人物登录,领取元宝后再次尝试领取,确认提示“已领取”,且元宝数量正确增加。
- IP限制测试:更换不同IP登录账号领取,确认未领取IP可正常领取,已领取IP提示“已领取”。
- 变量保存测试:领取元宝后重启服务器,再次登录查看变量状态,确认未重置,无法重复领取。
- 边界测试:使用非指定人物、非限定IP登录,确认提示信息准确,无领取漏洞。
5.3 常见问题排查
- 脚本不生效:检查脚本命令是否拼写错误(如GAMEGOLD误写为GAMELGOLD),变量编号是否重复,重启服务器后重新加载脚本。
- 可重复领取:确认是否添加SAVEVAR命令,全局变量需添加SAVEVAR GLOBAL,人物变量需添加SAVEVAR HUMAN。
- IP检测失效:检查<$IP>变量是否正确使用,确保服务器网络设置正常,可通过MESSAGEBOX <$IP>命令调试,查看IP是否正常获取。
- 提示信息错误:检查ELSEACT分支逻辑,确保每个校验条件对应的提示信息准确,避免分支嵌套错误。
六、脚本优化与扩展建议
6.1 优化方向
1. 变量命名规范:采用“用途+类型+编号”命名,如HUMAN_指定人物元宝_1001,便于后续维护与排查。
2. 批量领取限制:若需支持批量指定人物,可将人物名称写入配置文件,通过读取配置文件实现批量校验,减少脚本冗余。
3. 领取记录留存:添加日志记录命令,领取成功后记录人物名称、IP、领取时间,便于后续查询与追溯,命令示例:WRITELog 元宝领取记录 <$USERNAME> <$IP> <$TIME> 领取1000元宝。
6.2 扩展场景
1. 多档位领取限制:设置不同指定人物对应不同元宝数量,通过多分支CHECKNAME命令实现,示例:CHECKNAME 传奇勇士则发放1000元宝,CHECKNAME 龙城守护者则发放1500元宝。
2. 组合福利领取:领取元宝时同步发放道具,添加GIVE命令即可,示例:GIVE 疗伤药 10(发放10个疗伤药)。
3. 等级关联领取:在原有限制基础上添加等级校验,示例:CHECKLEVELEX >= 50(需等级50以上方可领取)。
以上脚本均适配Hero引擎全系列版本,编写时严格遵循Hero引擎脚本语法规范,无需额外安装插件,部署后即可正常使用。根据实际运营需求,可灵活调整元宝数量、领取周期、IP范围及指定人物,兼顾福利发放与防刷取需求。

