Class MovementParse
parseMovement 依封包中的指令位元組逐筆解出各種 LifeMovementFragment
子類(AbsoluteLifeMovement/RelativeLifeMovement/TeleportMovement 等),
還原成一個移動片段清單;updatePosition 再將該清單套用到對應的
AnimatedMapleMapObject,更新其座標、朝向與狀態。封包來源由 LittleEndianAccessor 提供。
移動種類由 kind 參數區分(1=玩家、2=怪物、3=寵物、
4=召喚獸、5=龍);解析結果通常再轉送給 PlayerHandler/MobHandler
等處理器作後續廣播與校驗。
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic List<LifeMovementFragment> parseMovement(LittleEndianAccessor lea, int kind) 從移動封包逐筆解析出位移片段清單。static voidupdatePosition(List<LifeMovementFragment> movement, AnimatedMapleMapObject target, int yoffset) 將解析後的移動片段清單套用到指定的地圖物件,更新其座標與朝向。
-
Constructor Details
-
MovementParse
public MovementParse()
-
-
Method Details
-
parseMovement
從移動封包逐筆解析出位移片段清單。先讀取指令筆數,再依每個指令位元組(command byte)建構對應的
LifeMovementFragment子類並收集成清單,支援AbsoluteLifeMovement/RelativeLifeMovement/TeleportMovement與跳躍、變身(changeEquip)等多種移動型態。kind區分移動主體 (1=玩家、2=怪物、3=寵物、4=召喚獸、5=龍), 影響部分欄位的讀取方式。此方法僅讀取封包、不變更任何遊戲狀態;其結果通常交由
updatePosition(List, AnimatedMapleMapObject, int)套用到地圖物件,並由呼叫端轉送廣播。- Parameters:
lea- 移動封包的小端序讀取器,方法會依序消耗其中的指令資料kind- 移動主體種類(1=玩家、2=怪物、3=寵物、4=召喚獸、5=龍)- Returns:
- 解析出的移動片段清單;若實際解析筆數與封包宣告筆數不符(疑似封包竄改),則回傳
null
-
updatePosition
public static void updatePosition(List<LifeMovementFragment> movement, AnimatedMapleMapObject target, int yoffset) 將解析後的移動片段清單套用到指定的地圖物件,更新其座標與朝向。逐筆走訪
movement:對LifeMovement子類更新目標的位置 (AbsoluteLifeMovement以yoffset校正 Y 座標)與最後的朝向 (stance)。直接變更傳入的target狀態,屬於原地副作用,通常在地圖情境下 由移動處理器呼叫。- Parameters:
movement- 由parseMovement(LittleEndianAccessor, int)解出的移動片段清單;為null時直接返回不做任何事target- 要被更新座標/朝向的動畫地圖物件(會被就地變更)yoffset- 套用AbsoluteLifeMovement絕對座標時對 Y 座標的位移修正量
-