 |
[color=rgba(252, 249, 249, 0.698)] if npc.Dead {
[color=rgba(252, 249, 249, 0.698)] continue
[color=rgba(252, 249, 249, 0.698)] }
[color=rgba(252, 249, 249, 0.698)] if npc.MapID == player.MapID && npc.X == destX && npc.Y == destY {
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(13.267 -0.671093 2.82415)] deps.Log.Debug("阻擋: NPC 在目標格子", zap.String("player", player.Name), zap.Int32("npc_id", npc.NpcID))
[color=rgba(252, 249, 249, 0.698)] return // Blocked by NPC
[color=rgba(252, 249, 249, 0.698)] }
[color=rgba(252, 249, 249, 0.698)] }
[color=rgba(252, 249, 249, 0.698)]
[color=rgba(252, 249, 249, 0.698)] // Check if destination is blocked by map obstacles (walls, etc.)
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(12.4074 5.10525 3.11836)] if deps.MapData != nil && !deps.MapData.IsPassable(player.MapID, curX, curY, int(heading)) {
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(12.4074 5.10525 3.11836)] return // Block movement
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(13.267 -0.671093 2.82415)] if deps.MapData != nil {
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(13.267 -0.671093 2.82415)] isPassable := deps.MapData.IsPassable(player.MapID, curX, curY, int(heading))
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(29.8958 -7.99258 8.63413)] deps.Log.Debug("移動檢查", zap.String("player", player.Name),
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(13.267 -0.671093 2.82415)] zap.Int32("curX", curX), zap.Int32("curY", curY),
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(13.267 -0.671093 2.82415)] zap.Int32("destX", destX), zap.Int32("destY", destY),
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(13.267 -0.671093 2.82415)] zap.Int16("mapID", player.MapID),
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(13.267 -0.671093 2.82415)] zap.Int("heading", heading),
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(13.267 -0.671093 2.82415)] zap.Bool("isPassable", isPassable))
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(13.267 -0.671093 2.82415)] if !isPassable {
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(13.267 -0.671093 2.82415)] return // Block movement
[color=rgba(252, 249, 249, 0.698)][backcolor=lab(13.267 -0.671093 2.82415)] }
[color=rgba(252, 249, 249, 0.698)] }
[color=rgba(252, 249, 249, 0.698)]
[color=rgba(252, 249, 249, 0.698)] // Mark old tile passable, new tile impassable (for NPC pathfinding only).
[color=rgba(252, 249, 249, 0.698)] // Java C_MoveChar does NOT validate IsPassable for player movement — client
| |