北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 257|回复: 4

一个机器极限优化showcase

[复制链接]
发表于 2024-12-26 14:16:24 | 显示全部楼层 |阅读模式
最近一直在更新我得一个非北侠机器,进入到了主要功能全部完成,开始卡稳定性和效率接阶段。

正好把最近做的一个优化贴出来。

背景介绍:

优化一个类似慕容送信1阶段得任务。给定城市,遍历找npc,击杀npc,砍头,回master处交任务。NPC可能会出帮手或者逃跑。逃跑需要去ASK信息。

目标:成型ID稳定任务效率在500+任务/小时,包含练功。

1小时500任务大概是7秒左右一个任务,其中1秒战斗出pfm,1秒等NPC昏迷砍头,一秒接任务后有固定Busy。

剩下得4秒要完成遍历,买食物水,修武器,学习,练习,汲取(类似打坐),找跑路NPC等所有工作。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2024-12-26 14:20:09 | 显示全部楼层
首先是充分打满指令限制。

该mud是每2秒最多输入50指令,超过会被雷P。

所以几年前我就实现了一个节拍器得机制,在我得hclua中也有

https://www.pkuxkx.net/forum/thread-49204-1-1.html

具体简单来说,就是每隔指令发送后,会记录一个发送记录,只有达到一定时间后(比如2秒),才会清除记录

如果发送时,未清除的记录达到指定数量,就会存入缓存,等有发送空间再发送。

这样能保证任何一个连续时间段(比如2秒)内,发送的指令都不会达到服务器上限(比如50),实现极限利用的目的。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2024-12-26 14:28:08 | 显示全部楼层
在进行了长达几周的观测和调整后。

我发现,各种优化在前人的基础上已经做的差不多了。只有汲取(类似打坐)的时间,虽然无法优化,但可以想办法偷一点时间出来。

前面说过,我是利用节拍器的机制,保证指令尽快发送。所以,实际的发送,比如遍历,是先快速的把指令空间打满,比如在半秒内遍历20多个房间,然后进入缓存满,羊拉屎的节奏。
大概是

快,快,慢,慢,慢,慢,慢,快,快,慢,慢,慢,慢,慢, 这样循环。

而根据mud的特点,汲取(打坐)不看实际的时间片,而是在心跳时在汲取(打坐状态)就行。

所以我考虑,在 buff满的阶段,完全可以停止移动,汲取一下,1秒后halt,这样正好空出指令空间,来一波快速行走。

这样1秒的汲取,可能只慢了0.2s,能偷到0.8s



做了个简单表格示意。明显在0.1秒纬度的切片里有很多不发送指令的等待阶段,只要把这部分空间利用,拼接起来为完整的一个1秒,就能偷时间了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2024-12-26 14:34:40 | 显示全部楼层
然后时具体的实现。
实现其实很简单,只要移动功能有很好的模块化,那么必然有一个移动完成确认的过程

在移动完成确认的时候,检查下队列可发送空间(指令数-未过期指令),小于2就进入汲取阶段就行。当然,实际设置比这个复杂的多。

参考代码



如果设置关闭偷时间功能,判断剩余空间不多,就进入暂停阶段,给移动做个快照,停止1秒,halt然后恢复快照继续。

实际效果



实际的优化效果


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2024-12-26 14:35:49 | 显示全部楼层
所以mud有很多种玩法

肝是一种玩法

吹水是一种玩法

调机器也是种玩法。

玩对路了,都挺有意思的。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2025-1-10 12:15 PM , Processed in 0.009914 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表