fix: 装备属性面板避让逻辑 + 多项功能更新
- item_tooltip_view.gd: 新增 avoid_rect 属性,tooltip 与装备窗口重叠时自动推到左侧 - inventory_ui.gd: 悬停装备时传入窗口矩形作为避让区域 - 包含其他累积的功能开发和测试文件
This commit is contained in:
@@ -31,11 +31,11 @@ int main() {
|
||||
// --- struct sizes (redundant with static_assert, but explicit) ---
|
||||
CHECK(sizeof(Handshake) == 13, "sizeof Handshake");
|
||||
CHECK(sizeof(CGText) == 1, "sizeof CG_TEXT base");
|
||||
CHECK(sizeof(SimplePlayer) == 103, "sizeof SimplePlayer");
|
||||
CHECK(sizeof(GCMainCharacter) == 86, "sizeof GCMainCharacter");
|
||||
CHECK(sizeof(GCMainCharacter3BGM) == 111 && sizeof(GCMainCharacter4BGM) == 115,
|
||||
CHECK(sizeof(SimplePlayer) == 63, "sizeof SimplePlayer");
|
||||
CHECK(sizeof(GCMainCharacter) == 46, "sizeof GCMainCharacter");
|
||||
CHECK(sizeof(GCMainCharacter3BGM) == 71 && sizeof(GCMainCharacter4BGM) == 75,
|
||||
"sizeof main-character BGM variants");
|
||||
CHECK(sizeof(GCCharacterAdd2) == 120 && sizeof(GCCharacterUpdate) == 35,
|
||||
CHECK(sizeof(GCCharacterAdd2) == 80 && sizeof(GCCharacterUpdate) == 35,
|
||||
"sizeof character add/update variants");
|
||||
CHECK(sizeof(GCFishing) == 7, "sizeof GC_FISHING");
|
||||
CHECK(sizeof(GCWarpClassic) == 15, "sizeof classic GC_WARP");
|
||||
@@ -43,7 +43,7 @@ int main() {
|
||||
"sizeof auth success packets");
|
||||
CHECK(sizeof(GCPasspodFailed) == 130 && sizeof(GCXTrapRequest) == 129 && sizeof(GCHSRequest) == 403,
|
||||
"sizeof optional security packets");
|
||||
CHECK(sizeof(GCLoginSuccess) == 489, "sizeof GCLoginSuccess (NEWSLOT, 4 players)");
|
||||
CHECK(sizeof(GCLoginSuccess) == 329, "sizeof GCLoginSuccess (NEWSLOT, 4 players)");
|
||||
CHECK(sizeof(GCPoints) == 1 + 255 * 4, "sizeof GCPoints");
|
||||
CHECK(sizeof(GCPointChange) == 17, "sizeof GCPointChange (int header quirk)");
|
||||
CHECK(sizeof(CGMove) == 16, "sizeof CGMove");
|
||||
@@ -55,16 +55,16 @@ int main() {
|
||||
|
||||
// --- size-table lookup (body size, no trailing seq byte) ---
|
||||
CHECK(packet_size_gc(HDR_GC_PHASE) == 2, "gc size PHASE");
|
||||
CHECK(packet_size_gc(HDR_GC_MAIN_CHARACTER) == 86, "gc size MAIN_CHARACTER");
|
||||
CHECK(packet_size_gc(HDR_GC_MAIN_CHARACTER) == 46, "gc size MAIN_CHARACTER");
|
||||
CHECK(packet_size_gc(HDR_GC_WARP) == sizeof(GCWarpClassic), "gc size WARP");
|
||||
CHECK(packet_size_gc(HDR_GC_MAIN_CHARACTER3_BGM) == 111 &&
|
||||
packet_size_gc(HDR_GC_MAIN_CHARACTER4_BGM_VOL) == 115, "gc size MAIN_CHARACTER BGM");
|
||||
CHECK(packet_size_gc(HDR_GC_CHARACTER_ADD2) == 120 &&
|
||||
CHECK(packet_size_gc(HDR_GC_MAIN_CHARACTER3_BGM) == 71 &&
|
||||
packet_size_gc(HDR_GC_MAIN_CHARACTER4_BGM_VOL) == 75, "gc size MAIN_CHARACTER BGM");
|
||||
CHECK(packet_size_gc(HDR_GC_CHARACTER_ADD2) == 80 &&
|
||||
packet_size_gc(HDR_GC_CHARACTER_UPDATE2) == 35, "gc size character variants");
|
||||
CHECK(packet_size_gc(HDR_GC_FISHING) == 7, "gc size FISHING");
|
||||
CHECK(packet_size_gc(HDR_GC_AUTH_SUCCESS) == 6 &&
|
||||
packet_size_gc(HDR_GC_XTRAP_CS1_REQUEST) == 129, "gc size auth/security");
|
||||
CHECK(packet_size_gc(HDR_GC_LOGIN_SUCCESS_NEWSLOT) == 489, "gc size LOGIN_SUCCESS_NEWSLOT");
|
||||
CHECK(packet_size_gc(HDR_GC_LOGIN_SUCCESS_NEWSLOT) == 329, "gc size LOGIN_SUCCESS_NEWSLOT");
|
||||
CHECK(packet_size_gc(HDR_GC_CHARACTER_POINTS) == 1021, "gc size CHARACTER_POINTS");
|
||||
CHECK(packet_size_gc(HDR_GC_EXCHANGE) == 47, "gc size EXCHANGE");
|
||||
CHECK(packet_size_gc(HDR_GC_SAFEBOX_MONEY_CHANGE) == 5, "gc size SAFEBOX_MONEY_CHANGE");
|
||||
@@ -97,9 +97,11 @@ int main() {
|
||||
CHECK(!is_dynamic_gc(HDR_GC_MALL_SET), "GC_MALL_SET NOT dynamic");
|
||||
CHECK(!is_dynamic_gc(HDR_GC_SAFEBOX_SET), "GC_SAFEBOX_SET NOT dynamic");
|
||||
CHECK(!is_dynamic_gc(HDR_GC_PARTY_ADD), "GC_PARTY_ADD NOT dynamic");
|
||||
// client map registers GC_WHISPER STATIC, but its wSize sits where
|
||||
// TDynamicSizePacketHeader.size does — we frame it via the dynamic path.
|
||||
CHECK(is_dynamic_gc(HDR_GC_WHISPER), "GC_WHISPER framed as dynamic (wSize prefix)");
|
||||
// ClientVS22 registers GC_WHISPER as a static fixed head; RecvWhisperPacket
|
||||
// consumes the text tail separately using wSize.
|
||||
CHECK(!is_dynamic_gc(HDR_GC_WHISPER), "GC_WHISPER uses static fixed head");
|
||||
CHECK(packet_size_gc(HDR_GC_WHISPER) == sizeof(GCWhisperHead),
|
||||
"GC_WHISPER size is the fixed header");
|
||||
CHECK(is_dynamic_cg(HDR_CG_CHAT) && is_dynamic_cg(HDR_CG_WHISPER), "CG chat/whisper dynamic");
|
||||
CHECK(!is_dynamic_cg(HDR_CG_SHOP), "CG_SHOP NOT dynamic");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user