IGE传奇最新防刷屏验证码脚本写法与聊天频率限制配置完整教程

来源: 作者: 点击:
IGE传奇里做防刷屏验证码,一般不是只写一句提示,而是要把“聊天频率检测、触发条件、验证码弹出、输入判断、通过放行、失败踢出或禁言”串成完整脚本。常见做法是:玩家短时间内连续说话次数超过设定值,就强制弹出验证码;输入正确后恢复正常聊天,输入错误或超时则踢出、禁言或清空发言权限。

下面按 IGE 脚本常见结构整理,具体命令名称、变量名、验证码弹窗命令需要以当前引擎版本支持为准。

一、防刷屏验证码脚本整体思路

一个完整的防刷屏验证码脚本通常包含六个部分:

聊天触发检测
玩家每次说话时进入检测段落。

频率统计
记录玩家在一定时间内的说话次数。

判断是否刷屏
如果说话次数超过设定值,进入验证码流程。

弹出验证码
给玩家显示验证码界面或输入框。

校验输入结果
判断玩家输入是否正确。

处理结果
正确则放行,错误则踢出、禁言或增加失败次数。

二、基础防刷屏验证码脚本示例

下面是一个通用结构示例,适合放在聊天触发或 QFunction 相关脚本中。

[@SayFilter]
IF
ACT
inc P_CHATCOUNT 1

IF
equal P_CHATCOUNT 10
ACT
SENDMSG 5 检测到频繁发言,请输入验证码继续聊天 249 47
GOTO @ShowVerifyCode

IF
ACT
break

[@ShowVerifyCode]
IF
ACT
movr P_VERIFYCODE 10000
mov P_VERIFYCODE P_VERIFYCODE
mov P_VERIFYINPUT 0
SENDMSG 5 当前验证码为:<P_VERIFYCODE> 249 47
GOTO @WaitVerifyInput

[@WaitVerifyInput]
IF
ACT
SENDMSG 5 请在聊天框输入验证码 249 47
GOTO @CheckVerifyInput

[@CheckVerifyInput]
IF
equal P_CHATINPUT P_VERIFYCODE
ACT
mov P_CHATCOUNT 0
mov P_CHATINPUT 0
SENDMSG 6 验证码正确,已恢复正常聊天 249 47
break

IF
ACT
inc P_VERIFYFAIL 1
SENDMSG 5 验证码错误,请重新输入 249 47
break

这个脚本的基本流程是:

玩家每次说话,变量 P_CHATCOUNT 增加 1。
当 P_CHATCOUNT 达到 10 时,触发验证码流程。
系统生成一个随机验证码。
玩家需要在聊天框输入验证码。
输入正确后,清空聊天次数,恢复正常。
输入错误后,提示重新输入,并记录失败次数。

三、带时间限制的防刷屏脚本

如果只统计总次数,玩家可能间隔很久说话也被累计。更合理的做法是加入时间窗口,比如 30 秒内说话超过 10 次才触发验证码。

[@SayFilter]
IF
ACT
inc P_CHATCOUNT 1

IF
equal P_CHATCOUNT 1
ACT
mov P_CHATTIMER 30

IF
small P_CHATTIMER 1
ACT
mov P_CHATCOUNT 0
mov P_CHATTIMER 0

IF
equal P_CHATCOUNT 10
ACT
GOTO @ShowVerifyCode

IF
ACT
break

这里的关键是:

P_CHATCOUNT:记录当前时间窗口内的说话次数。
P_CHATTIMER:记录剩余检测时间。
当时间窗口结束后,把说话次数清零。
当说话次数达到 10 次时,进入验证码流程。

时间窗口可以根据版本情况调整,例如 10 秒、20 秒、30 秒、60 秒。

四、验证码生成与校验写法

验证码可以使用随机数生成,也可以提前准备一组固定验证码。

随机数字验证码

[@ShowVerifyCode]
IF
ACT
movr P_VERIFYCODE 10000
SENDMSG 5 请输入验证码:<P_VERIFYCODE> 249 47
GOTO @WaitVerifyInput

movr 后面的数值可以根据需要调整:
写法 生成范围 说明
movr P_VERIFYCODE 10 0到9 适合简单验证

movr P_VERIFYCODE 100 0到99 适合普通防刷

movr P_VERIFYCODE 1000 0到999 适合中等难度

movr P_VERIFYCODE 10000 0到9999 适合严格防刷

固定验证码校验

如果不想使用随机数,也可以固定一个验证码:

[@ShowVerifyCode]
IF
ACT
mov P_VERIFYCODE 8866
SENDMSG 5 请输入验证码:8866 249 47
GOTO @WaitVerifyInput

固定验证码适合临时测试,不建议长期用于正式环境,因为玩家容易记住。

