yisr 发表于 2024-8-23 19:51:54

杰哥瞎扯蛋之减少遍历Response使用降低服务器性能消耗。
https://pkuxkx.com/forum/thread-49152-1-1.html

杰哥也说到这个问题了,我在这里就完美解决这个问题了。大家可以看看杰哥的表达的,我的表达不行,可能大家不理解,哈哈

sulryn 发表于 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这种服务器根本没返回的你不知道成功没成功的函数。。。

yisr 发表于 2024-8-23 20:03:50

sulryn 发表于 2024-8-23 07:56 PM
那你可能没看懂这个帖子,这个帖子告诉你了,可以从prompt,GMCP,超时这三部分判断,而不是feedTrigger ...

根据我的研究。房间信息,服务器是完整发出来的。不是一句一句蹦出来的。所以feedTrigger就是根据一整段的信息之后,再发送匹配信息。而不是echo这样,一匹配就马上触发。我是实践后发的贴,所以我的这个函数,完全就是在房间名匹配之后,会在最终npc全部显示完,然后本地发送匹配信息。与Responser的效果是一样的。

jinger 发表于 2024-8-23 20:05:04

yisr 发表于 2024-8-23 07:51 PM
杰哥瞎扯蛋之减少遍历Response使用降低服务器性能消耗。
https://pkuxkx.com/forum/thread-49152-1-1.html ...

你相当于把服务器的同步操作给省掉了,说明你根本都没明白同步操作的意义在哪里

hinghals 发表于 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")

这样的思路就可以不再添加新的触发信息了。

jarlyyn 发表于 2024-8-24 17:55:51

为什么要tempTimer?

hinghals 发表于 2024-8-24 21:21:43

jarlyyn 发表于 2024-8-24 05:55 PM
为什么要tempTimer?

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

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

3、可能与PaoTin++中的sync.wait作用相似。

jarlyyn 发表于 2024-8-24 22:28:41

hinghals 发表于 2024-8-24 09:21 PM
1、不用tempTimer,触发到房间名之后,会立即启动事件。这时候房间名之后的小地图、房间描述、NPC信息都 ...

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

timer抓的准吗?

yisr 发表于 2024-8-25 07:38:38

本帖最后由 yisr 于 2024-8-25 08:05 AM 编辑

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

2、房间名触发后立即开始抓,一直到事件启动后停止。把抓到的所有内容(.*),送入函数进行统一处理。可以利用下面两个函数直接拉,省去了抓屏的步骤。
[*]48.76getLines

[*]48.77getLineNumber
步骤是在房间名触发后利用nLineStrart=getLineNumber()记录一下。事件启动的时候nLineFinish=getLineNumber()记录一下。用getLines(nLineStrart,nLineFinish)就可以获得这期间所有的内容了。

dtp 发表于 2024-8-25 09:06:09

hinghals 发表于 2024-8-24 09:21 PM
1、不用tempTimer,触发到房间名之后,会立即启动事件。这时候房间名之后的小地图、房间描述、NPC信息都 ...

不类似。他这个其实就只是个 #delay 0
页: 1 [2] 3
查看完整版本: [Mudlet]降低系统资源占用的小技巧-tempTimer()函数