/* * To change this template, choose Tools | Templates and open the template in * the editor. */ package javastory.channel.handling; import javastory.channel.ChannelCharacter; import javastory.channel.ChannelClient; import javastory.client.GameClient; import javastory.cryptography.AesTransform; import javastory.io.PacketFormatException; import javastory.io.PacketReader; import javastory.server.handling.ClientPacketOpcode; import javastory.server.handling.PacketHandler; import org.apache.mina.core.session.IoSession; /** * * @author shoftee */ public final class ChannelPacketHandler extends PacketHandler { private int channelId = -1; public ChannelPacketHandler(final int channelId) { this.channelId = channelId; } @Override protected GameClient createClient(final AesTransform clientCrypto, final AesTransform serverCrypto, final IoSession session) { final GameClient client = new ChannelClient(clientCrypto, serverCrypto, session); client.setChannelId(this.channelId); return client; } @Override protected void handlePacket(final ClientPacketOpcode header, final PacketReader reader, final GameClient client) throws PacketFormatException { final ChannelClient channelClient = (ChannelClient) client; final ChannelCharacter player = channelClient.getPlayer(); switch (header) { case PONG: channelClient.pongReceived(); break; case CHANGE_CHANNEL: InterServerHandler.handleChannelChange(reader, channelClient, player); break; case PLAYER_LOGGEDIN: final int playerid = reader.readInt(); InterServerHandler.handlePlayerLoggedIn(playerid, channelClient); break; case ENTER_MTS: InterServerHandler.handleEnterMTS(channelClient); break; case MOVE_PLAYER: PlayerHandler.handleMovePlayer(reader, channelClient, player); break; case CHAR_INFO_REQUEST: reader.skip(4); PlayerHandler.handleCharacterInfoRequest(reader.readInt(), channelClient, player); break; case CLOSE_RANGE_ATTACK: PlayerHandler.handleMeleeAttack(reader, channelClient, player); break; case RANGED_ATTACK: PlayerHandler.handleRangedAttack(reader, channelClient, player); break; case MAGIC_ATTACK: PlayerHandler.MagicDamage(reader, channelClient, player); break; case SPECIAL_MOVE: PlayerHandler.handleSpecialMove(reader, channelClient, player); break; case PASSIVE_ENERGY: break; case FACE_EXPRESSION: PlayerHandler.handleFaceExpression(reader.readInt(), player); break; case TAKE_DAMAGE: PlayerHandler.handleTakeDamage(reader, channelClient, player); break; case HEAL_OVER_TIME: PlayerHandler.handleHealthRegeneration(reader, player); break; case CANCEL_BUFF: PlayerHandler.handleCancelBuff(reader.readInt(), player); break; case CANCEL_ITEM_EFFECT: PlayerHandler.handleCancelItemEffect(reader.readInt(), player); break; case USE_CHAIR: PlayerHandler.handleUseChair(reader.readInt(), channelClient, player); break; case CANCEL_CHAIR: PlayerHandler.handleCancelChair(reader.readShort(), channelClient, player); break; case USE_ITEMEFFECT: PlayerHandler.handleUseItemEffect(reader.readInt(), channelClient, player); break; case SKILL_EFFECT: PlayerHandler.handleSkillEffect(reader, player); break; case MESO_DROP: reader.skip(4); PlayerHandler.handleMesoDrop(reader.readInt(), player); break; case WHEEL_OF_FORTUNE: PlayerHandler.handleWheelOfFortuneEffect(reader.readInt(), player); break; case MONSTER_BOOK_COVER: PlayerHandler.handleChangeMonsterBookCover(reader.readInt(), channelClient, player); break; case CHANGE_KEYMAP: PlayerHandler.HandleChangeKeymap(reader, player); break; case CHANGE_MAP: PlayerHandler.handleChangeMap(reader, channelClient, player); break; case CHANGE_MAP_SPECIAL: reader.skip(1); PlayerHandler.handleChangeMapSpecial(reader.readLengthPrefixedString(), channelClient, player); break; case USE_INNER_PORTAL: reader.skip(1); PlayerHandler.handleUseInnerPortal(reader, channelClient, player); break; case TROCK_ADD_MAP: PlayerHandler.handleTeleportRockAddMap(reader, channelClient, player); break; case ARAN_COMBO: PlayerHandler.handleAranCombo(channelClient, player); break; case SKILL_MACRO: PlayerHandler.handleSkillMacro(reader, player); break; case GIVE_FAME: PlayersHandler.handleGiveFame(reader, channelClient, player); break; case TRANSFORM_PLAYER: PlayersHandler.handleTransformPlayer(reader, channelClient, player); break; case NOTE_ACTION: PlayersHandler.handleNoteAction(reader, player); break; case USE_DOOR: PlayersHandler.handleUseDoor(reader, player); break; case DAMAGE_REACTOR: PlayersHandler.handleHitReactor(reader, channelClient); break; case CLOSE_CHALKBOARD: player.setChalkboard(null); break; case ITEM_MAKER: ItemMakerHandler.handleItemMaker(reader, channelClient); break; case ITEM_SORT: InventoryHandler.handleItemSort(reader, channelClient); break; case ITEM_MOVE: InventoryHandler.handleItemMove(reader, channelClient); break; case ITEM_PICKUP: InventoryHandler.handleItemLoot(reader, channelClient, player); break; case USE_CASH_ITEM: InventoryHandler.handleUseCashItem(reader, channelClient); break; case USE_ITEM: InventoryHandler.handleUseItem(reader, channelClient, player); break; case USE_SCRIPTED_NPC_ITEM: InventoryHandler.handleUseScriptedNpcItem(reader, channelClient, player); break; case USE_RETURN_SCROLL: InventoryHandler.handleUseReturnScroll(reader, channelClient, player); break; case USE_UPGRADE_SCROLL: InventoryHandler.handleUseUpgradeScroll(reader, channelClient, player); break; case USE_SUMMON_BAG: InventoryHandler.handleUseSummonBag(reader, channelClient, player); break; case USE_TREASUER_CHEST: InventoryHandler.handleUseTreasureChest(reader, channelClient, player); break; case USE_SKILL_BOOK: InventoryHandler.handleUseSkillBook(reader, channelClient, player); break; case USE_CATCH_ITEM: InventoryHandler.handleUseCatchItem(reader, channelClient, player); break; case USE_MOUNT_FOOD: InventoryHandler.handleUseMountFood(reader, channelClient, player); break; case REWARD_ITEM: InventoryHandler.handleUseRewardItem(reader, channelClient, player); break; case HYPNOTIZE_DMG: MobHandler.handleHypnotizeDamage(reader, player); break; case MOVE_LIFE: MobHandler.handleMoveMonster(reader, channelClient, player); break; case AUTO_AGGRO: MobHandler.handleAutoAggro(reader.readInt(), player); break; case FRIENDLY_DAMAGE: MobHandler.handleFriendlyDamage(reader, player); break; case MONSTER_BOMB: MobHandler.handleMonsterBomb(reader.readInt(), player); break; case NPC_SHOP: NpcHandler.handleNpcShop(reader, channelClient, player); break; case NPC_TALK: NpcHandler.handleNpcTalk(reader, channelClient, player); break; case NPC_TALK_MORE: NpcHandler.handleNpcTalkMore(reader, channelClient); break; case NPC_ACTION: NpcHandler.handleNpcAnimation(reader, channelClient); break; case QUEST_ACTION: NpcHandler.handleQuestAction(reader, channelClient, player); break; case STORAGE: NpcHandler.handleStorage(reader, channelClient, player); break; case GENERAL_CHAT: reader.skip(4); ChatHandler.handleGeneralChat(reader.readLengthPrefixedString(), reader.readByte(), channelClient, player); break; case PARTYCHAT: ChatHandler.handleGroupChat(reader, channelClient, player); break; case WHISPER: ChatHandler.handleWhisper(reader, channelClient); break; case MESSENGER: ChatHandler.handleMessenger(reader, channelClient); break; case AUTO_ASSIGN_AP: StatsHandling.handleAutoAssignAbilityPoints(reader, channelClient, player); break; case DISTRIBUTE_AP: StatsHandling.handleDistributeAbilityPoints(reader, channelClient, player); break; case DISTRIBUTE_SP: reader.skip(4); StatsHandling.handleDistributeSkillPoints(reader.readInt(), channelClient, player); break; case PLAYER_INTERACTION: PlayerInteractionHandler.handlePlayerInteraction(reader, channelClient, player); break; case GUILD_OPERATION: GuildHandler.handleGuildOperation(reader, channelClient); break; case DENY_GUILD_REQUEST: reader.skip(1); GuildHandler.handleDenyGuildInvitation(reader.readLengthPrefixedString(), channelClient); break; case BBS_OPERATION: BbsHandler.handleBbsOperatopn(reader, channelClient); break; case REQUEST_FAMILY: // TODO: Family stuff. // FamilyHandler.handleFamilyRequest(reader); break; case PARTY_OPERATION: PartyHandler.handlePartyOperation(reader, channelClient); break; case DENY_PARTY_REQUEST: PartyHandler.handleDenyPartyInvitation(reader, channelClient); break; case BUDDYLIST_MODIFY: BuddyListHandler.handleBuddyOperation(reader, channelClient); break; case CYGNUS_SUMMON: UserInterfaceHandler.handleNpcRequestCygnusSummon(channelClient); break; case SHIP_OBJECT: UserInterfaceHandler.handleShipObjectRequest(reader.readInt(), channelClient); break; case DAMAGE_SUMMON: reader.skip(4); SummonHandler.handleSummonDamage(reader, player); break; case MOVE_SUMMON: SummonHandler.handleSummonMove(reader, player); break; case SUMMON_ATTACK: SummonHandler.handleSummonAttack(reader, channelClient, player); break; case SPAWN_PET: PetHandler.handleSpawnPet(reader, channelClient, player); break; case MOVE_PET: PetHandler.handleMovePet(reader, player); break; case PET_CHAT: PetHandler.handlePetChat(reader.readInt(), reader.readShort(), reader.readLengthPrefixedString(), player); break; case PET_COMMAND: PetHandler.handlePetCommand(reader, channelClient, player); break; case PET_FOOD: PetHandler.handlePetFood(reader, channelClient, player); break; case PET_LOOT: InventoryHandler.handlePetLoot(reader, channelClient, player); break; case PET_AUTO_POT: PetHandler.handlePetAutoPotion(reader, channelClient, player); break; case MONSTER_CARNIVAL: MonsterCarnivalHandler.handleMonsterCarnival(reader, channelClient); break; case DUEY_ACTION: DueyHandler.handleDueyOperation(reader, channelClient); break; case USE_HIRED_MERCHANT: HiredMerchantHandler.handleUseHiredMerchant(reader, channelClient); break; case MERCH_ITEM_STORE: HiredMerchantHandler.handleMerchantItemStore(reader, channelClient); break; case CANCEL_DEBUFF: // Ignore for now break; case MAPLETV: // ignore, not done break; case MOVE_DRAGON: SummonHandler.handleMoveDragon(reader, player); break; default: // System.out.println("[UNHANDLED] ["+header.toString()+"] found"); break; } } }