package com.asteria.net.message.impl; import com.asteria.Server; import com.asteria.game.character.player.Player; import com.asteria.game.location.Position; import com.asteria.net.message.InputMessageListener; import com.asteria.net.message.MessageBuilder; /** * The message sent from the client when a player makes a yellow {@code X} click, * a red {@code X} click, or when they click the minimap. * * @author lare96 <http://github.com/lare96> */ public final class MovementQueueMessage implements InputMessageListener { @Override public void handleMessage(Player player, int opcode, int size, MessageBuilder payload) { if (player.isDisabled()) return; player.faceCharacter(null); if (opcode == 248) { player.setSkillAction(false); player.setFollowing(false); player.getCombatBuilder().cooldown(false); size -= 14; } if (opcode == 164) { player.setSkillAction(false); player.setFollowing(false); player.getCombatBuilder().cooldown(false); } else if (opcode == 98) { } if (player.isFrozen()) { player.getMessages().sendMessage("You are frozen and unable to " + "move!"); return; } if (player.getDialogueChain() != null) player.getDialogueChain().interrupt(); if (player.getTradeSession().inTradeSession()) { player.getTradeSession().reset(false); } player.getMessages().sendCloseWindows(); player.setOpenShop(null); int steps = (size - 5) / 2; int[][] path = new int[steps][2]; int firstStepX = payload.getShort(com.asteria.net.ValueType.A, com.asteria.net.ByteOrder.LITTLE); for (int i = 0; i < steps; i++) { path[i][0] = payload.get(); path[i][1] = payload.get(); } int firstStepY = payload.getShort(com.asteria.net.ByteOrder.LITTLE); player.getMovementQueue().reset(); player.getMovementQueue().setRunPath(payload.get(com.asteria.net.ValueType.C) == 1); player.getMovementQueue().addToPath(new Position(firstStepX, firstStepY)); for (int i = 0; i < steps; i++) { path[i][0] += firstStepX; path[i][1] += firstStepY; player.getMovementQueue().addToPath(new Position(path[i][0], path[i][1])); } player.getMovementQueue().finish(); if (Server.DEBUG) player.getMessages().sendMessage("DEBUG[walking= " + player.getPosition().getRegion() + "]"); } }