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