case 发表于 2024-9-6 12:25:57

命令缓存到底解决了什么问题,新人太困难了。

我查看了一下记录,命令缓存是为了解决服务器的负担,这个我可以理解。设置剑心居是为了解决学习、领悟、练功指令过多,我也可以理解。前提都是为了更好的让玩家玩 mud,服务器不卡。但是游戏中那些进不了无法拜师,无法在剑心居学习的就应该因为游戏的设定,全部进缓存吗?是否可以让这些新人必须学习的人也享受一下,不急缓存的福利。
1 、天龙寺的师傅段誉,这个是没法拜师的,每次更新不到 3 分钟就给做任务的人杀了,要学段誉的武功就必须要在他活在的时候学习。一般学习机器人就是不停的等他复活,复活了学一下,死了继续学,哪怕是有很多无效指令。没有谁可以一直在电脑面前,一直盯着。
2 、朱熹,学习读书写字的师傅,这个也是没有办法进入剑心居的吧,学习也会进缓存。
3 、侠客岛面壁,这个设置时间长一点,可以避免进入缓存。但是没有人说在一个号进入面壁就一直等着面壁玩吧,一定会去玩其他的号,但是连坐机制,就是一个号面壁,另外一个号只要稍微做快了一点就进缓存。一旦进了缓存就是一个 ip 完全废了。
4 、丐帮找黄蓉学读书写字也是一样。
目前只发现这三个地方因为学习会进入缓存。希望 wiz 可以看在新人不易的情况下,改进一下这些因为无法拜师,无法进入剑心居学习的地方。降低连坐机制对于小号的惩罚。

dtp 发表于 2024-9-6 12:27:45

欢迎使用 PaoTin++。
PaoTin++ 检测 NPC 很方便。写个 if 语句就可以不用发无效命令了。

dddr 发表于 2024-9-6 12:32:58

1、打晕段誉,搬到旁边学,没有拦路就没有杀害
2、学读书写字可以读书或者剑心居找师傅,师傅多少会点
3、面壁的白天间隔加长,晚上间隔恢复
4、同理
总结,拉长时间间隔
最后,topcmd是为了解决服务器负担,剑心居是解决练功负担,这种拜不了师的属于意料之外的,不多。在开发维护人员只有一个的情况下,多担当体谅下,自己改下机子

case 发表于 2024-9-6 14:13:17

dddr 发表于 2024-9-6 12:32 PM
1、打晕段誉,搬到旁边学,没有拦路就没有杀害
2、学读书写字可以读书或者剑心居找师傅,师傅多少会点
3、 ...

多少级可以打败段誉,可以打败段誉的应该不用去段誉哪里学习了吧。这种确实不太多,但是对于天龙寺的来说,段誉应该是绕不开的坎吧。
其实修改机器是可以,但是改多少合适,因为缓存是动态的,可能前面一两天都没有问题,后面每一天都有问题,而且缓存是累加的,今天 1 小时,明天就 2 小时。而根据服务器负担动态调整指令间隔,这个对我只会使用简单的机器的人,有难度。或者说有什么指令可以反馈服务器负担,好参考修改机器。

case 发表于 2024-9-6 14:14:00

dtp 发表于 2024-9-6 12:27 PM
欢迎使用 PaoTin++。
PaoTin++ 检测 NPC 很方便。写个 if 语句就可以不用发无效命令了。 ...

使用的就是 PaoTin++,但是忘记了有检查 NPC 这个功能。

juny 发表于 2024-9-6 14:15:42

克服一下吧。我吐槽太多快被记上小本本了

jarlyyn 发表于 2024-9-6 14:33:59

case 发表于 2024-9-6 02:13 PM
多少级可以打败段誉,可以打败段誉的应该不用去段誉哪里学习了吧。这种确实不太多,但是对于天龙寺的来说 ...

我做过一个水温系统。

接管全部发送的指令

根据过去一段时间内的指令数,动态调整发送频率,还有多种模式切换。

可以试试往那个放线发展。

jarlyyn 发表于 2024-9-6 14:37:44

本帖最后由 jarlyyn 于 2024-9-6 02:41 PM 编辑

case 发表于 2024-9-6 02:13 PM
多少级可以打败段誉,可以打败段誉的应该不用去段誉哪里学习了吧。这种确实不太多,但是对于天龙寺的来说 ...




具体的实现是用变体漏桶算法的

参考

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

实际代码

    })
    App.Core.Overheat.Commands = {
      "west": 13,
      "w": 13,
      "north": 13,
      "n": 13,
      "east": 13,
      "e": 13,
      "south": 13,
      "s": 13,
      "up": 13,
      "u": 13,
      "down": 13,
      "d": 13,
      "enter": 13,
      "out": 13,
      "xiaojing": 13,
      "biandao": 13,
      "northeast": 13,
      "ne": 13,
      "southeast": 13,
      "se": 13,
      "southwest": 13,
      "sw": 13,
      "northwest": 13,
      "nw": 13,
      "northup": 13,
      "nu": 13,
      "eastup": 13,
      "eu": 13,
      "southup": 13,
      "su": 13,
      "westup": 13,
      "wu": 13,
      "northdown": 13,
      "nd": 13,
      "eastdown": 13,
      "ed": 13,
      "southdown": 13,
      "sd": 13,
      "westdown": 13,
      "eu": 13,
      "i": 15,
      "i2": 8,
      "l": 20,
      "ask":50,
      "jq":160,
      "wield":5,
      "jifa":10,
      "skills":123,
    }
    App.Core.Overheat.Value = 0
    App.Core.Overheat.Current = 0
    App.Core.Overheat.IsOverThreshold = function () {
      return App.Core.Overheat.Value > App.Core.OverheatMode.Current().Threshold();
    }
    App.Core.Overheat.OnTimer = function () {
      App.Core.Overheat.Last.unshift(App.Core.Overheat.Current)
      if (App.Core.Overheat.Last.length > max) {
            App.Core.Overheat.Last = App.Core.Overheat.Last.slice(0, -1)
      }
      App.Core.Overheat.Last = [...App.Core.Overheat.Last]
      App.Core.Overheat.Value = 0
      if (App.Core.Overheat.Last.length) {
            for (var i = 0; i < App.Core.Overheat.Last.length; i++) {
                App.Core.Overheat.Value += App.Core.Overheat.Last
            }
            App.Core.Overheat.Value=Math.floor(App.Core.Overheat.Value/App.Core.Overheat.Last.length)
            let shortvalue=0
            let shortlist=App.Core.Overheat.Last.slice(-short)
            for (var i = 0; i < shortlist.length; i++) {
                shortvalue += shortlist
            }
            shortvalue=Math.floor(shortvalue/shortlist.length)
            if (shortvalue>App.Core.Overheat.Value){
                App.Core.Overheat.Value=shortvalue
            }
      }
      App.Core.Overheat.Current = 0
      App.Raise("core.overheat.updated", App.Core.Overheat.Value)
    }
    App.RegisterCallback("app.core.overheat.onsend", function (data) {
      if (App.Data.Room.Name&&App.Data.Room.Location){
            return;
      }
      if (data) {
            for (var i = 0; i < data.length; i++) {
                let v = App.Core.Overheat.Commands]
                if (v) {
                  App.Core.Overheat.Current += v
                }
            }
      }
    })
    App.Bind("Send", "app.core.overheat.onsend")



建立高消耗指令清单

记录所有已发送的指令消耗,统计最近的一段时间的消耗,并进行限流。

我这里还建立了个长和短两个限流,避免 突发 和 长期低温过热。

case 发表于 2024-9-6 15:14:50

谢谢了,我先去学习一下编程,然后建立一个这样的系统,有方向了。感谢感谢

case 发表于 2024-9-19 12:20:45

找朱熹学习都进缓存,这还咋玩
页: [1] 2 3 4
查看完整版本: 命令缓存到底解决了什么问题,新人太困难了。