输入校验

[@CheckVerifyInput]
IF
equal P_CHATINPUT P_VERIFYCODE
ACT
mov P_CHATCOUNT 0
mov P_CHATINPUT 0
mov P_VERIFYCODE 0
SENDMSG 6 验证码正确 249 47
break

IF
ACT
inc P_VERIFYFAIL 1
SENDMSG 5 验证码错误 249 47
break

校验时需要注意:

玩家输入值必须和生成的验证码一致。
验证通过后要清空输入变量。
验证失败后要记录失败次数。
不能只判断一次就结束,需要防止玩家反复乱输入。

五、失败次数处理脚本

如果玩家多次输入错误,可以继续加重处罚,例如禁言、踢出或限制聊天。

[@CheckVerifyInput]
IF
equal P_CHATINPUT P_VERIFYCODE
ACT
mov P_CHATCOUNT 0
mov P_CHATINPUT 0
mov P_VERIFYCODE 0
mov P_VERIFYFAIL 0
SENDMSG 6 验证码正确,已解除限制 249 47
break

IF
equal P_VERIFYFAIL 3
ACT
mov P_CHATCOUNT 0
mov P_CHATINPUT 0
mov P_VERIFYFAIL 0
SENDMSG 1 玩家[%s]因验证码多次错误被限制发言 249 47
GOTO @PunishSay

IF
ACT
inc P_VERIFYFAIL 1
SENDMSG 5 验证码错误,剩余机会:<P_VERIFYFAIL> 249 47
break

这里的逻辑是:

验证码正确,清空所有相关变量。
验证码错误,失败次数加 1。
失败次数达到 3 次,进入处罚流程。
处罚流程可以写踢出、禁言、回安全区或限制聊天。

处罚段落可以单独写:

[@PunishSay]
IF
ACT
SENDMSG 1 [%s]因异常发言被系统限制 249 47
mov P_CHATCOUNT 0
mov P_CHATINPUT 0
mov P_VERIFYFAIL 0
break

具体踢出或禁言命令需要看当前 IGE 引擎是否支持。

六、完整防刷屏验证码参考脚本

[@SayFilter]
IF
ACT
inc P_CHATCOUNT 1

IF
equal P_CHATCOUNT 1
ACT
mov P_CHATTIMER 30

IF
small P_CHATTIMER 1
ACT
mov P_CHATCOUNT 0
mov P_CHATTIMER 0

IF
equal P_CHATCOUNT 10
ACT
GOTO @ShowVerifyCode

IF
ACT
break

[@ShowVerifyCode]
IF
ACT
movr P_VERIFYCODE 10000
mov P_CHATINPUT 0
mov P_VERIFYFAIL 0
SENDMSG 5 检测到频繁发言,请输入验证码:<P_VERIFYCODE> 249 47
GOTO @WaitVerifyInput

[@WaitVerifyInput]
IF
ACT
SENDMSG 5 请在聊天框输入当前验证码 249 47
GOTO @CheckVerifyInput

[@CheckVerifyInput]
IF
equal P_CHATINPUT P_VERIFYCODE
ACT
mov P_CHATCOUNT 0
mov P_CHATINPUT 0
mov P_VERIFYCODE 0
mov P_VERIFYFAIL 0
SENDMSG 6 验证码正确,已恢复正常聊天 249 47
break

IF
equal P_VERIFYFAIL 3
ACT
mov P_CHATCOUNT 0
mov P_CHATINPUT 0
mov P_VERIFYCODE 0
mov P_VERIFYFAIL 0
SENDMSG 1 [%s]因验证码多次错误被限制发言 249 47
GOTO @PunishSay

IF
ACT
inc P_VERIFYFAIL 1
SENDMSG 5 验证码错误,请重新输入 249 47
break

[@PunishSay]
IF
ACT
SENDMSG 1 系统已限制[%s]的异常发言行为 249 47
mov P_CHATCOUNT 0
mov P_CHATINPUT 0
mov P_VERIFYFAIL 0
break

这个脚本包含:

聊天次数统计
时间窗口控制
验证码生成
验证码输入校验
错误次数统计
多次失败处罚
验证通过后重置状态

七、聊天频率参数设置建议

防刷屏参数不能设置得太低,否则正常玩家聊天也会被频繁拦截。建议先宽松,再根据实际刷屏情况收紧。
场景 建议参数 说明
普通聊天区 30秒内10次触发 适合正常交流环境

活动喊话区 30秒内15次触发 允许玩家频繁喊话

交易喊话区 20秒内12次触发 防止商人刷屏

世界频道 30秒内8次触发 适合严格控制

新人地图 20秒内6次触发 防止脚本号刷屏

