Files
test/Documentation/FLASHMOVE_SERVER_PROTOCOLS_COMPARISON.md
2026-03-13 16:03:47 +07:00

9.8 KiB
Raw Permalink Blame History

Flash Move Skill: Server Protocol Responses Comparison

Summary

After the client sends CAST_POS_SKILL (command ID 89), the server responds with a sequence of protocols. This document compares the server responses received by both C++ and C# clients.

Client Request (Both Same)

C++ Client

[17:10:03.501] CLIENT - CAST_POS_SKILL(89)

C# Client

[16:58:15.286] [GameSession] Sending protocol: gamedatasend (Type: PROTOCOL_GAMEDATASEND) + Type=34 - CMD_ID: CAST_POS_SKILL

Server Response Sequence

Immediate Response (Within ~64ms)

Order C++ Log C# Log Command ID Command Name Status
1-9 OBJECT_MOVE(15) × 9 CMDID 15 × 6 15 OBJECT_MOVE Same
10 OBJECT_STOP_MOVE(35) CMDID 35 35 OBJECT_STOP_MOVE Same
11 SET_MOVE_STAMP(205) CMDID 205 (Unhandled) 205 SET_MOVE_STAMP ⚠️ C# Unhandled
12 OBJECT_CAST_POS_SKILL(204) CMDID 204 204 OBJECT_CAST_POS_SKILL Same
13 SKILL_PERFORM(88) CMDID 88 88 SKILL_PERFORM Same
14 SET_COOLDOWN(198) CMDID 198 198 SET_COOLDOWN Same
15 COMBO_SKILL_PREPARE(394) CMDID 394 394 COMBO_SKILL_PREPARE Same
16 ENCHANT_RESULT(139) CMDID 139 139 ENCHANT_RESULT Same
17 SELF_INFO_00(38) CMDID 38 38 SELF_INFO_00 Same
18 UPDATE_EXT_STATE(124) CMDID 124 (Unhandled) 124 UPDATE_EXT_STATE ⚠️ C# Unhandled
19 ICON_STATE_NOTIFY(125) CMDID 125 (Unhandled) 125 ICON_STATE_NOTIFY ⚠️ C# Unhandled

Delayed Response (~1 second later)

Order C++ Log C# Log Command ID Command Name Status
20 OBJECT_MOVE(15) × 2 CMDID 15 × 2 15 OBJECT_MOVE Same
21 OBJECT_STOP_MOVE(35) CMDID 35 35 OBJECT_STOP_MOVE Same
22 OBJECT_MOVE(15) × 2 CMDID 15 × 2 15 OBJECT_MOVE Same
23 HOST_STOP_SKILL(123) CMDID 123 123 HOST_STOP_SKILL Same
24 UPDATE_EXT_STATE(124) CMDID 124 (Unhandled) 124 UPDATE_EXT_STATE ⚠️ C# Unhandled
25 ICON_STATE_NOTIFY(125) CMDID 125 (Unhandled) 125 ICON_STATE_NOTIFY ⚠️ C# Unhandled

Detailed Protocol Analysis

Fully Handled Protocols (Both Implementations)

1. OBJECT_MOVE (15)

  • C++: SERVER - OBJECT_MOVE(15), size=21
  • C#: ### GameDataSend: CMDID 15
  • Purpose: Updates object position during flash move
  • Status: Both handle correctly

2. OBJECT_STOP_MOVE (35)

  • C++: SERVER - OBJECT_STOP_MOVE(35), size=20
  • C#: ### GameDataSend: CMDID 35
  • Purpose: Stops object movement
  • Status: Both handle correctly

3. OBJECT_CAST_POS_SKILL (204)

  • C++: SERVER - OBJECT_CAST_POS_SKILL(204), size=27
  • C#: ### GameDataSend: CMDID 204
  • Purpose: Confirms the position skill cast
  • Status: Both handle correctly
  • C++ Debug Log:
    [SKILL_CAST_DEBUG] OnMsgPlayerCastSkill: Received OBJECT_CAST_POS_SKILL, 
    skillID=58, target=0, pos=(858.33, 60.93, -149.44)
    
  • C# Debug Log:
    [DISTANCE_DEBUG] OBJECT_CAST_POS_SKILL: Received, skillID=58, 
    hostPosBefore=(860.71, 59.59, -130.28), destPos=(860.62, 60.73, -145.39)
    

