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 类型、验证码输入的支持方式可能不同,配置完成后应以游戏内实际测试结果为准。
IGE传奇最新防刷屏验证码脚本写法与聊天频率限制配置完整教程
来源:
作者:
点击:

