北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: yisr

[Mudlet]降低系统资源占用的小技巧-tempTimer()函数

[复制链接]
 楼主| 发表于 2024-8-23 19:51:54 | 显示全部楼层
杰哥瞎扯蛋之减少遍历Response使用降低服务器性能消耗。
https://pkuxkx.com/forum/thread-49152-1-1.html

杰哥也说到这个问题了,我在这里就完美解决这个问题了。大家可以看看杰哥的表达的,我的表达不行,可能大家不理解,哈哈
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-8-23 19:56:54 | 显示全部楼层
yisr 发表于 2024-8-23 07:51 PM
杰哥瞎扯蛋之减少遍历Response使用降低服务器性能消耗。
https://pkuxkx.com/forum/thread-49152-1-1.html ...

那你可能没看懂这个帖子,这个帖子告诉你了,可以从prompt,GMCP,超时这三部分判断,而不是feedTrigger这种服务器根本没返回的你不知道成功没成功的函数。。。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2024-8-23 20:03:50 | 显示全部楼层
sulryn 发表于 2024-8-23 07:56 PM
那你可能没看懂这个帖子,这个帖子告诉你了,可以从prompt,GMCP,超时这三部分判断,而不是feedTrigger ...

根据我的研究。房间信息,服务器是完整发出来的。不是一句一句蹦出来的。所以feedTrigger就是根据一整段的信息之后,再发送匹配信息。而不是echo这样,一匹配就马上触发。我是实践后发的贴,所以我的这个函数,完全就是在房间名匹配之后,会在最终npc全部显示完,然后本地发送匹配信息。与Responser的效果是一样的。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-8-23 20:05:04 | 显示全部楼层
yisr 发表于 2024-8-23 07:51 PM
杰哥瞎扯蛋之减少遍历Response使用降低服务器性能消耗。
https://pkuxkx.com/forum/thread-49152-1-1.html ...

你相当于把服务器的同步操作给省掉了,说明你根本都没明白同步操作的意义在哪里
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-8-24 17:14:08 | 显示全部楼层
昨天经过大佬们的严厉指正,重新修正我的思路:

1、定义一个同步函数:
function syncFunction(func, ...)
    local args = {...}
   
    tempTimer(0,
        function()
            func(unpack(args))  -- 调用传递的函数,并传递可变参数
        end
    )
   
end

2、启用一个到达新房间后的事件:
registerNamedEventHandler("bdxkx", "gmcp_locateCurrentPositionOnMap", "gmcp_arrivedNewRoom","gmcp_locateCurrentPositionOnMap")

3、当匹配到房间名的时候,启用这个事件。因为同步函数,所以这个事件会在房间信息显示完后执行:
syncFunction(raiseEvent,"gmcp_arrivedNewRoom")

这样的思路就可以不再添加新的触发信息了。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-8-24 17:55:51 | 显示全部楼层
为什么要tempTimer?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-8-24 21:21:43 | 显示全部楼层

1、不用tempTimer,触发到房间名之后,会立即启动事件。这时候房间名之后的小地图、房间描述、NPC信息都没有抓取到。

2、用了tempTimer,会在房间信息完事显示之后,再启动事件。这时个房间内的所有信息都已经抓取到。

3、可能与PaoTin++中的sync.wait作用相似。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-8-24 22:28:41 | 显示全部楼层
hinghals 发表于 2024-8-24 09:21 PM
1、不用tempTimer,触发到房间名之后,会立即启动事件。这时候房间名之后的小地图、房间描述、NPC信息都 ...

那么下一个问题,房间名,描述之类,应该用timer来抓取吗?

timer抓的准吗?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2024-8-25 07:38:38 | 显示全部楼层
本帖最后由 yisr 于 2024-8-25 08:05 AM 编辑

两个方法:
1、用触发的方式,一个一个的抓,这是我之前用的。现在我在尝试第二种方法。

2、房间名触发后立即开始抓,一直到事件启动后停止。把抓到的所有内容(.*),送入函数进行统一处理。可以利用下面两个函数直接拉,省去了抓屏的步骤。步骤是在房间名触发后利用nLineStrart=getLineNumber()记录一下。事件启动的时候nLineFinish=getLineNumber()记录一下。用getLines(nLineStrart,nLineFinish)就可以获得这期间所有的内容了。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-8-25 09:06:09 | 显示全部楼层
hinghals 发表于 2024-8-24 09:21 PM
1、不用tempTimer,触发到房间名之后,会立即启动事件。这时候房间名之后的小地图、房间描述、NPC信息都 ...

不类似。他这个其实就只是个 #delay 0
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 11:10 PM , Processed in 0.009384 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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