传奇顶部滚动公告单条消息自动循环播放三次切换下一条机器人脚本完整实现教程

来源: 作者: 点击:
顶部滚动公告每条自动循环三次,指单段公告文字在屏幕顶部横向滚动三次之后,自动切换至下一条公告,全部公告列表轮询完成后重新从头循环。该功能依靠机器人全局定时器、全局计数变量、公告文本数组与循环判断逻辑组合实现,原生M2自带公告仅支持固定间隔切换,无法控制单条滚动次数,需要使用机器人脚本完成次数控制,编写前备份Robot.txt机器人脚本文件,避免语法错误造成服务端异常。

基础实现逻辑,设置全局变量记录当前公告序号与本条公告已播放次数。定时器触发时,读取当前公告内容,执行顶部滚动发送指令,随后本条播放计数加一。判断计数数值,小于3则继续播放同一条公告,等于3时重置本条计数,公告序号加一,读取下一条公告文本。序号到达公告列表末尾,序号重置回第一条,完成一轮循环。顶部滚动指令Y坐标设置在屏幕顶部区域,Y数值越小位置越靠上,根据登录器显示范围调整坐标参数。

GOM引擎机器人脚本示例,机器人脚本使用#AutoRun注册全局定时任务,单位毫秒,设置3000毫秒为单次滚动间隔,每条公告滚动一次等待3秒。
#AutoRun NPC TIMER 3000 @TopNotice
[@TopNotice]
#ACT
;公告序号G0,本条播放次数G1
#IF
EQUAL G1 0
#ACT
;读取当前序号对应的公告文本
EQUAL G0 0
#ACT
MOV S0 【系统公告】第一条公告测试内容
BREAK
#IF
EQUAL G0 1
#ACT
MOV S0 【系统公告】第二条公告测试内容
BREAK
#IF
EQUAL G0 2
#ACT
MOV S0 【系统公告】第三条公告测试内容
BREAK
;发送顶部滚动公告,0全局发送,颜色255 0 0,Y=10,滚动次数1
SENDMOVEMSG 0 255 0 0 10 1 <$STR(S0)>
CALC G1 + 1
#IF
LARGE G1 2
#ACT
CALC G1 = 0
CALC G0 + 1
#IF
LARGE G0 2
#ACT
CALC G0 = 0
BREAK
BREAK
SENDMOVEMSG参数依次为发送范围,字体颜色,背景颜色,Y坐标,单次滚动次数,公告文字。Y坐标10对应屏幕顶部,按需调整数值,避免文字超出客户端可视区域。G0为全局公告序号,G1为本条公告播放计数,每次执行定时器,G1增加1,G1达到3之后清零,序号G0递增,切换下一条公告。公告列表数量增加时,继续追加EQUAL G0判断段,同步修改末尾序号上限数值。

HERO引擎没有SENDMOVEMSG,使用SENDTOPMSG实现顶部滚动,机器人脚本结构一致,仅替换发送公告命令。HERO全局变量命名规则不变,G0、G1用于全局计数,机器人脚本同样使用#AutoRun注册定时触发。
#AutoRun NPC TIMER 3000 @TopNotice
[@TopNotice]
#ACT
#IF
EQUAL G1 0
#ACT
EQUAL G0 0
#ACT
MOV S0 【系统公告】第一条公告测试内容
BREAK
#IF
EQUAL G0 1
#ACT
MOV S0 【系统公告】第二条公告测试内容
BREAK
#IF
EQUAL G0 2
#ACT
MOV S0 【系统公告】第三条公告测试内容
BREAK
SENDTOPMSG 255 0 0 <$STR(S0)>
CALC G1 + 1
#IF
LARGE G1 2
#ACT
CALC G1 = 0
CALC G0 + 1
#IF
LARGE G0 2
#ACT
CALC G0 = 0
BREAK
BREAK
SENDTOPMSG参数为字体颜色、背景颜色、公告文本,HERO引擎滚动速度由客户端登录器配置文件控制,脚本内无法直接设置滚动帧数,需要调整登录器滚动速度参数,保证文字横向滑动流畅。