常见配置组合:

10秒内超过 5 次:偏严格
20秒内超过 8 次:中等严格
30秒内超过 10 次:适合常规版本
60秒内超过 15 次:适合宽松版本

八、验证码难度设置建议

验证码不要太复杂,否则正常玩家体验差。
验证码类型 难度 适用情况
0到9 低 临时测试

0到99 中低 普通防刷

0到999 中 常规使用

0到9999 中高 严格防刷

固定数字 低 不建议长期使用

如果版本内刷屏问题不严重,建议用 0到999 或 0到9999 的随机数字验证码。
如果刷屏非常严重,可以配合失败次数处罚,而不是单纯降低验证码难度。

九、脚本配置注意事项

变量名不要和其他功能冲突

防刷屏脚本会用到多个变量,例如:

P_CHATCOUNT
P_CHATTIMER
P_VERIFYCODE
P_CHATINPUT
P_VERIFYFAIL

这些变量名不能和装备、任务、充值、抽奖、行会等功能重复,否则可能出现数据错乱。

聊天次数必须及时清零

验证通过后,必须清空聊天次数:

mov P_CHATCOUNT 0

如果不清零,玩家下次说话可能立刻再次触发验证码。

验证码输入后也要清零

玩家输入完成后,无论成功还是失败,都要处理输入变量:

mov P_CHATINPUT 0

否则旧输入值可能影响下一次判断。

失败次数要单独控制

失败次数不能无限累加,否则玩家只要输错一次,后续可能很快被处罚。

建议设置上限:

IF
equal P_VERIFYFAIL 3
ACT
GOTO @PunishSay

达到上限后,把失败次数清零,避免状态卡死。

不要对GM或测试账号频繁触发

如果 GM 或测试角色也需要正常聊天,可以加一层权限判断:

IF
CHECKLEVEL > 100
ACT
break

具体权限判断命令要看当前引擎支持情况。

验证码不能直接显示在处罚公告里

验证码只能发给触发玩家本人,不能发到全服公告中。

错误写法:

SENDMSG 1 验证码为:<P_VERIFYCODE> 249 47

正确写法:

SENDMSG 5 请输入验证码:<P_VERIFYCODE> 249 47

SENDMSG 5 通常只给当前玩家提示,不会让全服看到验证码。

时间窗口和次数要配合测试

如果时间窗口太短,正常玩家容易被误判。
如果次数上限太高,刷屏脚本可能仍然能大量发言。

建议测试时记录以下数据:

正常玩家每分钟说话次数
商人喊话每分钟次数
刷屏脚本每分钟次数
验证码触发频率
验证失败率

根据这些数据调整参数。

十、测试流程

配置完成后,可以按以下步骤测试:

登录测试角色。
连续说话 5 次,观察是否触发验证码。
继续说话到设定次数,确认是否弹出验证码提示。
输入正确验证码,确认是否恢复正常聊天。
输入错误验证码,确认是否提示错误。
连续错误 3 次,确认是否进入处罚流程。
等待时间窗口结束,确认聊天次数是否清零。
更换角色再次测试,确认变量没有串号。
检查验证码是否只发给当前玩家。
根据测试结果调整频率、次数和处罚方式。

十一、常见问题排查
问题现象 可能原因 处理方式
正常聊天也被拦截 次数上限太低 提高触发次数

刷屏没有被拦截 时间窗口太短或次数太高 降低次数或延长窗口

验证码正确仍提示错误 输入变量未正确赋值 检查 P_CHATINPUT 赋值逻辑

验证码被全服看到 使用了全服公告类型 改用当前玩家提示

验证通过后仍被限制 聊天次数未清零 加入 mov P_CHATCOUNT 0

多次失败后无法恢复 失败次数未清零 处罚后重置 P_VERIFYFAIL

不同玩家数据混乱 变量名冲突 更换独立变量名

十二、脚本调整建议

IGE传奇防刷屏验证码的重点不是验证码越复杂越好,而是要让正常玩家少被打扰,同时让刷屏行为被及时拦截。

如果版本聊天活跃,建议先用:

30秒内10次触发
随机4位数字验证码
错误3次后限制发言

如果刷屏严重,可以调整为:

20秒内8次触发
随机4位或5位验证码
错误2次后禁言或踢出

如果玩家反馈验证码太频繁,可以放宽到:

60秒内15次触发
随机3位验证码
错误5次后再处罚

实际使用时,脚本中的变量名、聊天触发标签、验证码弹窗命令、踢出或禁言命令,都需要根据当前 IGE 引擎版本进行修改和测试。不同引擎对变量、聊天触发、SENDMSG 类型、验证码输入的支持方式可能不同,配置完成后应以游戏内实际测试结果为准。