4. SKILL_PERFORM (88)

  • C++: SERVER - SKILL_PERFORM(88), size=0
  • C#: ### GameDataSend: CMDID 88
  • Purpose: Signals skill execution completion
  • Status: Both handle correctly
  • C++ Debug Log:
    [SKILL_CAST_DEBUG] OnMsgPlayerCastSkill: Received SKILL_PERFORM, 
    m_pCurSkill=0, m_pPrepSkill=0 (clearing)
    

5. SET_COOLDOWN (198)

  • C++: SERVER - SET_COOLDOWN(198), size=8
  • C#: ### GameDataSend: CMDID 198
  • Purpose: Sets skill cooldown timer
  • Status: Both handle correctly

6. COMBO_SKILL_PREPARE (394)

  • C++: SERVER - COMBO_SKILL_PREPARE(394), size=20
  • C#: ### GameDataSend: CMDID 394
  • Purpose: Prepares combo skill chain
  • Status: Both handle correctly
  • C++ Log: Receive COMBO_SKILL_PREPARE cmd from server.

7. ENCHANT_RESULT (139)

  • C++: SERVER - ENCHANT_RESULT(139), size=19
  • C#: ### GameDataSend: CMDID 139
  • Purpose: Returns enchantment/effect result
  • Status: Both handle correctly

8. SELF_INFO_00 (38)

  • C++: SERVER - SELF_INFO_00(38), size=36
  • C#: ### GameDataSend: CMDID 38
  • Purpose: Updates host player basic info
  • Status: Both handle correctly

9. HOST_STOP_SKILL (123)

  • C++: SERVER - HOST_STOP_SKILL(123), size=0
  • C#: ### GameDataSend: CMDID 123
  • Purpose: Stops the skill execution
  • Status: Both handle correctly
  • C++ Log: CECHPWork::WORK_FLASHMOVE priority=2 killed

⚠️ Unhandled Protocols in C# (But Received)

1. SET_MOVE_STAMP (205)

  • C++: SERVER - SET_MOVE_STAMP(205), size=2
  • C#: ### GameDataSend: CMDID 205 (Unhandled CMDID 205 (payloadBytes=2))
  • Purpose: Sets movement synchronization stamp
  • Status: ⚠️ C# receives but doesn't handle
  • Impact: May cause movement desynchronization issues

2. UPDATE_EXT_STATE (124)

  • C++: SERVER - UPDATE_EXT_STATE(124), size=28
  • C#: ### GameDataSend: Unhandled CMDID 124 (payloadBytes=28)
  • Purpose: Updates extended state (buffs, debuffs, effects)
  • Status: ⚠️ C# receives but doesn't handle
  • Impact: Extended states may not update correctly

3. ICON_STATE_NOTIFY (125)

  • C++: SERVER - ICON_STATE_NOTIFY(125), size=10 (first) / size=8 (second)
  • C#: ### GameDataSend: Unhandled CMDID 125 (payloadBytes=10) / (payloadBytes=8)
  • Purpose: Notifies icon state changes (UI updates)
  • Status: ⚠️ C# receives but doesn't handle
  • Impact: UI icons may not reflect correct state

Protocol Sequence Timeline

C++ Timeline (EC.log)

[17:10:03.501] CLIENT - CAST_POS_SKILL(89)
[17:10:03.565] SERVER - OBJECT_MOVE(15) × 9
[17:10:03.565] SERVER - OBJECT_STOP_MOVE(35)
[17:10:03.565] SERVER - SET_MOVE_STAMP(205)          ← 64ms delay
[17:10:03.565] SERVER - OBJECT_CAST_POS_SKILL(204)
[17:10:03.565] SERVER - SKILL_PERFORM(88)
[17:10:03.565] SERVER - SET_COOLDOWN(198)
[17:10:03.565] SERVER - COMBO_SKILL_PREPARE(394)
[17:10:03.565] SERVER - ENCHANT_RESULT(139)
[17:10:03.766] SERVER - SELF_INFO_00(38)             ← 265ms delay
[17:10:03.766] SERVER - UPDATE_EXT_STATE(124)
[17:10:03.766] SERVER - ICON_STATE_NOTIFY(125)
[17:10:04.567] SERVER - OBJECT_MOVE(15) × 2          ← 1.066s delay
[17:10:04.567] SERVER - OBJECT_STOP_MOVE(35)
[17:10:04.567] SERVER - HOST_STOP_SKILL(123)
[17:10:04.766] SERVER - UPDATE_EXT_STATE(124)        ← 1.265s delay
[17:10:04.766] SERVER - ICON_STATE_NOTIFY(125)