公告列表扩展方法,新增公告条目直接追加对应的EQUAL G0判断分支,修改末尾序号上限。例如增加第四条公告,新增EQUAL G0 3分支,末尾LARGE G0后的数值修改为3。公告文本内支持颜色标记,使用颜色代码嵌入文字,实现同一条公告多色文字,不同引擎颜色标记格式存在差异,需要对照引擎文档编写。公告文字不要过长,文字内容过多会造成客户端滚动文字重叠,出现文字错位。

计数重置逻辑,服务器重启之后全局变量清空,公告从第一条从头开始播放。需要服务器重启保留播放进度,可将G0、G1写入全局配置文件,机器人脚本启动时读取文件内数值,加载上次播放序号与计数。常规场景不需要持久保存,重启重置公告循环更为常用。

定时器间隔调试,定时器间隔设置需要匹配登录器文字滚动完成时间,文字越长,滚动完成耗时越久。间隔设置过短,上一轮文字还未滚动结束,新公告叠加发送,出现多层文字重叠。间隔设置过长,公告切换节奏缓慢,推荐2000至5000毫秒区间调试。SENDMOVEMSG内部滚动次数参数设置为1,依靠机器人定时器循环触发,实现连续三次滚动,不可直接填写3,会造成单次指令一次性滚动三次,无法控制切换逻辑。

性能与并发控制,机器人定时器属于全局单线程执行,不会随在线玩家数量增加重复执行,所有玩家共用同一套公告流,不会出现多玩家重复发送公告。不要设置低于1000毫秒的定时器,高频执行会增加服务端脚本运算压力。公告发送命令为全局广播,在线玩家全部接收,离线玩家不会缓存公告,登录之后等待下一轮定时器触发接收最新公告。

异常处理与边界判定,公告文本为空时,脚本跳过发送指令,避免空白文字滚动。增加变量溢出判断,防止全局变量持续累加超出引擎数值上限。服务器重载机器人脚本时,全局变量G0、G1不会自动清零,如需公告从头开始,执行GM命令重置G0、G1变量。GM重置命令示例,GLOBALVAR G0 = 0,GLOBALVAR G1 = 0,执行后公告序号和计数清零,重新从第一条开始循环播放。

登录器配套设置,顶部滚动公告依赖登录器支持对应绘制指令,部分简易登录器不支持SENDMOVEMSG顶部滚动,只会在聊天框显示文字。打开登录器配置,开启顶部滚动文字绘制,设置文字字号、横向滚动速度、文字透明度,调整Y轴坐标,保证文字固定在屏幕顶部,不会和血条、UI按钮重叠。修改登录器参数后需要重新生成登录器补丁,客户端加载补丁生效。

调试步骤,先写入两条公告测试,启动机器人脚本,观察第一条公告连续滚动三次,自动切换第二条,第二条三次播放完成回到第一条。修改定时器间隔,观察文字重叠问题,调整Y坐标,确认文字位置处于屏幕顶部。测试重载机器人脚本,查看变量是否保留原有计数,使用GM命令重置变量,验证从头播放逻辑。多账号登录客户端,确认所有客户端同步接收公告,不会出现不同账号公告进度不一致。

扩展功能,增加时段公告,设置不同时间段加载独立公告列表,机器人内增加时间判断,切换公告数据源。增加公告权重,重要公告优先播放,播放次数设置为三次,普通公告循环播放。增加公告开关全局变量,设置G2标记,G2等于1开启公告,G2等于0停止发送公告,可通过NPC或者GM命令启停公告。增加公告过滤,支持指定地图玩家接收公告,其他地图不接收,修改发送指令范围参数,替换全局广播为地图范围发送。全部逻辑编写完成后长时间运行观察,确认变量计数不会错乱,每条公告稳定播放三次后切换下一条,不会出现跳公告、重复公告、计数卡住的问题。