Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Override
- public void messageReceived(final IoSession session, final Object message) throws Exception {
- final SeekableLittleEndianAccessor slea = new GenericSeekableLittleEndianAccessor(new ByteArrayByteStream((byte[]) message));
- final RecvPacketOpcode code = Header.get(slea.readShort());
- if (code != null) {
- final Client c = (Client) session.getAttribute(StringPool.CLIENT_KEY);
- if (ServerConstants.enableHandledPacketLogging) {// Debugging
- if (!code.isIgnorePacketSpamOrLog()) {
- System.out.println(String.format("[%s] %s\nString : %s", code.name(), HexTool.toString((byte[]) message), HexTool.toStringFromAscii((byte[]) message)));
- }
- }
- if (code.NeedsChecking()) {
- if (!c.isLoggedIn()) {
- session.close(true);
- return;
- }
- /*
- * if ((code.isCSOperation() && type == ServerType.CHANNEL) ||
- * (!code.isCSOperation() && type != ServerType.CHANNEL)) {
- * return; }
- */
- }
- final long cTime = System.currentTimeMillis();
- final long Differences = cTime - c.LastCapturedTimeMillis_500MSThreshold;
- if (Differences < 500) { // within 500ms
- if (!code.isIgnorePacketSpamOrLog() && !c.FlagPendingDisconnection) { // Not move life, mob, summon, dragon
- c.PacketSpamCountWithinHalfSecond++;
- // 70 should be the acceptable level, but we will test with 200 first to make sure it doesn't affect laggers.
- if (c.PacketSpamCountWithinHalfSecond > 200) { // Spam > 70 packet within 500ms = dc.
- c.FlagPendingDisconnection();
- ServerLog.RegisterForLogging(ServerLogType.PacketSpam,
- String.format("[%s 0x%s] CharOrAccId : %s, Field : %s, Count : %d\nData : %s\nString : %s",
- code.name(),
- Integer.toHexString(code.getValue()),
- c.getPlayer() != null ? c.getPlayer().getName() : "Accid=" + String.valueOf(c.getAccID()),
- c.getPlayer() != null ? MapleMapFactory.getFullMapName(c.getPlayer().getMapId()) : "-1",
- c.PacketSpamCountWithinHalfSecond,
- HexTool.toString((byte[]) message),
- HexTool.toStringFromAscii((byte[]) message)));
- }
- }
- } else {
- c.LastCapturedTimeMillis_500MSThreshold = cTime;
- c.PacketSpamCountWithinHalfSecond = 0;
- }
- // This is also used throughout the packet handler to determine the current time instead of calling System.currentTimeMillis() again
- c.LastCapturedTimeMillis = cTime;
- // System.out.println("Differences : "+(Differences)+", count : "+c.PacketSpamCountWithinHalfSecond+", cTime : " + cTime);
- handlePacket(code, slea, c, type);
- } else if (ServerConstants.enableUnhandledPacketLogging) { // Console output part for debugging
- System.out.println(String.format("[Unhandled Packet] %s\nString : %s", HexTool.toString((byte[]) message), HexTool.toStringFromAscii((byte[]) message)));
- }
- }
- public static final void handlePacket(final RecvPacketOpcode header, final SeekableLittleEndianAccessor slea, final Client c, final ServerType type) {
- switch (header) {
- case CREATE_CHAR_IN_GAME:
- CreateCygnusHandler.handlePacket(slea, c, c.getPlayer());
- break;
- case PACKET_ERROR:
- if (ServerConstants.VER >= 107) {
- if (c.SentCrashDump) { // It can't be sent twice, chances are that its packet editing.. maybe we should auto ban
- c.closeSession();
- return;
- }
- c.SentCrashDump = true;
- slea.skip(12); // Contains some timestamp data..
- final RecvPacketOpcode code = Header.get(slea.readShort());
- if (code != null) {
- byte[] DataRead;
- if (slea.available() > 500) {
- DataRead = slea.read(500);
- } else {
- DataRead = slea.read((int) slea.available());
- }
- ServerLog.RegisterForLogging(ServerLogType.InvalidPacket,
- String.format("[%s 0x%s] [Data : %s]\nAscii : %s",
- code.name(),
- Integer.toHexString(code.getValue()),
- HexTool.toString(DataRead),
- HexTool.toStringFromAscii(DataRead)));
- }
- }
- break;
- case PONG:
- boolean InvalidWindowTitle = false;
- if (ServerConstants.isOnCommericalServer) {
- InvalidWindowTitle = slea.readByte() > 0;
- }
- c.pongReceived(type, InvalidWindowTitle);
- break;
- case STRANGE_DATA:
- // Does nothing for now, HackShield's heartbeat
- break;
- // END OF LOGIN SERVER
- case CHANGE_CHANNEL:
- final byte TargetChannel = slea.readByte();
- final int TickCount = slea.readInt();
- InterServerHandler.ChangeChannel(TargetChannel, TickCount, false, c, c.getPlayer());
- break;
- case PLAYER_LOGGEDIN:
- if (type == ServerType.CHANNEL) {
- InterServerHandler.Loggedin(slea, c);
- } else {
- CashShopOperation.EnterCS(slea, c);
- }
- break;
- case ENTER_CASH_SHOP:
- InterServerHandler.EnterCS(c, c.getPlayer());
- break;
- case ENTER_MTS:
- InterServerHandler.EnterMTS(c, c.getPlayer());
- break;
- case MTS_OP:
- MTSOperation.MTSHandler(slea, c, c.getPlayer());
- break;
- case ANDROID_MOVE:
- PlayerHandler.MoveAndroid(slea, c, c.getPlayer());
- break;
- case MOVE_PLAYER:
- PlayerHandler.MovePlayer(slea, c, c.getPlayer());
- break;
- case CHAR_INFO_REQUEST:
- PlayerHandler.CharInfoRequest(slea, c, c.getPlayer());
- break;
- case CLOSE_RANGE_ATTACK:
- PlayerHandler.closeRangeAttack(slea, c, c.getPlayer());
- break;
- case RANGED_ATTACK:
- PlayerHandler.rangedAttack(slea, c, c.getPlayer());
- break;
- case MAGIC_ATTACK:
- PlayerHandler.MagicAtk(slea, c, c.getPlayer());
- break;
- case SPECIAL_MOVE:
- PlayerHandler.SpecialMove(slea, c, c.getPlayer());
- break;
- case UPDATE_TICKCOUNT:
- if (ServerConstants.VER >= 104) {
- PlayerHandler.UpdateTickCount(slea, c.getPlayer());
- }
- break;
- case PASSIVE_ENERGY:
- PlayerHandler.PassiveAtk(slea, c, c.getPlayer());
- break;
- case FACE_EXPRESSION:
- PlayerHandler.ChangeEmotion(slea.readInt(), c.getPlayer());
- break;
- case TAKE_DAMAGE:
- PlayerHandler.TakeDamage(slea, c, c.getPlayer());
- break;
- case HEAL_OVER_TIME:
- PlayerHandler.Heal(slea, c.getPlayer());
- break;
- case CANCEL_BUFF:
- PlayerHandler.CancelBuffHandler(slea, c.getPlayer());
- break;
- case MECH_UNCHANGE:
- PlayerHandler.CancelBuffMech_Handler(slea, c.getPlayer());
- break;
- case CANCEL_ITEM_EFFECT:
- PlayerHandler.CancelItemEffect(slea.readInt(), c.getPlayer());
- break;
- case USE_CHAIR:
- PlayerHandler.UseChair(slea.readInt(), c, c.getPlayer());
- break;
- case CANCEL_CHAIR:
- PlayerHandler.CancelChair(slea.readShort(), c, c.getPlayer());
- break;
- case USE_ITEMEFFECT:
- PlayerHandler.UseItemEffect(slea.readInt(), c, c.getPlayer());
- break;
- case USE_FISHING:
- FishingHandler.UseFishing(slea, c);
- break;
- case SKILL_EFFECT:
- PlayerHandler.SkillEffect(slea, c.getPlayer());
- break;
- case MESO_DROP:
- PlayerHandler.DropMeso(slea, c, c.getPlayer());
- break;
- case WHEEL_OF_FORTUNE:
- PlayerHandler.MiscItemHandler(slea.readInt(), c.getPlayer());
- break;
- case MONSTER_BOOK_COVER:
- PlayerHandler.ChangeMonsterBookCover(slea.readInt(), c, c.getPlayer());
- break;
- case CHANGE_KEYMAP:
- PlayerHandler.ChangeKeymap(slea, c.getPlayer());
- break;
- case CHANGE_MAP:
- if (type == ServerType.CHANNEL) {
- PlayerHandler.ChangeMap(slea, c, c.getPlayer());
- } else {
- CashShopOperation.LeaveCS(slea, c, c.getPlayer());
- }
- break;
- case CHANGE_MAP_SPECIAL:
- PlayerHandler.ChangeMapSpecial(slea, c, c.getPlayer());
- break;
- case USE_INNER_PORTAL:
- PlayerHandler.InnerPortal(slea, c, c.getPlayer());
- break;
- case TROCK_ADD_MAP:
- PlayerHandler.TrockAddMap(slea, c, c.getPlayer());
- break;
- case ARAN_COMBO:
- PlayerHandler.AranCombo(c, c.getPlayer(), 1);
- break;
- case SKILL_MACRO:
- PlayerHandler.ChangeSkillMacro(slea, c, c.getPlayer());
- break;
- case FOLLOW_CHARCTER:
- PlayersHandler.FollowCharacter(slea, c, c.getPlayer());
- break;
- case REPORT:
- PlayersHandler.ReportPlayer(slea, c, c.getPlayer());
- break;
- case GIVE_FAME:
- PlayersHandler.GiveFame(slea, c, c.getPlayer());
- break;
- case TRANSFORM_PLAYER:
- PlayersHandler.TransformPlayer(slea, c, c.getPlayer());
- break;
- case NOTE_ACTION:
- PlayersHandler.Note(slea, c.getPlayer());
- break;
- case USE_DOOR:
- PlayersHandler.UseDoor(slea, c.getPlayer());
- break;
- case USE_MECHANIC_DOOR:
- PlayersHandler.UseMechanicDoor(slea, c, c.getPlayer());
- break;
- case DAMAGE_REACTOR:
- PlayersHandler.HitReactor(slea, c);
- break;
- case CLICK_REACTOR:
- PlayersHandler.ClickReactor(slea, c, c.getPlayer());
- break;
- case MASTERIA_TRAP:
- PlayersHandler.Masteria_Trap(slea, c.getPlayer());
- break;
- case CLOSE_CHALKBOARD:
- c.getPlayer().setChalkboard(null);
- break;
- case ITEM_MAKER:
- ItemMakerHandler.ItemMaker(slea, c, c.getPlayer());
- break;
- case REPAIR_ITEM:
- ItemRepairShopHandler.OnRepairItem(slea, c, c.getPlayer());
- break;
- case INVENTORY_GROUP:
- InventoryHandler.ItemGroup(slea, c);
- break;
- case INVENTORY_SORT:
- InventoryHandler.ItemSort(slea, c);
- break;
- case ITEM_MOVE:
- InventoryHandler.ItemMove(slea, c, c.getPlayer());
- break;
- case ITEM_MOVE_BAG:
- if (ServerConstants.isChaosUpdate) {
- InventoryHandler.ItemMove_Bag(slea, c);
- }
- break;
- case ITEM_SWITCH_BAG:
- if (ServerConstants.isChaosUpdate) {
- InventoryHandler.ItemMoveSwitch_Bag(slea, c);
- }
- break;
- case ITEM_PICKUP:
- InventoryHandler.Pickup_Player(slea, c, c.getPlayer());
- break;
- case USE_CASH_ITEM:
- InventoryHandler.UseCashItem(slea, c, c.getPlayer());
- break;
- case USE_ITEM:
- InventoryHandler.UseItem(slea, c, c.getPlayer());
- break;
- case USE_SCRIPTED_NPC_ITEM:
- InventoryHandler.UseScriptedNPCItem(slea, c, c.getPlayer());
- break;
- case USE_PROFESSION_RECIPE:
- if (ServerConstants.isChaosUpdate) {
- InventoryHandler.UseProfessionsRecipe(slea, c, c.getPlayer());
- }
- break;
- case USE_RETURN_SCROLL:
- InventoryHandler.UseReturnScroll(slea, c, c.getPlayer());
- break;
- case USE_UPGRADE_SCROLL:
- InventoryHandler.UseUpgradeScroll(slea, c, c.getPlayer());
- break;
- case USE_PROTECTION_SCROLL:
- if (ServerConstants.VER >= 110) {
- InventoryHandler.UseProtectionScroll(slea, c, c.getPlayer());
- }
- break;
- case USE_ENCHANTMENT_SCROLL:
- InventoryHandler.UseEnhancementScroll(slea, c, c.getPlayer());
- break;
- case USE_POTENTIAL_SCROLL:
- InventoryHandler.UsePotentialScroll(slea, c, c.getPlayer());
- break;
- case USE_POTENTIAL_SEAL:
- InventoryHandler.UsePotentialSeal(slea, c, c.getPlayer());
- break;
- case OPEN_HERB_BAG:
- if (ServerConstants.isChaosUpdate) {
- InventoryHandler.OpenBag(slea, c, c.getPlayer());
- }
- break;
- case MAGNIFYING_GLASS:
- InventoryHandler.UseMagnifyingGlass(slea, c, c.getPlayer());
- break;
- case USE_SUMMON_BAG:
- InventoryHandler.UseSummonBag(slea, c, c.getPlayer());
- break;
- case USE_TREASUER_CHEST:
- InventoryHandler.UseTreasureChest(slea, c, c.getPlayer());
- break;
- case USE_SKILL_BOOK:
- InventoryHandler.UseSkillBook(slea, c, c.getPlayer());
- break;
- case USE_SKILLPOINT_RESET:
- InventoryHandler.UseSPReset(slea, c, c.getPlayer());
- break;
- case USE_CATCH_ITEM:
- InventoryHandler.UseCatchItem(slea, c, c.getPlayer());
- break;
- case USE_MOUNT_FOOD:
- InventoryHandler.UseMountFood(slea, c, c.getPlayer());
- break;
- case REWARD_ITEM:
- InventoryHandler.UseRewardItem(slea, c, c.getPlayer());
- break;
- case USE_GOLDEN_HAMMER:
- if (ServerConstants.VER >= 114) {
- InventoryHandler.UseGoldenHammer(slea, c, c.getPlayer());
- }
- break;
- case GOLDEN_HAMMER_SMASH:
- if (ServerConstants.VER >= 114) {
- InventoryHandler.HammerSmash(slea, c, c.getPlayer());
- }
- break;
- case ESCORT_MESSAGE:
- EscortMonsterHandler.EscortMessage(slea, c, c.getPlayer());
- break;
- case REQUEST_ESCORT_MOVEMENT:
- EscortMonsterHandler.EscortReq(slea, c, c.getPlayer());
- break;
- case ANTI_BOT_MOB_TELE:
- MobHandler.AntiBotMobTele(slea, c, c.getPlayer());
- break;
- case HYPNOTIZE_DMG:
- MobHandler.HypnotizeDmg(slea, c.getPlayer());
- break;
- case MOVE_LIFE:
- MobHandler.MoveMonster(slea, c, c.getPlayer());
- break;
- case AUTO_AGGRO:
- MobHandler.AutoAggro(slea.readInt(), c.getPlayer());
- break;
- case FRIENDLY_DAMAGE:
- MobHandler.FriendlyDamage(slea, c.getPlayer());
- break;
- case MONSTER_TURNCOAT_ATTACK:
- MobHandler.MonsterTurncoatAttack(slea, c, c.getPlayer());
- break;
- case MONSTER_BOMB_SKILL:
- MobHandler.MonsterBombSkill(slea, c, c.getPlayer());
- break;
- case MONSTER_BOMB:
- MobHandler.MonsterBomb(slea.readInt(), c.getPlayer());
- break;
- case NPC_SHOP:
- NPCHandler.NPCShop(slea, c, c.getPlayer());
- break;
- case NPC_TALK:
- NPCHandler.NPCTalk(slea, c, c.getPlayer());
- break;
- case NPC_TALK_MORE:
- NPCHandler.NPCMoreTalk(slea, c);
- break;
- case NPC_ACTION:
- NPCHandler.NPCAnimation(slea, c);
- break;
- case QUEST_ACTION:
- NPCHandler.QuestAction(slea, c, c.getPlayer());
- break;
- case QUEST_REISSUE_MEDAL:
- NPCHandler.QuestReissueMedal(slea, c, c.getPlayer());
- break;
- case UPDATE_QUEST:
- NPCHandler.UpdateQuest(slea, c.getPlayer());
- break;
- case USE_ITEM_QUEST:
- NPCHandler.UseItemQuest(slea, c, c.getPlayer());
- break;
- case CANCEL_ITEM_QUEST:
- NPCHandler.CancelItemQuest(slea, c, c.getPlayer());
- break;
- case ITEM_QUEST_DATA_REPLACE:
- NPCHandler.ItemQuestDataReplace(slea, c, c.getPlayer());
- break;
- case STORAGE:
- NPCHandler.Storage(slea, c, c.getPlayer());
- break;
- case GENERAL_CHAT:
- ChatHandler.GeneralChat(slea, c, c.getPlayer());
- break;
- case PARTYCHAT:
- ChatHandler.Others(slea, c, c.getPlayer());
- break;
- case WHISPER:
- ChatHandler.Whisper_Find(slea, c, c.getPlayer());
- break;
- case MESSENGER:
- ChatHandler.Messenger(slea, c);
- break;
- case AUTO_ASSIGN_AP:
- StatsHandling.AutoAssignAP(slea, c, c.getPlayer());
- break;
- case DISTRIBUTE_AP:
- StatsHandling.DistributeAP(slea, c, c.getPlayer());
- break;
- case DISTRIBUTE_SP:
- StatsHandling.DistributeSP(slea, c, c.getPlayer());
- break;
- case PLAYER_INTERACTION:
- PlayerInteractionHandler.PlayerInteraction(slea, c, c.getPlayer());
- break;
- case GUILD_OPERATION:
- GuildHandler.Guild(slea, c, c.getPlayer());
- break;
- case DENY_GUILD_REQUEST:
- slea.skip(1);
- GuildHandler.DenyGuildRequest(slea.readMapleAsciiString(), c);
- break;
- case ALLIANCE_OPERATION:
- AllianceHandler.AllianceOperation(slea, c, false);
- break;
- case DENY_ALLIANCE_REQUEST:
- AllianceHandler.AllianceOperation(slea, c, true);
- break;
- case BBS_OPERATION:
- BBSHandler.BBSOperation(slea, c);
- break;
- case DISCONNECT_USER: // Some marker sent when player disconnected, no idea what it is used for
- byte data = slea.readByte();
- if (data > 0 && c.getPlayer() != null) {
- // System.out.println("Disconnect user invoked with : " + data);
- // c.getSession().close();
- // } else {
- // System.out.println("2 Disconnect user invoked with : " + data);
- }
- break;
- case REQUEST_SELF_FAMILY:
- FamilyHandler.RequestSelfFamily(c, c.getPlayer());
- break;
- case REQUEST_FAMILY:
- FamilyHandler.RequestFamily(slea, c, c.getPlayer());
- break;
- case REQUEST_FAMILY_ADD:
- FamilyHandler.AddFamily(slea, c, c.getPlayer());
- break;
- case FAMILY_CANCEL:
- FamilyHandler.CancelFamily(slea, c, c.getPlayer());
- break;
- case FAMILY_JOIN:
- FamilyHandler.JoinFamily(slea, c, c.getPlayer());
- break;
- case FAMILY_ENTITLEMENT:
- FamilyHandler.Entitlement(slea, c, c.getPlayer());
- break;
- case PARTY_SEARCH:
- PartyHandler.PartySearch(slea, c, c.getPlayer());
- break;
- case PARTY_SEARCH_CANCEL:
- PartyHandler.CancelPartySearch(c.getPlayer());
- break;
- case EXPEDITION:
- PartyHandler.Expedition(slea, c, c.getPlayer());
- break;
- case EXPEDITION_LISTING:
- PartyHandler.ExpeditionListing(slea, c, c.getPlayer());
- break;
- case PARTY_OPERATION:
- PartyHandler.PartyOperation(slea, c);
- break;
- case PARTY_INVITATION:
- PartyHandler.PartyInvitation(slea, c, c.getPlayer());
- break;
- case DENY_PARTY_REQUEST:
- PartyHandler.DenyPartyRequest(slea, c);
- break;
- case BUDDYLIST_MODIFY:
- BuddyListHandler.BuddyOperation(slea, c);
- break;
- case IMP_POT_USE:
- if (ServerConstants.isChaosUpdate) {
- Prof_ImpPotHandler.UsePot(slea, c, c.getPlayer());
- }
- break;
- case IMP_POT_CLEAR:
- if (ServerConstants.isChaosUpdate) {
- Prof_ImpPotHandler.ClearPot(slea, c, c.getPlayer());
- }
- break;
- case IMP_POT_FEED:
- if (ServerConstants.isChaosUpdate) {
- Prof_ImpPotHandler.FeedPot(slea, c, c.getPlayer());
- }
- break;
- case IMP_POT_CURE:
- if (ServerConstants.isChaosUpdate) {
- Prof_ImpPotHandler.CurePot(slea, c, c.getPlayer());
- }
- break;
- case IMP_POT_REWARD:
- if (ServerConstants.isChaosUpdate) {
- Prof_ImpPotHandler.RewardPot(slea, c, c.getPlayer());
- }
- break;
- case USE_PROFESSION_EXTRACTOR:
- if (ServerConstants.isChaosUpdate) {
- ProfessionsHandler.AlchemistExtractor(slea, c, c.getPlayer());
- }
- break;
- case PROFESSIONS_CRAFT:
- if (ServerConstants.isChaosUpdate) {
- ProfessionsHandler.ProfessionsCraft(slea, c, c.getPlayer());
- }
- break;
- case PROFESSIONS_ANIMATION:
- if (ServerConstants.isChaosUpdate) {
- ProfessionsHandler.ProfessionsAnimation(slea, c, c.getPlayer());
- }
- break;
- case PROFESSIONS_EXTRACT:
- if (ServerConstants.isChaosUpdate) {
- ProfessionsHandler.ProfessionsExtract(slea, c, c.getPlayer());
- }
- break;
- case PROFESSIONS_CRAFTING_STATE:
- if (ServerConstants.isChaosUpdate) {
- ProfessionsHandler.ProfessionsCraftingState(slea, c, c.getPlayer());
- }
- break;
- case START_PROFESSION_USE:
- if (ServerConstants.isChaosUpdate) {
- ProfessionsHandler.StartProfessionHerbOrVien(slea, c, c.getPlayer());
- }
- break;
- case END_PROFESSION_USE:
- if (ServerConstants.isChaosUpdate) {
- ProfessionsHandler.EndProfessionHerbOrVien(slea, c, c.getPlayer());
- }
- break;
- case PVP_ATTACK:
- if (ServerConstants.isChaosUpdate) {
- PvPHandler.PvpAttack(slea, c, c.getPlayer());
- }
- break;
- case PVP_ENTER:
- if (ServerConstants.isChaosUpdate) {
- PvPHandler.PvpEnter(slea, c, c.getPlayer());
- }
- break;
- case PVP_LEAVE:
- if (ServerConstants.isChaosUpdate) {
- PvPHandler.PvpLeave(slea, c, c.getPlayer());
- }
- break;
- case REQUEST_PVP_STATUS:
- if (ServerConstants.isChaosUpdate) {
- PvPHandler.PvpStatusRequest(slea, c, c.getPlayer());
- }
- break;
- case CYGNUS_SUMMON:
- UserInterfaceHandler.CygnusSummon_NPCRequest(c);
- break;
- case CANTICHEAT_IV:
- CRC_AntiCheatHandler.CheckIVHeader(slea, c, c.getPlayer());
- break;
- case CRC_ANTICHEAT:
- CRC_AntiCheatHandler.OnMapCRCFailed(c);
- break;
- case LIE_DETECTOR_TEST:
- CAntiCheatHandler.OnUserRequestedLieDetector(slea, c, c.getPlayer());
- break;
- case LIE_DETECTOR_REPLY:
- CAntiCheatHandler.OnLieDetectorFailed(slea, c, c.getPlayer());
- break;
- case SHIP_OBJECT:
- UserInterfaceHandler.ShipObjectRequest(slea, c);
- break;
- case COCONUT_HARVEST:
- CoconutHarvest.onCoconutPacket(slea, c, c.getPlayer());
- break;
- case SUCEESS_CHANGEMAP:
- break;
- case GAME_POLL_REPLY:
- UserInterfaceHandler.InGame_Poll(slea, c);
- break;
- case BUY_CS_ITEM:
- if (type == ServerType.CASHSHOP) {
- CashShopOperation.BuyCashItem(slea, c, c.getPlayer());
- } else {
- c.closeSession();
- }
- break;
- case COUPON_CODE:
- if (type == ServerType.CASHSHOP) {
- slea.skip(2);
- CashShopOperation.CouponCode(slea.readMapleAsciiString(), c);
- } else {
- c.closeSession();
- }
- break;
- case CS_UPDATE:
- if (type == ServerType.CASHSHOP) {
- CashShopOperation.CSUpdate(c, c.getPlayer());
- } else {
- c.closeSession();
- }
- break;
- case DAMAGE_SUMMON:
- SummonHandler.DamageSummon(slea, c.getPlayer());
- break;
- case MOVE_SUMMON:
- SummonHandler.MoveSummon(slea, c.getPlayer());
- break;
- case SUMMON_ATTACK:
- SummonHandler.SummonAttack(slea, c, c.getPlayer());
- break;
- case SUMMON_SPAWN:
- SummonHandler.Summon_spawn(slea, c, c.getPlayer());
- break;
- case REMOVE_ROBOT:
- SummonHandler.RemoveSummonRobot(slea, c, c.getPlayer());
- break;
- case MOVE_EVAN_DRAGON:
- SummonHandler.Move_EvanSummon(slea, c, c.getPlayer());
- break;
- case SPAWN_PET:
- PetHandler.SpawnPet(slea, c, c.getPlayer());
- break;
- case MOVE_PET:
- PetHandler.MovePet(slea, c.getPlayer());
- break;
- case PET_CHAT:
- PetHandler.PetChat(slea, c.getPlayer());
- break;
- case PET_COMMAND:
- PetHandler.PetCommand(slea, c, c.getPlayer());
- break;
- case PET_FOOD:
- PetHandler.PetFood(slea, c, c.getPlayer());
- break;
- case PET_LOOT:
- InventoryHandler.Pickup_Pet(slea, c, c.getPlayer());
- break;
- case PET_AUTO_POT:
- PetHandler.Pet_AutoPotion(slea, c, c.getPlayer());
- break;
- case MONSTER_CARNIVAL:
- MonsterCarnivalHandler.MonsterCarnival(slea, c, c.getPlayer());
- break;
- case DUEY_ACTION:
- DueyHandler.DueyOperation(slea, c, c.getPlayer());
- break;
- case OWL_MINERVA:
- HiredMerchantHandler.OWL_MINERVA(slea, c, c.getPlayer());
- break;
- case OWL_MINERVA_ENTER:
- HiredMerchantHandler.OWL_MINERVA_ENTER(slea, c, c.getPlayer());
- break;
- case USE_HIRED_MERCHANT:
- HiredMerchantHandler.UseHiredMerchant(slea, c);
- break;
- case MERCH_ITEM_STORE:
- HiredMerchantHandler.MerchantItemStore(slea, c, c.getPlayer());
- break;
- case ADMIN_SERV_MSG:
- AdminCommand.onServMsgCommand(slea, c, c.getPlayer());
- break;
- case ADMIN_COMMAND:
- AdminCommand.onCommand(slea, c, c.getPlayer());
- break;
- case WEDDING_ENGAGEMENT:
- WeddingHandler.RequestEngagement(slea, c, c.getPlayer());
- break;
- case CANCEL_DEBUFF:
- // Ignore for now
- break;
- case MAPLETV:
- // ignore, not done
- break;
- default:
- System.out.println(String.format("[UNHANDLED] Recv [%s] found", header.toString()));
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement