20250905

0144睡到0904,怎么越来越早睡了,该早睡的。

通过SyncNearEntities.serializeBinaryToWriter能找到它需要的字段。

1
2
# 简单示例:取前 4 字节当 int32 
attr_val = int.from_bytes(raw_data[:4], "little", signed=True) 

提取怪物名字时取出来的是 20123 ,但实际该是 10011。参考的是packet.js#L627,为什么会出错呢。

这里用的是 protobuf.js 提供的 Reader,它不是简单地把前 4 字节当 int32,而是按照 protobuf Varint 编码规则 去解码。

使用

1
2
3
4
5
6
7
8
def read_varint(data: bytes) -> int:
    result, shift = 0, 0
    for b in data:
        result |= (b & 0x7F) << shift
        if not (b & 0x80):
            return result
        shift += 7
    raise ValueError("Invalid varint")

行,这是模拟了Varint 解码

uvicorn.run(app, host="0.0.0.0", port=8000)uvicorn.run(app, host="127.0.0.1", port=8000)不一样,前者可以通过本机的内网 IP 访问。

游戏中打世界boss时如果消息太多会更换服务器,但无法识别新的服务器,得在世界boss打完后才能识别到。我找不到原因。

拿dps检测脚本试了一下,发现它在这种情况下也无法识别新的消息。所以可能是游戏服务器进行了改动?我不知道呀我不知道呀。

不对,dps检测能识别,dps是半路开始检测无法识别,但一开始就在检测的话能一直收到包,而我总是在半路无法识别服务器,无论我一开始有没有识别服务器。不知道,先睡了。

还不好复现,要人多到战斗服务器更改,我也不清楚到底该定位哪里。明天可以试着记录不同src_server发来包的次数,看看能不能发现什么端倪。

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计