/* * This file is part of aion-emu <aion-emu.com>. * * aion-emu is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * aion-emu is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with aion-emu. If not, see <http://www.gnu.org/licenses/>. */ package com.aionemu.gameserver.network.aion.clientpackets; import org.apache.log4j.Logger; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.model.gameobjects.state.CreatureState; import com.aionemu.gameserver.network.aion.AionClientPacket; import com.aionemu.gameserver.network.aion.serverpackets.SM_EMOTION; import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE; import com.aionemu.gameserver.utils.PacketSendUtility; import com.aionemu.gameserver.world.zone.ZoneInstance; /** * @author SoulKeeper */ public class CM_EMOTION extends AionClientPacket { /** * Logger */ private static final Logger log = Logger.getLogger(CM_EMOTION.class); /** * Emotion number */ int emotionType; /** * Emotion number */ int emotion; /** * Coordinates of player */ float x; float y; float z; byte heading; /** * Constructs new client packet instance. * * @param opcode */ public CM_EMOTION(int opcode) { super(opcode); } /** * Read data */ @Override protected void readImpl() { emotionType = readC(); switch(emotionType) { case 0:// select target case 1: // jump case 2: // resting case 3: // end resting case 7: // fly teleport land case 8: // fly up case 9: // land case 17: // Nothing here case 19: // emotion = readH(); case 20: // duel end case 21: // walk on case 22: // walk off case 31: // powershard on case 32: // powershard off case 33: // get equip weapon case 34: // remove equip weapon break; case 16: emotion = readH(); break; case 4: // sit on chair case 5: // stand on chair x = readF(); y = readF(); z = readF(); heading = (byte)readC(); break; default: log.info("Unknown emotion type? 0x" + Integer.toHexString(emotionType).toUpperCase()); break; } } /** * Send emotion packet */ @Override protected void runImpl() { Player player = getConnection().getActivePlayer(); switch(emotionType) { case 0: return; case 2: player.setState(CreatureState.RESTING); break; case 3: player.unsetState(CreatureState.RESTING); break; case 4: player.unsetState(CreatureState.ACTIVE); player.setState(CreatureState.CHAIR); break; case 5: player.unsetState(CreatureState.CHAIR); player.setState(CreatureState.ACTIVE); break; case 7: player.getController().onFlyTeleportEnd(); break; case 8: // TODO move to player controller? but after states working ZoneInstance currentZone = player.getZoneInstance(); if(currentZone != null) { boolean flightAllowed = currentZone.getTemplate().isFlightAllowed(); if(!flightAllowed) { PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_FLYING_FORBIDDEN_HERE); return; } } player.getFlyController().startFly(); break; case 9: player.getFlyController().endFly(); break; case 33: case 19: player.setState(CreatureState.WEAPON_EQUIPPED); break; case 34: case 20: player.unsetState(CreatureState.WEAPON_EQUIPPED); break; case 21: // cannot toggle walk when you flying or gliding if(player.getFlyState() > 0) return; player.setState(CreatureState.WALKING); break; case 22: player.unsetState(CreatureState.WALKING); break; case 31: if(!player.getEquipment().isPowerShardEquipped()) { PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.NO_POWER_SHARD_EQUIPPED()); return; } PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.ACTIVATE_THE_POWER_SHARD()); player.setState(CreatureState.POWERSHARD); break; case 32: PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.DEACTIVATE_THE_POWER_SHARD()); player.unsetState(CreatureState.POWERSHARD); break; } PacketSendUtility.broadcastPacket(player, new SM_EMOTION(player, emotionType, emotion, x, y, z, heading, player.getTarget() == null ? 0 : player.getTarget().getObjectId()), true); } }