一、核心实现逻辑 两类限制脚本核心原理
Hero引擎实现元宝领取限制,核心依赖“脚本标记”“IP记录”两大机制:指定人物单次领取用“脚本标记+人物名称校验”,IP限制领取用“IP记录变量+IP重复校验”,均通过QFunction脚本文件编写,无需额外插件,直接写入即可生效。
两类脚本可单独使用,也可组合实现“指定人物+IP双重限制”,以下为具体脚本代码、配置步骤及异常排查,脚本语法严格遵循Hero规范,无冗余内容,可直接复制修改使用。
二、第一类:指定人物领取一次元宝 限制脚本(常用场景)
核心需求:指定人物(如“新手指导员”“测试账号1”)领取一次元宝后,再次触发领取指令时提示无法领取,通过“人物名称校验+脚本标记”实现,步骤如下:
1. 脚本编写(写入QFunction-0.txt)
脚本核心:先校验是否为指定人物→再校验是否已领取(脚本标记)→未领取则发放元宝并添加标记→已领取则提示限制,代码如下:
[@领取元宝]
#IF
CheckName 新手指导员 ; 校验是否为指定人物,替换为实际角色名称
CheckScriptFlag 100 0 ; 校验标记100是否为0(0=未领取,1=已领取)
#ACT
GiveGold 1000 ; 发放1000元宝(GiveGold为元宝发放命令,数值可修改)
SetScriptFlag 100 1 ; 设置标记100为1,标记已领取
SendMsg 7 元宝领取成功!本次领取仅可一次,不可重复领取! ; 游戏内提示
#ELSEACT
SendMsg 7 你已领取过元宝,本次活动仅可领取一次! ; 重复领取提示
备注:1. 标记100可自定义(建议100-999区间,避免与其他脚本冲突);2. 可新增多个指定人物,在#IF下添加多个CheckName语句(如CheckName 测试账号1);3. 元宝数值可按需修改(如GiveGold 5000发放5000元宝)。
2. 多指定人物适配脚本(扩展)
若需多个指定人物分别领取一次,可通过“标记区分”实现,避免相互影响,代码如下:
[@领取元宝]
#IF
CheckName 新手指导员
CheckScriptFlag 100 0
#ACT
GiveGold 1000
SetScriptFlag 100 1
SendMsg 7 新手指导员元宝领取成功,仅可领取一次!
#ELSEIF
CheckName 测试账号1
CheckScriptFlag 101 0 ; 用标记101区分,避免与上一人物冲突
#ACT
GiveGold 1000
SetScriptFlag 101 1
SendMsg 7 测试账号1元宝领取成功,仅可领取一次!
#ELSEACT
SendMsg 7 你已领取过元宝或非指定领取人物!
3. 脚本配置与生效步骤
1. 脚本写入:打开Mirserver\Envir\Market_Def\QFunction-0.txt,将上述脚本复制到文件末尾,保存文件;
2. 编码设置:确保文件编码为ANSI,避免中文乱码导致脚本失效;
3. 动态加载:打开M2Server界面,点击“脚本”→“动态加载脚本”,选择QFunction-0.txt加载,无需重启引擎,脚本立即生效。
三、第二类:IP限制领取元宝 单次领取脚本(防多开领取)
核心需求:同一IP仅可领取一次元宝,无论登录多少账号,均限制单次领取,通过“IP变量记录+重复校验”实现,步骤如下:
1. 脚本编写(写入QFunction-0.txt)
脚本核心:获取当前玩家IP→校验该IP是否已领取→未领取则发放元宝并记录IP→已领取则提示限制,代码如下:
[@领取元宝]
#IF
CheckIPRecord 200 ; 校验IP是否已记录(200为IP记录标识,可自定义)
#ACT
SendMsg 7 该IP已领取过元宝,同一IP仅可领取一次! ; 重复IP提示
#ELSEACT
GiveGold 1000 ; 发放1000元宝,数值可修改
RecordIP 200 ; 记录当前IP,标识200与上述校验一致
SendMsg 7 元宝领取成功!同一IP仅可领取一次,请勿多开尝试! ; 领取成功提示
备注:1. IP记录标识200可自定义(建议200-999区间);2. 若需限制IP领取次数(如3次),可修改CheckIPRecord为CheckIPRecord 200 3(3代表最大领取次数);3. 记录的IP数据会随引擎重启清除,若需永久限制,需搭配数据库存储IP(下文进阶脚本)。
2. 进阶:IP永久限制领取脚本(适配长期活动)
若需长期限制IP领取(引擎重启后不清除记录),需将IP存入数据库,通过“数据库校验”实现,代码如下:
[@领取元宝]
#IF
CheckDBStr 元宝领取IP表 IP <$IP> ; 校验当前IP是否存在于数据库表中
#ACT
SendMsg 7 该IP已领取过元宝,长期限制领取!
#ELSEACT
GiveGold 1000
AddDBStr 元宝领取IP表 IP <$IP> ; 将当前IP写入数据库表
SendMsg 7 元宝领取成功!该IP长期限制,不可重复领取!
备注:1. 需提前通过DBC2000新建数据库表“元宝领取IP表”,新增“IP”字段(文本型);2. <$IP>为Hero引擎IP变量,自动获取当前玩家IP,无需修改;3. 需清除限制时,直接删除数据库表中对应IP即可。
3. 脚本生效与IP限制测试
1. 配置步骤:同指定人物脚本,写入QFunction-0.txt后动态加载;
2. 测试方法:同一IP登录多个账号,首次领取可成功,后续账号领取提示限制;更换IP后可重新领取,确认限制生效。
四、第三类:指定人物+IP双重限制脚本(组合场景)
核心需求:指定人物仅可领取一次,且同一IP下仅可领取一次(双重防刷),脚本代码如下:
[@领取元宝]
#IF
CheckName 新手指导员 ; 指定人物校验
CheckScriptFlag 100 0 ; 人物领取标记校验
CheckIPRecord 200 ; IP领取记录校验
#ACT
GiveGold 1000
SetScriptFlag 100 1 ; 标记人物已领取
RecordIP 200 ; 记录IP已领取
SendMsg 7 元宝领取成功!指定人物+同一IP仅可领取一次!
#ELSEACT
SendMsg 7 你已领取过元宝,或该IP/人物已被限制领取!
备注:双重限制可有效防刷,适合重要活动元宝发放,可按需调整元宝数值与限制条件。
五、脚本触发方式 3种常用触发设置
编写好的领取脚本,可通过以下3种方式触发,适配不同游戏场景:
1. NPC对话触发(最常用)
在NPC脚本中添加领取选项,玩家与NPC对话即可触发,示例:
[@新手指导员对话]
::ShowMsg("我是元宝发放NPC,点击可领取一次元宝!");
::ShowOption({80}); ; 80为领取选项ID
[@Option80]
Goto 领取元宝 ; 触发元宝领取脚本
2. 命令触发(测试/GM使用)
玩家在游戏内输入指定命令即可触发,需先在引擎中开启命令权限:
1. 打开M2Server→“选项”→“命令设置”,添加命令“领取元宝”,权限设为0(所有玩家可使用);
2. 玩家在游戏内输入“@领取元宝”,即可触发脚本。
3. 物品触发(道具领取)
玩家使用指定物品(如“元宝领取券”)触发领取,示例:
[@UseItem10001] ; 10001为“元宝领取券”物品ID
Goto 领取元宝 ; 使用物品后触发领取脚本
六、异常排查 常见问题快速解决
1. 触发脚本无响应 无任何提示
解决方案:1. 核对脚本语法,确保无遗漏#IF、#ACT、#ELSEACT标识,语句结尾无多余符号;2. 检查QFunction-0.txt编码是否为ANSI,乱码会导致脚本失效;3. 重新动态加载脚本,确认引擎已识别脚本。
2. 领取后未发放元宝 提示成功但无元宝
解决方案:1. 确认元宝发放命令正确,Hero引擎默认用GiveGold发放元宝,部分版本用GiveYuanBao,可替换命令测试;2. 检查玩家背包元宝上限,若超过上限则无法发放,需调整上限或减少发放数值;3. 核对引擎配置,确保“元宝功能”已开启(!Setup.txt中设置GoldEnable=1)。
3. IP限制失效 同一IP可多次领取
解决方案:1. 核对IP记录标识(如200)是否一致,CheckIPRecord与RecordIP标识需相同;2. 若为临时限制,引擎重启后IP记录会清除,需使用数据库存储IP实现永久限制;3. 检查玩家是否使用代理IP,代理IP会导致IP识别异常,可限制代理IP领取。
4. 指定人物领取提示“非指定人物”
解决方案:1. 核对CheckName后的角色名称,需与游戏内角色名称完全一致(区分大小写、空格);2. 若角色名称含特殊符号,需在脚本中完整填写,避免遗漏;3. 新增多个指定人物时,需用#ELSEIF衔接,不可直接叠加CheckName语句。
七、总结:领取限制脚本核心要点 避坑指南
核心要点:1. 指定人物限制依赖“名称校验+脚本标记”,标记需唯一,避免冲突;2. IP限制依赖“IP记录/数据库存储”,临时限制用RecordIP,长期限制用数据库;3. 脚本触发方式可按需选择,NPC触发最适配玩家场景。
避坑指南:1. 脚本编码必须为ANSI,否则会出现乱码或无响应;2. 元宝发放命令需适配Hero引擎版本,避免命令错误导致发放失败;3. 长期限制需搭配数据库,避免引擎重启后记录丢失;4. 测试时需覆盖多场景(重复领取、多IP、多账号),确保限制生效。
按上述脚本编写与配置,即可快速实现元宝领取限制,适配新手福利、活动发放等各类场景,无需复杂配置,直接复用修改即可生效。