C# Timeline (SessionLog)

[16:58:15.286] CLIENT - CAST_POS_SKILL (via PROTOCOL_GAMEDATASEND)
[16:58:15.402] SERVER - CMDID 205 (Unhandled)        ← 116ms delay
[16:58:15.403] SERVER - CMDID 204
[16:58:15.404] SERVER - CMDID 88
[16:58:15.406] SERVER - CMDID 198
[16:58:15.407] SERVER - CMDID 394
[16:58:15.408] SERVER - CMDID 139
[16:58:15.409] SERVER - CMDID 38
[16:58:15.410] SERVER - CMDID 124 (Unhandled)
[16:58:15.411] SERVER - CMDID 125 (Unhandled)
[16:58:15.588] SERVER - CMDID 15 × 2                 ← 302ms delay
[16:58:15.591] SERVER - CMDID 35
[16:58:16.388] SERVER - CMDID 38                    ← 1.102s delay
[16:58:16.389] SERVER - CMDID 124 (Unhandled)
[16:58:16.391] SERVER - CMDID 125 (Unhandled)
[16:58:16.392] SERVER - CMDID 123

Key Findings

What Works the Same

  1. Core skill protocols (204, 88, 198, 394, 139) are handled identically
  2. Movement protocols (15, 35) work the same
  3. Player info (38) updates correctly
  4. Skill stop (123) is handled

⚠️ Missing Handlers in C#

  1. SET_MOVE_STAMP (205) - May cause movement sync issues
  2. UPDATE_EXT_STATE (124) - Extended states (buffs/debuffs) may not update
  3. ICON_STATE_NOTIFY (125) - UI icon states may be incorrect

📊 Protocol Count Comparison

Protocol C++ Count C# Count Difference
OBJECT_MOVE (15) 11 8 C++ has 3 more
OBJECT_STOP_MOVE (35) 2 1 C++ has 1 more
SET_MOVE_STAMP (205) 1 1 (unhandled) Same count
OBJECT_CAST_POS_SKILL (204) 1 1 Same
SKILL_PERFORM (88) 1 1 Same
SET_COOLDOWN (198) 1 1 Same
COMBO_SKILL_PREPARE (394) 1 1 Same
ENCHANT_RESULT (139) 1 1 Same
SELF_INFO_00 (38) 1 1 Same
UPDATE_EXT_STATE (124) 2 2 (unhandled) Same count
ICON_STATE_NOTIFY (125) 2 2 (unhandled) Same count
HOST_STOP_SKILL (123) 1 1 Same

Recommendations

High Priority

  1. Implement SET_MOVE_STAMP (205) handler in C#

    • Critical for movement synchronization
    • May cause desync between client and server positions
  2. Implement UPDATE_EXT_STATE (124) handler in C#

    • Important for buff/debuff/effect state management
    • Affects gameplay mechanics
  3. Implement ICON_STATE_NOTIFY (125) handler in C#

    • Affects UI correctness
    • Lower priority but improves user experience

Medium Priority

  1. Investigate OBJECT_MOVE count difference
    • C++ receives 11 OBJECT_MOVE commands
    • C# receives 8 OBJECT_MOVE commands
    • May indicate timing or network differences

Conclusion

Overall Status: Most protocols match - The core skill casting flow works correctly in both implementations.

Issues Found: ⚠️ 3 unhandled protocols in C# that may cause:

  • Movement synchronization problems (SET_MOVE_STAMP)
  • Extended state update issues (UPDATE_EXT_STATE)
  • UI icon state inconsistencies (ICON_STATE_NOTIFY)

The server sends the same protocols to both clients, but C# needs to implement handlers for commands 205, 124, and 125 to achieve full feature parity with the C++ client.