9.8 KiB
9.8 KiB
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
- Core skill protocols (204, 88, 198, 394, 139) are handled identically
- Movement protocols (15, 35) work the same
- Player info (38) updates correctly
- Skill stop (123) is handled
⚠️ Missing Handlers in C#
- SET_MOVE_STAMP (205) - May cause movement sync issues
- UPDATE_EXT_STATE (124) - Extended states (buffs/debuffs) may not update
- 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
-
Implement SET_MOVE_STAMP (205) handler in C#
- Critical for movement synchronization
- May cause desync between client and server positions
-
Implement UPDATE_EXT_STATE (124) handler in C#
- Important for buff/debuff/effect state management
- Affects gameplay mechanics
-
Implement ICON_STATE_NOTIFY (125) handler in C#
- Affects UI correctness
- Lower priority but improves user experience
Medium Priority
- 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.