From e184f251846ff9d7c08a8368153163d84f0a05c5 Mon Sep 17 00:00:00 2001 From: P0nk Date: Thu, 19 Aug 2021 21:31:57 +0200 Subject: [PATCH 1/7] Remove "Maple" prefix from MaplePacketCreator name --- scripts/event/2xEvent.js | 8 +- scripts/event/3rdJob_bowman.js | 4 +- scripts/event/3rdJob_magician.js | 4 +- scripts/event/3rdJob_mount.js | 4 +- scripts/event/3rdJob_pirate.js | 4 +- scripts/event/3rdJob_thief.js | 4 +- scripts/event/3rdJob_warrior.js | 4 +- scripts/event/Aran_2ndmount.js | 4 +- scripts/event/Aran_3rdmount.js | 4 +- scripts/event/AreaBossBamboo.js | 4 +- scripts/event/AreaBossCentipede.js | 4 +- scripts/event/AreaBossDeo.js | 4 +- scripts/event/AreaBossDoor1.js | 4 +- scripts/event/AreaBossDoor2.js | 4 +- scripts/event/AreaBossDoor3.js | 4 +- scripts/event/AreaBossDoor4.js | 4 +- scripts/event/AreaBossDoor5.js | 4 +- scripts/event/AreaBossDoor6.js | 4 +- scripts/event/AreaBossDyle.js | 4 +- scripts/event/AreaBossEliza1.js | 4 +- scripts/event/AreaBossFaust1.js | 4 +- scripts/event/AreaBossFaust2.js | 4 +- scripts/event/AreaBossKimera.js | 4 +- scripts/event/AreaBossKingClang.js | 4 +- scripts/event/AreaBossKingSageCat.js | 4 +- scripts/event/AreaBossLeviathan.js | 4 +- scripts/event/AreaBossMano.js | 4 +- scripts/event/AreaBossNineTailedFox.js | 4 +- scripts/event/AreaBossSeruf.js | 4 +- scripts/event/AreaBossSnackBar.js | 4 +- scripts/event/AreaBossStumpy.js | 4 +- scripts/event/AreaBossTaeRoon.js | 4 +- scripts/event/AreaBossTimer1.js | 4 +- scripts/event/AreaBossTimer2.js | 4 +- scripts/event/AreaBossTimer3.js | 4 +- scripts/event/AreaBossZeno.js | 4 +- scripts/event/BalrogQuest.js | 4 +- scripts/event/Boats.js | 6 +- scripts/event/DollHouse.js | 4 +- scripts/event/Hak.js | 4 +- scripts/event/HenesysPQ.js | 8 +- scripts/event/KerningTrain.js | 6 +- scripts/event/RescueGaga.js | 4 +- scripts/event/Subway.js | 12 +- scripts/map/onUserEnter/200090000.js | 6 +- scripts/map/onUserEnter/200090010.js | 6 +- scripts/npc/1022101_old.js | 4 +- scripts/npc/1061014.js | 4 +- scripts/npc/2012027.js | 12 +- scripts/npc/2012028.js | 12 +- scripts/npc/2012029.js | 12 +- scripts/npc/2012030.js | 12 +- scripts/npc/2012031.js | 12 +- scripts/npc/2012032.js | 12 +- scripts/npc/2012033.js | 12 +- scripts/npc/2030013.js | 4 +- scripts/npc/2083004.js | 4 +- scripts/npc/2141001.js | 4 +- scripts/npc/9000019.js | 4 +- scripts/npc/9120201.js | 4 +- scripts/npc/9201002.js | 14 +- scripts/npc/9201011.js | 14 +- scripts/npc/9201113.js | 4 +- scripts/npc/9270047.js | 4 +- scripts/npc/9977777.js | 12 +- scripts/npc/MagatiaPassword.js | 4 +- scripts/portal/party3_jailin.js | 10 +- scripts/reactor/9101000.js | 6 +- src/main/java/client/BuddyList.java | 4 +- src/main/java/client/MapleCharacter.java | 304 +++++++++--------- src/main/java/client/MapleClient.java | 34 +- src/main/java/client/MapleFamily.java | 4 +- src/main/java/client/MapleFamilyEntry.java | 18 +- src/main/java/client/MonsterBook.java | 10 +- .../java/client/autoban/AutobanFactory.java | 6 +- .../command/commands/gm0/DisposeCommand.java | 4 +- .../command/commands/gm0/GmCommand.java | 6 +- .../command/commands/gm0/RanksCommand.java | 4 +- .../commands/gm0/ReportBugCommand.java | 6 +- .../command/commands/gm2/BombCommand.java | 4 +- .../command/commands/gm2/UnBugCommand.java | 4 +- .../command/commands/gm3/BanCommand.java | 12 +- .../command/commands/gm3/IgnoreCommand.java | 6 +- .../command/commands/gm3/KillCommand.java | 4 +- .../commands/gm3/MaxEnergyCommand.java | 4 +- .../command/commands/gm3/MonitorCommand.java | 6 +- .../command/commands/gm3/MusicCommand.java | 8 +- .../command/commands/gm3/NoticeCommand.java | 4 +- .../command/commands/gm3/NpcCommand.java | 4 +- .../command/commands/gm3/RipCommand.java | 4 +- .../commands/gm3/StartEventCommand.java | 6 +- .../command/commands/gm3/TimerAllCommand.java | 6 +- .../command/commands/gm3/TimerCommand.java | 6 +- .../command/commands/gm3/TimerMapCommand.java | 6 +- .../commands/gm4/BossDropRateCommand.java | 4 +- .../command/commands/gm4/DropRateCommand.java | 4 +- .../command/commands/gm4/ExpRateCommand.java | 4 +- .../commands/gm4/FishingRateCommand.java | 4 +- .../command/commands/gm4/ForceVacCommand.java | 4 +- .../command/commands/gm4/MesoRateCommand.java | 4 +- .../command/commands/gm4/PnpcCommand.java | 4 +- .../commands/gm4/QuestRateCommand.java | 4 +- .../commands/gm4/TravelRateCommand.java | 4 +- .../command/commands/gm5/DebugCommand.java | 2 +- .../command/commands/gm6/SaveAllCommand.java | 4 +- .../commands/gm6/WarpWorldCommand.java | 4 +- .../java/client/creator/CharacterFactory.java | 8 +- src/main/java/client/inventory/Equip.java | 6 +- src/main/java/client/inventory/MaplePet.java | 8 +- .../MapleInventoryManipulator.java | 92 +++--- .../client/newyear/NewYearCardRecord.java | 12 +- .../processor/action/BuybackProcessor.java | 12 +- .../processor/action/MakerProcessor.java | 65 ++-- .../processor/action/PetAutopotProcessor.java | 13 +- .../processor/action/SpawnPetProcessor.java | 12 +- .../client/processor/npc/DueyProcessor.java | 38 +-- .../processor/npc/FredrickProcessor.java | 6 +- .../processor/npc/StorageProcessor.java | 34 +- .../processor/stat/AssignAPProcessor.java | 52 +-- .../processor/stat/AssignSPProcessor.java | 6 +- .../net/netty/ServerChannelInitializer.java | 4 +- src/main/java/net/server/channel/Channel.java | 6 +- .../handlers/AbstractDealDamageHandler.java | 18 +- .../channel/handlers/AcceptFamilyHandler.java | 33 +- .../channel/handlers/AdminChatHandler.java | 4 +- .../channel/handlers/AdminCommandHandler.java | 16 +- .../handlers/AllianceOperationHandler.java | 32 +- .../channel/handlers/BBSOperationHandler.java | 6 +- .../handlers/BuddylistModifyHandler.java | 36 +-- .../channel/handlers/CancelBuffHandler.java | 13 +- .../channel/handlers/CancelDebuffHandler.java | 4 +- .../handlers/CashOperationHandler.java | 111 +++---- .../handlers/CashShopSurpriseHandler.java | 8 +- .../channel/handlers/ChangeMapHandler.java | 20 +- .../handlers/ChangeMapSpecialHandler.java | 8 +- .../handlers/CharInfoRequestHandler.java | 4 +- .../handlers/CloseChalkboardHandler.java | 4 +- .../handlers/CloseRangeDamageHandler.java | 16 +- .../channel/handlers/CoconutHandler.java | 16 +- .../channel/handlers/CouponCodeHandler.java | 8 +- .../channel/handlers/DamageSummonHandler.java | 6 +- .../handlers/DenyPartyRequestHandler.java | 4 +- .../server/channel/handlers/DoorHandler.java | 8 +- .../server/channel/handlers/DueyHandler.java | 5 +- .../handlers/EnterCashShopHandler.java | 22 +- .../channel/handlers/EnterMTSHandler.java | 34 +- .../channel/handlers/FamilyAddHandler.java | 24 +- .../handlers/FamilyPreceptsHandler.java | 4 +- .../handlers/FamilySeparateHandler.java | 10 +- .../handlers/FamilySummonResponseHandler.java | 4 +- .../channel/handlers/FamilyUseHandler.java | 16 +- .../handlers/FieldDamageMobHandler.java | 4 +- .../channel/handlers/FredrickHandler.java | 3 +- .../channel/handlers/GeneralChatHandler.java | 8 +- .../channel/handlers/GiveFameHandler.java | 7 +- .../handlers/GrenadeEffectHandler.java | 11 +- .../handlers/GuildOperationHandler.java | 20 +- .../channel/handlers/HealOvertimeHandler.java | 4 +- .../handlers/HiredMerchantRequest.java | 23 +- .../handlers/InventoryMergeHandler.java | 16 +- .../handlers/InventorySortHandler.java | 10 +- .../channel/handlers/ItemMoveHandler.java | 6 +- .../channel/handlers/ItemRewardHandler.java | 13 +- .../handlers/LeftKnockbackHandler.java | 6 +- .../server/channel/handlers/MTSHandler.java | 76 ++--- .../channel/handlers/MagicDamageHandler.java | 14 +- .../channel/handlers/MesoDropHandler.java | 12 +- .../channel/handlers/MessengerHandler.java | 16 +- .../handlers/MobDamageMobFriendlyHandler.java | 22 +- .../channel/handlers/MobDamageMobHandler.java | 9 +- .../channel/handlers/MonsterBombHandler.java | 4 +- .../handlers/MonsterBookCoverHandler.java | 4 +- .../handlers/MonsterCarnivalHandler.java | 43 +-- .../channel/handlers/MoveDragonHandler.java | 10 +- .../channel/handlers/MoveLifeHandler.java | 18 +- .../channel/handlers/MovePetHandler.java | 7 +- .../channel/handlers/MovePlayerHandler.java | 6 +- .../channel/handlers/MoveSummonHandler.java | 10 +- .../channel/handlers/MultiChatHandler.java | 4 +- .../channel/handlers/NPCTalkHandler.java | 12 +- .../channel/handlers/NewYearCardHandler.java | 34 +- .../channel/handlers/NoteActionHandler.java | 4 +- .../channel/handlers/OpenFamilyHandler.java | 6 +- .../handlers/OpenFamilyPedigreeHandler.java | 6 +- .../channel/handlers/OwlWarpHandler.java | 46 +-- .../handlers/PartyOperationHandler.java | 32 +- .../handlers/PartySearchStartHandler.java | 14 +- .../channel/handlers/PetChatHandler.java | 4 +- .../channel/handlers/PetCommandHandler.java | 6 +- .../channel/handlers/PetFoodHandler.java | 12 +- .../channel/handlers/PetLootHandler.java | 18 +- .../handlers/PlayerInteractionHandler.java | 170 +++++----- .../handlers/PlayerLoggedinHandler.java | 58 ++-- .../handlers/PlayerMapTransitionHandler.java | 11 +- .../channel/handlers/RPSActionHandler.java | 14 +- .../channel/handlers/RaiseIncExpHandler.java | 6 +- .../channel/handlers/RangedAttackHandler.java | 32 +- .../channel/handlers/RemoteStoreHandler.java | 6 +- .../channel/handlers/ReportHandler.java | 14 +- .../channel/handlers/RingActionHandler.java | 16 +- .../channel/handlers/ScrollHandler.java | 10 +- .../channel/handlers/SkillBookHandler.java | 6 +- .../channel/handlers/SkillEffectHandler.java | 22 +- .../channel/handlers/SpecialMoveHandler.java | 42 ++- .../channel/handlers/SpouseChatHandler.java | 6 +- .../channel/handlers/SummonDamageHandler.java | 9 +- .../channel/handlers/TakeDamageHandler.java | 16 +- .../handlers/TouchingCashShopHandler.java | 4 +- .../channel/handlers/TransferNameHandler.java | 18 +- .../handlers/TransferNameResultHandler.java | 4 +- .../handlers/TransferWorldHandler.java | 16 +- .../channel/handlers/TrockAddMapHandler.java | 6 +- .../channel/handlers/UseCashItemHandler.java | 92 +++--- .../channel/handlers/UseCatchItemHandler.java | 64 ++-- .../channel/handlers/UseDeathItemHandler.java | 4 +- .../channel/handlers/UseGachaExpHandler.java | 4 +- .../channel/handlers/UseHammerHandler.java | 4 +- .../handlers/UseItemEffectHandler.java | 4 +- .../channel/handlers/UseItemHandler.java | 8 +- .../channel/handlers/UseMapleLifeHandler.java | 12 +- .../channel/handlers/UseMountFoodHandler.java | 8 +- .../handlers/UseOwlOfMinervaHandler.java | 4 +- .../channel/handlers/UseSolomonHandler.java | 8 +- .../channel/handlers/UseSummonBagHandler.java | 6 +- .../channel/handlers/WeddingHandler.java | 7 +- .../channel/handlers/WeddingTalkHandler.java | 4 +- .../handlers/WeddingTalkMoreHandler.java | 4 +- .../channel/handlers/WhisperHandler.java | 18 +- .../listener/MatchCheckerGuildCreation.java | 21 +- .../MaplePartySearchCoordinator.java | 4 +- .../java/net/server/guild/MapleAlliance.java | 22 +- .../java/net/server/guild/MapleGuild.java | 40 +-- .../net/server/guild/MapleGuildResponse.java | 6 +- .../server/handlers/CustomPacketHandler.java | 4 +- .../handlers/login/AcceptToSHandler.java | 6 +- .../handlers/login/AfterLoginHandler.java | 14 +- .../handlers/login/CharSelectedHandler.java | 12 +- .../login/CharSelectedWithPicHandler.java | 14 +- .../login/CharlistRequestHandler.java | 6 +- .../handlers/login/CheckCharNameHandler.java | 4 +- .../handlers/login/CreateCharHandler.java | 6 +- .../handlers/login/DeleteCharHandler.java | 16 +- .../handlers/login/GuestLoginHandler.java | 4 +- .../handlers/login/LoginPasswordHandler.java | 16 +- .../handlers/login/RegisterPicHandler.java | 12 +- .../handlers/login/RegisterPinHandler.java | 4 +- .../handlers/login/RelogRequestHandler.java | 4 +- .../login/ServerStatusRequestHandler.java | 8 +- .../login/ServerlistRequestHandler.java | 13 +- .../handlers/login/SetGenderHandler.java | 4 +- .../handlers/login/ViewAllCharHandler.java | 13 +- .../login/ViewAllCharRegisterPicHandler.java | 12 +- .../login/ViewAllCharSelectedHandler.java | 12 +- .../ViewAllCharSelectedWithPicHandler.java | 14 +- .../task/channel/FaceExpressionService.java | 6 +- .../java/net/server/world/MapleParty.java | 14 +- src/main/java/net/server/world/World.java | 48 +-- .../scripting/AbstractPlayerInteraction.java | 92 +++--- .../scripting/event/EventInstanceManager.java | 20 +- .../java/scripting/map/MapScriptMethods.java | 52 +-- .../scripting/npc/NPCConversationManager.java | 58 ++-- .../java/scripting/npc/NPCScriptManager.java | 4 +- .../portal/PortalPlayerInteraction.java | 4 +- .../reactor/ReactorActionManager.java | 4 +- .../server/MapleItemInformationProvider.java | 2 +- src/main/java/server/MapleShop.java | 28 +- src/main/java/server/MapleStatEffect.java | 58 ++-- src/main/java/server/MapleStorage.java | 14 +- src/main/java/server/MapleTrade.java | 42 +-- .../java/server/events/gm/MapleCoconut.java | 44 +-- .../java/server/events/gm/MapleFitness.java | 30 +- src/main/java/server/events/gm/MapleOla.java | 6 +- .../java/server/events/gm/MapleOxQuiz.java | 8 +- .../java/server/events/gm/MapleSnowball.java | 20 +- .../server/expeditions/MapleExpedition.java | 34 +- src/main/java/server/life/MapleMonster.java | 52 +-- src/main/java/server/life/MapleNPC.java | 10 +- src/main/java/server/life/MaplePlayerNPC.java | 22 +- .../life/positioner/MaplePlayerNPCPodium.java | 10 +- .../positioner/MaplePlayerNPCPositioner.java | 10 +- .../java/server/maps/MapleDoorObject.java | 25 +- src/main/java/server/maps/MapleDragon.java | 6 +- .../java/server/maps/MapleGenericPortal.java | 11 +- .../java/server/maps/MapleHiredMerchant.java | 50 +-- src/main/java/server/maps/MapleKite.java | 9 +- src/main/java/server/maps/MapleMap.java | 140 ++++---- src/main/java/server/maps/MapleMapEffect.java | 6 +- src/main/java/server/maps/MapleMapItem.java | 11 +- .../java/server/maps/MapleMiniDungeon.java | 6 +- src/main/java/server/maps/MapleMiniGame.java | 40 +-- src/main/java/server/maps/MapleMist.java | 24 +- .../java/server/maps/MaplePlayerShop.java | 56 ++-- src/main/java/server/maps/MapleReactor.java | 20 +- src/main/java/server/maps/MapleSummon.java | 9 +- src/main/java/server/maps/MapleTVEffect.java | 8 +- .../minigame/MapleRockPaperScissor.java | 16 +- .../server/partyquest/AriantColiseum.java | 8 +- .../server/partyquest/MonsterCarnival.java | 20 +- .../partyquest/MonsterCarnivalParty.java | 7 +- src/main/java/server/partyquest/Pyramid.java | 14 +- src/main/java/server/quest/MapleQuest.java | 10 +- .../java/server/quest/actions/ItemAction.java | 6 +- .../server/quest/actions/NextQuestAction.java | 4 +- src/main/java/tools/LogHelper.java | 2 +- ...ePacketCreator.java => PacketCreator.java} | 2 +- src/main/java/tools/packets/Fishing.java | 6 +- src/main/java/tools/packets/Wedding.java | 11 +- 307 files changed, 2285 insertions(+), 2328 deletions(-) rename src/main/java/tools/{MaplePacketCreator.java => PacketCreator.java} (99%) diff --git a/scripts/event/2xEvent.js b/scripts/event/2xEvent.js index c693514f47..641f3a5d4f 100644 --- a/scripts/event/2xEvent.js +++ b/scripts/event/2xEvent.js @@ -57,18 +57,18 @@ function cancelSchedule() { function start() { const Server = Java.type('net.server.Server'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); var world = Server.getInstance().getWorld(em.getChannelServer().getWorld()); world.setExpRate(8); - world.broadcastPacket(MaplePacketCreator.serverNotice(6, "The Bunny Onslaught Survival Scanner (BOSS) has detected an Easter Bunny onslaught soon! The GM team has activated the Emergency XP Pool (EXP) that doubles experience gained for the next two hours!")); + world.broadcastPacket(PacketCreator.serverNotice(6, "The Bunny Onslaught Survival Scanner (BOSS) has detected an Easter Bunny onslaught soon! The GM team has activated the Emergency XP Pool (EXP) that doubles experience gained for the next two hours!")); } function stop() { const Server = Java.type('net.server.Server'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); var world = Server.getInstance().getWorld(em.getChannelServer().getWorld()); world.setExpRate(4); - world.broadcastPacket(MaplePacketCreator.serverNotice(6, "Unfortunately the Emergency XP Pool (EXP) has run out of juice for now and needs to recharge causing the EXP rate to go back to normal.")); + world.broadcastPacket(PacketCreator.serverNotice(6, "Unfortunately the Emergency XP Pool (EXP) has run out of juice for now and needs to recharge causing the EXP rate to go back to normal.")); } // ---------- FILLER FUNCTIONS ---------- diff --git a/scripts/event/3rdJob_bowman.js b/scripts/event/3rdJob_bowman.js index 0f21752d2b..bf17764cd6 100644 --- a/scripts/event/3rdJob_bowman.js +++ b/scripts/event/3rdJob_bowman.js @@ -54,8 +54,8 @@ function playerEntry(eim, player) { player.changeMap(entryMap, 0); em.setProperty("noEntry","true"); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60)); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getClient().announce(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_magician.js b/scripts/event/3rdJob_magician.js index efa3818094..9a9614084f 100644 --- a/scripts/event/3rdJob_magician.js +++ b/scripts/event/3rdJob_magician.js @@ -54,8 +54,8 @@ function playerEntry(eim, player) { player.changeMap(entryMap, 0); em.setProperty("noEntry","true"); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60)); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getClient().announce(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_mount.js b/scripts/event/3rdJob_mount.js index 363f2e28f0..bd514983f1 100644 --- a/scripts/event/3rdJob_mount.js +++ b/scripts/event/3rdJob_mount.js @@ -84,8 +84,8 @@ function playerEntry(eim, player) { player.changeMap(entryMap, 0); em.setProperty("noEntry","true"); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60)); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getClient().announce(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_pirate.js b/scripts/event/3rdJob_pirate.js index 27ff8d4586..fd95fe986b 100644 --- a/scripts/event/3rdJob_pirate.js +++ b/scripts/event/3rdJob_pirate.js @@ -46,8 +46,8 @@ function playerEntry(eim, player) { player.changeMap(entryMap, 0); em.setProperty("noEntry","true"); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60)); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getClient().announce(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_thief.js b/scripts/event/3rdJob_thief.js index 37b5fefa60..4ef82f1a06 100644 --- a/scripts/event/3rdJob_thief.js +++ b/scripts/event/3rdJob_thief.js @@ -54,8 +54,8 @@ function playerEntry(eim, player) { player.changeMap(entryMap, 0); em.setProperty("noEntry","true"); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60)); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getClient().announce(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_warrior.js b/scripts/event/3rdJob_warrior.js index 0ce3a86411..0f36734085 100644 --- a/scripts/event/3rdJob_warrior.js +++ b/scripts/event/3rdJob_warrior.js @@ -54,8 +54,8 @@ function playerEntry(eim, player) { player.changeMap(entryMap, 0); em.setProperty("noEntry","true"); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60)); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getClient().announce(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/Aran_2ndmount.js b/scripts/event/Aran_2ndmount.js index 27da92ba44..1639ae8252 100644 --- a/scripts/event/Aran_2ndmount.js +++ b/scripts/event/Aran_2ndmount.js @@ -60,8 +60,8 @@ function playerEntry(eim, player) { player.changeMap(entryMap, 2); em.setProperty("noEntry","true"); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60)); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getClient().announce(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/Aran_3rdmount.js b/scripts/event/Aran_3rdmount.js index 93c9ee83c8..cce7fb3f12 100644 --- a/scripts/event/Aran_3rdmount.js +++ b/scripts/event/Aran_3rdmount.js @@ -61,8 +61,8 @@ function playerEntry(eim, player) { player.changeMap(entryMap, 1); em.setProperty("noEntry","true"); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60)); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getClient().announce(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/AreaBossBamboo.js b/scripts/event/AreaBossBamboo.js index 3a12c4ebf4..c4d3a49c09 100644 --- a/scripts/event/AreaBossBamboo.js +++ b/scripts/event/AreaBossBamboo.js @@ -50,9 +50,9 @@ function start() { } const Point = Java.type('java.awt.Point'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); mapObj.spawnMonsterOnGroundBelow(mobObj, new Point(560, 50)); - mapObj.broadcastMessage(MaplePacketCreator.serverNotice(6, "From amongst the ruins shrouded by the mists, Bamboo Warrior appears.")); + mapObj.broadcastMessage(PacketCreator.serverNotice(6, "From amongst the ruins shrouded by the mists, Bamboo Warrior appears.")); em.schedule("start", 3 * 60 *60 * 1000); } diff --git a/scripts/event/AreaBossCentipede.js b/scripts/event/AreaBossCentipede.js index b7e4b5653b..4df057c579 100644 --- a/scripts/event/AreaBossCentipede.js +++ b/scripts/event/AreaBossCentipede.js @@ -49,11 +49,11 @@ function start() { const MapleLifeFactory = Java.type('server.life.MapleLifeFactory'); const Point = Java.type('java.awt.Point'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); var gcent = MapleLifeFactory.getMonster(5220004); herbGarden.spawnMonsterOnGroundBelow(gcent, new Point(560, 50)); - herbGarden.broadcastMessage(MaplePacketCreator.serverNotice(6, "From the mists surrounding the herb garden, the gargantuous Giant Centipede appears.")); + herbGarden.broadcastMessage(PacketCreator.serverNotice(6, "From the mists surrounding the herb garden, the gargantuous Giant Centipede appears.")); em.schedule("start", 3 * 60 *60 * 1000); } diff --git a/scripts/event/AreaBossDeo.js b/scripts/event/AreaBossDeo.js index 64d13bb70e..1a83b1128c 100644 --- a/scripts/event/AreaBossDeo.js +++ b/scripts/event/AreaBossDeo.js @@ -49,11 +49,11 @@ function start() { const MapleLifeFactory = Java.type('server.life.MapleLifeFactory'); const Point = Java.type('java.awt.Point'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); var deo = MapleLifeFactory.getMonster(3220001); royalCatthusDesert.spawnMonsterOnGroundBelow(deo, new Point(645, 275)); - royalCatthusDesert.broadcastMessage(MaplePacketCreator.serverNotice(6, "Deo slowly appeared out of the sand dust.")); + royalCatthusDesert.broadcastMessage(PacketCreator.serverNotice(6, "Deo slowly appeared out of the sand dust.")); em.schedule("start", 3 * 60 *60 * 1000); } diff --git a/scripts/event/AreaBossDoor1.js b/scripts/event/AreaBossDoor1.js index 68d447dbe4..dc4b01ddaf 100644 --- a/scripts/event/AreaBossDoor1.js +++ b/scripts/event/AreaBossDoor1.js @@ -49,13 +49,13 @@ function start() { } const Point = Java.type('java.awt.Point'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); const MapleLifeFactory = Java.type('server.life.MapleLifeFactory'); var boss = MapleLifeFactory.getMonster(bossMobid); var bossPos = new Point(467, 0); map.spawnMonsterOnGroundBelow(boss, bossPos); - map.broadcastMessage(MaplePacketCreator.serverNotice(6, bossMsg)); + map.broadcastMessage(PacketCreator.serverNotice(6, bossMsg)); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossDoor2.js b/scripts/event/AreaBossDoor2.js index 22380d50cf..c230949dd8 100644 --- a/scripts/event/AreaBossDoor2.js +++ b/scripts/event/AreaBossDoor2.js @@ -50,12 +50,12 @@ function start() { const MapleLifeFactory = Java.type('server.life.MapleLifeFactory'); const Point = Java.type('java.awt.Point'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); var boss = MapleLifeFactory.getMonster(bossMobid); var bossPos = new Point(201, 80); map.spawnMonsterOnGroundBelow(boss, bossPos); - map.broadcastMessage(MaplePacketCreator.serverNotice(6, bossMsg)); + map.broadcastMessage(PacketCreator.serverNotice(6, bossMsg)); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossDoor3.js b/scripts/event/AreaBossDoor3.js index f9dfa38f08..a872cb42a1 100644 --- a/scripts/event/AreaBossDoor3.js +++ b/scripts/event/AreaBossDoor3.js @@ -50,12 +50,12 @@ function start() { const MapleLifeFactory = Java.type('server.life.MapleLifeFactory'); const Point = Java.type('java.awt.Point'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); var boss = MapleLifeFactory.getMonster(bossMobid); var bossPos = new Point(251, -841); map.spawnMonsterOnGroundBelow(boss, bossPos); - map.broadcastMessage(MaplePacketCreator.serverNotice(6, bossMsg)); + map.broadcastMessage(PacketCreator.serverNotice(6, bossMsg)); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossDoor4.js b/scripts/event/AreaBossDoor4.js index d58b2e7e0c..7fa3b0b079 100644 --- a/scripts/event/AreaBossDoor4.js +++ b/scripts/event/AreaBossDoor4.js @@ -50,12 +50,12 @@ function start() { const MapleLifeFactory = Java.type('server.life.MapleLifeFactory'); const Point = Java.type('java.awt.Point'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); var boss = MapleLifeFactory.getMonster(bossMobid); var bossPos = new Point(842, 0); map.spawnMonsterOnGroundBelow(boss, bossPos); - map.broadcastMessage(MaplePacketCreator.serverNotice(6, bossMsg)); + map.broadcastMessage(PacketCreator.serverNotice(6, bossMsg)); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossDoor5.js b/scripts/event/AreaBossDoor5.js index a8b1095794..e2844d77f5 100644 --- a/scripts/event/AreaBossDoor5.js +++ b/scripts/event/AreaBossDoor5.js @@ -50,12 +50,12 @@ function start() { const MapleLifeFactory = Java.type('server.life.MapleLifeFactory'); const Point = Java.type('java.awt.Point'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); var boss = MapleLifeFactory.getMonster(bossMobid); var bossPos = new Point(461, 61); map.spawnMonsterOnGroundBelow(boss, bossPos); - map.broadcastMessage(MaplePacketCreator.serverNotice(6, bossMsg)); + map.broadcastMessage(PacketCreator.serverNotice(6, bossMsg)); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossDoor6.js b/scripts/event/AreaBossDoor6.js index 3fdec07a5a..61b406a0ec 100644 --- a/scripts/event/AreaBossDoor6.js +++ b/scripts/event/AreaBossDoor6.js @@ -50,12 +50,12 @@ function start() { const MapleLifeFactory = Java.type('server.life.MapleLifeFactory'); const Point = Java.type('java.awt.Point'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); var boss = MapleLifeFactory.getMonster(bossMobid); var bossPos = new Point(171, 50); map.spawnMonsterOnGroundBelow(boss, bossPos); - map.broadcastMessage(MaplePacketCreator.serverNotice(6, bossMsg)); + map.broadcastMessage(PacketCreator.serverNotice(6, bossMsg)); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossDyle.js b/scripts/event/AreaBossDyle.js index 084180a3c0..bbb6e882e3 100644 --- a/scripts/event/AreaBossDyle.js +++ b/scripts/event/AreaBossDyle.js @@ -48,11 +48,11 @@ function start() { } const MapleLifeFactory = Java.type('server.life.MapleLifeFactory'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); const Point = Java.type('java.awt.Point'); const spawnpoint = new Point(90, 119); dangeroudCroko1.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(6220000), spawnpoint); - dangeroudCroko1.broadcastMessage(MaplePacketCreator.serverNotice(6, "The huge crocodile Dyle has come out from the swamp.")); + dangeroudCroko1.broadcastMessage(PacketCreator.serverNotice(6, "The huge crocodile Dyle has come out from the swamp.")); setupTask = em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossEliza1.js b/scripts/event/AreaBossEliza1.js index ead84f636a..df74a9b2bb 100644 --- a/scripts/event/AreaBossEliza1.js +++ b/scripts/event/AreaBossEliza1.js @@ -52,11 +52,11 @@ function start() { return; } - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); const Point = Java.type('java.awt.Point'); const spawnpoint = new Point(208, 83); stairwayToTheSky2.spawnMonsterOnGroundBelow(eliza, spawnpoint); - stairwayToTheSky2.broadcastMessage(MaplePacketCreator.serverNotice(6, "Eliza has appeared with a black whirlwind.")); + stairwayToTheSky2.broadcastMessage(PacketCreator.serverNotice(6, "Eliza has appeared with a black whirlwind.")); em.schedule("start", 3 * 60 *60 * 1000); } diff --git a/scripts/event/AreaBossFaust1.js b/scripts/event/AreaBossFaust1.js index 7219b6e422..b30dc16c83 100644 --- a/scripts/event/AreaBossFaust1.js +++ b/scripts/event/AreaBossFaust1.js @@ -48,13 +48,13 @@ function start() { } const MapleLifeFactory = Java.type('server.life.MapleLifeFactory'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); const Point = Java.type('java.awt.Point'); var faust1 = MapleLifeFactory.getMonster(5220002); const spawnpoint = new Point(456, 278); theForestOfEvil1.spawnMonsterOnGroundBelow(faust1, spawnpoint); - theForestOfEvil1.broadcastMessage(MaplePacketCreator.serverNotice(6, "Faust appeared amidst the blue fog.")); + theForestOfEvil1.broadcastMessage(PacketCreator.serverNotice(6, "Faust appeared amidst the blue fog.")); em.schedule("start", 3 * 60 *60 * 1000); } diff --git a/scripts/event/AreaBossFaust2.js b/scripts/event/AreaBossFaust2.js index 719da12138..311734bb90 100644 --- a/scripts/event/AreaBossFaust2.js +++ b/scripts/event/AreaBossFaust2.js @@ -54,8 +54,8 @@ function start() { const spawnpoint = new Point(474, 278); theForestOfEvil2.spawnMonsterOnGroundBelow(faust2, spawnpoint); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - theForestOfEvil2.broadcastMessage(MaplePacketCreator.serverNotice(6, "Faust appeared amidst the blue fog.")); + const PacketCreator = Java.type('tools.PacketCreator'); + theForestOfEvil2.broadcastMessage(PacketCreator.serverNotice(6, "Faust appeared amidst the blue fog.")); em.schedule("start", 3 * 60 *60 * 1000); } diff --git a/scripts/event/AreaBossKimera.js b/scripts/event/AreaBossKimera.js index c1e11a06a6..2a50671430 100644 --- a/scripts/event/AreaBossKimera.js +++ b/scripts/event/AreaBossKimera.js @@ -57,8 +57,8 @@ function start() { const spawnpoint = new Point(posX, posY); labSecretBasementPath.spawnMonsterOnGroundBelow(chimera, spawnpoint); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - labSecretBasementPath.broadcastMessage(MaplePacketCreator.serverNotice(6, "Kimera has appeared out of the darkness of the underground with a glitter in her eyes.")); + const PacketCreator = Java.type('tools.PacketCreator'); + labSecretBasementPath.broadcastMessage(PacketCreator.serverNotice(6, "Kimera has appeared out of the darkness of the underground with a glitter in her eyes.")); em.schedule("start", 3 * 60 *60 * 1000); } diff --git a/scripts/event/AreaBossKingClang.js b/scripts/event/AreaBossKingClang.js index daad7c3346..da7bceb2fe 100644 --- a/scripts/event/AreaBossKingClang.js +++ b/scripts/event/AreaBossKingClang.js @@ -58,8 +58,8 @@ function start() { const spawnpoint = new Point(posX, posY); hotSand.spawnMonsterOnGroundBelow(kingClang, spawnpoint); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - hotSand.broadcastMessage(MaplePacketCreator.serverNotice(6, "A strange turban shell has appeared on the beach.")); + const PacketCreator = Java.type('tools.PacketCreator'); + hotSand.broadcastMessage(PacketCreator.serverNotice(6, "A strange turban shell has appeared on the beach.")); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossKingSageCat.js b/scripts/event/AreaBossKingSageCat.js index 0e48183fb5..11b487772c 100644 --- a/scripts/event/AreaBossKingSageCat.js +++ b/scripts/event/AreaBossKingSageCat.js @@ -56,8 +56,8 @@ function start() { const spawnpoint = new Point(posX, posY); goblinForest2.spawnMonsterOnGroundBelow(kingSageCat, spawnpoint); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - goblinForest2.broadcastMessage(MaplePacketCreator.serverNotice(6, "The ghostly air around here has become stronger. The unpleasant sound of a cat crying can be heard.")); + const PacketCreator = Java.type('tools.PacketCreator'); + goblinForest2.broadcastMessage(PacketCreator.serverNotice(6, "The ghostly air around here has become stronger. The unpleasant sound of a cat crying can be heard.")); em.schedule("start", 3 * 60 *60 * 1000); } diff --git a/scripts/event/AreaBossLeviathan.js b/scripts/event/AreaBossLeviathan.js index 4b53177f76..4a2a6b64b6 100644 --- a/scripts/event/AreaBossLeviathan.js +++ b/scripts/event/AreaBossLeviathan.js @@ -56,8 +56,8 @@ function start() { const spawnpoint = new Point(posX, posY); leviathansCanyon.spawnMonsterOnGroundBelow(leviathan, spawnpoint); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - leviathansCanyon.broadcastMessage(MaplePacketCreator.serverNotice(6, "Leviathan emerges from the canyon and the cold icy wind blows.")); + const PacketCreator = Java.type('tools.PacketCreator'); + leviathansCanyon.broadcastMessage(PacketCreator.serverNotice(6, "Leviathan emerges from the canyon and the cold icy wind blows.")); em.schedule("start", 3 * 60 *60 * 1000); } diff --git a/scripts/event/AreaBossMano.js b/scripts/event/AreaBossMano.js index efd553f051..3e46eb9248 100644 --- a/scripts/event/AreaBossMano.js +++ b/scripts/event/AreaBossMano.js @@ -52,8 +52,8 @@ function start() { const spawnpoint = new Point(279, -496); thicketAroundTheBeach3.spawnMonsterOnGroundBelow(mano, spawnpoint); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - thicketAroundTheBeach3.broadcastMessage(MaplePacketCreator.serverNotice(6, "A cool breeze was felt when Mano appeared.")); + const PacketCreator = Java.type('tools.PacketCreator'); + thicketAroundTheBeach3.broadcastMessage(PacketCreator.serverNotice(6, "A cool breeze was felt when Mano appeared.")); em.schedule("start", 3 * 60 *60 * 1000); } diff --git a/scripts/event/AreaBossNineTailedFox.js b/scripts/event/AreaBossNineTailedFox.js index 9573170bde..cda001496a 100644 --- a/scripts/event/AreaBossNineTailedFox.js +++ b/scripts/event/AreaBossNineTailedFox.js @@ -55,8 +55,8 @@ function start() { const spawnpoint = new Point(posX, posY); moonRidge.spawnMonsterOnGroundBelow(nineTailedFox, spawnpoint); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - moonRidge.broadcastMessage(MaplePacketCreator.serverNotice(6, "As the moon light dims, a long fox cry can be heard and the presence of the old fox can be felt")); + const PacketCreator = Java.type('tools.PacketCreator'); + moonRidge.broadcastMessage(PacketCreator.serverNotice(6, "As the moon light dims, a long fox cry can be heard and the presence of the old fox can be felt")); em.schedule("start", 3 * 60 *60 * 1000); } diff --git a/scripts/event/AreaBossSeruf.js b/scripts/event/AreaBossSeruf.js index d55e2da280..e6eed006d6 100644 --- a/scripts/event/AreaBossSeruf.js +++ b/scripts/event/AreaBossSeruf.js @@ -58,8 +58,8 @@ function start() { const spawnpoint = new Point(posX, posY); theSeaweedTower.spawnMonsterOnGroundBelow(seruf, spawnpoint); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - theSeaweedTower.broadcastMessage(MaplePacketCreator.serverNotice(6, "A strange shell has appeared from a grove of seaweed")); + const PacketCreator = Java.type('tools.PacketCreator'); + theSeaweedTower.broadcastMessage(PacketCreator.serverNotice(6, "A strange shell has appeared from a grove of seaweed")); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossSnackBar.js b/scripts/event/AreaBossSnackBar.js index 97388176d6..316505b2b3 100644 --- a/scripts/event/AreaBossSnackBar.js +++ b/scripts/event/AreaBossSnackBar.js @@ -52,11 +52,11 @@ function start() { const MapleLifeFactory = Java.type('server.life.MapleLifeFactory'); const Point = Java.type('java.awt.Point'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); var snackBar = MapleLifeFactory.getMonster(8220008); snackBarMap.spawnMonsterOnGroundBelow(snackBar, new Point(rndPos[0], rndPos[1])); - snackBarMap.broadcastMessage(MaplePacketCreator.serverNotice(6, "Slowly, a suspicious food stand opens up on a strangely remote place.")); + snackBarMap.broadcastMessage(PacketCreator.serverNotice(6, "Slowly, a suspicious food stand opens up on a strangely remote place.")); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossStumpy.js b/scripts/event/AreaBossStumpy.js index bb4cdf3b51..90f991354a 100644 --- a/scripts/event/AreaBossStumpy.js +++ b/scripts/event/AreaBossStumpy.js @@ -57,8 +57,8 @@ function start() { const spawnpoint = new Point(posX, posY); eastRockyMountain5.spawnMonsterOnGroundBelow(stumpy, spawnpoint); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - eastRockyMountain5.broadcastMessage(MaplePacketCreator.serverNotice(6, "Stumpy has appeared with a stumping sound that rings the Stone Mountain.")); + const PacketCreator = Java.type('tools.PacketCreator'); + eastRockyMountain5.broadcastMessage(PacketCreator.serverNotice(6, "Stumpy has appeared with a stumping sound that rings the Stone Mountain.")); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossTaeRoon.js b/scripts/event/AreaBossTaeRoon.js index 29532d19c2..5a0f881ca0 100644 --- a/scripts/event/AreaBossTaeRoon.js +++ b/scripts/event/AreaBossTaeRoon.js @@ -57,8 +57,8 @@ function start() { const spawnpoint = new Point(posX, posY); territoryOfWanderingBear.spawnMonsterOnGroundBelow(taeRoon, spawnpoint); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - territoryOfWanderingBear.broadcastMessage(MaplePacketCreator.serverNotice(6, "Tae Roon has appeared with a soft whistling sound.")); + const PacketCreator = Java.type('tools.PacketCreator'); + territoryOfWanderingBear.broadcastMessage(PacketCreator.serverNotice(6, "Tae Roon has appeared with a soft whistling sound.")); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossTimer1.js b/scripts/event/AreaBossTimer1.js index 2d76789b54..3ead99a478 100644 --- a/scripts/event/AreaBossTimer1.js +++ b/scripts/event/AreaBossTimer1.js @@ -56,8 +56,8 @@ function start() { const spawnpoint = new Point(posX, posY); whirlpoolOfTime.spawnMonsterOnGroundBelow(timer1, spawnpoint); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - whirlpoolOfTime.broadcastMessage(MaplePacketCreator.serverNotice(6, "Tick-Tock Tick-Tock! Timer makes it's presence known.")); + const PacketCreator = Java.type('tools.PacketCreator'); + whirlpoolOfTime.broadcastMessage(PacketCreator.serverNotice(6, "Tick-Tock Tick-Tock! Timer makes it's presence known.")); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossTimer2.js b/scripts/event/AreaBossTimer2.js index 51aa4efc23..aa762ce1d8 100644 --- a/scripts/event/AreaBossTimer2.js +++ b/scripts/event/AreaBossTimer2.js @@ -57,8 +57,8 @@ function start() { const spawnpoint = new Point(posX, posY); lostTime1.spawnMonsterOnGroundBelow(timer2, spawnpoint); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - lostTime1.broadcastMessage(MaplePacketCreator.serverNotice(6, "Tick-Tock Tick-Tock! Timer makes it's presence known.")); + const PacketCreator = Java.type('tools.PacketCreator'); + lostTime1.broadcastMessage(PacketCreator.serverNotice(6, "Tick-Tock Tick-Tock! Timer makes it's presence known.")); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossTimer3.js b/scripts/event/AreaBossTimer3.js index cd5d9a73fb..a0bbb09fc3 100644 --- a/scripts/event/AreaBossTimer3.js +++ b/scripts/event/AreaBossTimer3.js @@ -58,8 +58,8 @@ function start() { const spawnpoint = new Point(posX, posY); lostTime2.spawnMonsterOnGroundBelow(timer3, spawnpoint); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - lostTime2.broadcastMessage(MaplePacketCreator.serverNotice(6, "Tick-Tock Tick-Tock! Timer makes it's presence known.")); + const PacketCreator = Java.type('tools.PacketCreator'); + lostTime2.broadcastMessage(PacketCreator.serverNotice(6, "Tick-Tock Tick-Tock! Timer makes it's presence known.")); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/AreaBossZeno.js b/scripts/event/AreaBossZeno.js index 348f03bce5..fe808f1104 100644 --- a/scripts/event/AreaBossZeno.js +++ b/scripts/event/AreaBossZeno.js @@ -49,11 +49,11 @@ function start() { const MapleLifeFactory = Java.type('server.life.MapleLifeFactory'); const Point = Java.type('java.awt.Point'); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); var zeno = MapleLifeFactory.getMonster(6220001); graysPrairie.spawnMonsterOnGroundBelow(zeno, new Point(-4224, 776)); - graysPrairie.broadcastMessage(MaplePacketCreator.serverNotice(6, "Zeno has appeared with a heavy sound of machinery.")); + graysPrairie.broadcastMessage(PacketCreator.serverNotice(6, "Zeno has appeared with a heavy sound of machinery.")); em.schedule("start", 3 * 60 * 60 * 1000); } diff --git a/scripts/event/BalrogQuest.js b/scripts/event/BalrogQuest.js index 9a7be5607f..3332e5f847 100644 --- a/scripts/event/BalrogQuest.js +++ b/scripts/event/BalrogQuest.js @@ -63,8 +63,8 @@ function playerEntry(eim, player) { player.changeMap(entryMap, 1); em.setProperty("noEntry","true"); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60)); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getClient().announce(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/Boats.js b/scripts/event/Boats.js index 69d75f7019..cbcab79119 100644 --- a/scripts/event/Boats.js +++ b/scripts/event/Boats.js @@ -86,9 +86,9 @@ function approach() { em.setProperty("haveBalrog","true"); Boat_to_Orbis.broadcastEnemyShip(true); Boat_to_Ellinia.broadcastEnemyShip(true); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - Boat_to_Orbis.broadcastMessage(MaplePacketCreator.musicChange("Bgm04/ArabPirate")); - Boat_to_Ellinia.broadcastMessage(MaplePacketCreator.musicChange("Bgm04/ArabPirate")); + const PacketCreator = Java.type('tools.PacketCreator'); + Boat_to_Orbis.broadcastMessage(PacketCreator.musicChange("Bgm04/ArabPirate")); + Boat_to_Ellinia.broadcastMessage(PacketCreator.musicChange("Bgm04/ArabPirate")); em.schedule("invasion", invasionDelay); } diff --git a/scripts/event/DollHouse.js b/scripts/event/DollHouse.js index df5d482425..f476024254 100644 --- a/scripts/event/DollHouse.js +++ b/scripts/event/DollHouse.js @@ -46,8 +46,8 @@ function playerEntry(eim, player) { player.changeMap(entryMap, 0); em.setProperty("noEntry","true"); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60)); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getClient().announce(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/Hak.js b/scripts/event/Hak.js index 536124e21d..0e10f03181 100644 --- a/scripts/event/Hak.js +++ b/scripts/event/Hak.js @@ -32,8 +32,8 @@ function playerEntry(eim, player) { onRide = eim.getMapFactory().getMap(birdRide[myRide]); player.changeMap(onRide, onRide.getPortal(0)); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getClient().announce(MaplePacketCreator.getClock(rideTime / 1000)); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getClient().announce(PacketCreator.getClock(rideTime / 1000)); eim.schedule("timeOut", rideTime); } diff --git a/scripts/event/HenesysPQ.js b/scripts/event/HenesysPQ.js index 84a6432819..4a6ccc0098 100644 --- a/scripts/event/HenesysPQ.js +++ b/scripts/event/HenesysPQ.js @@ -250,8 +250,8 @@ function friendlyItemDrop(eim, mob) { var cakes = eim.getIntProperty("bunnyCake") + 1; eim.setIntProperty("bunnyCake", cakes); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - mob.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, "The Moon Bunny made rice cake number " + cakes + ".")); + const PacketCreator = Java.type('tools.PacketCreator'); + mob.getMap().broadcastMessage(PacketCreator.serverNotice(6, "The Moon Bunny made rice cake number " + cakes + ".")); } } @@ -259,8 +259,8 @@ function friendlyDamaged(eim, mob) { if (mob.getId() == 9300061) { var bunnyDamage = eim.getIntProperty("bunnyDamaged") + 1; if (bunnyDamage > 5) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - broadcastMessage(MaplePacketCreator.serverNotice(6, "The Moon Bunny is feeling sick. Please protect it so it can make delicious rice cakes.")); + const PacketCreator = Java.type('tools.PacketCreator'); + broadcastMessage(PacketCreator.serverNotice(6, "The Moon Bunny is feeling sick. Please protect it so it can make delicious rice cakes.")); eim.setIntProperty("bunnyDamaged", 0); } } diff --git a/scripts/event/KerningTrain.js b/scripts/event/KerningTrain.js index 09f707ee27..d672f9f72c 100644 --- a/scripts/event/KerningTrain.js +++ b/scripts/event/KerningTrain.js @@ -33,9 +33,9 @@ function playerEntry(eim, player) { onRide = eim.getMapFactory().getMap(trainRide[myRide]); player.changeMap(onRide, onRide.getPortal(0)); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getClient().announce(MaplePacketCreator.getClock(rideTime / 1000)); - player.getClient().announce(MaplePacketCreator.earnTitleMessage("The next stop is at Kerning " + (myRide == 0 ? "Square" : "Subway") + " Station. The exit is to your left.")); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getClient().announce(PacketCreator.getClock(rideTime / 1000)); + player.getClient().announce(PacketCreator.earnTitleMessage("The next stop is at Kerning " + (myRide == 0 ? "Square" : "Subway") + " Station. The exit is to your left.")); eim.schedule("timeOut", rideTime); } diff --git a/scripts/event/RescueGaga.js b/scripts/event/RescueGaga.js index b1dbe077e6..9b3f739c91 100644 --- a/scripts/event/RescueGaga.js +++ b/scripts/event/RescueGaga.js @@ -101,8 +101,8 @@ function playerEntry(eim, player) { var map = eim.getMapInstance(entryMap); player.changeMap(map, map.getPortal(0)); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.announce(MaplePacketCreator.showEffect("event/space/start")); + const PacketCreator = Java.type('tools.PacketCreator'); + player.announce(PacketCreator.showEffect("event/space/start")); player.startMapEffect("Please rescue Gaga within the time limit.", 5120027); } diff --git a/scripts/event/Subway.js b/scripts/event/Subway.js index 9cd8d68ddd..148d82da6e 100644 --- a/scripts/event/Subway.js +++ b/scripts/event/Subway.js @@ -36,11 +36,11 @@ function stopEntry() { } function takeoff() { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); //sound src: https://www.soundjay.com/transportation/metro-door-close-01.mp3 - KC_docked.broadcastMessage(MaplePacketCreator.playSound("subway/whistle")); - NLC_docked.broadcastMessage(MaplePacketCreator.playSound("subway/whistle")); + KC_docked.broadcastMessage(PacketCreator.playSound("subway/whistle")); + NLC_docked.broadcastMessage(PacketCreator.playSound("subway/whistle")); em.setProperty("docked","false"); KC_Waiting.warpEveryone(Subway_to_NLC.getId()); @@ -53,9 +53,9 @@ function arrived() { Subway_to_NLC.warpEveryone(NLC_docked.getId(), 0); scheduleNew(); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - KC_docked.broadcastMessage(MaplePacketCreator.playSound("subway/whistle")); - NLC_docked.broadcastMessage(MaplePacketCreator.playSound("subway/whistle")); + const PacketCreator = Java.type('tools.PacketCreator'); + KC_docked.broadcastMessage(PacketCreator.playSound("subway/whistle")); + NLC_docked.broadcastMessage(PacketCreator.playSound("subway/whistle")); } function cancelSchedule() {} diff --git a/scripts/map/onUserEnter/200090000.js b/scripts/map/onUserEnter/200090000.js index 22fd6156a5..f59d69363f 100644 --- a/scripts/map/onUserEnter/200090000.js +++ b/scripts/map/onUserEnter/200090000.js @@ -5,9 +5,9 @@ function start(ms) { var map = ms.getClient().getChannelServer().getMapFactory().getMap(mapId); if(map.getDocked()) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - ms.getClient().announce(MaplePacketCreator.musicChange("Bgm04/ArabPirate")); - ms.getClient().announce(MaplePacketCreator.crogBoatPacket(true)); + const PacketCreator = Java.type('tools.PacketCreator'); + ms.getClient().announce(PacketCreator.musicChange("Bgm04/ArabPirate")); + ms.getClient().announce(PacketCreator.crogBoatPacket(true)); } return true; diff --git a/scripts/map/onUserEnter/200090010.js b/scripts/map/onUserEnter/200090010.js index b72a54b86f..65063ad747 100644 --- a/scripts/map/onUserEnter/200090010.js +++ b/scripts/map/onUserEnter/200090010.js @@ -5,9 +5,9 @@ function start(ms) { var map = ms.getClient().getChannelServer().getMapFactory().getMap(mapId); if(map.getDocked()) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - ms.getClient().announce(MaplePacketCreator.musicChange("Bgm04/ArabPirate")); - ms.getClient().announce(MaplePacketCreator.crogBoatPacket(true)); + const PacketCreator = Java.type('tools.PacketCreator'); + ms.getClient().announce(PacketCreator.musicChange("Bgm04/ArabPirate")); + ms.getClient().announce(PacketCreator.crogBoatPacket(true)); } return true; diff --git a/scripts/npc/1022101_old.js b/scripts/npc/1022101_old.js index 63a593d8c8..f0a0c226fc 100644 --- a/scripts/npc/1022101_old.js +++ b/scripts/npc/1022101_old.js @@ -136,8 +136,8 @@ function action(mode, type, selection) { cm.gainItem(itemToUse, -1); cm.getPlayer().getCashShop().gainCash(1, nxAmount); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - cm.getPlayer().announce(MaplePacketCreator.earnTitleMessage("You have earned " + nxAmount + " NX")); + const PacketCreator = Java.type('tools.PacketCreator'); + cm.getPlayer().announce(PacketCreator.earnTitleMessage("You have earned " + nxAmount + " NX")); cm.logLeaf(nxAmount + " NX"); cm.dispose(); } else if(choice == 2) { diff --git a/scripts/npc/1061014.js b/scripts/npc/1061014.js index 0ac0837bc1..cc4410d375 100644 --- a/scripts/npc/1061014.js +++ b/scripts/npc/1061014.js @@ -156,8 +156,8 @@ function action(mode, type, selection) { cm.sendOk("The expedition will begin and you will now be escorted to the #b" + expedMap + "#k."); status = 4; } else if (selection == 3) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getMap().broadcastMessage(PacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); cm.endExpedition(expedition); cm.sendOk("The expedition has now ended. Sometimes the best strategy is to run away."); cm.dispose(); diff --git a/scripts/npc/2012027.js b/scripts/npc/2012027.js index 6d78795cd2..0eb18ddd36 100644 --- a/scripts/npc/2012027.js +++ b/scripts/npc/2012027.js @@ -45,8 +45,8 @@ function action(mode, type, selection) { status--; if(status == 0) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - cm.getMap().broadcastMessage(MaplePacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); + const PacketCreator = Java.type('tools.PacketCreator'); + cm.getMap().broadcastMessage(PacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); if(cm.isQuestStarted(3114)) { var idx = -1 * cm.getQuestProgressInt(3114); // infoEx without infoNumber, must use one progress only, critical hit! @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Failed")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Clear")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/2012028.js b/scripts/npc/2012028.js index 43627b8b8a..3986903679 100644 --- a/scripts/npc/2012028.js +++ b/scripts/npc/2012028.js @@ -45,8 +45,8 @@ function action(mode, type, selection) { status--; if(status == 0) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - cm.getMap().broadcastMessage(MaplePacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); + const PacketCreator = Java.type('tools.PacketCreator'); + cm.getMap().broadcastMessage(PacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); if(cm.isQuestStarted(3114)) { var idx = -1 * cm.getQuestProgressInt(3114); @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Failed")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Clear")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/2012029.js b/scripts/npc/2012029.js index 9b5a7ab270..8b986072ac 100644 --- a/scripts/npc/2012029.js +++ b/scripts/npc/2012029.js @@ -45,8 +45,8 @@ function action(mode, type, selection) { status--; if(status == 0) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - cm.getMap().broadcastMessage(MaplePacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); + const PacketCreator = Java.type('tools.PacketCreator'); + cm.getMap().broadcastMessage(PacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); if(cm.isQuestStarted(3114)) { var idx = -1 * cm.getQuestProgressInt(3114); @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Failed")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Clear")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/2012030.js b/scripts/npc/2012030.js index c7a6590218..2a50a6cf68 100644 --- a/scripts/npc/2012030.js +++ b/scripts/npc/2012030.js @@ -45,8 +45,8 @@ function action(mode, type, selection) { status--; if(status == 0) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - cm.getMap().broadcastMessage(MaplePacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); + const PacketCreator = Java.type('tools.PacketCreator'); + cm.getMap().broadcastMessage(PacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); if(cm.isQuestStarted(3114)) { var idx = -1 * cm.getQuestProgressInt(3114); @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Failed")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Clear")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/2012031.js b/scripts/npc/2012031.js index 3420643eaf..8202dad15f 100644 --- a/scripts/npc/2012031.js +++ b/scripts/npc/2012031.js @@ -45,8 +45,8 @@ function action(mode, type, selection) { status--; if(status == 0) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - cm.getMap().broadcastMessage(MaplePacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); + const PacketCreator = Java.type('tools.PacketCreator'); + cm.getMap().broadcastMessage(PacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); if(cm.isQuestStarted(3114)) { var idx = -1 * cm.getQuestProgressInt(3114); @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Failed")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Clear")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/2012032.js b/scripts/npc/2012032.js index 3c39a2493b..16281bbb9a 100644 --- a/scripts/npc/2012032.js +++ b/scripts/npc/2012032.js @@ -45,8 +45,8 @@ function action(mode, type, selection) { status--; if(status == 0) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - cm.getMap().broadcastMessage(MaplePacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); + const PacketCreator = Java.type('tools.PacketCreator'); + cm.getMap().broadcastMessage(PacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); if(cm.isQuestStarted(3114)) { var idx = -1 * cm.getQuestProgressInt(3114); @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Failed")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Clear")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/2012033.js b/scripts/npc/2012033.js index 35499c3a28..24379bd233 100644 --- a/scripts/npc/2012033.js +++ b/scripts/npc/2012033.js @@ -45,8 +45,8 @@ function action(mode, type, selection) { status--; if(status == 0) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - cm.getMap().broadcastMessage(MaplePacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); + const PacketCreator = Java.type('tools.PacketCreator'); + cm.getMap().broadcastMessage(PacketCreator.playSound("orbis/" + harpSounds[cm.getNpc() - 2012027])); if(cm.isQuestStarted(3114)) { var idx = -1 * cm.getQuestProgressInt(3114); @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Failed")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.playSound("Party1/Clear")); + cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/2030013.js b/scripts/npc/2030013.js index 0c204d4d02..b0ab2e5c5d 100644 --- a/scripts/npc/2030013.js +++ b/scripts/npc/2030013.js @@ -159,8 +159,8 @@ function action(mode, type, selection) { cm.sendOk("The expedition will begin and you will now be escorted to the #b" + expedMap + "#k."); status = 4; } else if (selection == 3) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getMap().broadcastMessage(PacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); cm.endExpedition(expedition); cm.sendOk("The expedition has now ended. Sometimes the best strategy is to run away."); cm.dispose(); diff --git a/scripts/npc/2083004.js b/scripts/npc/2083004.js index 55691bec0e..3d95f72be4 100644 --- a/scripts/npc/2083004.js +++ b/scripts/npc/2083004.js @@ -151,8 +151,8 @@ function action(mode, type, selection) { cm.sendOk("Good luck! All of Leafre is counting on you."); status = 4; } else if (selection == 3) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getMap().broadcastMessage(PacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); cm.endExpedition(expedition); cm.sendOk("The expedition has now ended. Sometimes the best strategy is to run away."); cm.dispose(); diff --git a/scripts/npc/2141001.js b/scripts/npc/2141001.js index 6d92c75daf..2e94159166 100644 --- a/scripts/npc/2141001.js +++ b/scripts/npc/2141001.js @@ -154,8 +154,8 @@ function action(mode, type, selection) { cm.sendOk("The expedition will begin and you will now be escorted to the #b" + expedMap + "#k."); status = 4; } else if (selection == 3) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getMap().broadcastMessage(PacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); cm.endExpedition(expedition); cm.sendOk("The expedition has now ended. Sometimes the best strategy is to run away."); cm.dispose(); diff --git a/scripts/npc/9000019.js b/scripts/npc/9000019.js index 7dac2aa966..c928c5cbe7 100644 --- a/scripts/npc/9000019.js +++ b/scripts/npc/9000019.js @@ -26,8 +26,8 @@ function action(mode, type, selection) { return; } - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - cm.getClient().announce(MaplePacketCreator.openRPSNPC()); + const PacketCreator = Java.type('tools.PacketCreator'); + cm.getClient().announce(PacketCreator.openRPSNPC()); cm.dispose(); } } diff --git a/scripts/npc/9120201.js b/scripts/npc/9120201.js index 98a0d7984f..38b8e6d57f 100644 --- a/scripts/npc/9120201.js +++ b/scripts/npc/9120201.js @@ -158,8 +158,8 @@ function action(mode, type, selection) { cm.sendOk("The expedition will begin and you will now be escorted to the #b" + expedMap + "#k."); status = 4; } else if (selection == 3) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getMap().broadcastMessage(PacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); cm.endExpedition(expedition); cm.sendOk("The expedition has now ended. Sometimes the best strategy is to run away."); cm.dispose(); diff --git a/scripts/npc/9201002.js b/scripts/npc/9201002.js index 5aac705356..ab3f04b48d 100644 --- a/scripts/npc/9201002.js +++ b/scripts/npc/9201002.js @@ -300,19 +300,19 @@ function action(mode, type, selection) { if (state == 0) { // give player blessings eim.gridInsert(cm.getPlayer(), 1); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); if (YamlConfig.config.server.WEDDING_BLESSER_SHOWFX) { var target = cm.getPlayer(); - target.announce(MaplePacketCreator.showSpecialEffect(9)); - target.getMap().broadcastMessage(target, MaplePacketCreator.showForeignEffect(target.getId(), 9), false); + target.announce(PacketCreator.showSpecialEffect(9)); + target.getMap().broadcastMessage(target, PacketCreator.showForeignEffect(target.getId(), 9), false); } else { var target = eim.getPlayerById(eim.getIntProperty("groomId")); - target.announce(MaplePacketCreator.showSpecialEffect(9)); - target.getMap().broadcastMessage(target, MaplePacketCreator.showForeignEffect(target.getId(), 9), false); + target.announce(PacketCreator.showSpecialEffect(9)); + target.getMap().broadcastMessage(target, PacketCreator.showForeignEffect(target.getId(), 9), false); target = eim.getPlayerById(eim.getIntProperty("brideId")); - target.announce(MaplePacketCreator.showSpecialEffect(9)); - target.getMap().broadcastMessage(target, MaplePacketCreator.showForeignEffect(target.getId(), 9), false); + target.announce(PacketCreator.showSpecialEffect(9)); + target.getMap().broadcastMessage(target, PacketCreator.showForeignEffect(target.getId(), 9), false); } cm.sendOk("Your blessings have been added to their love. What a noble act for a lovely couple!"); diff --git a/scripts/npc/9201011.js b/scripts/npc/9201011.js index e61b923927..a10562cef3 100644 --- a/scripts/npc/9201011.js +++ b/scripts/npc/9201011.js @@ -170,19 +170,19 @@ function action(mode, type, selection) { if(state == 0) { // give player blessings eim.gridInsert(cm.getPlayer(), 1); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); if(YamlConfig.config.server.WEDDING_BLESSER_SHOWFX) { var target = cm.getPlayer(); - target.announce(MaplePacketCreator.showSpecialEffect(9)); - target.getMap().broadcastMessage(target, MaplePacketCreator.showForeignEffect(target.getId(), 9), false); + target.announce(PacketCreator.showSpecialEffect(9)); + target.getMap().broadcastMessage(target, PacketCreator.showForeignEffect(target.getId(), 9), false); } else { var target = eim.getPlayerById(eim.getIntProperty("groomId")); - target.announce(MaplePacketCreator.showSpecialEffect(9)); - target.getMap().broadcastMessage(target, MaplePacketCreator.showForeignEffect(target.getId(), 9), false); + target.announce(PacketCreator.showSpecialEffect(9)); + target.getMap().broadcastMessage(target, PacketCreator.showForeignEffect(target.getId(), 9), false); target = eim.getPlayerById(eim.getIntProperty("brideId")); - target.announce(MaplePacketCreator.showSpecialEffect(9)); - target.getMap().broadcastMessage(target, MaplePacketCreator.showForeignEffect(target.getId(), 9), false); + target.announce(PacketCreator.showSpecialEffect(9)); + target.getMap().broadcastMessage(target, PacketCreator.showForeignEffect(target.getId(), 9), false); } cm.sendOk("Way to go, my friend! Your LOVE has been added to theirs, now in one bigger heart-shaped sentiment that will remain lively in our hearts forever! Who-hoo~!"); diff --git a/scripts/npc/9201113.js b/scripts/npc/9201113.js index 539fef544e..21f6bfaca5 100644 --- a/scripts/npc/9201113.js +++ b/scripts/npc/9201113.js @@ -141,8 +141,8 @@ function action(mode, type, selection) { cm.sendOk("The expedition will begin and you will now be escorted to the #bEntrance to CWKPQ Altar#k."); status = 4; } else if (selection == 3) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getMap().broadcastMessage(PacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); cm.endExpedition(expedition); cm.sendOk("The expedition has now ended. Sometimes the best strategy is to run away."); cm.dispose(); diff --git a/scripts/npc/9270047.js b/scripts/npc/9270047.js index bafaa03ae3..c7cc73c902 100644 --- a/scripts/npc/9270047.js +++ b/scripts/npc/9270047.js @@ -158,8 +158,8 @@ function action(mode, type, selection) { cm.sendOk("The expedition will begin and you will now be escorted to the #b" + expedMap + "#k."); status = 4; } else if (selection == 3) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - player.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); + const PacketCreator = Java.type('tools.PacketCreator'); + player.getMap().broadcastMessage(PacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition.")); cm.endExpedition(expedition); cm.sendOk("The expedition has now ended. Sometimes the best strategy is to run away."); cm.dispose(); diff --git a/scripts/npc/9977777.js b/scripts/npc/9977777.js index 31605dc4ac..c9e9a5805b 100644 --- a/scripts/npc/9977777.js +++ b/scripts/npc/9977777.js @@ -308,21 +308,21 @@ function writeAllFeatures() { } function start() { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - cm.getPlayer().announce(MaplePacketCreator.musicChange(anthemSong)); + const PacketCreator = Java.type('tools.PacketCreator'); + cm.getPlayer().announce(PacketCreator.musicChange(anthemSong)); status = -1; writeAllFeatures(); action(1, 0, 0); } function action(mode, type, selection) { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); if (mode == -1) { - cm.getPlayer().announce(MaplePacketCreator.musicChange(ambientSong)); + cm.getPlayer().announce(PacketCreator.musicChange(ambientSong)); cm.dispose(); } else { if (mode == 0 && type > 0) { - cm.getPlayer().announce(MaplePacketCreator.musicChange(ambientSong)); + cm.getPlayer().announce(PacketCreator.musicChange(ambientSong)); cm.dispose(); return; } @@ -356,7 +356,7 @@ function action(mode, type, selection) { cm.sendPrev(sendStr); } else { - cm.getPlayer().announce(MaplePacketCreator.musicChange(ambientSong)); + cm.getPlayer().announce(PacketCreator.musicChange(ambientSong)); cm.dispose(); } } diff --git a/scripts/npc/MagatiaPassword.js b/scripts/npc/MagatiaPassword.js index 340e7b52cb..9d54d25693 100644 --- a/scripts/npc/MagatiaPassword.js +++ b/scripts/npc/MagatiaPassword.js @@ -21,8 +21,8 @@ function action(mode, type, selection){ else if(status == 1){ if(cm.getText() == cm.getQuestProgress(3360)){ cm.setQuestProgress(3360, 1); - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); - cm.getPlayer().announce(MaplePacketCreator.playPortalSound()); + const PacketCreator = Java.type('tools.PacketCreator'); + cm.getPlayer().announce(PacketCreator.playPortalSound()); cm.warp(261030000, "sp_" + ((cm.getMapId() == 261010000) ? "jenu" : "alca")); } else { diff --git a/scripts/portal/party3_jailin.js b/scripts/portal/party3_jailin.js index 2ccdeac4ed..8e87dee8a0 100644 --- a/scripts/portal/party3_jailin.js +++ b/scripts/portal/party3_jailin.js @@ -28,17 +28,17 @@ function enterLeverSequence(pi) { } } - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); if(countMiss > 0) { - map.broadcastMessage(MaplePacketCreator.showEffect("quest/party/wrong_kor")); - map.broadcastMessage(MaplePacketCreator.playSound("Party1/Failed")); + map.broadcastMessage(PacketCreator.showEffect("quest/party/wrong_kor")); + map.broadcastMessage(PacketCreator.playSound("Party1/Failed")); pi.playerMessage(5, "The right combination of levers is needed to pass. " + countMiss + " lever(s) are misplaced."); return false; } - map.broadcastMessage(MaplePacketCreator.showEffect("quest/party/clear")); - map.broadcastMessage(MaplePacketCreator.playSound("Party1/Clear")); + map.broadcastMessage(PacketCreator.showEffect("quest/party/clear")); + map.broadcastMessage(PacketCreator.playSound("Party1/Clear")); pi.getEventInstance().setProperty("jail" + jailn, "0"); } diff --git a/scripts/reactor/9101000.js b/scripts/reactor/9101000.js index 6467d5d633..e05ff1d916 100644 --- a/scripts/reactor/9101000.js +++ b/scripts/reactor/9101000.js @@ -29,11 +29,11 @@ */ function act() { - const MaplePacketCreator = Java.type('tools.MaplePacketCreator'); + const PacketCreator = Java.type('tools.PacketCreator'); rm.spawnMonster(9300061, 1, 0, 0); // (0, 0) is temp position rm.getClient().getMap().startMapEffect("Protect the Moon Bunny that's pounding the mill, and gather up 10 Moon Bunny's Rice Cakes!", 5120016, 7000); - rm.getClient().getMap().broadcastMessage(MaplePacketCreator.bunnyPacket()); // Protect the Moon Bunny! - rm.getClient().getMap().broadcastMessage(MaplePacketCreator.showHPQMoon()); + rm.getClient().getMap().broadcastMessage(PacketCreator.bunnyPacket()); // Protect the Moon Bunny! + rm.getClient().getMap().broadcastMessage(PacketCreator.showHPQMoon()); rm.getClient().getMap().showAllMonsters(); } \ No newline at end of file diff --git a/src/main/java/client/BuddyList.java b/src/main/java/client/BuddyList.java index 2fac16afc2..83ed697282 100644 --- a/src/main/java/client/BuddyList.java +++ b/src/main/java/client/BuddyList.java @@ -23,7 +23,7 @@ package client; import net.server.PlayerStorage; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.sql.Connection; import java.sql.PreparedStatement; @@ -167,7 +167,7 @@ public class BuddyList { public void addBuddyRequest(MapleClient c, int cidFrom, String nameFrom, int channelFrom) { put(new BuddylistEntry(nameFrom, "Default Group", cidFrom, channelFrom, false)); if (pendingRequests.isEmpty()) { - c.announce(MaplePacketCreator.requestBuddylistAdd(cidFrom, c.getPlayer().getId(), nameFrom)); + c.announce(PacketCreator.requestBuddylistAdd(cidFrom, c.getPlayer().getId(), nameFrom)); } else { pendingRequests.push(new CharacterNameAndId(cidFrom, nameFrom)); } diff --git a/src/main/java/client/MapleCharacter.java b/src/main/java/client/MapleCharacter.java index b1a57fbc5c..6a5bd054d6 100644 --- a/src/main/java/client/MapleCharacter.java +++ b/src/main/java/client/MapleCharacter.java @@ -294,7 +294,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { statup.add(new Pair<>(s.getKey(), s.getValue())); } - announce(MaplePacketCreator.updatePlayerStats(statup, true, MapleCharacter.this)); + announce(PacketCreator.updatePlayerStats(statup, true, MapleCharacter.this)); } }); @@ -757,7 +757,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } combocounter = (short) Math.min(30000, count); if (count > 0) { - announce(MaplePacketCreator.showCombo(combocounter)); + announce(PacketCreator.showCombo(combocounter)); } } @@ -823,13 +823,13 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (isGM() && hide != this.hidden) { if (!hide) { this.hidden = false; - announce(MaplePacketCreator.getGMEffect(0x10, (byte) 0)); + announce(PacketCreator.getGMEffect(0x10, (byte) 0)); List dsstat = Collections.singletonList(MapleBuffStat.DARKSIGHT); - getMap().broadcastGMMessage(this, MaplePacketCreator.cancelForeignBuff(id, dsstat), false); + getMap().broadcastGMMessage(this, PacketCreator.cancelForeignBuff(id, dsstat), false); getMap().broadcastSpawnPlayerMapObjectMessage(this, this, false); for(MapleSummon ms: this.getSummonsValues()) { - getMap().broadcastNONGMMessage(this, MaplePacketCreator.spawnSummon(ms, false), false); + getMap().broadcastNONGMMessage(this, PacketCreator.spawnSummon(ms, false), false); } for (MapleMapObject mo : this.getMap().getMonsters()) { @@ -838,15 +838,15 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } } else { this.hidden = true; - announce(MaplePacketCreator.getGMEffect(0x10, (byte) 1)); + announce(PacketCreator.getGMEffect(0x10, (byte) 1)); if (!login) { - getMap().broadcastNONGMMessage(this, MaplePacketCreator.removePlayerFromMap(getId()), false); + getMap().broadcastNONGMMessage(this, PacketCreator.removePlayerFromMap(getId()), false); } List> ldsstat = Collections.singletonList(new Pair(MapleBuffStat.DARKSIGHT, 0)); - getMap().broadcastGMMessage(this, MaplePacketCreator.giveForeignBuff(id, ldsstat), false); + getMap().broadcastGMMessage(this, PacketCreator.giveForeignBuff(id, ldsstat), false); this.releaseControlledMonsters(); } - announce(MaplePacketCreator.enableActions()); + announce(PacketCreator.enableActions()); } } @@ -871,9 +871,9 @@ public class MapleCharacter extends AbstractMapleCharacterObject { private void cancelPlayerBuffs(List buffstats) { if (client.getChannelServer().getPlayerStorage().getCharacterById(getId()) != null) { updateLocalStats(); - client.announce(MaplePacketCreator.cancelBuff(buffstats)); + client.announce(PacketCreator.cancelBuff(buffstats)); if (buffstats.size() > 0) { - getMap().broadcastMessage(this, MaplePacketCreator.cancelForeignBuff(getId(), buffstats), false); + getMap().broadcastMessage(this, PacketCreator.cancelForeignBuff(getId(), buffstats), false); } } } @@ -1034,7 +1034,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { MapleMap map = thisChr.getMap(); if (map != null) { - map.broadcastMessage(thisChr, MaplePacketCreator.showForeignEffect(thisChr.getId(), 8), false); + map.broadcastMessage(thisChr, PacketCreator.showForeignEffect(thisChr.getId(), 8), false); } } }, 777); @@ -1137,7 +1137,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { statup.add(new Pair<>(MapleStat.AVAILABLEAP, remainingAp)); statup.add(new Pair<>(MapleStat.AVAILABLESP, remainingSp[GameConstants.getSkillBook(job.getId())])); statup.add(new Pair<>(MapleStat.JOB, job.getId())); - client.announce(MaplePacketCreator.updatePlayerStats(statup, true, this)); + client.announce(PacketCreator.updatePlayerStats(statup, true, this)); } finally { statWlock.unlock(); effLock.unlock(); @@ -1147,16 +1147,16 @@ public class MapleCharacter extends AbstractMapleCharacterObject { silentPartyUpdate(); if (dragon != null) { - getMap().broadcastMessage(MaplePacketCreator.removeDragon(dragon.getObjectId())); + getMap().broadcastMessage(PacketCreator.removeDragon(dragon.getObjectId())); dragon = null; } if (this.guildid > 0) { - getGuild().broadcast(MaplePacketCreator.jobMessage(0, job.getId(), name), this.getId()); + getGuild().broadcast(PacketCreator.jobMessage(0, job.getId(), name), this.getId()); } MapleFamily family = getFamily(); if(family != null) { - family.broadcast(MaplePacketCreator.jobMessage(1, job.getId(), name), this.getId()); + family.broadcast(PacketCreator.jobMessage(1, job.getId(), name), this.getId()); } setMasteries(this.job.getId()); guildUpdate(); @@ -1178,7 +1178,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void broadcastAcquaintances(int type, String message) { - broadcastAcquaintances(MaplePacketCreator.serverNotice(type, message)); + broadcastAcquaintances(PacketCreator.serverNotice(type, message)); } public void broadcastAcquaintances(byte[] packet) { @@ -1219,7 +1219,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void broadcastStance() { - map.broadcastMessage(this, MaplePacketCreator.movePlayer(id, this.getIdleMovement(), getIdleMovementDataLength()), false); + map.broadcastMessage(this, PacketCreator.movePlayer(id, this.getIdleMovement(), getIdleMovementDataLength()), false); } public MapleMap getWarpMap(int map) { @@ -1366,7 +1366,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (pto == null) { pto = to.getPortal(0); } - changeMapInternal(to, pto.getPosition(), MaplePacketCreator.getWarpToMap(to, pto.getId(), this)); + changeMapInternal(to, pto.getPosition(), PacketCreator.getWarpToMap(to, pto.getId(), this)); canWarpMap = false; canWarpCounter--; @@ -1382,7 +1382,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { eventChangedMap(target.getId()); MapleMap to = getWarpMap(target.getId()); - changeMapInternal(to, pos, MaplePacketCreator.getWarpToMap(to, 0x80, pos, this)); + changeMapInternal(to, pos, PacketCreator.getWarpToMap(to, 0x80, pos, this)); canWarpMap = false; canWarpCounter--; @@ -1417,7 +1417,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (pto == null) { pto = to.getPortal(0); } - changeMapInternal(to, pto.getPosition(), MaplePacketCreator.getWarpToMap(to, pto.getId(), this)); + changeMapInternal(to, pto.getPosition(), PacketCreator.getWarpToMap(to, pto.getId(), this)); canWarpMap = false; canWarpCounter--; @@ -1701,7 +1701,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { try { if (party != null) { mpc.setMapId(to.getId()); - client.announce(MaplePacketCreator.updateParty(client.getChannel(), party, PartyOperation.SILENT_UPDATE, null)); + client.announce(PacketCreator.updateParty(client.getChannel(), party, PartyOperation.SILENT_UPDATE, null)); updatePartyMemberHPInternal(); } } finally { @@ -1738,7 +1738,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } // if this map has obstacle components moving, make it do so for this client - announce(MaplePacketCreator.environmentMoveList(map.getEnvironment().entrySet())); + announce(PacketCreator.environmentMoveList(map.getEnvironment().entrySet())); } } @@ -1758,11 +1758,11 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (newLevel > -1) { skills.put(skill, new SkillEntry(newLevel, newMasterlevel, expiration)); if (!GameConstants.isHiddenSkills(skill.getId())) { - this.client.announce(MaplePacketCreator.updateSkill(skill.getId(), newLevel, newMasterlevel, expiration)); + this.client.announce(PacketCreator.updateSkill(skill.getId(), newLevel, newMasterlevel, expiration)); } } else { skills.remove(skill); - this.client.announce(MaplePacketCreator.updateSkill(skill.getId(), newLevel, newMasterlevel, -1)); //Shouldn't use expiration anymore :) + this.client.announce(PacketCreator.updateSkill(skill.getId(), newLevel, newMasterlevel, -1)); //Shouldn't use expiration anymore :) try (Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("DELETE FROM skills WHERE skillid = ? AND characterid = ?")) { ps.setInt(1, skill.getId()); @@ -1799,11 +1799,11 @@ public class MapleCharacter extends AbstractMapleCharacterObject { return; } - client.announce(MaplePacketCreator.showOwnBerserk(skilllevel, berserk)); + client.announce(PacketCreator.showOwnBerserk(skilllevel, berserk)); if (!isHidden) { - getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showBerserk(getId(), skilllevel, berserk), false); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showBerserk(getId(), skilllevel, berserk), false); } else { - getMap().broadcastGMMessage(MapleCharacter.this, MaplePacketCreator.showBerserk(getId(), skilllevel, berserk), false); + getMap().broadcastGMMessage(MapleCharacter.this, PacketCreator.showBerserk(getId(), skilllevel, berserk), false); } } }, 5000, 3000); @@ -1923,7 +1923,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (ob instanceof MapleMapItem) { MapleMapItem mapitem = (MapleMapItem) ob; if (System.currentTimeMillis() - mapitem.getDropTime() < 400 || !mapitem.canBePickedBy(this)) { - client.announce(MaplePacketCreator.enableActions()); + client.announce(PacketCreator.enableActions()); return; } @@ -1936,13 +1936,13 @@ public class MapleCharacter extends AbstractMapleCharacterObject { mapitem.lockItem(); try { if (mapitem.isPickedUp()) { - client.announce(MaplePacketCreator.showItemUnavailable()); - client.announce(MaplePacketCreator.enableActions()); + client.announce(PacketCreator.showItemUnavailable()); + client.announce(PacketCreator.enableActions()); return; } boolean isPet = petIndex > -1; - final byte[] pickupPacket = MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), (isPet) ? 5 : 2, this.getId(), isPet, petIndex); + final byte[] pickupPacket = PacketCreator.removeItemFromMap(mapitem.getObjectId(), (isPet) ? 5 : 2, this.getId(), isPet, petIndex); Item mItem = mapitem.getItem(); boolean hasSpaceInventory = true; @@ -1975,21 +1975,21 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } else if (MapleInventoryManipulator.addFromDrop(client, mItem, true)) { this.getMap().pickItemDrop(pickupPacket, mapitem); } else { - client.announce(MaplePacketCreator.enableActions()); + client.announce(PacketCreator.enableActions()); return; } } else { - client.announce(MaplePacketCreator.showItemUnavailable()); - client.announce(MaplePacketCreator.enableActions()); + client.announce(PacketCreator.showItemUnavailable()); + client.announce(PacketCreator.enableActions()); return; } - client.announce(MaplePacketCreator.enableActions()); + client.announce(PacketCreator.enableActions()); return; } if (!this.needQuestItem(mapitem.getQuest(), mapitem.getItemId())) { - client.announce(MaplePacketCreator.showItemUnavailable()); - client.announce(MaplePacketCreator.enableActions()); + client.announce(PacketCreator.showItemUnavailable()); + client.announce(PacketCreator.enableActions()); return; } @@ -2010,7 +2010,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { itemScript = info; } else { if (!MapleInventoryManipulator.addFromDrop(client, mItem, true)) { - client.announce(MaplePacketCreator.enableActions()); + client.announce(PacketCreator.enableActions()); return; } } @@ -2026,14 +2026,14 @@ public class MapleCharacter extends AbstractMapleCharacterObject { updateAriantScore(); } } else { - client.announce(MaplePacketCreator.enableActions()); + client.announce(PacketCreator.enableActions()); return; } this.getMap().pickItemDrop(pickupPacket, mapitem); } else if(!hasSpaceInventory) { - client.announce(MaplePacketCreator.getInventoryFull()); - client.announce(MaplePacketCreator.getShowInventoryFull()); + client.announce(PacketCreator.getInventoryFull()); + client.announce(PacketCreator.getShowInventoryFull()); } } finally { mapitem.unlockItem(); @@ -2044,7 +2044,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { ism.runItemScript(client, itemScript); } } - client.announce(MaplePacketCreator.enableActions()); + client.announce(PacketCreator.enableActions()); } public int countItem(int itemid) { @@ -2075,7 +2075,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void announceBattleshipHp() { - announce(MaplePacketCreator.skillCooldown(5221999, battleshipHp)); + announce(PacketCreator.skillCooldown(5221999, battleshipHp)); } public void decreaseBattleshipHp(int decrease) { @@ -2083,7 +2083,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (battleshipHp <= 0) { Skill battleship = SkillFactory.getSkill(Corsair.BATTLE_SHIP); int cooldown = battleship.getEffect(getSkillLevel(battleship)).getCooldown(); - announce(MaplePacketCreator.skillCooldown(Corsair.BATTLE_SHIP, cooldown)); + announce(PacketCreator.skillCooldown(Corsair.BATTLE_SHIP, cooldown)); addCooldown(Corsair.BATTLE_SHIP, Server.getInstance().getCurrentTime(), (long)(cooldown * 1000)); removeCooldown(5221999); cancelEffectFromBuffStat(MapleBuffStat.MONSTER_RIDING); @@ -2115,7 +2115,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { private void nextPendingRequest(MapleClient c) { CharacterNameAndId pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest(); if (pendingBuddyRequest != null) { - c.announce(MaplePacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); + c.announce(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); } } @@ -2133,7 +2133,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { notifyRemoteChannel(client, getWorldServer().find(otherCid), otherCid, BuddyList.BuddyOperation.DELETED); } bl.remove(otherCid); - client.announce(MaplePacketCreator.updateBuddylist(getBuddylist().getBuddies())); + client.announce(PacketCreator.updateBuddylist(getBuddylist().getBuddies())); nextPendingRequest(client); } @@ -2458,8 +2458,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if(MapleCharacter.this.getHp() < localmaxhp) { byte recHP = (byte) (healHP / YamlConfig.config.server.CHAIR_EXTRA_HEAL_MULTIPLIER); - client.announce(MaplePacketCreator.showOwnRecovery(recHP)); - getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showRecovery(id, recHP), false); + client.announce(PacketCreator.showOwnRecovery(recHP)); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showRecovery(id, recHP), false); } else if (MapleCharacter.this.getMp() >= localmaxmp) { stopChairTask(); // optimizing schedule management when player is already with full pool. } @@ -2506,8 +2506,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if(MapleCharacter.this.getHp() < localmaxhp) { if(healHP > 0) { - client.announce(MaplePacketCreator.showOwnRecovery(healHP)); - getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showRecovery(id, healHP), false); + client.announce(PacketCreator.showOwnRecovery(healHP)); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showRecovery(id, healHP), false); } } @@ -2614,9 +2614,9 @@ public class MapleCharacter extends AbstractMapleCharacterObject { final List> debuff = Collections.singletonList(new Pair<>(disease, Integer.valueOf(skill.getX()))); if (disease != MapleDisease.SLOW) { - map.broadcastMessage(MaplePacketCreator.giveForeignDebuff(id, debuff, skill)); + map.broadcastMessage(PacketCreator.giveForeignDebuff(id, debuff, skill)); } else { - map.broadcastMessage(MaplePacketCreator.giveForeignSlowDebuff(id, debuff, skill)); + map.broadcastMessage(PacketCreator.giveForeignSlowDebuff(id, debuff, skill)); } } } @@ -2631,9 +2631,9 @@ public class MapleCharacter extends AbstractMapleCharacterObject { final List> debuff = Collections.singletonList(new Pair<>(disease, Integer.valueOf(skill.getX()))); if (disease != MapleDisease.SLOW) { - this.announce(MaplePacketCreator.giveForeignDebuff(cid, debuff, skill)); + this.announce(PacketCreator.giveForeignDebuff(cid, debuff, skill)); } else { - this.announce(MaplePacketCreator.giveForeignSlowDebuff(cid, debuff, skill)); + this.announce(PacketCreator.giveForeignSlowDebuff(cid, debuff, skill)); } } } @@ -2661,12 +2661,12 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } final List> debuff = Collections.singletonList(new Pair<>(disease, Integer.valueOf(skill.getX()))); - client.announce(MaplePacketCreator.giveDebuff(debuff, skill)); + client.announce(PacketCreator.giveDebuff(debuff, skill)); if (disease != MapleDisease.SLOW) { - map.broadcastMessage(this, MaplePacketCreator.giveForeignDebuff(id, debuff, skill), false); + map.broadcastMessage(this, PacketCreator.giveForeignDebuff(id, debuff, skill), false); } else { - map.broadcastMessage(this, MaplePacketCreator.giveForeignSlowDebuff(id, debuff, skill), false); + map.broadcastMessage(this, PacketCreator.giveForeignSlowDebuff(id, debuff, skill), false); } } } @@ -2674,12 +2674,12 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void dispelDebuff(MapleDisease debuff) { if (hasDisease(debuff)) { long mask = debuff.getValue(); - announce(MaplePacketCreator.cancelDebuff(mask)); + announce(PacketCreator.cancelDebuff(mask)); if (debuff != MapleDisease.SLOW) { - map.broadcastMessage(this, MaplePacketCreator.cancelForeignDebuff(id, mask), false); + map.broadcastMessage(this, PacketCreator.cancelForeignDebuff(id, mask), false); } else { - map.broadcastMessage(this, MaplePacketCreator.cancelForeignSlowDebuff(id), false); + map.broadcastMessage(this, PacketCreator.cancelForeignSlowDebuff(id), false); } chrLock.lock(); @@ -2789,7 +2789,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void dropMessage(int type, String message) { - client.announce(MaplePacketCreator.serverNotice(type, message)); + client.announce(PacketCreator.serverNotice(type, message)); } public void enteredScript(String script, int mapid) { @@ -2909,7 +2909,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { MapleCoolDownValueHolder mcdvh = bel.getValue(); if(curTime >= mcdvh.startTime + mcdvh.length) { removeCooldown(mcdvh.skillId); - client.announce(MaplePacketCreator.skillCooldown(mcdvh.skillId, 0)); + client.announce(PacketCreator.skillCooldown(mcdvh.skillId, 0)); } } } @@ -2954,7 +2954,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { forceUpdateItem(item); //TEST :3 } else if (expiration != -1 && expiration < currenttime) { if (!ItemConstants.isPet(item.getItemId())) { - client.announce(MaplePacketCreator.itemExpired(item.getItemId())); + client.announce(PacketCreator.itemExpired(item.getItemId())); toberemove.add(item); if (ItemConstants.isRateCoupon(item.getItemId())) { deletedCoupon = true; @@ -2966,7 +2966,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } if (ItemConstants.isExpirablePet(item.getItemId())) { - client.announce(MaplePacketCreator.itemExpired(item.getItemId())); + client.announce(PacketCreator.itemExpired(item.getItemId())); toberemove.add(item); } else { item.setExpiration(-1); @@ -3017,7 +3017,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { final List mods = new LinkedList<>(); mods.add(new ModifyInventory(3, item)); mods.add(new ModifyInventory(0, item)); - client.announce(MaplePacketCreator.modifyInventory(true, mods)); + client.announce(PacketCreator.modifyInventory(true, mods)); } public void gainGachaExp() { @@ -3094,7 +3094,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { white = false; } - client.announce(MaplePacketCreator.getShowExpGain((int) gain, equip, party, inChat, white)); + client.announce(PacketCreator.getShowExpGain((int) gain, equip, party, inChat, white)); } private synchronized void gainExpInternal(long gain, int equip, int party, boolean show, boolean inChat, boolean white) { // need of method synchonization here detected thanks to MedicOP @@ -3158,10 +3158,10 @@ public class MapleCharacter extends AbstractMapleCharacterObject { updateSingleStat(MapleStat.FAME, thisFame); if (fromPlayer != null) { - fromPlayer.announce(MaplePacketCreator.giveFameResponse(mode, getName(), thisFame)); - announce(MaplePacketCreator.receiveFame(mode, fromPlayer.getName())); + fromPlayer.announce(PacketCreator.giveFameResponse(mode, getName(), thisFame)); + announce(PacketCreator.receiveFame(mode, fromPlayer.getName())); } else { - announce(MaplePacketCreator.getShowFameGain(delta)); + announce(PacketCreator.getShowFameGain(delta)); } return true; @@ -3201,15 +3201,15 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (gain != 0) { updateSingleStat(MapleStat.MESO, (int) nextMeso, enableActions); if (show) { - client.announce(MaplePacketCreator.getShowMesoGain(gain, inChat)); + client.announce(PacketCreator.getShowMesoGain(gain, inChat)); } } else { - client.announce(MaplePacketCreator.enableActions()); + client.announce(PacketCreator.enableActions()); } } public void genericGuildMessage(int code) { - this.client.announce(MaplePacketCreator.genericGuildMessage((byte) code)); + this.client.announce(PacketCreator.genericGuildMessage((byte) code)); } public int getAccountID() { @@ -3712,7 +3712,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { MapleSummon summon = summons.get(summonId); if (summon != null) { - getMap().broadcastMessage(MaplePacketCreator.removeSummon(summon, true), summon.getPosition()); + getMap().broadcastMessage(PacketCreator.removeSummon(summon, true), summon.getPosition()); getMap().removeMapObject(summon); removeVisibleMapObject(summon); @@ -4032,8 +4032,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } if (!inactiveStats.isEmpty()) { - client.announce(MaplePacketCreator.cancelBuff(inactiveStats)); - getMap().broadcastMessage(this, MaplePacketCreator.cancelForeignBuff(getId(), inactiveStats), false); + client.announce(PacketCreator.cancelBuff(inactiveStats)); + getMap().broadcastMessage(this, PacketCreator.cancelForeignBuff(getId(), inactiveStats), false); } } @@ -4308,7 +4308,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (this.isRidingBattleship()) { List> statups = new ArrayList<>(1); statups.add(new Pair<>(MapleBuffStat.MONSTER_RIDING, 0)); - this.announce(MaplePacketCreator.giveBuff(1932000, 5221006, statups)); + this.announce(PacketCreator.giveBuff(1932000, 5221006, statups)); this.announceBattleshipHp(); } } @@ -4402,9 +4402,9 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } addHP(healEffect.getHp()); - client.announce(MaplePacketCreator.showOwnBuffEffect(beholder, 2)); - getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.summonSkill(getId(), beholder, 5), true); - getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showOwnBuffEffect(beholder, 2), false); + client.announce(PacketCreator.showOwnBuffEffect(beholder, 2)); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.summonSkill(getId(), beholder, 5), true); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showOwnBuffEffect(beholder, 2), false); } }, healInterval, healInterval); } @@ -4420,9 +4420,9 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } buffEffect.applyTo(MapleCharacter.this); - client.announce(MaplePacketCreator.showOwnBuffEffect(beholder, 2)); - getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.summonSkill(getId(), beholder, (int) (Math.random() * 3) + 6), true); - getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showBuffeffect(getId(), beholder, 2), false); + client.announce(PacketCreator.showOwnBuffEffect(beholder, 2)); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.summonSkill(getId(), beholder, (int) (Math.random() * 3) + 6), true); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showBuffeffect(getId(), beholder, 2), false); } }, buffInterval, buffInterval); } @@ -4454,8 +4454,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } addHP(heal); - client.announce(MaplePacketCreator.showOwnRecovery(heal)); - getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showRecovery(id, heal), false); + client.announce(PacketCreator.showOwnRecovery(heal)); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showRecovery(id, heal), false); } }, healInterval, healInterval); } finally { @@ -4812,7 +4812,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { Set exclItems = pe.getValue(); if (!exclItems.isEmpty()) { - client.announce(MaplePacketCreator.loadExceptionList(this.getId(), pe.getKey(), petIndex, new ArrayList<>(exclItems))); + client.announce(PacketCreator.loadExceptionList(this.getId(), pe.getKey(), petIndex, new ArrayList<>(exclItems))); chrLock.lock(); try { @@ -4836,7 +4836,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { Set exclItems = pe.getValue(); if (!exclItems.isEmpty()) { - c.announce(MaplePacketCreator.loadExceptionList(this.getId(), pe.getKey(), petIndex, new ArrayList<>(exclItems))); + c.announce(PacketCreator.loadExceptionList(this.getId(), pe.getKey(), petIndex, new ArrayList<>(exclItems))); } } } @@ -5935,7 +5935,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { //Server.getInstance().getGuild(guildid, world, mgc).gainGP(40); int allianceId = getGuild().getAllianceId(); if (allianceId > 0) { - Server.getInstance().allianceMessage(allianceId, MaplePacketCreator.updateAllianceJobLevel(this), getId(), -1); + Server.getInstance().allianceMessage(allianceId, PacketCreator.updateAllianceJobLevel(this), getId(), -1); } } catch (Exception e) { e.printStackTrace(); @@ -5954,10 +5954,10 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.ENERGY_CHARGE, energybar)); setBuffedValue(MapleBuffStat.ENERGY_CHARGE, energybar); - client.announce(MaplePacketCreator.giveBuff(energybar, 0, stat)); - client.announce(MaplePacketCreator.showOwnBuffEffect(energycharge.getId(), 2)); - getMap().broadcastMessage(this, MaplePacketCreator.showBuffeffect(id, energycharge.getId(), 2)); - getMap().broadcastMessage(this, MaplePacketCreator.giveForeignBuff(energybar, stat)); + client.announce(PacketCreator.giveBuff(energybar, 0, stat)); + client.announce(PacketCreator.showOwnBuffEffect(energycharge.getId(), 2)); + getMap().broadcastMessage(this, PacketCreator.showBuffeffect(id, energycharge.getId(), 2)); + getMap().broadcastMessage(this, PacketCreator.giveForeignBuff(energybar, stat)); } if (energybar >= 10000 && energybar < 11000) { energybar = 15000; @@ -5968,8 +5968,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject { energybar = 0; List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.ENERGY_CHARGE, energybar)); setBuffedValue(MapleBuffStat.ENERGY_CHARGE, energybar); - client.announce(MaplePacketCreator.giveBuff(energybar, 0, stat)); - getMap().broadcastMessage(chr, MaplePacketCreator.cancelForeignFirstDebuff(id, ((long) 1) << 50)); + client.announce(PacketCreator.giveBuff(energybar, 0, stat)); + getMap().broadcastMessage(chr, PacketCreator.cancelForeignFirstDebuff(id, ((long) 1) << 50)); } }, ceffect.getDuration()); } @@ -5980,8 +5980,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject { Skill combo = SkillFactory.getSkill(skillid); List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.COMBO, 1)); setBuffedValue(MapleBuffStat.COMBO, 1); - client.announce(MaplePacketCreator.giveBuff(skillid, combo.getEffect(getSkillLevel(combo)).getDuration() + (int) ((getBuffedStarttime(MapleBuffStat.COMBO) - System.currentTimeMillis())), stat)); - getMap().broadcastMessage(this, MaplePacketCreator.giveForeignBuff(getId(), stat), false); + client.announce(PacketCreator.giveBuff(skillid, combo.getEffect(getSkillLevel(combo)).getDuration() + (int) ((getBuffedStarttime(MapleBuffStat.COMBO) - System.currentTimeMillis())), stat)); + getMap().broadcastMessage(this, PacketCreator.giveForeignBuff(getId(), stat), false); } public boolean hasEntered(String script) { @@ -6412,7 +6412,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } final String names = (getMedalText() + name); - getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, String.format(LEVEL_200, names, maxClassLevel, names))); + getWorldServer().broadcastPacket(PacketCreator.serverNotice(6, String.format(LEVEL_200, names, maxClassLevel, names))); } } @@ -6439,18 +6439,18 @@ public class MapleCharacter extends AbstractMapleCharacterObject { statup.add(new Pair<>(MapleStat.STR, str)); statup.add(new Pair<>(MapleStat.DEX, dex)); - client.announce(MaplePacketCreator.updatePlayerStats(statup, true, this)); + client.announce(PacketCreator.updatePlayerStats(statup, true, this)); } finally { statWlock.unlock(); effLock.unlock(); } - getMap().broadcastMessage(this, MaplePacketCreator.showForeignEffect(getId(), 0), false); + getMap().broadcastMessage(this, PacketCreator.showForeignEffect(getId(), 0), false); setMPC(new MaplePartyCharacter(this)); silentPartyUpdate(); if (this.guildid > 0) { - getGuild().broadcast(MaplePacketCreator.levelUpMessage(2, level, name), this.getId()); + getGuild().broadcast(PacketCreator.levelUpMessage(2, level, name), this.getId()); } if (level % 20 == 0) { @@ -6497,7 +6497,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { MapleFamilyEntry senior = familyEntry.getSenior(); if(senior != null) { //only send the message to direct senior MapleCharacter seniorChr = senior.getChr(); - if(seniorChr != null) seniorChr.announce(MaplePacketCreator.levelUpMessage(1, level, getName())); + if(seniorChr != null) seniorChr.announce(PacketCreator.levelUpMessage(1, level, getName())); } } } @@ -7495,7 +7495,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void yellowMessage(String m) { - announce(MaplePacketCreator.sendYellowTip(m)); + announce(PacketCreator.sendYellowTip(m)); } public void raiseQuestMobCount(int id) { @@ -7544,7 +7544,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (getCP() < losing) { losing = getCP(); } - getMap().broadcastMessage(MaplePacketCreator.playerDiedMessage(getName(), losing, getTeam())); + getMap().broadcastMessage(PacketCreator.playerDiedMessage(getName(), losing, getTeam())); gainCP(-losing); return; } @@ -7603,7 +7603,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } unsitChairInternal(); - client.announce(MaplePacketCreator.enableActions()); + client.announce(PacketCreator.enableActions()); } private void unsitChairInternal() { @@ -7615,13 +7615,13 @@ public class MapleCharacter extends AbstractMapleCharacterObject { setChair(-1); if (unregisterChairBuff()) { - getMap().broadcastMessage(this, MaplePacketCreator.cancelForeignChairSkillEffect(this.getId()), false); + getMap().broadcastMessage(this, PacketCreator.cancelForeignChairSkillEffect(this.getId()), false); } - getMap().broadcastMessage(this, MaplePacketCreator.showChair(this.getId(), 0), false); + getMap().broadcastMessage(this, PacketCreator.showChair(this.getId(), 0), false); } - announce(MaplePacketCreator.cancelChair(-1)); + announce(PacketCreator.cancelChair(-1)); } public void sitChair(int itemId) { @@ -7629,16 +7629,16 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (itemId >= 1000000) { // sit on item chair if (chair.get() < 0) { setChair(itemId); - getMap().broadcastMessage(this, MaplePacketCreator.showChair(this.getId(), itemId), false); + getMap().broadcastMessage(this, PacketCreator.showChair(this.getId(), itemId), false); } - announce(MaplePacketCreator.enableActions()); + announce(PacketCreator.enableActions()); } else if (itemId >= 0) { // sit on map chair if (chair.get() < 0) { setChair(itemId); if (registerChairBuff()) { - getMap().broadcastMessage(this, MaplePacketCreator.giveForeignChairSkillEffect(this.getId()), false); + getMap().broadcastMessage(this, PacketCreator.giveForeignChairSkillEffect(this.getId()), false); } - announce(MaplePacketCreator.cancelChair(itemId)); + announce(PacketCreator.cancelChair(itemId)); } } else { // stand up unsitChairInternal(); @@ -7683,8 +7683,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } addHP(-bloodEffect.getX()); - announce(MaplePacketCreator.showOwnBuffEffect(bloodEffect.getSourceId(), 5)); - getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showBuffeffect(getId(), bloodEffect.getSourceId(), 5), false); + announce(PacketCreator.showOwnBuffEffect(bloodEffect.getSourceId(), 5)); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showBuffeffect(getId(), bloodEffect.getSourceId(), 5), false); } }, 4000, 4000); } @@ -7908,7 +7908,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { enforceMaxHpMp(); if (!hpmpupdate.isEmpty()) { - client.announce(MaplePacketCreator.updatePlayerStats(hpmpupdate, true, this)); + client.announce(PacketCreator.updatePlayerStats(hpmpupdate, true, this)); } if (oldmaxhp != localmaxhp) { // thanks Wh1SK3Y (Suwaidy) for pointing out a deadlock occuring related to party members HP @@ -7926,7 +7926,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { try { if (party != null) { for (MapleCharacter partychar : this.getPartyMembersOnSameMap()) { - announce(MaplePacketCreator.updatePartyMemberHP(partychar.getId(), partychar.getHp(), partychar.getCurrentMaxHp())); + announce(PacketCreator.updatePartyMemberHP(partychar.getId(), partychar.getHp(), partychar.getCurrentMaxHp())); } } } finally { @@ -7943,7 +7943,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (mcvh.skillId != id) { coolDowns.remove(mcvh.skillId); if (packet) { - client.announce(MaplePacketCreator.skillCooldown(mcvh.skillId, 0)); + client.announce(PacketCreator.skillCooldown(mcvh.skillId, 0)); } } } @@ -8742,7 +8742,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void sendPolice(int greason, String reason, int duration) { - announce(MaplePacketCreator.sendPolice(String.format("You have been blocked by the#b %s Police for %s.#k", "Cosmic", reason))); + announce(PacketCreator.sendPolice(String.format("You have been blocked by the#b %s Police for %s.#k", "Cosmic", reason))); this.isbanned = true; TimerManager.getInstance().schedule(new Runnable() { @Override @@ -8755,14 +8755,14 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void sendPolice(String text) { String message = getName() + " received this - " + text; if (Server.getInstance().isGmOnline(this.getWorld())) { //Alert and log if a GM is online - Server.getInstance().broadcastGMMessage(this.getWorld(), MaplePacketCreator.sendYellowTip(message)); + Server.getInstance().broadcastGMMessage(this.getWorld(), PacketCreator.sendYellowTip(message)); FilePrinter.print(FilePrinter.AUTOBAN_WARNING, message); } else { //Auto DC and log if no GM is online client.disconnect(false, false); FilePrinter.print(FilePrinter.AUTOBAN_DC, message); } - //Server.getInstance().broadcastGMMessage(0, MaplePacketCreator.serverNotice(1, getName() + " received this - " + text)); - //announce(MaplePacketCreator.sendPolice(text)); + //Server.getInstance().broadcastGMMessage(0, PacketCreator.serverNotice(1, getName() + " received this - " + text)); + //announce(PacketCreator.sendPolice(text)); //this.isbanned = true; //TimerManager.getInstance().schedule(new Runnable() { // @Override @@ -8773,7 +8773,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void sendKeymap() { - client.announce(MaplePacketCreator.getKeymap(keymap)); + client.announce(PacketCreator.getKeymap(keymap)); } public void sendQuickmap() { @@ -8784,12 +8784,12 @@ public class MapleCharacter extends AbstractMapleCharacterObject { pQuickslotKeyMapped = new MapleQuickslotBinding(MapleQuickslotBinding.DEFAULT_QUICKSLOTS); } - this.announce(MaplePacketCreator.QuickslotMappedInit(pQuickslotKeyMapped)); + this.announce(PacketCreator.QuickslotMappedInit(pQuickslotKeyMapped)); } public void sendMacros() { // Always send the macro packet to fix a client side bug when switching characters. - client.announce(MaplePacketCreator.getMacros(skillMacros)); + client.announce(PacketCreator.getMacros(skillMacros)); } public SkillMacro[] getMacros() { @@ -8826,7 +8826,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void setBuddyCapacity(int capacity) { buddylist.setCapacity(capacity); - client.announce(MaplePacketCreator.updateBuddyCapacity(capacity)); + client.announce(PacketCreator.updateBuddyCapacity(capacity)); } public void setBuffedValue(MapleBuffStat effect, int value) { @@ -9300,7 +9300,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (newLimit != -1) { this.saveCharToDB(); if (update) { - client.announce(MaplePacketCreator.updateInventorySlotLimit(type, newLimit)); + client.announce(PacketCreator.updateInventorySlotLimit(type, newLimit)); } return true; } else { @@ -9602,7 +9602,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void showDojoClock() { if (GameConstants.isDojoBossArea(map.getId())) { - client.announce(MaplePacketCreator.getClock((int) (getDojoTimeLeft() / 1000))); + client.announce(PacketCreator.getClock((int) (getDojoTimeLeft() / 1000))); } } @@ -9632,7 +9632,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { strLines.add(""); strLines.add(this.getClient().getChannelServer().getServerMessage().isEmpty() ? 0 : 1, "Get off my lawn!!"); - this.announce(MaplePacketCreator.getAvatarMega(mapOwner, medal, this.getClient().getChannel(), 5390006, strLines, true)); + this.announce(PacketCreator.getAvatarMega(mapOwner, medal, this.getClient().getChannel(), 5390006, strLines, true)); } } @@ -9652,7 +9652,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { rs.last(); int count = rs.getRow(); rs.first(); - client.announce(MaplePacketCreator.showNotes(rs, count)); + client.announce(PacketCreator.showNotes(rs, count)); } } catch (SQLException e) { e.printStackTrace(); @@ -9731,7 +9731,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if(maplemount != null) { int tiredness = maplemount.incrementAndGetTiredness(); - this.getMap().broadcastMessage(MaplePacketCreator.updateMount(this.getId(), maplemount, false)); + this.getMap().broadcastMessage(PacketCreator.updateMount(this.getId(), maplemount, false)); if (tiredness > 99) { maplemount.setTiredness(99); this.dispelSkill(this.getJobType() * 10000000 + 1004); @@ -9781,13 +9781,13 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } this.getClient().getWorldServer().unregisterPetHunger(this, petIdx); - getMap().broadcastMessage(this, MaplePacketCreator.showPet(this, pet, true, hunger), true); + getMap().broadcastMessage(this, PacketCreator.showPet(this, pet, true, hunger), true); removePet(pet, shift_left); commitExcludedItems(); - client.announce(MaplePacketCreator.petStatUpdate(this)); - client.announce(MaplePacketCreator.enableActions()); + client.announce(PacketCreator.petStatUpdate(this)); + client.announce(PacketCreator.enableActions()); } public void updateMacros(int position, SkillMacro updateMacro) { @@ -9808,7 +9808,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { int curmaxhp = getCurrentMaxHp(); int curhp = getHp(); for (MapleCharacter partychar : this.getPartyMembersOnSameMap()) { - partychar.announce(MaplePacketCreator.updatePartyMemberHP(getId(), curhp, curmaxhp)); + partychar.announce(PacketCreator.updatePartyMemberHP(getId(), curhp, curmaxhp)); } } } @@ -9858,20 +9858,20 @@ public class MapleCharacter extends AbstractMapleCharacterObject { switch (questUpdate.getLeft()) { case UPDATE: - announce(MaplePacketCreator.updateQuest(chr, (MapleQuestStatus) objs[0], (Boolean) objs[1])); + announce(PacketCreator.updateQuest(chr, (MapleQuestStatus) objs[0], (Boolean) objs[1])); break; case FORFEIT: - announce(MaplePacketCreator.forfeitQuest((Short) objs[0])); + announce(PacketCreator.forfeitQuest((Short) objs[0])); break; case COMPLETE: - announce(MaplePacketCreator.completeQuest((Short) objs[0], (Long) objs[1])); + announce(PacketCreator.completeQuest((Short) objs[0], (Long) objs[1])); break; case INFO: MapleQuestStatus qs = (MapleQuestStatus) objs[0]; - announce(MaplePacketCreator.updateQuestInfo(qs.getQuest().getId(), qs.getNpc())); + announce(PacketCreator.updateQuestInfo(qs.getQuest().getId(), qs.getNpc())); break; } } @@ -9932,7 +9932,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { private void expireQuest(MapleQuest quest) { if (quest.forfeit(this)) { - announce(MaplePacketCreator.questExpire(quest.getId())); + announce(PacketCreator.questExpire(quest.getId())); } } @@ -10027,7 +10027,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void questTimeLimit(final MapleQuest quest, int seconds) { registerQuestExpire(quest, seconds * 1000); - announce(MaplePacketCreator.addQuestTimeLimit(quest.getId(), seconds * 1000)); + announce(PacketCreator.addQuestTimeLimit(quest.getId(), seconds * 1000)); } public void questTimeLimit2(final MapleQuest quest, long expires) { @@ -10045,7 +10045,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } private void updateSingleStat(MapleStat stat, int newval, boolean itemReaction) { - announce(MaplePacketCreator.updatePlayerStats(Collections.singletonList(new Pair<>(stat, Integer.valueOf(newval))), itemReaction, this)); + announce(PacketCreator.updatePlayerStats(Collections.singletonList(new Pair<>(stat, Integer.valueOf(newval))), itemReaction, this)); } public void announce(final byte[] packet) { @@ -10064,22 +10064,22 @@ public class MapleCharacter extends AbstractMapleCharacterObject { @Override public void sendDestroyData(MapleClient client) { - client.announce(MaplePacketCreator.removePlayerFromMap(this.getObjectId())); + client.announce(PacketCreator.removePlayerFromMap(this.getObjectId())); } @Override public void sendSpawnData(MapleClient client) { if (!this.isHidden() || client.getPlayer().gmLevel() > 1) { - client.announce(MaplePacketCreator.spawnPlayerMapObject(client, this, false)); + client.announce(PacketCreator.spawnPlayerMapObject(client, this, false)); if (buffEffects.containsKey(getJobMapChair(job))) { // mustn't effLock, chrLock sendSpawnData - client.announce(MaplePacketCreator.giveForeignChairSkillEffect(id)); + client.announce(PacketCreator.giveForeignChairSkillEffect(id)); } } if (this.isHidden()) { List> dsstat = Collections.singletonList(new Pair<>(MapleBuffStat.DARKSIGHT, 0)); - getMap().broadcastGMMessage(this, MaplePacketCreator.giveForeignBuff(getId(), dsstat), false); + getMap().broadcastGMMessage(this, PacketCreator.giveForeignBuff(getId(), dsstat), false); } } @@ -10148,7 +10148,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void blockPortal(String scriptName) { if (!blockedPortals.contains(scriptName) && scriptName != null) { blockedPortals.add(scriptName); - client.announce(MaplePacketCreator.enableActions()); + client.announce(PacketCreator.enableActions()); } } @@ -10172,7 +10172,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void updateAreaInfo(int area, String info) { area_info.put(Short.valueOf((short) area), info); - announce(MaplePacketCreator.updateAreaInfo(area, info)); + announce(PacketCreator.updateAreaInfo(area, info)); } public String getAreaInfo(int area) { @@ -10189,7 +10189,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } this.ban(reason); - announce(MaplePacketCreator.sendPolice(String.format("You have been blocked by the#b %s Police for HACK reason.#k", "Cosmic"))); + announce(PacketCreator.sendPolice(String.format("You have been blocked by the#b %s Police for HACK reason.#k", "Cosmic"))); TimerManager.getInstance().schedule(new Runnable() { @Override public void run() { @@ -10197,7 +10197,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } }, 5000); - Server.getInstance().broadcastGMMessage(this.getWorld(), MaplePacketCreator.serverNotice(6, MapleCharacter.makeMapleReadable(this.name) + " was autobanned for " + reason)); + Server.getInstance().broadcastGMMessage(this.getWorld(), PacketCreator.serverNotice(6, MapleCharacter.makeMapleReadable(this.name) + " was autobanned for " + reason)); } public void block(int reason, int days, String desc) { @@ -10417,12 +10417,12 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void broadcastMarriageMessage() { MapleGuild guild = this.getGuild(); if(guild != null) { - guild.broadcast(MaplePacketCreator.marriageMessage(0, name)); + guild.broadcast(PacketCreator.marriageMessage(0, name)); } MapleFamily family = this.getFamily(); if(family != null) { - family.broadcast(MaplePacketCreator.marriageMessage(1, name)); + family.broadcast(PacketCreator.marriageMessage(1, name)); } } @@ -11238,9 +11238,9 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (this.getCP() > this.getTotalCP()) { this.setTotalCP(this.getCP()); } - this.getClient().announce(MaplePacketCreator.CPUpdate(false, this.getCP(), this.getTotalCP(), getTeam())); + this.getClient().announce(PacketCreator.CPUpdate(false, this.getCP(), this.getTotalCP(), getTeam())); if (this.getParty() != null && getTeam() != -1) { - this.getMap().broadcastMessage(MaplePacketCreator.CPUpdate(true, this.getMonsterCarnival().getCP(team), this.getMonsterCarnival().getTotalCP(team), getTeam())); + this.getMap().broadcastMessage(PacketCreator.CPUpdate(true, this.getMonsterCarnival().getCP(team), this.getMonsterCarnival().getTotalCP(team), getTeam())); } else { } } diff --git a/src/main/java/client/MapleClient.java b/src/main/java/client/MapleClient.java index 4d72ec87ba..2b0bd14158 100644 --- a/src/main/java/client/MapleClient.java +++ b/src/main/java/client/MapleClient.java @@ -30,11 +30,11 @@ import io.netty.handler.timeout.IdleStateEvent; import net.MaplePacketHandler; import net.PacketProcessor; import net.netty.InvalidPacketHeaderException; -import net.packet.logging.LoggingUtil; -import net.packet.logging.MapleLogger; import net.packet.ByteBufOutPacket; import net.packet.InPacket; import net.packet.OutPacket; +import net.packet.logging.LoggingUtil; +import net.packet.logging.MapleLogger; import net.server.Server; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; @@ -208,7 +208,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { handler.handlePacket(accessor, this); } catch (final Throwable t) { FilePrinter.printError(FilePrinter.PACKET_HANDLER + handler.getClass().getName() + ".txt", t, "Error for " + (getPlayer() == null ? "" : "player ; " + getPlayer() + " on map ; " + getPlayer().getMapId() + " - ") + "account ; " + getAccountName() + "\r\n" + accessor); - //client.announce(MaplePacketCreator.enableActions());//bugs sometimes + //client.announce(PacketCreator.enableActions());//bugs sometimes } } @@ -307,7 +307,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { } public void sendCharList(int server) { - this.announce(MaplePacketCreator.getCharList(this, server, 0)); + this.announce(PacketCreator.getCharList(this, server, 0)); } public List loadCharacters(int serverId) { @@ -999,7 +999,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { if (guild != null) { final Server server = Server.getInstance(); server.setGuildMemberOnline(player, false, player.getClient().getChannel()); - player.getClient().announce(MaplePacketCreator.showGuildInfo(player)); + player.getClient().announce(PacketCreator.showGuildInfo(player)); } if (bl != null) { wserv.loggedOff(player.getName(), player.getId(), channel, player.getBuddylist().getBuddyIds()); @@ -1144,7 +1144,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { public void checkIfIdle(final IdleStateEvent event) { final long pingedAt = System.currentTimeMillis(); - announce(MaplePacketCreator.getPing()); + announce(PacketCreator.getPing()); TimerManager.getInstance().schedule(() -> { try { if (lastPong < pingedAt) { @@ -1414,12 +1414,12 @@ public class MapleClient extends ChannelInboundHandlerAdapter { private void announceDisableServerMessage() { if (!this.getWorldServer().registerDisabledServerMessage(player.getId())) { - announce(MaplePacketCreator.serverMessage("")); + announce(PacketCreator.serverMessage("")); } } public void announceServerMessage() { - announce(MaplePacketCreator.serverMessage(this.getChannelServer().getServerMessage())); + announce(PacketCreator.serverMessage(this.getChannelServer().getServerMessage())); } public synchronized void announceBossHpBar(MapleMonster mm, final int mobHash, final byte[] packet) { @@ -1477,8 +1477,8 @@ public class MapleClient extends ChannelInboundHandlerAdapter { } public void announceHint(String msg, int length) { - announce(MaplePacketCreator.sendHint(msg, length, 10)); - announce(MaplePacketCreator.enableActions()); + announce(PacketCreator.sendHint(msg, length, 10)); + announce(PacketCreator.enableActions()); } public void changeChannel(int channel) { @@ -1488,18 +1488,18 @@ public class MapleClient extends ChannelInboundHandlerAdapter { return; } if (!player.isAlive() || FieldLimit.CANNOTMIGRATE.check(player.getMap().getFieldLimit())) { - announce(MaplePacketCreator.enableActions()); + announce(PacketCreator.enableActions()); return; } else if (MapleMiniDungeonInfo.isDungeonMap(player.getMapId())) { - announce(MaplePacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); - announce(MaplePacketCreator.enableActions()); + announce(PacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); + announce(PacketCreator.enableActions()); return; } String[] socket = Server.getInstance().getInetSocket(this, getWorld(), channel); if (socket == null) { - announce(MaplePacketCreator.serverNotice(1, "Channel " + channel + " is currently disabled. Try another channel.")); - announce(MaplePacketCreator.enableActions()); + announce(PacketCreator.serverNotice(1, "Channel " + channel + " is currently disabled. Try another channel.")); + announce(PacketCreator.enableActions()); return; } @@ -1530,7 +1530,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { player.setSessionTransitionState(); try { - announce(MaplePacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]))); + announce(PacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]))); } catch (IOException e) { e.printStackTrace(); } @@ -1586,7 +1586,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { } public void enableCSActions() { - announce(MaplePacketCreator.enableCSUse(player)); + announce(PacketCreator.enableCSUse(player)); } public boolean canBypassPin() { diff --git a/src/main/java/client/MapleFamily.java b/src/main/java/client/MapleFamily.java index 60bf97b092..68d64ef3ea 100644 --- a/src/main/java/client/MapleFamily.java +++ b/src/main/java/client/MapleFamily.java @@ -25,7 +25,7 @@ import net.server.Server; import net.server.world.World; import tools.DatabaseConnection; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import java.sql.Connection; @@ -169,7 +169,7 @@ public class MapleFamily { for(MapleFamilyEntry entry : members.values()) { MapleCharacter chr = entry.getChr(); if(chr != null) { - chr.getClient().announce(MaplePacketCreator.getFamilyInfo(entry)); + chr.getClient().announce(PacketCreator.getFamilyInfo(entry)); } } } diff --git a/src/main/java/client/MapleFamilyEntry.java b/src/main/java/client/MapleFamilyEntry.java index e1ad0ecad0..4ab07299c5 100644 --- a/src/main/java/client/MapleFamilyEntry.java +++ b/src/main/java/client/MapleFamilyEntry.java @@ -19,6 +19,12 @@ */ package client; +import net.server.Server; +import tools.DatabaseConnection; +import tools.FilePrinter; +import tools.PacketCreator; +import tools.Pair; + import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -26,12 +32,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import net.server.Server; -import tools.DatabaseConnection; -import tools.FilePrinter; -import tools.MaplePacketCreator; -import tools.Pair; - /** * @author Ubaware */ @@ -264,7 +264,7 @@ public class MapleFamilyEntry { this.totalReputation += gain; } MapleCharacter chr = getChr(); - if(chr != null) chr.announce(MaplePacketCreator.sendGainRep(gain, from != null ? from.getName() : "")); + if(chr != null) chr.announce(PacketCreator.sendGainRep(gain, from != null ? from.getName() : "")); } public void giveReputationToSenior(int gain, boolean includeSuperSenior) { @@ -437,11 +437,11 @@ public class MapleFamilyEntry { MapleFamilyEntry senior = getSenior(); if(senior != null) { MapleCharacter seniorChr = senior.getChr(); - if(seniorChr != null) seniorChr.announce(MaplePacketCreator.getFamilyInfo(senior)); + if(seniorChr != null) seniorChr.announce(PacketCreator.getFamilyInfo(senior)); senior = senior.getSenior(); if(includeSuperSenior && senior != null) { seniorChr = senior.getChr(); - if(seniorChr != null) seniorChr.announce(MaplePacketCreator.getFamilyInfo(senior)); + if(seniorChr != null) seniorChr.announce(PacketCreator.getFamilyInfo(senior)); } } } diff --git a/src/main/java/client/MonsterBook.java b/src/main/java/client/MonsterBook.java index 1e614cf32d..26bca16d1e 100644 --- a/src/main/java/client/MonsterBook.java +++ b/src/main/java/client/MonsterBook.java @@ -24,7 +24,7 @@ package client; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.sql.Connection; import java.sql.PreparedStatement; @@ -54,7 +54,7 @@ public final class MonsterBook { } public void addCard(final MapleClient c, final int cardid) { - c.getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.showForeignCardEffect(c.getPlayer().getId()), false); + c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.showForeignCardEffect(c.getPlayer().getId()), false); Integer qty; lock.lock(); @@ -84,10 +84,10 @@ public final class MonsterBook { calculateLevel(); } - c.announce(MaplePacketCreator.addCard(false, cardid, qty + 1)); - c.announce(MaplePacketCreator.showGainCard()); + c.announce(PacketCreator.addCard(false, cardid, qty + 1)); + c.announce(PacketCreator.showGainCard()); } else { - c.announce(MaplePacketCreator.addCard(true, cardid, 5)); + c.announce(PacketCreator.addCard(true, cardid, 5)); } } diff --git a/src/main/java/client/autoban/AutobanFactory.java b/src/main/java/client/autoban/AutobanFactory.java index 8f65f5463e..481a7a0ee4 100644 --- a/src/main/java/client/autoban/AutobanFactory.java +++ b/src/main/java/client/autoban/AutobanFactory.java @@ -24,10 +24,10 @@ package client.autoban; import client.MapleCharacter; import config.YamlConfig; +import net.packet.logging.MapleLogger; import net.server.Server; import tools.FilePrinter; -import net.packet.logging.MapleLogger; -import tools.MaplePacketCreator; +import tools.PacketCreator; /** * @@ -88,7 +88,7 @@ public enum AutobanFactory { if (chr != null && MapleLogger.ignored.contains(chr.getId())){ return; } - Server.getInstance().broadcastGMMessage((chr != null ? chr.getWorld() : 0), MaplePacketCreator.sendYellowTip((chr != null ? MapleCharacter.makeMapleReadable(chr.getName()) : "") + " caused " + this.name() + " " + reason)); + Server.getInstance().broadcastGMMessage((chr != null ? chr.getWorld() : 0), PacketCreator.sendYellowTip((chr != null ? MapleCharacter.makeMapleReadable(chr.getName()) : "") + " caused " + this.name() + " " + reason)); } if (YamlConfig.config.server.USE_AUTOBAN_LOG) { FilePrinter.print(FilePrinter.AUTOBAN_WARNING, (chr != null ? MapleCharacter.makeMapleReadable(chr.getName()) : "") + " caused " + this.name() + " " + reason); diff --git a/src/main/java/client/command/commands/gm0/DisposeCommand.java b/src/main/java/client/command/commands/gm0/DisposeCommand.java index f31cd2dc77..aa5bdd6bcd 100644 --- a/src/main/java/client/command/commands/gm0/DisposeCommand.java +++ b/src/main/java/client/command/commands/gm0/DisposeCommand.java @@ -27,7 +27,7 @@ import client.MapleClient; import client.command.Command; import scripting.npc.NPCScriptManager; import scripting.quest.QuestScriptManager; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class DisposeCommand extends Command { { @@ -38,7 +38,7 @@ public class DisposeCommand extends Command { public void execute(MapleClient c, String[] params) { NPCScriptManager.getInstance().dispose(c); QuestScriptManager.getInstance().dispose(c); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); c.removeClickedNPC(); c.getPlayer().message("You've been disposed."); } diff --git a/src/main/java/client/command/commands/gm0/GmCommand.java b/src/main/java/client/command/commands/gm0/GmCommand.java index baad48c6a1..9c2a94105f 100644 --- a/src/main/java/client/command/commands/gm0/GmCommand.java +++ b/src/main/java/client/command/commands/gm0/GmCommand.java @@ -28,7 +28,7 @@ import client.MapleClient; import client.command.Command; import net.server.Server; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; public class GmCommand extends Command { @@ -51,8 +51,8 @@ public class GmCommand extends Command { return; } String message = player.getLastCommandMessage(); - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.sendYellowTip("[GM Message]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message)); - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(1, message)); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.sendYellowTip("[GM Message]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message)); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(1, message)); FilePrinter.printError(FilePrinter.COMMAND_GM, MapleCharacter.makeMapleReadable(player.getName()) + ": " + message); player.dropMessage(5, "Your message '" + message + "' was sent to GMs."); player.dropMessage(5, tips[Randomizer.nextInt(tips.length)]); diff --git a/src/main/java/client/command/commands/gm0/RanksCommand.java b/src/main/java/client/command/commands/gm0/RanksCommand.java index 1ce9cf81c5..7da0fdb0b4 100644 --- a/src/main/java/client/command/commands/gm0/RanksCommand.java +++ b/src/main/java/client/command/commands/gm0/RanksCommand.java @@ -27,7 +27,7 @@ import client.MapleCharacter; import client.MapleClient; import client.command.Command; import net.server.Server; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import java.util.List; @@ -42,6 +42,6 @@ public class RanksCommand extends Command { MapleCharacter player = c.getPlayer(); List> worldRanking = Server.getInstance().getWorldPlayerRanking(player.getWorld()); - player.announce(MaplePacketCreator.showPlayerRanks(9010000, worldRanking)); + player.announce(PacketCreator.showPlayerRanks(9010000, worldRanking)); } } diff --git a/src/main/java/client/command/commands/gm0/ReportBugCommand.java b/src/main/java/client/command/commands/gm0/ReportBugCommand.java index 6a74fa3c92..7085dc730d 100644 --- a/src/main/java/client/command/commands/gm0/ReportBugCommand.java +++ b/src/main/java/client/command/commands/gm0/ReportBugCommand.java @@ -28,7 +28,7 @@ import client.MapleClient; import client.command.Command; import net.server.Server; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class ReportBugCommand extends Command { { @@ -44,8 +44,8 @@ public class ReportBugCommand extends Command { return; } String message = player.getLastCommandMessage(); - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.sendYellowTip("[Bug]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message)); - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(1, message)); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.sendYellowTip("[Bug]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message)); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(1, message)); FilePrinter.printError(FilePrinter.COMMAND_BUG, MapleCharacter.makeMapleReadable(player.getName()) + ": " + message); player.dropMessage(5, "Your bug '" + message + "' was submitted successfully to our developers. Thank you!"); diff --git a/src/main/java/client/command/commands/gm2/BombCommand.java b/src/main/java/client/command/commands/gm2/BombCommand.java index 37e698b097..46d3f36f5a 100644 --- a/src/main/java/client/command/commands/gm2/BombCommand.java +++ b/src/main/java/client/command/commands/gm2/BombCommand.java @@ -28,7 +28,7 @@ import client.MapleClient; import client.command.Command; import net.server.Server; import server.life.MapleLifeFactory; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class BombCommand extends Command { { @@ -42,7 +42,7 @@ public class BombCommand extends Command { MapleCharacter victim = c.getWorldServer().getPlayerStorage().getCharacterByName(params[0]); if (victim != null) { victim.getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300166), victim.getPosition()); - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, player.getName() + " used !bomb on " + victim.getName())); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(5, player.getName() + " used !bomb on " + victim.getName())); } else { player.message("Player '" + params[0] + "' could not be found on this world."); } diff --git a/src/main/java/client/command/commands/gm2/UnBugCommand.java b/src/main/java/client/command/commands/gm2/UnBugCommand.java index 502ea2bed1..50ec7eaf45 100644 --- a/src/main/java/client/command/commands/gm2/UnBugCommand.java +++ b/src/main/java/client/command/commands/gm2/UnBugCommand.java @@ -25,7 +25,7 @@ package client.command.commands.gm2; import client.MapleClient; import client.command.Command; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class UnBugCommand extends Command { { @@ -34,6 +34,6 @@ public class UnBugCommand extends Command { @Override public void execute(MapleClient c, String[] params) { - c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.enableActions()); + c.getPlayer().getMap().broadcastMessage(PacketCreator.enableActions()); } } diff --git a/src/main/java/client/command/commands/gm3/BanCommand.java b/src/main/java/client/command/commands/gm3/BanCommand.java index 38a773852b..1e74cd8ba8 100644 --- a/src/main/java/client/command/commands/gm3/BanCommand.java +++ b/src/main/java/client/command/commands/gm3/BanCommand.java @@ -29,7 +29,7 @@ import client.command.Command; import net.server.Server; import server.TimerManager; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.sql.Connection; import java.sql.PreparedStatement; @@ -73,15 +73,15 @@ public class BanCommand extends Command { target.ban(reason); target.yellowMessage("You have been banned by #b" + c.getPlayer().getName() + " #k."); target.yellowMessage("Reason: " + reason); - c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0)); + c.announce(PacketCreator.getGMEffect(4, (byte) 0)); final MapleCharacter rip = target; TimerManager.getInstance().schedule(() -> rip.getClient().disconnect(false, false), 5000); //5 Seconds - Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned.")); + Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned.")); } else if (MapleCharacter.ban(ign, reason, false)) { - c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0)); - Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned.")); + c.announce(PacketCreator.getGMEffect(4, (byte) 0)); + Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned.")); } else { - c.announce(MaplePacketCreator.getGMEffect(6, (byte) 1)); + c.announce(PacketCreator.getGMEffect(6, (byte) 1)); } } } diff --git a/src/main/java/client/command/commands/gm3/IgnoreCommand.java b/src/main/java/client/command/commands/gm3/IgnoreCommand.java index 226e63c323..d935639104 100644 --- a/src/main/java/client/command/commands/gm3/IgnoreCommand.java +++ b/src/main/java/client/command/commands/gm3/IgnoreCommand.java @@ -26,9 +26,9 @@ package client.command.commands.gm3; import client.MapleCharacter; import client.MapleClient; import client.command.Command; -import net.server.Server; import net.packet.logging.MapleLogger; -import tools.MaplePacketCreator; +import net.server.Server; +import tools.PacketCreator; public class IgnoreCommand extends Command { { @@ -55,7 +55,7 @@ public class IgnoreCommand extends Command { } player.yellowMessage(victim.getName() + " is " + (!monitored_ ? "now being ignored." : "no longer being ignored.")); String message_ = player.getName() + (!monitored_ ? " has started ignoring " : " has stopped ignoring ") + victim.getName() + "."; - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, message_)); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(5, message_)); } } diff --git a/src/main/java/client/command/commands/gm3/KillCommand.java b/src/main/java/client/command/commands/gm3/KillCommand.java index e18387c3e4..135474b096 100644 --- a/src/main/java/client/command/commands/gm3/KillCommand.java +++ b/src/main/java/client/command/commands/gm3/KillCommand.java @@ -27,7 +27,7 @@ import client.MapleCharacter; import client.MapleClient; import client.command.Command; import net.server.Server; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class KillCommand extends Command { { @@ -45,7 +45,7 @@ public class KillCommand extends Command { MapleCharacter victim = c.getWorldServer().getPlayerStorage().getCharacterByName(params[0]); if (victim != null) { victim.updateHpMp(0); - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, player.getName() + " used !kill on " + victim.getName())); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(5, player.getName() + " used !kill on " + victim.getName())); } else { player.message("Player '" + params[0] + "' could not be found."); } diff --git a/src/main/java/client/command/commands/gm3/MaxEnergyCommand.java b/src/main/java/client/command/commands/gm3/MaxEnergyCommand.java index 71cf8bba41..540f92f231 100644 --- a/src/main/java/client/command/commands/gm3/MaxEnergyCommand.java +++ b/src/main/java/client/command/commands/gm3/MaxEnergyCommand.java @@ -26,7 +26,7 @@ package client.command.commands.gm3; import client.MapleCharacter; import client.MapleClient; import client.command.Command; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class MaxEnergyCommand extends Command { { @@ -37,6 +37,6 @@ public class MaxEnergyCommand extends Command { public void execute(MapleClient c, String[] params) { MapleCharacter player = c.getPlayer(); c.getPlayer().setDojoEnergy(10000); - c.announce(MaplePacketCreator.getEnergy("energy", 10000)); + c.announce(PacketCreator.getEnergy("energy", 10000)); } } diff --git a/src/main/java/client/command/commands/gm3/MonitorCommand.java b/src/main/java/client/command/commands/gm3/MonitorCommand.java index 0a82ce454b..7f05db7521 100644 --- a/src/main/java/client/command/commands/gm3/MonitorCommand.java +++ b/src/main/java/client/command/commands/gm3/MonitorCommand.java @@ -26,9 +26,9 @@ package client.command.commands.gm3; import client.MapleCharacter; import client.MapleClient; import client.command.Command; -import net.server.Server; import net.packet.logging.MapleLogger; -import tools.MaplePacketCreator; +import net.server.Server; +import tools.PacketCreator; public class MonitorCommand extends Command { { @@ -55,7 +55,7 @@ public class MonitorCommand extends Command { } player.yellowMessage(victim.getId() + " is " + (!monitored ? "now being monitored." : "no longer being monitored.")); String message = player.getName() + (!monitored ? " has started monitoring " : " has stopped monitoring ") + victim.getId() + "."; - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, message)); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(5, message)); } } diff --git a/src/main/java/client/command/commands/gm3/MusicCommand.java b/src/main/java/client/command/commands/gm3/MusicCommand.java index 407c0ff901..c3bca566f8 100644 --- a/src/main/java/client/command/commands/gm3/MusicCommand.java +++ b/src/main/java/client/command/commands/gm3/MusicCommand.java @@ -27,7 +27,7 @@ import client.MapleCharacter; import client.MapleClient; import client.command.Command; import constants.game.GameConstants; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class MusicCommand extends Command { { @@ -53,14 +53,14 @@ public class MusicCommand extends Command { sendMsg += "Syntax: #r!music #k\r\n\r\n"; sendMsg += getSongList(); - c.announce(MaplePacketCreator.getNPCTalk(1052015, (byte) 0, sendMsg, "00 00", (byte) 0)); + c.announce(PacketCreator.getNPCTalk(1052015, (byte) 0, sendMsg, "00 00", (byte) 0)); return; } String song = player.getLastCommandMessage(); for (String s : GameConstants.GAME_SONGS) { if (s.equalsIgnoreCase(song)) { // thanks Masterrulax for finding an issue here - player.getMap().broadcastMessage(MaplePacketCreator.musicChange(s)); + player.getMap().broadcastMessage(PacketCreator.musicChange(s)); player.yellowMessage("Now playing song " + s + "."); return; } @@ -70,6 +70,6 @@ public class MusicCommand extends Command { sendMsg += "Song not found, please enter a song below.\r\n\r\n"; sendMsg += getSongList(); - c.announce(MaplePacketCreator.getNPCTalk(1052015, (byte) 0, sendMsg, "00 00", (byte) 0)); + c.announce(PacketCreator.getNPCTalk(1052015, (byte) 0, sendMsg, "00 00", (byte) 0)); } } diff --git a/src/main/java/client/command/commands/gm3/NoticeCommand.java b/src/main/java/client/command/commands/gm3/NoticeCommand.java index deee048b39..f321d170d0 100644 --- a/src/main/java/client/command/commands/gm3/NoticeCommand.java +++ b/src/main/java/client/command/commands/gm3/NoticeCommand.java @@ -27,7 +27,7 @@ import client.MapleCharacter; import client.MapleClient; import client.command.Command; import net.server.Server; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class NoticeCommand extends Command { { @@ -37,6 +37,6 @@ public class NoticeCommand extends Command { @Override public void execute(MapleClient c, String[] params) { MapleCharacter player = c.getPlayer(); - Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[Notice] " + player.getLastCommandMessage())); + Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.serverNotice(6, "[Notice] " + player.getLastCommandMessage())); } } diff --git a/src/main/java/client/command/commands/gm3/NpcCommand.java b/src/main/java/client/command/commands/gm3/NpcCommand.java index eb49eb438a..28c937a591 100644 --- a/src/main/java/client/command/commands/gm3/NpcCommand.java +++ b/src/main/java/client/command/commands/gm3/NpcCommand.java @@ -28,7 +28,7 @@ import client.MapleClient; import client.command.Command; import server.life.MapleLifeFactory; import server.life.MapleNPC; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class NpcCommand extends Command { { @@ -50,7 +50,7 @@ public class NpcCommand extends Command { npc.setRx1(player.getPosition().x - 50); npc.setFh(player.getMap().getFootholds().findBelow(c.getPlayer().getPosition()).getId()); player.getMap().addMapObject(npc); - player.getMap().broadcastMessage(MaplePacketCreator.spawnNPC(npc)); + player.getMap().broadcastMessage(PacketCreator.spawnNPC(npc)); } } } diff --git a/src/main/java/client/command/commands/gm3/RipCommand.java b/src/main/java/client/command/commands/gm3/RipCommand.java index db8d7919e4..06cbb73c9e 100644 --- a/src/main/java/client/command/commands/gm3/RipCommand.java +++ b/src/main/java/client/command/commands/gm3/RipCommand.java @@ -27,7 +27,7 @@ import client.MapleCharacter; import client.MapleClient; import client.command.Command; import net.server.Server; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class RipCommand extends Command { { @@ -37,6 +37,6 @@ public class RipCommand extends Command { @Override public void execute(MapleClient c, String[] params) { MapleCharacter player = c.getPlayer(); - Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[RIP]: " + joinStringFrom(params, 1))); + Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.serverNotice(6, "[RIP]: " + joinStringFrom(params, 1))); } } diff --git a/src/main/java/client/command/commands/gm3/StartEventCommand.java b/src/main/java/client/command/commands/gm3/StartEventCommand.java index 78d8139c20..855fa36843 100644 --- a/src/main/java/client/command/commands/gm3/StartEventCommand.java +++ b/src/main/java/client/command/commands/gm3/StartEventCommand.java @@ -28,7 +28,7 @@ import client.MapleClient; import client.command.Command; import net.server.Server; import server.events.gm.MapleEvent; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class StartEventCommand extends Command { { @@ -42,14 +42,14 @@ public class StartEventCommand extends Command { if (params.length > 1) players = Integer.parseInt(params[0]); c.getChannelServer().setEvent(new MapleEvent(player.getMapId(), players)); - Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.earnTitleMessage( + Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.earnTitleMessage( "[Event] An event has started on " + player.getMap().getMapName() + " and will allow " + players + " players to join. Type @joinevent to participate.")); Server.getInstance().broadcastMessage(c.getWorld(), - MaplePacketCreator.serverNotice(6, "[Event] An event has started on " + PacketCreator.serverNotice(6, "[Event] An event has started on " + player.getMap().getMapName() + " and will allow " + players diff --git a/src/main/java/client/command/commands/gm3/TimerAllCommand.java b/src/main/java/client/command/commands/gm3/TimerAllCommand.java index 40c1d47241..a74bb55ff6 100644 --- a/src/main/java/client/command/commands/gm3/TimerAllCommand.java +++ b/src/main/java/client/command/commands/gm3/TimerAllCommand.java @@ -26,7 +26,7 @@ package client.command.commands.gm3; import client.MapleCharacter; import client.MapleClient; import client.command.Command; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class TimerAllCommand extends Command { { @@ -43,13 +43,13 @@ public class TimerAllCommand extends Command { if (params[0].equalsIgnoreCase("remove")) { for (MapleCharacter victim : player.getWorldServer().getPlayerStorage().getAllCharacters()) { - victim.announce(MaplePacketCreator.removeClock()); + victim.announce(PacketCreator.removeClock()); } } else { try { int seconds = Integer.parseInt(params[0]); for (MapleCharacter victim : player.getWorldServer().getPlayerStorage().getAllCharacters()) { - victim.announce(MaplePacketCreator.getClock(seconds)); + victim.announce(PacketCreator.getClock(seconds)); } } catch (NumberFormatException e) { player.yellowMessage("Syntax: !timerall |remove"); diff --git a/src/main/java/client/command/commands/gm3/TimerCommand.java b/src/main/java/client/command/commands/gm3/TimerCommand.java index dfb12c6df5..78ceb32c12 100644 --- a/src/main/java/client/command/commands/gm3/TimerCommand.java +++ b/src/main/java/client/command/commands/gm3/TimerCommand.java @@ -26,7 +26,7 @@ package client.command.commands.gm3; import client.MapleCharacter; import client.MapleClient; import client.command.Command; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class TimerCommand extends Command { { @@ -44,10 +44,10 @@ public class TimerCommand extends Command { MapleCharacter victim = c.getWorldServer().getPlayerStorage().getCharacterByName(params[0]); if (victim != null) { if (params[1].equalsIgnoreCase("remove")) { - victim.announce(MaplePacketCreator.removeClock()); + victim.announce(PacketCreator.removeClock()); } else { try { - victim.announce(MaplePacketCreator.getClock(Integer.parseInt(params[1]))); + victim.announce(PacketCreator.getClock(Integer.parseInt(params[1]))); } catch (NumberFormatException e) { player.yellowMessage("Syntax: !timer |remove"); } diff --git a/src/main/java/client/command/commands/gm3/TimerMapCommand.java b/src/main/java/client/command/commands/gm3/TimerMapCommand.java index 2096e8f2c3..ce65f9a9d8 100644 --- a/src/main/java/client/command/commands/gm3/TimerMapCommand.java +++ b/src/main/java/client/command/commands/gm3/TimerMapCommand.java @@ -26,7 +26,7 @@ package client.command.commands.gm3; import client.MapleCharacter; import client.MapleClient; import client.command.Command; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class TimerMapCommand extends Command { { @@ -43,13 +43,13 @@ public class TimerMapCommand extends Command { if (params[0].equalsIgnoreCase("remove")) { for (MapleCharacter victim : player.getMap().getCharacters()) { - victim.announce(MaplePacketCreator.removeClock()); + victim.announce(PacketCreator.removeClock()); } } else { try { int seconds = Integer.parseInt(params[0]); for (MapleCharacter victim : player.getMap().getCharacters()) { - victim.announce(MaplePacketCreator.getClock(seconds)); + victim.announce(PacketCreator.getClock(seconds)); } } catch (NumberFormatException e) { player.yellowMessage("Syntax: !timermap |remove"); diff --git a/src/main/java/client/command/commands/gm4/BossDropRateCommand.java b/src/main/java/client/command/commands/gm4/BossDropRateCommand.java index 58901b9fb7..14cc40935a 100644 --- a/src/main/java/client/command/commands/gm4/BossDropRateCommand.java +++ b/src/main/java/client/command/commands/gm4/BossDropRateCommand.java @@ -22,7 +22,7 @@ package client.command.commands.gm4; import client.MapleCharacter; import client.MapleClient; import client.command.Command; -import tools.MaplePacketCreator; +import tools.PacketCreator; /** * @@ -43,6 +43,6 @@ public class BossDropRateCommand extends Command { int bossdroprate = Math.max(Integer.parseInt(params[0]), 1); c.getWorldServer().setBossDropRate(bossdroprate); - c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Boss Drop Rate has been changed to " + bossdroprate + "x.")); + c.getWorldServer().broadcastPacket(PacketCreator.serverNotice(6, "[Rate] Boss Drop Rate has been changed to " + bossdroprate + "x.")); } } diff --git a/src/main/java/client/command/commands/gm4/DropRateCommand.java b/src/main/java/client/command/commands/gm4/DropRateCommand.java index d87b2b3fc7..1dda95d9a9 100644 --- a/src/main/java/client/command/commands/gm4/DropRateCommand.java +++ b/src/main/java/client/command/commands/gm4/DropRateCommand.java @@ -26,7 +26,7 @@ package client.command.commands.gm4; import client.MapleCharacter; import client.MapleClient; import client.command.Command; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class DropRateCommand extends Command { { @@ -43,7 +43,7 @@ public class DropRateCommand extends Command { int droprate = Math.max(Integer.parseInt(params[0]), 1); c.getWorldServer().setDropRate(droprate); - c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Drop Rate has been changed to " + droprate + "x.")); + c.getWorldServer().broadcastPacket(PacketCreator.serverNotice(6, "[Rate] Drop Rate has been changed to " + droprate + "x.")); } } diff --git a/src/main/java/client/command/commands/gm4/ExpRateCommand.java b/src/main/java/client/command/commands/gm4/ExpRateCommand.java index 372a4f272d..a1fe479708 100644 --- a/src/main/java/client/command/commands/gm4/ExpRateCommand.java +++ b/src/main/java/client/command/commands/gm4/ExpRateCommand.java @@ -26,7 +26,7 @@ package client.command.commands.gm4; import client.MapleCharacter; import client.MapleClient; import client.command.Command; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class ExpRateCommand extends Command { { @@ -43,6 +43,6 @@ public class ExpRateCommand extends Command { int exprate = Math.max(Integer.parseInt(params[0]), 1); c.getWorldServer().setExpRate(exprate); - c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Exp Rate has been changed to " + exprate + "x.")); + c.getWorldServer().broadcastPacket(PacketCreator.serverNotice(6, "[Rate] Exp Rate has been changed to " + exprate + "x.")); } } diff --git a/src/main/java/client/command/commands/gm4/FishingRateCommand.java b/src/main/java/client/command/commands/gm4/FishingRateCommand.java index 2ec8722674..768d896533 100644 --- a/src/main/java/client/command/commands/gm4/FishingRateCommand.java +++ b/src/main/java/client/command/commands/gm4/FishingRateCommand.java @@ -26,7 +26,7 @@ package client.command.commands.gm4; import client.MapleCharacter; import client.MapleClient; import client.command.Command; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class FishingRateCommand extends Command { { @@ -43,6 +43,6 @@ public class FishingRateCommand extends Command { int fishrate = Math.max(Integer.parseInt(params[0]), 1); c.getWorldServer().setFishingRate(fishrate); - c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Fishing Rate has been changed to " + fishrate + "x.")); + c.getWorldServer().broadcastPacket(PacketCreator.serverNotice(6, "[Rate] Fishing Rate has been changed to " + fishrate + "x.")); } } diff --git a/src/main/java/client/command/commands/gm4/ForceVacCommand.java b/src/main/java/client/command/commands/gm4/ForceVacCommand.java index a4de383ad7..2369efc487 100644 --- a/src/main/java/client/command/commands/gm4/ForceVacCommand.java +++ b/src/main/java/client/command/commands/gm4/ForceVacCommand.java @@ -31,7 +31,7 @@ import client.inventory.manipulator.MapleInventoryManipulator; import server.maps.MapleMapItem; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.Arrays; import java.util.List; @@ -70,7 +70,7 @@ public class ForceVacCommand extends Command { } } - player.getMap().pickItemDrop(MaplePacketCreator.removeItemFromMap(mapItem.getObjectId(), 2, player.getId()), mapItem); + player.getMap().pickItemDrop(PacketCreator.removeItemFromMap(mapItem.getObjectId(), 2, player.getId()), mapItem); } finally { mapItem.unlockItem(); } diff --git a/src/main/java/client/command/commands/gm4/MesoRateCommand.java b/src/main/java/client/command/commands/gm4/MesoRateCommand.java index 0e4ee2f528..944a6bef9d 100644 --- a/src/main/java/client/command/commands/gm4/MesoRateCommand.java +++ b/src/main/java/client/command/commands/gm4/MesoRateCommand.java @@ -26,7 +26,7 @@ package client.command.commands.gm4; import client.MapleCharacter; import client.MapleClient; import client.command.Command; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class MesoRateCommand extends Command { { @@ -43,6 +43,6 @@ public class MesoRateCommand extends Command { int mesorate = Math.max(Integer.parseInt(params[0]), 1); c.getWorldServer().setMesoRate(mesorate); - c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Meso Rate has been changed to " + mesorate + "x.")); + c.getWorldServer().broadcastPacket(PacketCreator.serverNotice(6, "[Rate] Meso Rate has been changed to " + mesorate + "x.")); } } diff --git a/src/main/java/client/command/commands/gm4/PnpcCommand.java b/src/main/java/client/command/commands/gm4/PnpcCommand.java index 7cd83c5da0..1b15f81832 100644 --- a/src/main/java/client/command/commands/gm4/PnpcCommand.java +++ b/src/main/java/client/command/commands/gm4/PnpcCommand.java @@ -31,7 +31,7 @@ import server.life.MapleLifeFactory; import server.life.MapleNPC; import server.maps.MapleMap; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.awt.*; import java.sql.Connection; @@ -94,7 +94,7 @@ public class PnpcCommand extends Command { MapleMap map = ch.getMapFactory().getMap(mapId); map.addMapObject(npc); - map.broadcastMessage(MaplePacketCreator.spawnNPC(npc)); + map.broadcastMessage(PacketCreator.spawnNPC(npc)); } player.yellowMessage("Pnpc created."); diff --git a/src/main/java/client/command/commands/gm4/QuestRateCommand.java b/src/main/java/client/command/commands/gm4/QuestRateCommand.java index ecf41e63e8..855fe1caa8 100644 --- a/src/main/java/client/command/commands/gm4/QuestRateCommand.java +++ b/src/main/java/client/command/commands/gm4/QuestRateCommand.java @@ -26,7 +26,7 @@ package client.command.commands.gm4; import client.MapleCharacter; import client.MapleClient; import client.command.Command; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class QuestRateCommand extends Command { { @@ -43,7 +43,7 @@ public class QuestRateCommand extends Command { int questrate = Math.max(Integer.parseInt(params[0]), 1); c.getWorldServer().setQuestRate(questrate); - c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Quest Rate has been changed to " + questrate + "x.")); + c.getWorldServer().broadcastPacket(PacketCreator.serverNotice(6, "[Rate] Quest Rate has been changed to " + questrate + "x.")); } } diff --git a/src/main/java/client/command/commands/gm4/TravelRateCommand.java b/src/main/java/client/command/commands/gm4/TravelRateCommand.java index ce0b3058a9..14da01f08f 100644 --- a/src/main/java/client/command/commands/gm4/TravelRateCommand.java +++ b/src/main/java/client/command/commands/gm4/TravelRateCommand.java @@ -26,7 +26,7 @@ package client.command.commands.gm4; import client.MapleCharacter; import client.MapleClient; import client.command.Command; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class TravelRateCommand extends Command { { @@ -43,6 +43,6 @@ public class TravelRateCommand extends Command { int travelrate = Math.max(Integer.parseInt(params[0]), 1); c.getWorldServer().setTravelRate(travelrate); - c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Travel Rate has been changed to " + travelrate + "x.")); + c.getWorldServer().broadcastPacket(PacketCreator.serverNotice(6, "[Rate] Travel Rate has been changed to " + travelrate + "x.")); } } diff --git a/src/main/java/client/command/commands/gm5/DebugCommand.java b/src/main/java/client/command/commands/gm5/DebugCommand.java index 3ed04fab77..019f703912 100644 --- a/src/main/java/client/command/commands/gm5/DebugCommand.java +++ b/src/main/java/client/command/commands/gm5/DebugCommand.java @@ -76,7 +76,7 @@ public class DebugCommand extends Command { break; case "packet": - //player.getMap().broadcastMessage(MaplePacketCreator.customPacket(joinStringFrom(params, 1))); + //player.getMap().broadcastMessage(PacketCreator.customPacket(joinStringFrom(params, 1))); break; case "portal": diff --git a/src/main/java/client/command/commands/gm6/SaveAllCommand.java b/src/main/java/client/command/commands/gm6/SaveAllCommand.java index d9d1770f5a..d6a117a24f 100644 --- a/src/main/java/client/command/commands/gm6/SaveAllCommand.java +++ b/src/main/java/client/command/commands/gm6/SaveAllCommand.java @@ -28,7 +28,7 @@ import client.MapleClient; import client.command.Command; import net.server.Server; import net.server.world.World; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class SaveAllCommand extends Command { { @@ -44,7 +44,7 @@ public class SaveAllCommand extends Command { } } String message = player.getName() + " used !saveall."; - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, message)); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(5, message)); player.message("All players saved successfully."); } } diff --git a/src/main/java/client/command/commands/gm6/WarpWorldCommand.java b/src/main/java/client/command/commands/gm6/WarpWorldCommand.java index 0512f1f4fc..3c159eb419 100644 --- a/src/main/java/client/command/commands/gm6/WarpWorldCommand.java +++ b/src/main/java/client/command/commands/gm6/WarpWorldCommand.java @@ -27,7 +27,7 @@ import client.MapleCharacter; import client.MapleClient; import client.command.Command; import net.server.Server; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.net.InetAddress; import java.net.UnknownHostException; @@ -55,7 +55,7 @@ public class WarpWorldCommand extends Command { player.setSessionTransitionState(); player.setWorld(worldb); player.saveCharToDB();//To set the new world :O (true because else 2 player instances are created, one in both worlds) - c.announce(MaplePacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]))); + c.announce(PacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]))); } catch (UnknownHostException | NumberFormatException ex) { ex.printStackTrace(); player.message("Unexpected error when changing worlds, are you sure the world you are trying to warp to has the same amount of channels?"); diff --git a/src/main/java/client/creator/CharacterFactory.java b/src/main/java/client/creator/CharacterFactory.java index fe65ab98b5..34dffa08e2 100644 --- a/src/main/java/client/creator/CharacterFactory.java +++ b/src/main/java/client/creator/CharacterFactory.java @@ -19,8 +19,8 @@ */ package client.creator; -import client.MapleClient; import client.MapleCharacter; +import client.MapleClient; import client.MapleSkinColor; import client.inventory.Item; import client.inventory.MapleInventory; @@ -29,7 +29,7 @@ import config.YamlConfig; import net.server.Server; import server.MapleItemInformationProvider; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; /** * @@ -90,10 +90,10 @@ public abstract class CharacterFactory { if (!newchar.insertNewChar(recipe)) { return -2; } - c.announce(MaplePacketCreator.addNewCharEntry(newchar)); + c.announce(PacketCreator.addNewCharEntry(newchar)); Server.getInstance().createCharacterEntry(newchar); - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.sendYellowTip("[New Char]: " + c.getAccountName() + " has created a new character with IGN " + name)); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.sendYellowTip("[New Char]: " + c.getAccountName() + " has created a new character with IGN " + name)); FilePrinter.print(FilePrinter.CREATED_CHAR + c.getAccountName() + ".txt", c.getAccountName() + " created character with IGN " + name); return 0; diff --git a/src/main/java/client/inventory/Equip.java b/src/main/java/client/inventory/Equip.java index c2a821cddc..a2e234c6ad 100644 --- a/src/main/java/client/inventory/Equip.java +++ b/src/main/java/client/inventory/Equip.java @@ -26,7 +26,7 @@ import config.YamlConfig; import constants.game.ExpTable; import constants.inventory.ItemConstants; import server.MapleItemInformationProvider; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.Randomizer; @@ -532,8 +532,8 @@ public class Equip extends Item { showLevelupMessage(showStr, c); // thanks to Polaris dev team ! c.getPlayer().dropMessage(6, lvupStr); - c.announce(MaplePacketCreator.showEquipmentLevelUp()); - c.getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.showForeignEffect(c.getPlayer().getId(), 15)); + c.announce(PacketCreator.showEquipmentLevelUp()); + c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.showForeignEffect(c.getPlayer().getId(), 15)); c.getPlayer().forceUpdateItem(this); } diff --git a/src/main/java/client/inventory/MaplePet.java b/src/main/java/client/inventory/MaplePet.java index e2b3cb8594..3d0d6abbf1 100644 --- a/src/main/java/client/inventory/MaplePet.java +++ b/src/main/java/client/inventory/MaplePet.java @@ -29,7 +29,7 @@ import server.movement.AbsoluteLifeMovement; import server.movement.LifeMovement; import server.movement.LifeMovementFragment; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import java.awt.*; @@ -202,8 +202,8 @@ public class MaplePet extends Item { closeness = newCloseness; while(newCloseness >= ExpTable.getClosenessNeededForLevel(level)) { level += 1; - owner.getClient().announce(MaplePacketCreator.showOwnPetLevelUp(slot)); - owner.getMap().broadcastMessage(MaplePacketCreator.showPetLevelUp(owner, slot)); + owner.getClient().announce(PacketCreator.showOwnPetLevelUp(slot)); + owner.getMap().broadcastMessage(PacketCreator.showPetLevelUp(owner, slot)); } } @@ -220,7 +220,7 @@ public class MaplePet extends Item { enjoyed = false; } - owner.getMap().broadcastMessage(MaplePacketCreator.petFoodResponse(owner.getId(), slot, enjoyed, false)); + owner.getMap().broadcastMessage(PacketCreator.petFoodResponse(owner.getId(), slot, enjoyed, false)); saveToDb(); Item petz = owner.getInventory(MapleInventoryType.CASH).getItem(getPosition()); diff --git a/src/main/java/client/inventory/manipulator/MapleInventoryManipulator.java b/src/main/java/client/inventory/manipulator/MapleInventoryManipulator.java index 5c96e090ae..62fc2e4b16 100644 --- a/src/main/java/client/inventory/manipulator/MapleInventoryManipulator.java +++ b/src/main/java/client/inventory/manipulator/MapleInventoryManipulator.java @@ -31,7 +31,7 @@ import constants.inventory.ItemConstants; import server.MapleItemInformationProvider; import server.maps.MapleMap; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.awt.*; import java.util.ArrayList; @@ -92,7 +92,7 @@ public class MapleInventoryManipulator { quantity -= (newQ - oldQ); eItem.setQuantity(newQ); eItem.setExpiration(expiration); - c.announce(MaplePacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(1, eItem)))); + c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(1, eItem)))); } } else { break; @@ -109,17 +109,17 @@ public class MapleInventoryManipulator { nItem.setExpiration(expiration); short newSlot = inv.addItem(nItem); if (newSlot == -1) { - c.announce(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.announce(PacketCreator.getInventoryFull()); + c.announce(PacketCreator.getShowInventoryFull()); return false; } if (owner != null) { nItem.setOwner(owner); } - c.announce(MaplePacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); + c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); if(sandboxItem) chr.setHasSandboxItem(); } else { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } } @@ -129,11 +129,11 @@ public class MapleInventoryManipulator { nItem.setExpiration(expiration); short newSlot = inv.addItem(nItem); if (newSlot == -1) { - c.announce(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.announce(PacketCreator.getInventoryFull()); + c.announce(PacketCreator.getShowInventoryFull()); return false; } - c.announce(MaplePacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); + c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); if(MapleInventoryManipulator.isSandboxItem(nItem)) chr.setHasSandboxItem(); } } else if (quantity == 1) { @@ -145,11 +145,11 @@ public class MapleInventoryManipulator { } short newSlot = inv.addItem(nEquip); if (newSlot == -1) { - c.announce(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.announce(PacketCreator.getInventoryFull()); + c.announce(PacketCreator.getShowInventoryFull()); return false; } - c.announce(MaplePacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nEquip)))); + c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nEquip)))); if(MapleInventoryManipulator.isSandboxItem(nEquip)) chr.setHasSandboxItem(); } else { throw new RuntimeException("Trying to create equip with non-one quantity"); @@ -182,8 +182,8 @@ public class MapleInventoryManipulator { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); int itemid = item.getItemId(); if (ii.isPickupRestricted(itemid) && chr.haveItemWithId(itemid, true)) { - c.announce(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.showItemUnavailable()); + c.announce(PacketCreator.getInventoryFull()); + c.announce(PacketCreator.showItemUnavailable()); return false; } short quantity = item.getQuantity(); @@ -203,7 +203,7 @@ public class MapleInventoryManipulator { quantity -= (newQ - oldQ); eItem.setQuantity(newQ); item.setPosition(eItem.getPosition()); - c.announce(MaplePacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(1, eItem)))); + c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(1, eItem)))); } } else { break; @@ -219,14 +219,14 @@ public class MapleInventoryManipulator { nItem.setFlag(item.getFlag()); short newSlot = inv.addItem(nItem); if (newSlot == -1) { - c.announce(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.announce(PacketCreator.getInventoryFull()); + c.announce(PacketCreator.getShowInventoryFull()); item.setQuantity((short) (quantity + newQ)); return false; } nItem.setPosition(newSlot); item.setPosition(newSlot); - c.announce(MaplePacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); + c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); if (MapleInventoryManipulator.isSandboxItem(nItem)) chr.setHasSandboxItem(); } } else { @@ -236,34 +236,34 @@ public class MapleInventoryManipulator { short newSlot = inv.addItem(nItem); if (newSlot == -1) { - c.announce(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.announce(PacketCreator.getInventoryFull()); + c.announce(PacketCreator.getShowInventoryFull()); return false; } nItem.setPosition(newSlot); item.setPosition(newSlot); - c.announce(MaplePacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); + c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); if (MapleInventoryManipulator.isSandboxItem(nItem)) chr.setHasSandboxItem(); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } else if (quantity == 1) { short newSlot = inv.addItem(item); if (newSlot == -1) { - c.announce(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.announce(PacketCreator.getInventoryFull()); + c.announce(PacketCreator.getShowInventoryFull()); return false; } item.setPosition(newSlot); - c.announce(MaplePacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, item)))); + c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, item)))); if (MapleInventoryManipulator.isSandboxItem(item)) chr.setHasSandboxItem(); } else { FilePrinter.printError(FilePrinter.ITEM, "Tried to pickup Equip id " + itemid + " containing more than 1 quantity --> " + quantity); - c.announce(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.showItemUnavailable()); + c.announce(PacketCreator.getInventoryFull()); + c.announce(PacketCreator.showItemUnavailable()); return false; } if (show) { - c.announce(MaplePacketCreator.getShowItemGain(itemid, item.getQuantity())); + c.announce(PacketCreator.getShowItemGain(itemid, item.getQuantity())); } return true; } @@ -429,9 +429,9 @@ public class MapleInventoryManipulator { private static void announceModifyInventory(MapleClient c, Item item, boolean fromDrop, boolean allowZero) { if (item.getQuantity() == 0 && !allowZero) { - c.announce(MaplePacketCreator.modifyInventory(fromDrop, Collections.singletonList(new ModifyInventory(3, item)))); + c.announce(PacketCreator.modifyInventory(fromDrop, Collections.singletonList(new ModifyInventory(3, item)))); } else { - c.announce(MaplePacketCreator.modifyInventory(fromDrop, Collections.singletonList(new ModifyInventory(1, item)))); + c.announce(PacketCreator.modifyInventory(fromDrop, Collections.singletonList(new ModifyInventory(1, item)))); } } @@ -498,7 +498,7 @@ public class MapleInventoryManipulator { } else { mods.add(new ModifyInventory(2, source, src)); } - c.announce(MaplePacketCreator.modifyInventory(true, mods)); + c.announce(PacketCreator.modifyInventory(true, mods)); } public static void equip(MapleClient c, short src, short dst) { @@ -510,7 +510,7 @@ public class MapleInventoryManipulator { Equip source = (Equip) eqpInv.getItem(src); if (source == null || !ii.canWearEquipment(chr, source, dst)) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } else if ((((source.getItemId() >= 1902000 && source.getItemId() <= 1902002) || source.getItemId() == 1912000) && chr.isCygnus()) || ((source.getItemId() >= 1902005 && source.getItemId() <= 1902007) || source.getItemId() == 1912005) && !chr.isCygnus()) {// Adventurer taming equipment return; @@ -527,8 +527,8 @@ public class MapleInventoryManipulator { Item top = eqpdInv.getItem((short) -5); if (top != null && ItemConstants.isOverall(top.getItemId())) { if (eqpInv.isFull()) { - c.announce(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.announce(PacketCreator.getInventoryFull()); + c.announce(PacketCreator.getShowInventoryFull()); return; } unequip(c, (byte) -5, eqpInv.getNextFreeSlot()); @@ -537,8 +537,8 @@ public class MapleInventoryManipulator { final Item bottom = eqpdInv.getItem((short) -6); if (bottom != null && ItemConstants.isOverall(source.getItemId())) { if (eqpInv.isFull()) { - c.announce(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.announce(PacketCreator.getInventoryFull()); + c.announce(PacketCreator.getShowInventoryFull()); return; } unequip(c, (byte) -6, eqpInv.getNextFreeSlot()); @@ -547,8 +547,8 @@ public class MapleInventoryManipulator { Item weapon = eqpdInv.getItem((short) -11); if (weapon != null && ii.isTwoHanded(weapon.getItemId())) { if (eqpInv.isFull()) { - c.announce(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.announce(PacketCreator.getInventoryFull()); + c.announce(PacketCreator.getShowInventoryFull()); return; } unequip(c, (byte) -11, eqpInv.getNextFreeSlot()); @@ -557,8 +557,8 @@ public class MapleInventoryManipulator { Item shield = eqpdInv.getItem((short) -10); if (shield != null && ii.isTwoHanded(source.getItemId())) { if (eqpInv.isFull()) { - c.announce(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.announce(PacketCreator.getInventoryFull()); + c.announce(PacketCreator.getShowInventoryFull()); return; } unequip(c, (byte) -10, eqpInv.getNextFreeSlot()); @@ -614,7 +614,7 @@ public class MapleInventoryManipulator { } mods.add(new ModifyInventory(2, source, src)); - c.announce(MaplePacketCreator.modifyInventory(true, mods)); + c.announce(PacketCreator.modifyInventory(true, mods)); chr.equipChanged(); } @@ -632,7 +632,7 @@ public class MapleInventoryManipulator { return; } if (target != null && src <= 0) { - c.announce(MaplePacketCreator.getInventoryFull()); + c.announce(PacketCreator.getInventoryFull()); return; } @@ -656,7 +656,7 @@ public class MapleInventoryManipulator { target.setPosition(src); eqpdInv.addItemFromDB(target); } - c.announce(MaplePacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(2, source, src)))); + c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(2, source, src)))); chr.equipChanged(); } @@ -712,7 +712,7 @@ public class MapleInventoryManipulator { Item target = source.copy(); target.setQuantity(quantity); source.setQuantity((short) (source.getQuantity() - quantity)); - c.announce(MaplePacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(1, source)))); + c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(1, source)))); if (ItemConstants.isNewYearCardEtc(itemId)) { if(itemId == 4300000) { @@ -742,7 +742,7 @@ public class MapleInventoryManipulator { inv.removeSlot(src); } - c.announce(MaplePacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(3, source)))); + c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(3, source)))); if (src < 0) { chr.equipChanged(); } else if (ItemConstants.isNewYearCardEtc(itemId)) { @@ -766,7 +766,7 @@ public class MapleInventoryManipulator { if (itemId == chr.getItemEffect()) { if (quantityNow <= 0) { chr.setItemEffect(0); - map.broadcastMessage(MaplePacketCreator.itemEffect(chr.getId(), 0)); + map.broadcastMessage(PacketCreator.itemEffect(chr.getId(), 0)); } } else if (itemId == 5370000 || itemId == 5370001) { if (source.getQuantity() <= 0) { diff --git a/src/main/java/client/newyear/NewYearCardRecord.java b/src/main/java/client/newyear/NewYearCardRecord.java index 88a7c0212d..38b51e23ba 100644 --- a/src/main/java/client/newyear/NewYearCardRecord.java +++ b/src/main/java/client/newyear/NewYearCardRecord.java @@ -23,7 +23,7 @@ import client.MapleCharacter; import net.server.Server; import server.TimerManager; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.sql.Connection; import java.sql.PreparedStatement; @@ -257,7 +257,7 @@ public class NewYearCardRecord { MapleCharacter target = server.getWorld(world).getPlayerStorage().getCharacterById(receiverId); if(target != null && target.isLoggedinWorld()) { - target.announce(MaplePacketCreator.onNewYearCardRes(target, NewYearCardRecord.this, 0xC, 0)); + target.announce(PacketCreator.onNewYearCardRes(target, NewYearCardRecord.this, 0xC, 0)); } }, 1000 * 60 * 60); //1 Hour } @@ -308,12 +308,12 @@ public class NewYearCardRecord { chr.removeNewYearRecord(nyc); deleteNewYearCard(nyc.id); - chr.getMap().broadcastMessage(MaplePacketCreator.onNewYearCardRes(chr, nyc, 0xE, 0)); + chr.getMap().broadcastMessage(PacketCreator.onNewYearCardRes(chr, nyc, 0xE, 0)); MapleCharacter other = chr.getClient().getWorldServer().getPlayerStorage().getCharacterById(nyc.getReceiverId()); if(other != null && other.isLoggedinWorld()) { other.removeNewYearRecord(nyc); - other.getMap().broadcastMessage(MaplePacketCreator.onNewYearCardRes(other, nyc, 0xE, 0)); + other.getMap().broadcastMessage(PacketCreator.onNewYearCardRes(other, nyc, 0xE, 0)); other.dropMessage(6, "[New Year] " + chr.getName() + " threw away the New Year card."); } @@ -326,12 +326,12 @@ public class NewYearCardRecord { chr.removeNewYearRecord(nyc); deleteNewYearCard(nyc.id); - chr.getMap().broadcastMessage(MaplePacketCreator.onNewYearCardRes(chr, nyc, 0xE, 0)); + chr.getMap().broadcastMessage(PacketCreator.onNewYearCardRes(chr, nyc, 0xE, 0)); MapleCharacter other = chr.getClient().getWorldServer().getPlayerStorage().getCharacterById(nyc.getSenderId()); if(other != null && other.isLoggedinWorld()) { other.removeNewYearRecord(nyc); - other.getMap().broadcastMessage(MaplePacketCreator.onNewYearCardRes(other, nyc, 0xE, 0)); + other.getMap().broadcastMessage(PacketCreator.onNewYearCardRes(other, nyc, 0xE, 0)); other.dropMessage(6, "[New Year] " + chr.getName() + " threw away the New Year card."); } diff --git a/src/main/java/client/processor/action/BuybackProcessor.java b/src/main/java/client/processor/action/BuybackProcessor.java index 4fd5a6e628..80439c143d 100644 --- a/src/main/java/client/processor/action/BuybackProcessor.java +++ b/src/main/java/client/processor/action/BuybackProcessor.java @@ -19,10 +19,10 @@ */ package client.processor.action; // thanks Alex for pointing out some package structures containing broad modules -import client.MapleClient; import client.MapleCharacter; +import client.MapleClient; import server.maps.MapleMap; -import tools.MaplePacketCreator; +import tools.PacketCreator; /** * @@ -74,11 +74,11 @@ public class BuybackProcessor { chr.broadcastStance(chr.isFacingLeft() ? 5 : 4); MapleMap map = chr.getMap(); - map.broadcastMessage(MaplePacketCreator.playSound("Buyback/" + jobString)); - map.broadcastMessage(MaplePacketCreator.earnTitleMessage(chr.getName() + " just bought back into the game!")); + map.broadcastMessage(PacketCreator.playSound("Buyback/" + jobString)); + map.broadcastMessage(PacketCreator.earnTitleMessage(chr.getName() + " just bought back into the game!")); - chr.announce(MaplePacketCreator.showBuybackEffect()); - map.broadcastMessage(chr, MaplePacketCreator.showForeignBuybackEffect(chr.getId()), false); + chr.announce(PacketCreator.showBuybackEffect()); + map.broadcastMessage(chr, PacketCreator.showForeignBuybackEffect(chr.getId()), false); } } } diff --git a/src/main/java/client/processor/action/MakerProcessor.java b/src/main/java/client/processor/action/MakerProcessor.java index e2634abce6..b8df84f107 100644 --- a/src/main/java/client/processor/action/MakerProcessor.java +++ b/src/main/java/client/processor/action/MakerProcessor.java @@ -19,27 +19,28 @@ */ package client.processor.action; -import client.MapleClient; import client.MapleCharacter; +import client.MapleClient; import client.inventory.Equip; import client.inventory.Item; import client.inventory.MapleInventoryType; import client.inventory.manipulator.MapleInventoryManipulator; import config.YamlConfig; -import constants.inventory.ItemConstants; import constants.game.GameConstants; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import constants.inventory.ItemConstants; import server.MakerItemFactory; import server.MakerItemFactory.MakerItemCreateEntry; import server.MapleItemInformationProvider; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + /** * * @author Ronan @@ -64,8 +65,8 @@ public class MakerProcessor { int fromLeftover = toCreate; toCreate = ii.getMakerCrystalFromLeftover(toCreate); if(toCreate == -1) { - c.announce(MaplePacketCreator.serverNotice(1, ii.getName(fromLeftover) + " is unavailable for Monster Crystal conversion.")); - c.announce(MaplePacketCreator.makerEnableActions()); + c.announce(PacketCreator.serverNotice(1, ii.getName(fromLeftover) + " is unavailable for Monster Crystal conversion.")); + c.announce(PacketCreator.makerEnableActions()); return; } @@ -82,13 +83,13 @@ public class MakerProcessor { if(p != null) { recipe = MakerItemFactory.generateDisassemblyCrystalEntry(toDisassemble, p.getLeft(), p.getRight()); } else { - c.announce(MaplePacketCreator.serverNotice(1, ii.getName(toCreate) + " is unavailable for Monster Crystal disassembly.")); - c.announce(MaplePacketCreator.makerEnableActions()); + c.announce(PacketCreator.serverNotice(1, ii.getName(toCreate) + " is unavailable for Monster Crystal disassembly.")); + c.announce(PacketCreator.makerEnableActions()); return; } } else { - c.announce(MaplePacketCreator.serverNotice(1, "An unknown error occurred when trying to apply that item for disassembly.")); - c.announce(MaplePacketCreator.makerEnableActions()); + c.announce(PacketCreator.serverNotice(1, "An unknown error occurred when trying to apply that item for disassembly.")); + c.announce(PacketCreator.makerEnableActions()); return; } } else { @@ -135,8 +136,8 @@ public class MakerProcessor { if(!reagentids.isEmpty()) { if(!removeOddMakerReagents(toCreate, reagentids)) { - c.announce(MaplePacketCreator.serverNotice(1, "You can only use WATK and MATK Strengthening Gems on weapon items.")); - c.announce(MaplePacketCreator.makerEnableActions()); + c.announce(PacketCreator.serverNotice(1, "You can only use WATK and MATK Strengthening Gems on weapon items.")); + c.announce(PacketCreator.makerEnableActions()); return; } } @@ -150,33 +151,33 @@ public class MakerProcessor { switch(createStatus) { case -1:// non-available for Maker itemid has been tried to forge FilePrinter.printError(FilePrinter.EXPLOITS, "Player " + c.getPlayer().getName() + " tried to craft itemid " + toCreate + " using the Maker skill."); - c.announce(MaplePacketCreator.serverNotice(1, "The requested item could not be crafted on this operation.")); - c.announce(MaplePacketCreator.makerEnableActions()); + c.announce(PacketCreator.serverNotice(1, "The requested item could not be crafted on this operation.")); + c.announce(PacketCreator.makerEnableActions()); break; case 1: // no items - c.announce(MaplePacketCreator.serverNotice(1, "You don't have all required items in your inventory to make " + ii.getName(toCreate) + ".")); - c.announce(MaplePacketCreator.makerEnableActions()); + c.announce(PacketCreator.serverNotice(1, "You don't have all required items in your inventory to make " + ii.getName(toCreate) + ".")); + c.announce(PacketCreator.makerEnableActions()); break; case 2: // no meso - c.announce(MaplePacketCreator.serverNotice(1, "You don't have enough mesos (" + GameConstants.numberWithCommas(recipe.getCost()) + ") to complete this operation.")); - c.announce(MaplePacketCreator.makerEnableActions()); + c.announce(PacketCreator.serverNotice(1, "You don't have enough mesos (" + GameConstants.numberWithCommas(recipe.getCost()) + ") to complete this operation.")); + c.announce(PacketCreator.makerEnableActions()); break; case 3: // no req level - c.announce(MaplePacketCreator.serverNotice(1, "You don't have enough level to complete this operation.")); - c.announce(MaplePacketCreator.makerEnableActions()); + c.announce(PacketCreator.serverNotice(1, "You don't have enough level to complete this operation.")); + c.announce(PacketCreator.makerEnableActions()); break; case 4: // no req skill level - c.announce(MaplePacketCreator.serverNotice(1, "You don't have enough Maker level to complete this operation.")); - c.announce(MaplePacketCreator.makerEnableActions()); + c.announce(PacketCreator.serverNotice(1, "You don't have enough Maker level to complete this operation.")); + c.announce(PacketCreator.makerEnableActions()); break; case 5: // inventory full - c.announce(MaplePacketCreator.serverNotice(1, "Your inventory is full.")); - c.announce(MaplePacketCreator.makerEnableActions()); + c.announce(PacketCreator.serverNotice(1, "Your inventory is full.")); + c.announce(PacketCreator.makerEnableActions()); break; default: @@ -213,15 +214,15 @@ public class MakerProcessor { // thanks inhyuk for noticing missing MAKER_RESULT packets if (type == 3) { - c.announce(MaplePacketCreator.makerResultCrystal(recipe.getGainItems().get(0).getLeft(), recipe.getReqItems().get(0).getLeft())); + c.announce(PacketCreator.makerResultCrystal(recipe.getGainItems().get(0).getLeft(), recipe.getReqItems().get(0).getLeft())); } else if (type == 4) { - c.announce(MaplePacketCreator.makerResultDesynth(recipe.getReqItems().get(0).getLeft(), recipe.getCost(), recipe.getGainItems())); + c.announce(PacketCreator.makerResultDesynth(recipe.getReqItems().get(0).getLeft(), recipe.getCost(), recipe.getGainItems())); } else { - c.announce(MaplePacketCreator.makerResult(makerSucceeded, recipe.getGainItems().get(0).getLeft(), recipe.getGainItems().get(0).getRight(), recipe.getCost(), recipe.getReqItems(), stimulantid, new LinkedList<>(reagentids.keySet()))); + c.announce(PacketCreator.makerResult(makerSucceeded, recipe.getGainItems().get(0).getLeft(), recipe.getGainItems().get(0).getRight(), recipe.getCost(), recipe.getReqItems(), stimulantid, new LinkedList<>(reagentids.keySet()))); } - c.announce(MaplePacketCreator.showMakerEffect(makerSucceeded)); - c.getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.showForeignMakerEffect(c.getPlayer().getId(), makerSucceeded), false); + c.announce(PacketCreator.showMakerEffect(makerSucceeded)); + c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.showForeignMakerEffect(c.getPlayer().getId(), makerSucceeded), false); if(toCreate == 4260003 && type == 3 && c.getPlayer().getQuestStatus(6033) == 1) { c.getAbstractPlayerInteraction().setQuestProgress(6033, 1); diff --git a/src/main/java/client/processor/action/PetAutopotProcessor.java b/src/main/java/client/processor/action/PetAutopotProcessor.java index 0bb2c79c30..d7c69eb52a 100644 --- a/src/main/java/client/processor/action/PetAutopotProcessor.java +++ b/src/main/java/client/processor/action/PetAutopotProcessor.java @@ -28,10 +28,11 @@ import client.inventory.MapleInventory; import client.inventory.MapleInventoryType; import client.inventory.manipulator.MapleInventoryManipulator; import config.YamlConfig; -import java.util.List; import server.MapleItemInformationProvider; import server.MapleStatEffect; -import tools.MaplePacketCreator; +import tools.PacketCreator; + +import java.util.List; /** * @@ -82,7 +83,7 @@ public class PetAutopotProcessor { MapleClient c = this.c; MapleCharacter chr = c.getPlayer(); if (!chr.isAlive()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -101,7 +102,7 @@ public class PetAutopotProcessor { toUse = useInv.getItem(slot); if (toUse != null) { if (toUse.getItemId() != itemId) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -110,7 +111,7 @@ public class PetAutopotProcessor { // from now on, toUse becomes the "cursor" for the current pot being used if (toUse.getQuantity() <= 0) { if (!cursorOnNextAvailablePot(chr)) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } } @@ -178,7 +179,7 @@ public class PetAutopotProcessor { } } - chr.announce(MaplePacketCreator.enableActions()); + chr.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/client/processor/action/SpawnPetProcessor.java b/src/main/java/client/processor/action/SpawnPetProcessor.java index 9929e24224..b82a21c3f9 100644 --- a/src/main/java/client/processor/action/SpawnPetProcessor.java +++ b/src/main/java/client/processor/action/SpawnPetProcessor.java @@ -29,7 +29,7 @@ import provider.MapleDataProvider; import provider.MapleDataProviderFactory; import provider.MapleDataTool; import provider.wz.WZFiles; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.awt.*; @@ -52,7 +52,7 @@ public class SpawnPetProcessor { { if (chr.haveItem(petid + 1)) { chr.dropMessage(5, "You can't hatch your " + (petid == 5000028 ? "Dragon egg" : "Robo egg") + " if you already have a Baby " + (petid == 5000028 ? "Dragon." : "Robo.")); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } else { int evolveid = MapleDataTool.getInt("info/evol1", dataRoot.getData("Pet/" + petid + ".img")); @@ -64,7 +64,7 @@ public class SpawnPetProcessor { MapleInventoryManipulator.removeById(c, MapleInventoryType.CASH, petid, (short) 1, false, false); MapleInventoryManipulator.addById(c, evolveid, (short) 1, null, petId, expiration); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } } @@ -85,9 +85,9 @@ public class SpawnPetProcessor { pet.setSummoned(true); pet.saveToDb(); chr.addPet(pet); - chr.getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.showPet(c.getPlayer(), pet, false, false), true); - c.announce(MaplePacketCreator.petStatUpdate(c.getPlayer())); - c.announce(MaplePacketCreator.enableActions()); + chr.getMap().broadcastMessage(c.getPlayer(), PacketCreator.showPet(c.getPlayer(), pet, false, false), true); + c.announce(PacketCreator.petStatUpdate(c.getPlayer())); + c.announce(PacketCreator.enableActions()); chr.commitExcludedItems(); chr.getClient().getWorldServer().registerPetHunger(chr, chr.getPetIndex(pet)); diff --git a/src/main/java/client/processor/npc/DueyProcessor.java b/src/main/java/client/processor/npc/DueyProcessor.java index 3d984bae8a..c0289a9c9e 100644 --- a/src/main/java/client/processor/npc/DueyProcessor.java +++ b/src/main/java/client/processor/npc/DueyProcessor.java @@ -40,7 +40,7 @@ import server.MapleItemInformationProvider; import server.MapleTrade; import tools.DatabaseConnection; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import java.sql.*; @@ -117,7 +117,7 @@ public class DueyProcessor { ps2.setInt(1, player.getId()); ps2.executeUpdate(); - c.announce(MaplePacketCreator.sendDueyParcelReceived(rs.getString("SenderName"), rs.getInt("Type") == 1)); + c.announce(PacketCreator.sendDueyParcelReceived(rs.getString("SenderName"), rs.getInt("Type") == 1)); } } } @@ -305,21 +305,21 @@ public class DueyProcessor { int recipientAccId = accIdCid.getLeft(); if (recipientAccId != -1) { if (recipientAccId == c.getAccID()) { - c.announce(MaplePacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_SAMEACC_ERROR.getCode())); + c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_SAMEACC_ERROR.getCode())); return; } } else { - c.announce(MaplePacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_NAME_DOES_NOT_EXIST.getCode())); + c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_NAME_DOES_NOT_EXIST.getCode())); return; } } else { - c.announce(MaplePacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_NOT_ENOUGH_MESOS.getCode())); + c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_NOT_ENOUGH_MESOS.getCode())); return; } int recipientCid = accIdCid.getRight(); if (recipientCid == -1) { - c.announce(MaplePacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_NAME_DOES_NOT_EXIST.getCode())); + c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_NAME_DOES_NOT_EXIST.getCode())); return; } @@ -329,18 +329,18 @@ public class DueyProcessor { int packageId = createPackage(sendMesos, sendMessage, c.getPlayer().getName(), recipientCid, quick); if (packageId == -1) { - c.announce(MaplePacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_ENABLE_ACTIONS.getCode())); + c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_ENABLE_ACTIONS.getCode())); return; } c.getPlayer().gainMeso((int) -finalcost, false); int res = addPackageItemFromInventory(packageId, c, invTypeId, itemPos, amount); if (res == 0) { - c.announce(MaplePacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_SUCCESSFULLY_SENT.getCode())); + c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_SUCCESSFULLY_SENT.getCode())); } else if (res > 0) { - c.announce(MaplePacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_ENABLE_ACTIONS.getCode())); + c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_ENABLE_ACTIONS.getCode())); } else { - c.announce(MaplePacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_INCORRECT_REQUEST.getCode())); + c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_INCORRECT_REQUEST.getCode())); } MapleClient rClient = null; @@ -368,7 +368,7 @@ public class DueyProcessor { if (c.tryacquireClient()) { try { removePackageFromDB(packageid); - c.announce(MaplePacketCreator.removeItemFromDuey(playerRemove, packageid)); + c.announce(PacketCreator.removeItemFromDuey(playerRemove, packageid)); } finally { c.releaseClient(); } @@ -392,29 +392,29 @@ public class DueyProcessor { } if (dp == null) { - c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); + c.announce(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to receive package from duey with id " + packageId); return; } if (dp.isDeliveringTime()) { - c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); + c.announce(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); return; } Item dpItem = dp.getItem(); if (dpItem != null) { if (!c.getPlayer().canHoldMeso(dp.getMesos())) { - c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); + c.announce(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); return; } if (!MapleInventoryManipulator.checkSpace(c, dpItem.getItemId(), dpItem.getQuantity(), dpItem.getOwner())) { int itemid = dpItem.getItemId(); if (MapleItemInformationProvider.getInstance().isPickupRestricted(itemid) && c.getPlayer().getInventory(ItemConstants.getInventoryType(itemid)).findById(itemid) != null) { - c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_RECEIVER_WITH_UNIQUE.getCode())); + c.announce(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_RECEIVER_WITH_UNIQUE.getCode())); } else { - c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_NO_FREE_SLOTS.getCode())); + c.announce(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_NO_FREE_SLOTS.getCode())); } return; @@ -440,15 +440,15 @@ public class DueyProcessor { try { long timeNow = System.currentTimeMillis(); if (timeNow - c.getPlayer().getNpcCooldown() < YamlConfig.config.server.BLOCK_NPC_RACE_CONDT) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } c.getPlayer().setNpcCooldown(timeNow); if (quickDelivery) { - c.announce(MaplePacketCreator.sendDuey(0x1A, null)); + c.announce(PacketCreator.sendDuey(0x1A, null)); } else { - c.announce(MaplePacketCreator.sendDuey(0x8, loadPackages(c.getPlayer()))); + c.announce(PacketCreator.sendDuey(0x8, loadPackages(c.getPlayer()))); } } finally { c.releaseClient(); diff --git a/src/main/java/client/processor/npc/FredrickProcessor.java b/src/main/java/client/processor/npc/FredrickProcessor.java index 3b8f0dfa2c..43bd649a7b 100644 --- a/src/main/java/client/processor/npc/FredrickProcessor.java +++ b/src/main/java/client/processor/npc/FredrickProcessor.java @@ -36,7 +36,7 @@ import server.MapleItemInformationProvider; import server.maps.MapleHiredMerchant; import tools.DatabaseConnection; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import java.sql.*; @@ -275,7 +275,7 @@ public class FredrickProcessor { byte response = canRetrieveFromFredrick(chr, items); if (response != 0) { - chr.announce(MaplePacketCreator.fredrickMessage(response)); + chr.announce(PacketCreator.fredrickMessage(response)); return; } @@ -294,7 +294,7 @@ public class FredrickProcessor { FilePrinter.print(FilePrinter.FREDRICK + chr.getName() + ".txt", chr.getName() + " gained " + item.getQuantity() + " " + itemName + " (" + item.getItemId() + ")"); } - chr.announce(MaplePacketCreator.fredrickMessage((byte) 0x1E)); + chr.announce(PacketCreator.fredrickMessage((byte) 0x1E)); removeFredrickLog(chr.getId()); } else { chr.message("An unknown error has occured."); diff --git a/src/main/java/client/processor/npc/StorageProcessor.java b/src/main/java/client/processor/npc/StorageProcessor.java index 8251c9791c..55ea3433b2 100644 --- a/src/main/java/client/processor/npc/StorageProcessor.java +++ b/src/main/java/client/processor/npc/StorageProcessor.java @@ -21,20 +21,20 @@ */ package client.processor.npc; -import client.MapleClient; import client.MapleCharacter; +import client.MapleClient; import client.autoban.AutobanFactory; import client.inventory.Item; import client.inventory.MapleInventory; import client.inventory.MapleInventoryType; +import client.inventory.manipulator.MapleInventoryManipulator; import client.inventory.manipulator.MapleKarmaManipulator; import config.YamlConfig; import constants.inventory.ItemConstants; -import client.inventory.manipulator.MapleInventoryManipulator; import server.MapleItemInformationProvider; import server.MapleStorage; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -52,7 +52,7 @@ public class StorageProcessor { if (chr.getLevel() < 15){ chr.dropMessage(1, "You may only use the storage once you have reached level 15."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -71,13 +71,13 @@ public class StorageProcessor { Item item = storage.getItem(slot); if (item != null) { if (ii.isPickupRestricted(item.getItemId()) && chr.haveItemWithId(item.getItemId(), true)) { - c.announce(MaplePacketCreator.getStorageError((byte) 0x0C)); + c.announce(PacketCreator.getStorageError((byte) 0x0C)); return; } int takeoutFee = storage.getTakeOutFee(); if (chr.getMeso() < takeoutFee) { - c.announce(MaplePacketCreator.getStorageError((byte) 0x0B)); + c.announce(PacketCreator.getStorageError((byte) 0x0B)); return; } else { chr.gainMeso(-takeoutFee, false); @@ -95,11 +95,11 @@ public class StorageProcessor { storage.sendTakenOut(c, item.getInventoryType()); } else { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } } else { - c.announce(MaplePacketCreator.getStorageError((byte) 0x0A)); + c.announce(PacketCreator.getStorageError((byte) 0x0A)); } } } else if (mode == 5) { // store @@ -115,17 +115,17 @@ public class StorageProcessor { return; } if (quantity < 1) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (storage.isFull()) { - c.announce(MaplePacketCreator.getStorageError((byte) 0x11)); + c.announce(PacketCreator.getStorageError((byte) 0x11)); return; } int storeFee = storage.getStoreFee(); if (chr.getMeso() < storeFee) { - c.announce(MaplePacketCreator.getStorageError((byte) 0x0B)); + c.announce(PacketCreator.getStorageError((byte) 0x0B)); } else { Item item; @@ -134,7 +134,7 @@ public class StorageProcessor { item = inv.getItem(slot); if (item != null && item.getItemId() == itemId && (item.getQuantity() >= quantity || ItemConstants.isRechargeable(itemId))) { if (ItemConstants.isWeddingRing(itemId) || ItemConstants.isWeddingToken(itemId)) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -144,7 +144,7 @@ public class StorageProcessor { MapleInventoryManipulator.removeFromSlot(c, invType, slot, quantity, false); } else { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -168,7 +168,7 @@ public class StorageProcessor { } } else if (mode == 6) { // arrange items if(YamlConfig.config.server.USE_STORAGE_ITEM_SORT) storage.arrangeItems(c); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } else if (mode == 7) { // meso int meso = slea.readInt(); int storageMesos = storage.getMeso(); @@ -177,13 +177,13 @@ public class StorageProcessor { if (meso < 0 && (storageMesos - meso) < 0) { meso = Integer.MIN_VALUE + storageMesos; if (meso < playerMesos) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } } else if (meso > 0 && (playerMesos + meso) < 0) { meso = Integer.MAX_VALUE - playerMesos; if (meso > storageMesos) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } } @@ -193,7 +193,7 @@ public class StorageProcessor { FilePrinter.print(FilePrinter.STORAGE + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + (meso > 0 ? " took out " : " stored ") + Math.abs(meso) + " mesos"); storage.sendMeso(c); } else { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } } else if (mode == 8) {// close... unless the player decides to enter cash shop! diff --git a/src/main/java/client/processor/stat/AssignAPProcessor.java b/src/main/java/client/processor/stat/AssignAPProcessor.java index 032143883e..dcc9a77057 100644 --- a/src/main/java/client/processor/stat/AssignAPProcessor.java +++ b/src/main/java/client/processor/stat/AssignAPProcessor.java @@ -30,7 +30,7 @@ import client.inventory.Item; import client.inventory.MapleInventoryType; import config.YamlConfig; import constants.skills.*; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; import tools.data.input.SeekableLittleEndianAccessor; @@ -329,11 +329,11 @@ public class AssignAPProcessor { } chr.assignStrDexIntLuk(statGain[0], statGain[1], statGain[3], statGain[2]); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); //---------------------------------------------------------------------------------------- - c.announce(MaplePacketCreator.serverNotice(1, "Better AP applications detected:\r\nSTR: +" + statGain[0] + "\r\nDEX: +" + statGain[1] + "\r\nINT: +" + statGain[3] + "\r\nLUK: +" + statGain[2])); + c.announce(PacketCreator.serverNotice(1, "Better AP applications detected:\r\nSTR: +" + statGain[0] + "\r\nDEX: +" + statGain[1] + "\r\nINT: +" + statGain[3] + "\r\nLUK: +" + statGain[2])); } else { if(slea.available() < 16) { AutobanFactory.PACKET_EDIT.alert(chr, "Didn't send full packet for Auto Assign."); @@ -353,7 +353,7 @@ public class AssignAPProcessor { } chr.assignStrDexIntLuk(statGain[0], statGain[1], statGain[3], statGain[2]); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } finally { c.unlockClient(); @@ -426,48 +426,48 @@ public class AssignAPProcessor { case 64: // str if (player.getStr() < 5) { player.message("You don't have the minimum STR required to swap."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } if (!player.assignStr(-1)) { player.message("Couldn't execute AP reset operation."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } break; case 128: // dex if (player.getDex() < 5) { player.message("You don't have the minimum DEX required to swap."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } if (!player.assignDex(-1)) { player.message("Couldn't execute AP reset operation."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } break; case 256: // int if (player.getInt() < 5) { player.message("You don't have the minimum INT required to swap."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } if (!player.assignInt(-1)) { player.message("Couldn't execute AP reset operation."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } break; case 512: // luk if (player.getLuk() < 5) { player.message("You don't have the minimum LUK required to swap."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } if (!player.assignLuk(-1)) { player.message("Couldn't execute AP reset operation."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } break; @@ -475,14 +475,14 @@ public class AssignAPProcessor { if(YamlConfig.config.server.USE_ENFORCE_HPMP_SWAP) { if (APTo != 8192) { player.message("You can only swap HP ability points to MP."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } } if (player.getHpMpApUsed() < 1) { player.message("You don't have enough HPMP stat points to spend on AP Reset."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } @@ -490,7 +490,7 @@ public class AssignAPProcessor { int level_ = player.getLevel(); if (hp < level_ * 14 + 148) { player.message("You don't have the minimum HP pool required to swap."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } @@ -506,14 +506,14 @@ public class AssignAPProcessor { if(YamlConfig.config.server.USE_ENFORCE_HPMP_SWAP) { if (APTo != 2048) { player.message("You can only swap MP ability points to HP."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } } if (player.getHpMpApUsed() < 1) { player.message("You don't have enough HPMP stat points to spend on AP Reset."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } @@ -534,7 +534,7 @@ public class AssignAPProcessor { if (!canWash) { player.message("You don't have the minimum MP pool required to swap."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } @@ -546,7 +546,7 @@ public class AssignAPProcessor { } break; default: - c.announce(MaplePacketCreator.updatePlayerStats(MaplePacketCreator.EMPTY_STATUPDATE, true, player)); + c.announce(PacketCreator.updatePlayerStats(PacketCreator.EMPTY_STATUPDATE, true, player)); return false; } @@ -571,47 +571,47 @@ public class AssignAPProcessor { case 64: if (!chr.assignStr(1)) { chr.message("Couldn't execute AP assign operation."); - chr.announce(MaplePacketCreator.enableActions()); + chr.announce(PacketCreator.enableActions()); return false; } break; case 128: // Dex if (!chr.assignDex(1)) { chr.message("Couldn't execute AP assign operation."); - chr.announce(MaplePacketCreator.enableActions()); + chr.announce(PacketCreator.enableActions()); return false; } break; case 256: // Int if (!chr.assignInt(1)) { chr.message("Couldn't execute AP assign operation."); - chr.announce(MaplePacketCreator.enableActions()); + chr.announce(PacketCreator.enableActions()); return false; } break; case 512: // Luk if (!chr.assignLuk(1)) { chr.message("Couldn't execute AP assign operation."); - chr.announce(MaplePacketCreator.enableActions()); + chr.announce(PacketCreator.enableActions()); return false; } break; case 2048: if (!chr.assignHP(calcHpChange(chr, usedAPReset), 1)) { chr.message("Couldn't execute AP assign operation."); - chr.announce(MaplePacketCreator.enableActions()); + chr.announce(PacketCreator.enableActions()); return false; } break; case 8192: if (!chr.assignMP(calcMpChange(chr, usedAPReset), 1)) { chr.message("Couldn't execute AP assign operation."); - chr.announce(MaplePacketCreator.enableActions()); + chr.announce(PacketCreator.enableActions()); return false; } break; default: - chr.announce(MaplePacketCreator.updatePlayerStats(MaplePacketCreator.EMPTY_STATUPDATE, true, chr)); + chr.announce(PacketCreator.updatePlayerStats(PacketCreator.EMPTY_STATUPDATE, true, chr)); return false; } return true; diff --git a/src/main/java/client/processor/stat/AssignSPProcessor.java b/src/main/java/client/processor/stat/AssignSPProcessor.java index f6f18cfaa6..349b5ef244 100644 --- a/src/main/java/client/processor/stat/AssignSPProcessor.java +++ b/src/main/java/client/processor/stat/AssignSPProcessor.java @@ -31,7 +31,7 @@ import client.autoban.AutobanFactory; import constants.game.GameConstants; import constants.skills.Aran; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; /** * @@ -41,7 +41,7 @@ public class AssignSPProcessor { public static boolean canSPAssign(MapleClient c, int skillid) { if (skillid == Aran.HIDDEN_FULL_DOUBLE || skillid == Aran.HIDDEN_FULL_TRIPLE || skillid == Aran.HIDDEN_OVER_DOUBLE || skillid == Aran.HIDDEN_OVER_TRIPLE) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } @@ -82,7 +82,7 @@ public class AssignSPProcessor { if (!isBeginnerSkill) { player.gainSp(-1, GameConstants.getSkillBook(skillid/10000), false); } else { - player.announce(MaplePacketCreator.enableActions()); + player.announce(PacketCreator.enableActions()); } if (skill.getId() == Aran.FULL_SWING) { player.changeSkillLevel(skill, (byte) (curLevel + 1), player.getMasterLevel(skill), player.getSkillExpiration(skill)); diff --git a/src/main/java/net/netty/ServerChannelInitializer.java b/src/main/java/net/netty/ServerChannelInitializer.java index 9e520f593d..e18f78e754 100644 --- a/src/main/java/net/netty/ServerChannelInitializer.java +++ b/src/main/java/net/netty/ServerChannelInitializer.java @@ -18,7 +18,7 @@ import net.packet.logging.OutPacketLogger; import net.server.coordinator.session.IpAddresses; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.net.InetSocketAddress; import java.util.concurrent.atomic.AtomicLong; @@ -54,7 +54,7 @@ public abstract class ServerChannelInitializer extends ChannelInitializer 0) { // be sure to only use LIMITED ATTACKS with animation time here TimerManager.getInstance().schedule(() -> { - map.broadcastMessage(MaplePacketCreator.damageMonster(monster.getObjectId(), damage), monster.getPosition()); + map.broadcastMessage(PacketCreator.damageMonster(monster.getObjectId(), damage), monster.getPosition()); map.damageMonster(attacker, monster, damage); }, animationTime); } else { - map.broadcastMessage(MaplePacketCreator.damageMonster(monster.getObjectId(), damage), monster.getPosition()); + map.broadcastMessage(PacketCreator.damageMonster(monster.getObjectId(), damage), monster.getPosition()); map.damageMonster(attacker, monster, damage); } } diff --git a/src/main/java/net/server/channel/handlers/AcceptFamilyHandler.java b/src/main/java/net/server/channel/handlers/AcceptFamilyHandler.java index a0babdf6bd..625d509966 100644 --- a/src/main/java/net/server/channel/handlers/AcceptFamilyHandler.java +++ b/src/main/java/net/server/channel/handlers/AcceptFamilyHandler.java @@ -21,16 +21,11 @@ */ package net.server.channel.handlers; -import config.YamlConfig; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; - import client.MapleCharacter; import client.MapleClient; import client.MapleFamily; import client.MapleFamilyEntry; +import config.YamlConfig; import net.AbstractMaplePacketHandler; import net.server.coordinator.world.MapleInviteCoordinator; import net.server.coordinator.world.MapleInviteCoordinator.InviteResult; @@ -38,9 +33,13 @@ import net.server.coordinator.world.MapleInviteCoordinator.InviteType; import net.server.coordinator.world.MapleInviteCoordinator.MapleInviteResult; import tools.DatabaseConnection; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + /** * * @author Jay Estrella @@ -68,7 +67,7 @@ public final class AcceptFamilyHandler extends AbstractMaplePacketHandler { MapleFamilyEntry newEntry = new MapleFamilyEntry(inviter.getFamily(), chr.getId(), chr.getName(), chr.getLevel(), chr.getJob()); newEntry.setCharacter(chr); if(!newEntry.setSenior(inviter.getFamilyEntry(), true)) { - inviter.announce(MaplePacketCreator.sendFamilyMessage(1, 0)); + inviter.announce(PacketCreator.sendFamilyMessage(1, 0)); return; } else { // save @@ -82,15 +81,15 @@ public final class AcceptFamilyHandler extends AbstractMaplePacketHandler { if(inviter.getFamily().getTotalGenerations() + targetFamily.getTotalGenerations() <= YamlConfig.config.server.FAMILY_MAX_GENERATIONS) { targetEntry.join(inviter.getFamilyEntry()); } else { - inviter.announce(MaplePacketCreator.sendFamilyMessage(76, 0)); - chr.announce(MaplePacketCreator.sendFamilyMessage(76, 0)); + inviter.announce(PacketCreator.sendFamilyMessage(76, 0)); + chr.announce(PacketCreator.sendFamilyMessage(76, 0)); return; } } } else { // create new family if(chr.getFamily() != null && inviter.getFamily() != null && chr.getFamily().getTotalGenerations() + inviter.getFamily().getTotalGenerations() >= YamlConfig.config.server.FAMILY_MAX_GENERATIONS) { - inviter.announce(MaplePacketCreator.sendFamilyMessage(76, 0)); - chr.announce(MaplePacketCreator.sendFamilyMessage(76, 0)); + inviter.announce(PacketCreator.sendFamilyMessage(76, 0)); + chr.announce(PacketCreator.sendFamilyMessage(76, 0)); return; } MapleFamily newFamily = new MapleFamily(-1, c.getWorld()); @@ -113,15 +112,15 @@ public final class AcceptFamilyHandler extends AbstractMaplePacketHandler { chr.getFamilyEntry().join(inviterEntry); } } - c.getPlayer().getFamily().broadcast(MaplePacketCreator.sendFamilyJoinResponse(true, c.getPlayer().getName()), c.getPlayer().getId()); - c.announce(MaplePacketCreator.getSeniorMessage(inviter.getName())); - c.announce(MaplePacketCreator.getFamilyInfo(chr.getFamilyEntry())); + c.getPlayer().getFamily().broadcast(PacketCreator.sendFamilyJoinResponse(true, c.getPlayer().getName()), c.getPlayer().getId()); + c.announce(PacketCreator.getSeniorMessage(inviter.getName())); + c.announce(PacketCreator.getFamilyInfo(chr.getFamilyEntry())); chr.getFamilyEntry().updateSeniorFamilyInfo(true); } else { - inviter.announce(MaplePacketCreator.sendFamilyJoinResponse(false, c.getPlayer().getName())); + inviter.announce(PacketCreator.sendFamilyJoinResponse(false, c.getPlayer().getName())); } } - c.announce(MaplePacketCreator.sendFamilyMessage(0, 0)); + c.announce(PacketCreator.sendFamilyMessage(0, 0)); } private static void insertNewFamilyRecord(int characterID, int familyID, int seniorID, boolean updateChar) { diff --git a/src/main/java/net/server/channel/handlers/AdminChatHandler.java b/src/main/java/net/server/channel/handlers/AdminChatHandler.java index 40acfc9259..0ebfa825d6 100644 --- a/src/main/java/net/server/channel/handlers/AdminChatHandler.java +++ b/src/main/java/net/server/channel/handlers/AdminChatHandler.java @@ -4,7 +4,7 @@ import client.MapleClient; import config.YamlConfig; import net.AbstractMaplePacketHandler; import tools.LogHelper; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -21,7 +21,7 @@ public class AdminChatHandler extends AbstractMaplePacketHandler { byte mode = slea.readByte(); //not saving slides... String message = slea.readMapleAsciiString(); - byte[] packet = MaplePacketCreator.serverNotice(slea.readByte(), message);//maybe I should make a check for the slea.readByte()... but I just hope gm's don't fuck things up :) + byte[] packet = PacketCreator.serverNotice(slea.readByte(), message);//maybe I should make a check for the slea.readByte()... but I just hope gm's don't fuck things up :) switch (mode) { case 0:// /alertall, /noticeall, /slideall c.getWorldServer().broadcastPacket(packet); diff --git a/src/main/java/net/server/channel/handlers/AdminCommandHandler.java b/src/main/java/net/server/channel/handlers/AdminCommandHandler.java index 9c8b80a88a..625c2662b1 100644 --- a/src/main/java/net/server/channel/handlers/AdminCommandHandler.java +++ b/src/main/java/net/server/channel/handlers/AdminCommandHandler.java @@ -33,7 +33,7 @@ import server.life.MapleMonster; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; import server.quest.MapleQuest; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; import tools.data.input.SeekableLittleEndianAccessor; @@ -58,7 +58,7 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler { c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(toSpawnChild[0]), c.getPlayer().getPosition()); } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); break; case 0x01: { // /d (inv) byte type = slea.readByte(); @@ -94,11 +94,11 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler { target.block(type, duration, description); target.sendPolice(duration, reason, 6000); } - c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0)); + c.announce(PacketCreator.getGMEffect(4, (byte) 0)); } else if (MapleCharacter.ban(victim, reason, false)) { - c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0)); + c.announce(PacketCreator.getGMEffect(4, (byte) 0)); } else { - c.announce(MaplePacketCreator.getGMEffect(6, (byte) 1)); + c.announce(PacketCreator.getGMEffect(6, (byte) 1)); } break; case 0x10: // /h, information added by vana -- ... hide ofcourse @@ -160,10 +160,10 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler { String message = slea.readMapleAsciiString(); target = c.getChannelServer().getPlayerStorage().getCharacterByName(victim); if (target != null) { - target.getClient().announce(MaplePacketCreator.serverNotice(1, message)); - c.announce(MaplePacketCreator.getGMEffect(0x1E, (byte) 1)); + target.getClient().announce(PacketCreator.serverNotice(1, message)); + c.announce(PacketCreator.getGMEffect(0x1E, (byte) 1)); } else { - c.announce(MaplePacketCreator.getGMEffect(0x1E, (byte) 0)); + c.announce(PacketCreator.getGMEffect(0x1E, (byte) 0)); } break; case 0x24:// /Artifact Ranking diff --git a/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java b/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java index c450f5eae4..8bfac3ff80 100644 --- a/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java @@ -29,7 +29,7 @@ import net.server.Server; import net.server.guild.MapleAlliance; import net.server.guild.MapleGuild; import net.server.guild.MapleGuildCharacter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import tools.data.output.MaplePacketLittleEndianWriter; @@ -45,7 +45,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { MapleCharacter chr = c.getPlayer(); if (chr.getGuild() == null) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -56,18 +56,18 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { byte b = slea.readByte(); if (alliance == null) { if (b != 4) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } } else { if (b == 4) { chr.dropMessage(5, "Your guild is already registered on a guild alliance."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (chr.getMGC().getAllianceRank() > 2 || !alliance.getGuilds().contains(chr.getGuildId())) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } } @@ -131,9 +131,9 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { chr.saveGuildStatus(); - Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.addGuildToAlliance(alliance, guildid, c), -1, -1); - Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.updateAllianceInfo(alliance, c.getWorld()), -1, -1); - Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.addGuildToAlliance(alliance, guildid, c), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.updateAllianceInfo(alliance, c.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); guild.dropMessage("Your guild has joined the [" + alliance.getName() + "] union."); break; @@ -145,12 +145,12 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { return; } - Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.removeGuildFromAlliance(alliance, guildid, c.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.removeGuildFromAlliance(alliance, guildid, c.getWorld()), -1, -1); Server.getInstance().removeGuildFromAlliance(alliance.getId(), guildid); - Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.getGuildAlliances(alliance, c.getWorld()), -1, -1); - Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); - Server.getInstance().guildMessage(guildid, MaplePacketCreator.disbandAlliance(allianceid)); + Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.getGuildAlliances(alliance, c.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); + Server.getInstance().guildMessage(guildid, PacketCreator.disbandAlliance(allianceid)); alliance.dropMessage("[" + Server.getInstance().getGuild(guildid).getName() + "] guild has been expelled from the union."); break; @@ -175,7 +175,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { ranks[i] = slea.readMapleAsciiString(); } Server.getInstance().setAllianceRanks(alliance.getId(), ranks); - Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.changeAllianceRankTitle(alliance.getId(), ranks), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.changeAllianceRankTitle(alliance.getId(), ranks), -1, -1); break; case 0x09: { int int1 = slea.readInt(); @@ -190,7 +190,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { case 0x0A: String notice = slea.readMapleAsciiString(); Server.getInstance().setAllianceNotice(alliance.getId(), notice); - Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.allianceNotice(alliance.getId(), notice), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.allianceNotice(alliance.getId(), notice), -1, -1); alliance.dropMessage(5, "* Alliance Notice : " + notice); break; @@ -210,7 +210,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { newLeader.getMGC().setAllianceRank(1); newLeader.saveGuildStatus(); - Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.getGuildAlliances(alliance, newLeader.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.getGuildAlliances(alliance, newLeader.getWorld()), -1, -1); alliance.dropMessage("'" + newLeader.getName() + "' has been appointed as the new head of this Alliance."); } @@ -221,7 +221,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { chr.getMGC().setAllianceRank(newRank); chr.saveGuildStatus(); - Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.getGuildAlliances(alliance, chr.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.getGuildAlliances(alliance, chr.getWorld()), -1, -1); alliance.dropMessage("'" + chr.getName() + "' has been reassigned to '" + alliance.getRankTitle(newRank) + "' in this Alliance."); } diff --git a/src/main/java/net/server/channel/handlers/BBSOperationHandler.java b/src/main/java/net/server/channel/handlers/BBSOperationHandler.java index 83682555b0..d6e857cd31 100644 --- a/src/main/java/net/server/channel/handlers/BBSOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/BBSOperationHandler.java @@ -25,7 +25,7 @@ import client.MapleCharacter; import client.MapleClient; import net.AbstractMaplePacketHandler; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.sql.Connection; @@ -103,7 +103,7 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler { ps.setInt(1, c.getPlayer().getGuildId()); try (ResultSet rs = ps.executeQuery()) { - c.announce(MaplePacketCreator.BBSThreadList(rs, start)); + c.announce(PacketCreator.BBSThreadList(rs, start)); } } catch (SQLException se) { se.printStackTrace(); @@ -317,7 +317,7 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler { ps2.setInt(1, !bIsThreadIdLocal ? threadid : threadRS.getInt("threadid")); repliesRS = ps2.executeQuery(); } - client.announce(MaplePacketCreator.showThread(bIsThreadIdLocal ? threadid : threadRS.getInt("localthreadid"), threadRS, repliesRS)); + client.announce(PacketCreator.showThread(bIsThreadIdLocal ? threadid : threadRS.getInt("localthreadid"), threadRS, repliesRS)); repliesRS.close(); } if (ps2 != null) { diff --git a/src/main/java/net/server/channel/handlers/BuddylistModifyHandler.java b/src/main/java/net/server/channel/handlers/BuddylistModifyHandler.java index b0633904a8..37a1c5b33d 100644 --- a/src/main/java/net/server/channel/handlers/BuddylistModifyHandler.java +++ b/src/main/java/net/server/channel/handlers/BuddylistModifyHandler.java @@ -21,23 +21,21 @@ */ package net.server.channel.handlers; -import client.BuddyList; +import client.*; import client.BuddyList.BuddyAddResult; import client.BuddyList.BuddyOperation; -import static client.BuddyList.BuddyOperation.ADDED; -import client.BuddylistEntry; -import client.CharacterNameAndId; -import client.MapleCharacter; -import client.MapleClient; +import net.AbstractMaplePacketHandler; +import net.server.world.World; +import tools.DatabaseConnection; +import tools.PacketCreator; +import tools.data.input.SeekableLittleEndianAccessor; + import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import net.AbstractMaplePacketHandler; -import net.server.world.World; -import tools.DatabaseConnection; -import tools.MaplePacketCreator; -import tools.data.input.SeekableLittleEndianAccessor; + +import static client.BuddyList.BuddyOperation.ADDED; public class BuddylistModifyHandler extends AbstractMaplePacketHandler { private static class CharacterIdNameBuddyCapacity extends CharacterNameAndId { @@ -56,7 +54,7 @@ public class BuddylistModifyHandler extends AbstractMaplePacketHandler { private void nextPendingRequest(MapleClient c) { CharacterNameAndId pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest(); if (pendingBuddyRequest != null) { - c.announce(MaplePacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); + c.announce(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); } } @@ -90,9 +88,9 @@ public class BuddylistModifyHandler extends AbstractMaplePacketHandler { } BuddylistEntry ble = buddylist.get(addName); if (ble != null && !ble.isVisible() && group.equals(ble.getGroup())) { - c.announce(MaplePacketCreator.serverNotice(1, "You already have \"" + ble.getName() + "\" on your Buddylist")); + c.announce(PacketCreator.serverNotice(1, "You already have \"" + ble.getName() + "\" on your Buddylist")); } else if (buddylist.isFull() && ble == null) { - c.announce(MaplePacketCreator.serverNotice(1, "Your buddylist is already full")); + c.announce(PacketCreator.serverNotice(1, "Your buddylist is already full")); } else if (ble == null) { try { World world = c.getWorldServer(); @@ -137,7 +135,7 @@ public class BuddylistModifyHandler extends AbstractMaplePacketHandler { } } if (buddyAddResult == BuddyAddResult.BUDDYLIST_FULL) { - c.announce(MaplePacketCreator.serverNotice(1, "\"" + addName + "\"'s Buddylist is full")); + c.announce(PacketCreator.serverNotice(1, "\"" + addName + "\"'s Buddylist is full")); } else { int displayChannel; displayChannel = -1; @@ -154,17 +152,17 @@ public class BuddylistModifyHandler extends AbstractMaplePacketHandler { } } buddylist.put(new BuddylistEntry(charWithId.getName(), group, otherCid, displayChannel, true)); - c.announce(MaplePacketCreator.updateBuddylist(buddylist.getBuddies())); + c.announce(PacketCreator.updateBuddylist(buddylist.getBuddies())); } } else { - c.announce(MaplePacketCreator.serverNotice(1, "A character called \"" + addName + "\" does not exist")); + c.announce(PacketCreator.serverNotice(1, "A character called \"" + addName + "\" does not exist")); } } catch (SQLException e) { e.printStackTrace(); } } else { ble.changeGroup(group); - c.announce(MaplePacketCreator.updateBuddylist(buddylist.getBuddies())); + c.announce(PacketCreator.updateBuddylist(buddylist.getBuddies())); } } else if (mode == 2) { // accept buddy int otherCid = slea.readInt(); @@ -189,7 +187,7 @@ public class BuddylistModifyHandler extends AbstractMaplePacketHandler { } if (otherName != null) { buddylist.put(new BuddylistEntry(otherName, "Default Group", otherCid, channel, true)); - c.announce(MaplePacketCreator.updateBuddylist(buddylist.getBuddies())); + c.announce(PacketCreator.updateBuddylist(buddylist.getBuddies())); notifyRemoteChannel(c, channel, otherCid, ADDED); } } catch (SQLException e) { diff --git a/src/main/java/net/server/channel/handlers/CancelBuffHandler.java b/src/main/java/net/server/channel/handlers/CancelBuffHandler.java index 69cda11d49..afd012632f 100644 --- a/src/main/java/net/server/channel/handlers/CancelBuffHandler.java +++ b/src/main/java/net/server/channel/handlers/CancelBuffHandler.java @@ -23,17 +23,10 @@ package net.server.channel.handlers; import client.MapleClient; import client.SkillFactory; -import constants.skills.Bishop; -import constants.skills.Bowmaster; -import constants.skills.Corsair; -import constants.skills.Evan; -import constants.skills.FPArchMage; -import constants.skills.ILArchMage; -import constants.skills.Marksman; -import constants.skills.WindArcher; +import constants.skills.*; import net.AbstractMaplePacketHandler; import net.MaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class CancelBuffHandler extends AbstractMaplePacketHandler implements MaplePacketHandler { @@ -52,7 +45,7 @@ public final class CancelBuffHandler extends AbstractMaplePacketHandler implemen case WindArcher.HURRICANE: case Evan.FIRE_BREATH: case Evan.ICE_BREATH: - c.getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.skillCancel(c.getPlayer(), sourceid), false); + c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.skillCancel(c.getPlayer(), sourceid), false); break; default: diff --git a/src/main/java/net/server/channel/handlers/CancelDebuffHandler.java b/src/main/java/net/server/channel/handlers/CancelDebuffHandler.java index 9611245c84..d7add270f3 100644 --- a/src/main/java/net/server/channel/handlers/CancelDebuffHandler.java +++ b/src/main/java/net/server/channel/handlers/CancelDebuffHandler.java @@ -35,8 +35,8 @@ public final class CancelDebuffHandler extends AbstractMaplePacketHandler {//TIP List disease_ = new ArrayList(); disease_.add(disease); diseases_.add(disease); - c.announce(MaplePacketCreator.cancelDebuff(disease_)); - c.getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.cancelForeignDebuff(c.getPlayer().getId(), disease_), false); + c.announce(PacketCreator.cancelDebuff(disease_)); + c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.cancelForeignDebuff(c.getPlayer().getId(), disease_), false); } for (MapleDisease disease : diseases_) { c.getPlayer().removeDisease(disease); diff --git a/src/main/java/net/server/channel/handlers/CashOperationHandler.java b/src/main/java/net/server/channel/handlers/CashOperationHandler.java index 39a56c61f0..50445dc656 100644 --- a/src/main/java/net/server/channel/handlers/CashOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/CashOperationHandler.java @@ -28,24 +28,25 @@ import client.inventory.Equip; import client.inventory.Item; import client.inventory.MapleInventory; import client.inventory.MapleInventoryType; +import client.inventory.manipulator.MapleInventoryManipulator; import config.YamlConfig; import constants.inventory.ItemConstants; -import java.sql.SQLException; -import java.util.Calendar; -import java.util.List; -import java.util.Map; import net.AbstractMaplePacketHandler; import net.server.Server; import server.CashShop; import server.CashShop.CashItem; import server.CashShop.CashItemFactory; -import client.inventory.manipulator.MapleInventoryManipulator; import server.MapleItemInformationProvider; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; +import java.sql.SQLException; +import java.util.Calendar; +import java.util.List; +import java.util.Map; + public final class CashOperationHandler extends AbstractMaplePacketHandler { @Override @@ -54,7 +55,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { CashShop cs = chr.getCashShop(); if (!cs.isOpened()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -88,7 +89,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { Item item = cItem.toItem(); cs.gainCash(useNX, cItem, chr.getWorld()); // thanks Rohenn for noticing cash operations after item acquisition cs.addToInventory(item); - c.announce(MaplePacketCreator.showBoughtCashItem(item, c.getAccID())); + c.announce(PacketCreator.showBoughtCashItem(item, c.getAccID())); } else { // Package cs.gainCash(useNX, cItem, chr.getWorld()); @@ -96,9 +97,9 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { for (Item item : cashPackage) { cs.addToInventory(item); } - c.announce(MaplePacketCreator.showBoughtCashPackage(cashPackage, c.getAccID())); + c.announce(PacketCreator.showBoughtCashPackage(cashPackage, c.getAccID())); } - c.announce(MaplePacketCreator.showCash(chr)); + c.announce(PacketCreator.showCash(chr)); } else if (action == 0x04) {//TODO check for gender int birthday = slea.readInt(); CashItem cItem = CashItemFactory.getItem(slea.readInt()); @@ -109,19 +110,19 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { return; } if (!checkBirthday(c, birthday)) { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC4)); + c.announce(PacketCreator.showCashShopMessage((byte) 0xC4)); return; } else if (recipient == null) { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xA9)); + c.announce(PacketCreator.showCashShopMessage((byte) 0xA9)); return; } else if (recipient.get("accountid").equals(String.valueOf(c.getAccID()))) { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xA8)); + c.announce(PacketCreator.showCashShopMessage((byte) 0xA8)); return; } cs.gainCash(4, cItem, chr.getWorld()); cs.gift(Integer.parseInt(recipient.get("id")), chr.getName(), message, cItem.getSN()); - c.announce(MaplePacketCreator.showGiftSucceed(recipient.get("name"), cItem)); - c.announce(MaplePacketCreator.showCash(chr)); + c.announce(PacketCreator.showGiftSucceed(recipient.get("name"), cItem)); + c.announce(PacketCreator.showCash(chr)); try { chr.sendNote(recipient.get("name"), chr.getName() + " has sent you a gift! Go check out the Cash Shop.", (byte) 0); //fame or not } catch (SQLException ex) { @@ -138,7 +139,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { cs.addToWishList(sn); } } - c.announce(MaplePacketCreator.showWishList(chr, true)); + c.announce(PacketCreator.showWishList(chr, true)); } else if (action == 0x06) { // Increase Inventory Slots slea.skip(1); int cash = slea.readInt(); @@ -156,8 +157,8 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } cs.gainCash(cash, -4000); if (chr.gainSlots(type, qty, false)) { - c.announce(MaplePacketCreator.showBoughtInventorySlots(type, chr.getSlots(type))); - c.announce(MaplePacketCreator.showCash(chr)); + c.announce(PacketCreator.showBoughtInventorySlots(type, chr.getSlots(type))); + c.announce(PacketCreator.showCash(chr)); } else { FilePrinter.printError(FilePrinter.CASHITEM_BOUGHT, "Could not add " + qty + " slots of type " + type + " for player " + MapleCharacter.makeMapleReadable(chr.getName())); } @@ -175,8 +176,8 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } cs.gainCash(cash, cItem, chr.getWorld()); if (chr.gainSlots(type, qty, false)) { - c.announce(MaplePacketCreator.showBoughtInventorySlots(type, chr.getSlots(type))); - c.announce(MaplePacketCreator.showCash(chr)); + c.announce(PacketCreator.showBoughtInventorySlots(type, chr.getSlots(type))); + c.announce(PacketCreator.showCash(chr)); } else { FilePrinter.printError(FilePrinter.CASHITEM_BOUGHT, "Could not add " + qty + " slots of type " + type + " for player " + MapleCharacter.makeMapleReadable(chr.getName())); } @@ -200,8 +201,8 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { FilePrinter.print(FilePrinter.STORAGE + c.getAccountName() + ".txt", c.getPlayer().getName() + " bought " + qty + " slots to their account storage."); chr.setUsedStorage(); - c.announce(MaplePacketCreator.showBoughtStorageSlots(chr.getStorage().getSlots())); - c.announce(MaplePacketCreator.showCash(chr)); + c.announce(PacketCreator.showBoughtStorageSlots(chr.getStorage().getSlots())); + c.announce(PacketCreator.showCash(chr)); } else { FilePrinter.printError(FilePrinter.CASHITEM_BOUGHT, "Could not add " + qty + " slots to " + MapleCharacter.makeMapleReadable(chr.getName()) + "'s account."); } @@ -222,8 +223,8 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { FilePrinter.print(FilePrinter.STORAGE + c.getAccountName() + ".txt", c.getPlayer().getName() + " bought " + qty + " slots to their account storage."); chr.setUsedStorage(); - c.announce(MaplePacketCreator.showBoughtStorageSlots(chr.getStorage().getSlots())); - c.announce(MaplePacketCreator.showCash(chr)); + c.announce(PacketCreator.showBoughtStorageSlots(chr.getStorage().getSlots())); + c.announce(PacketCreator.showCash(chr)); } else { FilePrinter.printError(FilePrinter.CASHITEM_BOUGHT, "Could not add " + qty + " slots to " + MapleCharacter.makeMapleReadable(chr.getName()) + "'s account."); } @@ -244,8 +245,8 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } cs.gainCash(cash, cItem, chr.getWorld()); if (c.gainCharacterSlot()) { - c.announce(MaplePacketCreator.showBoughtCharacterSlot(c.getCharacterSlots())); - c.announce(MaplePacketCreator.showCash(chr)); + c.announce(PacketCreator.showBoughtCharacterSlot(c.getCharacterSlots())); + c.announce(PacketCreator.showCash(chr)); } else { FilePrinter.printError(FilePrinter.CASHITEM_BOUGHT, "Could not add a character slot to " + MapleCharacter.makeMapleReadable(chr.getName()) + "'s account."); c.enableCSActions(); @@ -259,7 +260,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } if (chr.getInventory(item.getInventoryType()).addItem(item) != -1) { cs.removeFromInventory(item); - c.announce(MaplePacketCreator.takeFromCashInventory(item)); + c.announce(PacketCreator.takeFromCashInventory(item)); if(item instanceof Equip) { Equip equip = (Equip) item; @@ -285,17 +286,17 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { c.enableCSActions(); return; } else if (c.getPlayer().getPetIndex(item.getPetId()) > -1) { - chr.getClient().announce(MaplePacketCreator.serverNotice(1, "You cannot put the pet you currently equip into the Cash Shop inventory.")); + chr.getClient().announce(PacketCreator.serverNotice(1, "You cannot put the pet you currently equip into the Cash Shop inventory.")); c.enableCSActions(); return; } else if (ItemConstants.isWeddingRing(item.getItemId()) || ItemConstants.isWeddingToken(item.getItemId())) { - chr.getClient().announce(MaplePacketCreator.serverNotice(1, "You cannot put relationship items into the Cash Shop inventory.")); + chr.getClient().announce(PacketCreator.serverNotice(1, "You cannot put relationship items into the Cash Shop inventory.")); c.enableCSActions(); return; } cs.addToInventory(item); mi.removeSlot(item.getPosition()); - c.announce(MaplePacketCreator.putIntoCashInventory(item, c.getAccID())); + c.announce(PacketCreator.putIntoCashInventory(item, c.getAccID())); } else if (action == 0x1D) { //crush ring (action 28) int birthday = slea.readInt(); if (checkBirthday(c, birthday)) { @@ -306,7 +307,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { CashItem itemRing = CashItemFactory.getItem(SN); MapleCharacter partner = c.getChannelServer().getPlayerStorage().getCharacterByName(recipientName); if (partner == null) { - chr.getClient().announce(MaplePacketCreator.serverNotice(1, "The partner you specified cannot be found.\r\nPlease make sure your partner is online and in the same channel.")); + chr.getClient().announce(PacketCreator.serverNotice(1, "The partner you specified cannot be found.\r\nPlease make sure your partner is online and in the same channel.")); } else { /* if (partner.getGender() == chr.getGender()) { @@ -320,7 +321,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { Pair rings = MapleRing.createRing(itemRing.getItemId(), chr, partner); eqp.setRingId(rings.getLeft()); cs.addToInventory(eqp); - c.announce(MaplePacketCreator.showBoughtCashItem(eqp, c.getAccID())); + c.announce(PacketCreator.showBoughtCashItem(eqp, c.getAccID())); cs.gainCash(toCharge, itemRing, chr.getWorld()); cs.gift(partner.getId(), chr.getName(), text, eqp.getSN(), rings.getRight()); chr.addCrushRing(MapleRing.loadFromDb(rings.getLeft())); @@ -333,27 +334,27 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } } } else { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC4)); + c.announce(PacketCreator.showCashShopMessage((byte) 0xC4)); } - c.announce(MaplePacketCreator.showCash(c.getPlayer())); + c.announce(PacketCreator.showCash(c.getPlayer())); } else if (action == 0x20) { int serialNumber = slea.readInt(); // thanks GabrielSin for detecting a potential exploit with 1 meso cash items. if (serialNumber / 10000000 != 8) { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC0)); + c.announce(PacketCreator.showCashShopMessage((byte) 0xC0)); return; } CashItem item = CashItemFactory.getItem(serialNumber); if (item == null || !item.isOnSale()) { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC0)); + c.announce(PacketCreator.showCashShopMessage((byte) 0xC0)); return; } int itemId = item.getItemId(); int itemPrice = item.getPrice(); if (itemPrice <= 0) { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC0)); + c.announce(PacketCreator.showCashShopMessage((byte) 0xC0)); return; } @@ -361,10 +362,10 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { if (chr.canHold(itemId)) { chr.gainMeso(-itemPrice, false); MapleInventoryManipulator.addById(c, itemId, (short) 1, "", -1); - c.announce(MaplePacketCreator.showBoughtQuestItem(itemId)); + c.announce(PacketCreator.showBoughtQuestItem(itemId)); } } - c.announce(MaplePacketCreator.showCash(c.getPlayer())); + c.announce(PacketCreator.showCash(c.getPlayer())); } else if (action == 0x23) { //Friendship :3 int birthday = slea.readInt(); if (checkBirthday(c, birthday)) { @@ -378,7 +379,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { slea.readByte(); MapleCharacter partner = c.getChannelServer().getPlayerStorage().getCharacterByName(sentTo); if (partner == null) { - c.announce(MaplePacketCreator.showCashShopMessage((byte)0xBE)); + c.announce(PacketCreator.showCashShopMessage((byte)0xBE)); } else { // Need to check to make sure its actually an equip and the right SN... if(itemRing.toItem() instanceof Equip) { @@ -386,7 +387,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { Pair rings = MapleRing.createRing(itemRing.getItemId(), chr, partner); eqp.setRingId(rings.getLeft()); cs.addToInventory(eqp); - c.announce(MaplePacketCreator.showBoughtCashRing(eqp, partner.getName(), c.getAccID())); + c.announce(PacketCreator.showBoughtCashRing(eqp, partner.getName(), c.getAccID())); cs.gainCash(payment, -itemRing.getPrice()); cs.gift(partner.getId(), chr.getName(), text, eqp.getSN(), rings.getRight()); chr.addFriendshipRing(MapleRing.loadFromDb(rings.getLeft())); @@ -399,14 +400,14 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } } } else { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC4)); + c.announce(PacketCreator.showCashShopMessage((byte) 0xC4)); } - c.announce(MaplePacketCreator.showCash(c.getPlayer())); + c.announce(PacketCreator.showCash(c.getPlayer())); } else if (action == 0x2E) { //name change CashItem cItem = CashItemFactory.getItem(slea.readInt()); if (cItem == null || !canBuy(chr, cItem, cs.getCash(4))) { - c.announce(MaplePacketCreator.showCashShopMessage((byte)0)); + c.announce(PacketCreator.showCashShopMessage((byte)0)); c.enableCSActions(); return; } @@ -414,28 +415,28 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { slea.readMapleAsciiString(); //old name String newName = slea.readMapleAsciiString(); if(!MapleCharacter.canCreateChar(newName) || chr.getLevel() < 10) { //(longest ban duration isn't tracked currently) - c.announce(MaplePacketCreator.showCashShopMessage((byte)0)); + c.announce(PacketCreator.showCashShopMessage((byte)0)); c.enableCSActions(); return; } else if(c.getTempBanCalendar() != null && c.getTempBanCalendar().getTimeInMillis() + (30*24*60*60*1000) > Calendar.getInstance().getTimeInMillis()) { - c.announce(MaplePacketCreator.showCashShopMessage((byte)0)); + c.announce(PacketCreator.showCashShopMessage((byte)0)); c.enableCSActions(); return; } if(chr.registerNameChange(newName)) { //success Item item = cItem.toItem(); - c.announce(MaplePacketCreator.showNameChangeSuccess(item, c.getAccID())); + c.announce(PacketCreator.showNameChangeSuccess(item, c.getAccID())); cs.gainCash(4, cItem, chr.getWorld()); cs.addToInventory(item); } else { - c.announce(MaplePacketCreator.showCashShopMessage((byte)0)); + c.announce(PacketCreator.showCashShopMessage((byte)0)); } } c.enableCSActions(); } else if(action == 0x31) { //world transfer CashItem cItem = CashItemFactory.getItem(slea.readInt()); if (cItem == null || !canBuy(chr, cItem, cs.getCash(4))) { - c.announce(MaplePacketCreator.showCashShopMessage((byte)0)); + c.announce(PacketCreator.showCashShopMessage((byte)0)); c.enableCSActions(); return; } @@ -444,21 +445,21 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { int worldTransferError = chr.checkWorldTransferEligibility(); if(worldTransferError != 0 || newWorldSelection >= Server.getInstance().getWorldsSize() || Server.getInstance().getWorldsSize() <= 1) { - c.announce(MaplePacketCreator.showCashShopMessage((byte)0)); + c.announce(PacketCreator.showCashShopMessage((byte)0)); return; } else if(newWorldSelection == c.getWorld()) { - c.announce(MaplePacketCreator.showCashShopMessage((byte)0xDC)); + c.announce(PacketCreator.showCashShopMessage((byte)0xDC)); return; } else if(c.getAvailableCharacterWorldSlots(newWorldSelection) < 1 || Server.getInstance().getAccountWorldCharacterCount(c.getAccID(), newWorldSelection) >= 3) { - c.announce(MaplePacketCreator.showCashShopMessage((byte)0xDF)); + c.announce(PacketCreator.showCashShopMessage((byte)0xDF)); return; } else if(chr.registerWorldTransfer(newWorldSelection)) { Item item = cItem.toItem(); - c.announce(MaplePacketCreator.showWorldTransferSuccess(item, c.getAccID())); + c.announce(PacketCreator.showWorldTransferSuccess(item, c.getAccID())); cs.gainCash(4, cItem, chr.getWorld()); cs.addToInventory(item); } else { - c.announce(MaplePacketCreator.showCashShopMessage((byte)0)); + c.announce(PacketCreator.showCashShopMessage((byte)0)); } } c.enableCSActions(); @@ -469,7 +470,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { c.releaseClient(); } } else { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/CashShopSurpriseHandler.java b/src/main/java/net/server/channel/handlers/CashShopSurpriseHandler.java index f5df6a4699..f7374def7f 100644 --- a/src/main/java/net/server/channel/handlers/CashShopSurpriseHandler.java +++ b/src/main/java/net/server/channel/handlers/CashShopSurpriseHandler.java @@ -23,9 +23,9 @@ import client.MapleClient; import client.inventory.Item; import net.AbstractMaplePacketHandler; import server.CashShop; -import tools.data.input.SeekableLittleEndianAccessor; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; +import tools.data.input.SeekableLittleEndianAccessor; /** * @@ -41,9 +41,9 @@ public class CashShopSurpriseHandler extends AbstractMaplePacketHandler { if(cssResult != null) { Item cssItem = cssResult.getLeft(), cssBox = cssResult.getRight(); - c.announce(MaplePacketCreator.onCashGachaponOpenSuccess(c.getAccID(), cssBox.getSN(), cssBox.getQuantity(), cssItem, cssItem.getItemId(), cssItem.getQuantity(), true)); + c.announce(PacketCreator.onCashGachaponOpenSuccess(c.getAccID(), cssBox.getSN(), cssBox.getQuantity(), cssItem, cssItem.getItemId(), cssItem.getQuantity(), true)); } else { - c.announce(MaplePacketCreator.onCashItemGachaponOpenFailed()); + c.announce(PacketCreator.onCashItemGachaponOpenFailed()); } } } diff --git a/src/main/java/net/server/channel/handlers/ChangeMapHandler.java b/src/main/java/net/server/channel/handlers/ChangeMapHandler.java index 5ea0701d62..b10bd7b371 100644 --- a/src/main/java/net/server/channel/handlers/ChangeMapHandler.java +++ b/src/main/java/net/server/channel/handlers/ChangeMapHandler.java @@ -30,7 +30,7 @@ import server.MapleTrade; import server.maps.MapleMap; import server.maps.MaplePortal; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.awt.*; @@ -49,7 +49,7 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler { FilePrinter.printError(FilePrinter.PORTAL_STUCK + chr.getName() + ".txt", "Player " + chr.getName() + " got stuck when changing maps. Timestamp: " + Calendar.getInstance().getTime().toString() + " Last visited mapids: " + chr.getLastVisitedMapids()); } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (chr.getTrade() != null) { @@ -65,7 +65,7 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler { chr.setSessionTransitionState(); try { - c.announce(MaplePacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]))); + c.announce(PacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]))); } catch (UnknownHostException ex) { ex.printStackTrace(); } @@ -95,7 +95,7 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler { // thanks lucasziron (lziron) for showing revivePlayer() triggering by Wheel MapleInventoryManipulator.removeById(c, MapleInventoryType.CASH, 5510000, 1, true, false); - chr.announce(MaplePacketCreator.showWheelsLeft(chr.getItemQuantity(5510000, false))); + chr.announce(PacketCreator.showWheelsLeft(chr.getItemQuantity(5510000, false))); chr.updateHp(50); chr.changeMap(map, map.findClosestPlayerSpawnpoint(chr.getPosition())); @@ -121,8 +121,8 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler { } } else if (divi == 20100) { if (targetid == 104000000) { - c.announce(MaplePacketCreator.lockUI(false)); - c.announce(MaplePacketCreator.disableUI(false)); + c.announce(PacketCreator.lockUI(false)); + c.announce(PacketCreator.disableUI(false)); warp = true; } } else if (divi == 9130401) { // Only allow warp if player is already in Intro map, or else = hack @@ -151,8 +151,8 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler { } if (portal != null && !portal.getPortalStatus()) { - c.announce(MaplePacketCreator.blockedMessage(1)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.blockedMessage(1)); + c.announce(PacketCreator.enableActions()); return; } @@ -164,13 +164,13 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler { if (portal != null) { if (portal.getPosition().distanceSq(chr.getPosition()) > 400000) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } portal.enterPortal(c); } else { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/net/server/channel/handlers/ChangeMapSpecialHandler.java b/src/main/java/net/server/channel/handlers/ChangeMapSpecialHandler.java index 1c1f6368df..796609abb9 100644 --- a/src/main/java/net/server/channel/handlers/ChangeMapSpecialHandler.java +++ b/src/main/java/net/server/channel/handlers/ChangeMapSpecialHandler.java @@ -23,10 +23,10 @@ package net.server.channel.handlers; import client.MapleClient; import net.AbstractMaplePacketHandler; -import server.maps.MaplePortal; import server.MapleTrade; import server.MapleTrade.TradeResult; -import tools.MaplePacketCreator; +import server.maps.MaplePortal; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class ChangeMapSpecialHandler extends AbstractMaplePacketHandler { @@ -37,11 +37,11 @@ public final class ChangeMapSpecialHandler extends AbstractMaplePacketHandler { slea.readShort(); MaplePortal portal = c.getPlayer().getMap().getPortal(startwp); if (portal == null || c.getPlayer().portalDelay() > currentServerTime() || c.getPlayer().getBlockedPortals().contains(portal.getScriptName())) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (c.getPlayer().isChangingMaps() || c.getPlayer().isBanned()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (c.getPlayer().getTrade() != null) { diff --git a/src/main/java/net/server/channel/handlers/CharInfoRequestHandler.java b/src/main/java/net/server/channel/handlers/CharInfoRequestHandler.java index 6454a9e256..ad1bc1ad8a 100644 --- a/src/main/java/net/server/channel/handlers/CharInfoRequestHandler.java +++ b/src/main/java/net/server/channel/handlers/CharInfoRequestHandler.java @@ -25,7 +25,7 @@ import client.MapleCharacter; import client.MapleClient; import net.AbstractMaplePacketHandler; import server.maps.MapleMapObject; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class CharInfoRequestHandler extends AbstractMaplePacketHandler { @@ -42,7 +42,7 @@ public final class CharInfoRequestHandler extends AbstractMaplePacketHandler { if(c.getPlayer().getId() != player.getId()) { player.exportExcludedItems(c); } - c.announce(MaplePacketCreator.charInfo(player)); + c.announce(PacketCreator.charInfo(player)); } } } diff --git a/src/main/java/net/server/channel/handlers/CloseChalkboardHandler.java b/src/main/java/net/server/channel/handlers/CloseChalkboardHandler.java index 497660d247..797eba7a8d 100644 --- a/src/main/java/net/server/channel/handlers/CloseChalkboardHandler.java +++ b/src/main/java/net/server/channel/handlers/CloseChalkboardHandler.java @@ -23,7 +23,7 @@ package net.server.channel.handlers; import client.MapleClient; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -35,6 +35,6 @@ public final class CloseChalkboardHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { c.getPlayer().setChalkboard(null); - c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.useChalkboard(c.getPlayer(), true)); + c.getPlayer().getMap().broadcastMessage(PacketCreator.useChalkboard(c.getPlayer(), true)); } } diff --git a/src/main/java/net/server/channel/handlers/CloseRangeDamageHandler.java b/src/main/java/net/server/channel/handlers/CloseRangeDamageHandler.java index 2d681567ce..da71d9b818 100644 --- a/src/main/java/net/server/channel/handlers/CloseRangeDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/CloseRangeDamageHandler.java @@ -26,7 +26,7 @@ import config.YamlConfig; import constants.game.GameConstants; import constants.skills.*; import server.MapleStatEffect; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; @@ -59,10 +59,10 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler { return; if (GameConstants.isDojo(chr.getMap().getId()) && attack.numAttacked > 0) { chr.setDojoEnergy(chr.getDojoEnergy() + YamlConfig.config.server.DOJO_ENERGY_ATK); - c.announce(MaplePacketCreator.getEnergy("energy", chr.getDojoEnergy())); + c.announce(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); } - chr.getMap().broadcastMessage(chr, MaplePacketCreator.closeRangeAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, attack.allDamage, attack.speed, attack.direction, attack.display), false, true); + chr.getMap().broadcastMessage(chr, PacketCreator.closeRangeAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, attack.allDamage, attack.speed, attack.direction, attack.display), false, true); int numFinisherOrbs = 0; Integer comboBuff = chr.getBuffedValue(MapleBuffStat.COMBO); if (GameConstants.isFinisherSkill(attack.skill)) { @@ -104,8 +104,8 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler { List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.COMBO, neworbcount)); chr.setBuffedValue(MapleBuffStat.COMBO, neworbcount); duration -= (int) (currentServerTime() - chr.getBuffedStarttime(MapleBuffStat.COMBO)); - c.announce(MaplePacketCreator.giveBuff(oid, duration, stat)); - chr.getMap().broadcastMessage(chr, MaplePacketCreator.giveForeignBuff(chr.getId(), stat), false); + c.announce(PacketCreator.giveBuff(oid, duration, stat)); + chr.getMap().broadcastMessage(chr, PacketCreator.giveForeignBuff(chr.getId(), stat), false); } } } else if (chr.getSkillLevel(chr.isCygnus() ? SkillFactory.getSkill(15100004) : SkillFactory.getSkill(5110001)) > 0 && (chr.getJob().isA(MapleJob.MARAUDER) || chr.getJob().isA(MapleJob.THUNDERBREAKER2))) { @@ -146,8 +146,8 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler { } chr.setDojoEnergy(0); - c.announce(MaplePacketCreator.getEnergy("energy", chr.getDojoEnergy())); - c.announce(MaplePacketCreator.serverNotice(5, "As you used the secret skill, your energy bar has been reset.")); + c.announce(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); + c.announce(PacketCreator.serverNotice(5, "As you used the secret skill, your energy bar has been reset.")); } else if (attack.skill > 0) { Skill skill = SkillFactory.getSkill(attack.skill); MapleStatEffect effect_ = skill.getEffect(chr.getSkillLevel(skill)); @@ -155,7 +155,7 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler { if (chr.skillIsCooling(attack.skill)) { return; } else { - c.announce(MaplePacketCreator.skillCooldown(attack.skill, effect_.getCooldown())); + c.announce(PacketCreator.skillCooldown(attack.skill, effect_.getCooldown())); chr.addCooldown(attack.skill, currentServerTime(), effect_.getCooldown() * 1000); } } diff --git a/src/main/java/net/server/channel/handlers/CoconutHandler.java b/src/main/java/net/server/channel/handlers/CoconutHandler.java index e25a2d167e..817286193a 100644 --- a/src/main/java/net/server/channel/handlers/CoconutHandler.java +++ b/src/main/java/net/server/channel/handlers/CoconutHandler.java @@ -27,7 +27,7 @@ import net.AbstractMaplePacketHandler; import server.events.gm.MapleCoconut; import server.events.gm.MapleCoconuts; import server.maps.MapleMap; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -57,29 +57,29 @@ public final class CoconutHandler extends AbstractMaplePacketHandler { if (Math.random() < 0.01 && event.getStopped() > 0) { nut.setHittable(false); event.stopCoconut(); - map.broadcastMessage(MaplePacketCreator.hitCoconut(false, id, 1)); + map.broadcastMessage(PacketCreator.hitCoconut(false, id, 1)); return; } nut.setHittable(false); // for sure :) nut.resetHits(); // For next event (without restarts) if (Math.random() < 0.05 && event.getBombings() > 0) { - map.broadcastMessage(MaplePacketCreator.hitCoconut(false, id, 2)); + map.broadcastMessage(PacketCreator.hitCoconut(false, id, 2)); event.bombCoconut(); } else if (event.getFalling() > 0) { - map.broadcastMessage(MaplePacketCreator.hitCoconut(false, id, 3)); + map.broadcastMessage(PacketCreator.hitCoconut(false, id, 3)); event.fallCoconut(); if (c.getPlayer().getTeam() == 0) { event.addMapleScore(); - map.broadcastMessage(MaplePacketCreator.serverNotice(5, c.getPlayer().getName() + " of Team Maple knocks down a coconut.")); + map.broadcastMessage(PacketCreator.serverNotice(5, c.getPlayer().getName() + " of Team Maple knocks down a coconut.")); } else { event.addStoryScore(); - map.broadcastMessage(MaplePacketCreator.serverNotice(5, c.getPlayer().getName() + " of Team Story knocks down a coconut.")); + map.broadcastMessage(PacketCreator.serverNotice(5, c.getPlayer().getName() + " of Team Story knocks down a coconut.")); } - map.broadcastMessage(MaplePacketCreator.coconutScore(event.getMapleScore(), event.getStoryScore())); + map.broadcastMessage(PacketCreator.coconutScore(event.getMapleScore(), event.getStoryScore())); } } else { nut.hit(); - map.broadcastMessage(MaplePacketCreator.hitCoconut(false, id, 1)); + map.broadcastMessage(PacketCreator.hitCoconut(false, id, 1)); } } } diff --git a/src/main/java/net/server/channel/handlers/CouponCodeHandler.java b/src/main/java/net/server/channel/handlers/CouponCodeHandler.java index 9dedbe2432..7fcae0f642 100644 --- a/src/main/java/net/server/channel/handlers/CouponCodeHandler.java +++ b/src/main/java/net/server/channel/handlers/CouponCodeHandler.java @@ -33,7 +33,7 @@ import server.CashShop; import server.MapleItemInformationProvider; import tools.DatabaseConnection; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; @@ -188,7 +188,7 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler { Pair>>> codeRes = getNXCodeResult(c.getPlayer(), code.toUpperCase()); int type = codeRes.getLeft(); if (type < 0) { - c.announce(MaplePacketCreator.showCashShopMessage((byte) parseCouponResult(type))); + c.announce(PacketCreator.showCashShopMessage((byte) parseCouponResult(type))); } else { List cashItems = new LinkedList<>(); List> items = new LinkedList<>(); @@ -260,9 +260,9 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler { } } if (nxCredit != 0 || nxPrepaid != 0) { //coupon packet can only show maple points (afaik) - c.announce(MaplePacketCreator.showBoughtQuestItem(0)); + c.announce(PacketCreator.showBoughtQuestItem(0)); } else { - c.announce(MaplePacketCreator.showCouponRedeemedItems(c.getAccID(), maplePoints, mesos, cashItems, items)); + c.announce(PacketCreator.showCouponRedeemedItems(c.getAccID(), maplePoints, mesos, cashItems, items)); } c.enableCSActions(); } diff --git a/src/main/java/net/server/channel/handlers/DamageSummonHandler.java b/src/main/java/net/server/channel/handlers/DamageSummonHandler.java index ae54da5444..b32f36df46 100644 --- a/src/main/java/net/server/channel/handlers/DamageSummonHandler.java +++ b/src/main/java/net/server/channel/handlers/DamageSummonHandler.java @@ -25,9 +25,9 @@ import client.MapleBuffStat; import client.MapleCharacter; import client.MapleClient; import net.AbstractMaplePacketHandler; -import server.maps.MapleSummon; import server.maps.MapleMapObject; -import tools.MaplePacketCreator; +import server.maps.MapleSummon; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class DamageSummonHandler extends AbstractMaplePacketHandler { @@ -48,7 +48,7 @@ public final class DamageSummonHandler extends AbstractMaplePacketHandler { if (summon.getHP() <= 0) { player.cancelEffectFromBuffStat(MapleBuffStat.PUPPET); } - player.getMap().broadcastMessage(player, MaplePacketCreator.damageSummon(player.getId(), oid, damage, monsterIdFrom), summon.getPosition()); + player.getMap().broadcastMessage(player, PacketCreator.damageSummon(player.getId(), oid, damage, monsterIdFrom), summon.getPosition()); } } } diff --git a/src/main/java/net/server/channel/handlers/DenyPartyRequestHandler.java b/src/main/java/net/server/channel/handlers/DenyPartyRequestHandler.java index 748804377d..6648c0e5a7 100644 --- a/src/main/java/net/server/channel/handlers/DenyPartyRequestHandler.java +++ b/src/main/java/net/server/channel/handlers/DenyPartyRequestHandler.java @@ -27,7 +27,7 @@ import net.AbstractMaplePacketHandler; import net.server.coordinator.world.MapleInviteCoordinator; import net.server.coordinator.world.MapleInviteCoordinator.InviteResult; import net.server.coordinator.world.MapleInviteCoordinator.InviteType; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class DenyPartyRequestHandler extends AbstractMaplePacketHandler { @@ -43,7 +43,7 @@ public final class DenyPartyRequestHandler extends AbstractMaplePacketHandler { if (MapleInviteCoordinator.answerInvite(InviteType.PARTY, chr.getId(), cfrom.getPartyId(), false).result == InviteResult.DENIED) { chr.updatePartySearchAvailability(chr.getParty() == null); - cfrom.getClient().announce(MaplePacketCreator.partyStatusMessage(23, chr.getName())); + cfrom.getClient().announce(PacketCreator.partyStatusMessage(23, chr.getName())); } } } diff --git a/src/main/java/net/server/channel/handlers/DoorHandler.java b/src/main/java/net/server/channel/handlers/DoorHandler.java index b2a2ea2888..497629861c 100644 --- a/src/main/java/net/server/channel/handlers/DoorHandler.java +++ b/src/main/java/net/server/channel/handlers/DoorHandler.java @@ -26,7 +26,7 @@ import client.MapleClient; import net.AbstractMaplePacketHandler; import server.maps.MapleDoorObject; import server.maps.MapleMapObject; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -41,7 +41,7 @@ public final class DoorHandler extends AbstractMaplePacketHandler { MapleCharacter chr = c.getPlayer(); if (chr.isChangingMaps() || chr.isBanned()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -55,7 +55,7 @@ public final class DoorHandler extends AbstractMaplePacketHandler { } } - c.announce(MaplePacketCreator.blockedMessage(6)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.blockedMessage(6)); + c.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/DueyHandler.java b/src/main/java/net/server/channel/handlers/DueyHandler.java index 0e67dc43e7..c6956c00c1 100644 --- a/src/main/java/net/server/channel/handlers/DueyHandler.java +++ b/src/main/java/net/server/channel/handlers/DueyHandler.java @@ -24,9 +24,8 @@ package net.server.channel.handlers; import client.MapleClient; import client.processor.npc.DueyProcessor; import config.YamlConfig; - import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class DueyHandler extends AbstractMaplePacketHandler { @@ -34,7 +33,7 @@ public final class DueyHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { if (!YamlConfig.config.server.USE_DUEY){ - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } diff --git a/src/main/java/net/server/channel/handlers/EnterCashShopHandler.java b/src/main/java/net/server/channel/handlers/EnterCashShopHandler.java index 915bf996d2..b9b61f8b50 100644 --- a/src/main/java/net/server/channel/handlers/EnterCashShopHandler.java +++ b/src/main/java/net/server/channel/handlers/EnterCashShopHandler.java @@ -26,7 +26,7 @@ import client.MapleClient; import net.AbstractMaplePacketHandler; import net.server.Server; import server.maps.MapleMiniDungeonInfo; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -40,19 +40,19 @@ public class EnterCashShopHandler extends AbstractMaplePacketHandler { MapleCharacter mc = c.getPlayer(); if (mc.cannotEnterCashShop()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if(mc.getEventInstance() != null) { - c.announce(MaplePacketCreator.serverNotice(5, "Entering Cash Shop or MTS are disabled when registered on an event.")); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.serverNotice(5, "Entering Cash Shop or MTS are disabled when registered on an event.")); + c.announce(PacketCreator.enableActions()); return; } if(MapleMiniDungeonInfo.isDungeonMap(mc.getMapId())) { - c.announce(MaplePacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); + c.announce(PacketCreator.enableActions()); return; } @@ -79,11 +79,11 @@ public class EnterCashShopHandler extends AbstractMaplePacketHandler { mc.forfeitExpirableQuests(); mc.cancelQuestExpirationTask(); - c.announce(MaplePacketCreator.openCashShop(c, false)); - c.announce(MaplePacketCreator.showCashInventory(c)); - c.announce(MaplePacketCreator.showGifts(mc.getCashShop().loadGifts())); - c.announce(MaplePacketCreator.showWishList(mc, false)); - c.announce(MaplePacketCreator.showCash(mc)); + c.announce(PacketCreator.openCashShop(c, false)); + c.announce(PacketCreator.showCashInventory(c)); + c.announce(PacketCreator.showGifts(mc.getCashShop().loadGifts())); + c.announce(PacketCreator.showWishList(mc, false)); + c.announce(PacketCreator.showCash(mc)); c.getChannelServer().removePlayer(mc); mc.getMap().removePlayer(mc); diff --git a/src/main/java/net/server/channel/handlers/EnterMTSHandler.java b/src/main/java/net/server/channel/handlers/EnterMTSHandler.java index e6e42a79c5..2d5919fc70 100644 --- a/src/main/java/net/server/channel/handlers/EnterMTSHandler.java +++ b/src/main/java/net/server/channel/handlers/EnterMTSHandler.java @@ -33,7 +33,7 @@ import server.MTSItemInfo; import server.maps.FieldLimit; import server.maps.MapleMiniDungeonInfo; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.sql.Connection; @@ -51,38 +51,38 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler { if(!chr.isAlive() && YamlConfig.config.server.USE_BUYBACK_SYSTEM) { BuybackProcessor.processBuyback(c); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } else { if (!YamlConfig.config.server.USE_MTS) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if(chr.getEventInstance() != null) { - c.announce(MaplePacketCreator.serverNotice(5, "Entering Cash Shop or MTS are disabled when registered on an event.")); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.serverNotice(5, "Entering Cash Shop or MTS are disabled when registered on an event.")); + c.announce(PacketCreator.enableActions()); return; } if(MapleMiniDungeonInfo.isDungeonMap(chr.getMapId())) { - c.announce(MaplePacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); + c.announce(PacketCreator.enableActions()); return; } if (FieldLimit.CANNOTMIGRATE.check(chr.getMap().getFieldLimit())) { chr.dropMessage(1, "You can't do it here in this map."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (!chr.isAlive()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (chr.getLevel() < 10) { - c.announce(MaplePacketCreator.blockedMessage2(5)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.blockedMessage2(5)); + c.announce(PacketCreator.enableActions()); return; } @@ -110,14 +110,14 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler { c.getChannelServer().removePlayer(chr); chr.getMap().removePlayer(c.getPlayer()); try { - c.announce(MaplePacketCreator.openCashShop(c, true)); + c.announce(PacketCreator.openCashShop(c, true)); } catch (Exception ex) { ex.printStackTrace(); } chr.getCashShop().open(true);// xD c.enableCSActions(); - c.announce(MaplePacketCreator.MTSWantedListingOver(0, 0)); - c.announce(MaplePacketCreator.showMTSCash(c.getPlayer())); + c.announce(PacketCreator.MTSWantedListingOver(0, 0)); + c.announce(PacketCreator.showMTSCash(c.getPlayer())); List items = new ArrayList<>(); int pages = 0; try (Connection con = DatabaseConnection.getConnection()) { @@ -171,9 +171,9 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler { } catch (SQLException e) { e.printStackTrace(); } - c.announce(MaplePacketCreator.sendMTS(items, 1, 0, 0, pages)); - c.announce(MaplePacketCreator.transferInventory(getTransfer(chr.getId()))); - c.announce(MaplePacketCreator.notYetSoldInv(getNotYetSold(chr.getId()))); + c.announce(PacketCreator.sendMTS(items, 1, 0, 0, pages)); + c.announce(PacketCreator.transferInventory(getTransfer(chr.getId()))); + c.announce(PacketCreator.notYetSoldInv(getNotYetSold(chr.getId()))); } } diff --git a/src/main/java/net/server/channel/handlers/FamilyAddHandler.java b/src/main/java/net/server/channel/handlers/FamilyAddHandler.java index 6c9e0d7fcd..1d9bd53fea 100644 --- a/src/main/java/net/server/channel/handlers/FamilyAddHandler.java +++ b/src/main/java/net/server/channel/handlers/FamilyAddHandler.java @@ -21,13 +21,13 @@ */ package net.server.channel.handlers; -import config.YamlConfig; import client.MapleCharacter; import client.MapleClient; +import config.YamlConfig; import net.AbstractMaplePacketHandler; import net.server.coordinator.world.MapleInviteCoordinator; import net.server.coordinator.world.MapleInviteCoordinator.InviteType; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -45,26 +45,26 @@ public final class FamilyAddHandler extends AbstractMaplePacketHandler { MapleCharacter addChr = c.getChannelServer().getPlayerStorage().getCharacterByName(toAdd); MapleCharacter chr = c.getPlayer(); if(addChr == null) { - c.announce(MaplePacketCreator.sendFamilyMessage(65, 0)); + c.announce(PacketCreator.sendFamilyMessage(65, 0)); } else if(addChr == chr) { //only possible through packet editing/client editing i think? - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } else if(addChr.getMap() != chr.getMap() || (addChr.isHidden()) && chr.gmLevel() < addChr.gmLevel()) { - c.announce(MaplePacketCreator.sendFamilyMessage(69, 0)); + c.announce(PacketCreator.sendFamilyMessage(69, 0)); } else if(addChr.getLevel() <= 10) { - c.announce(MaplePacketCreator.sendFamilyMessage(77, 0)); + c.announce(PacketCreator.sendFamilyMessage(77, 0)); } else if(Math.abs(addChr.getLevel() - chr.getLevel()) > 20) { - c.announce(MaplePacketCreator.sendFamilyMessage(72, 0)); + c.announce(PacketCreator.sendFamilyMessage(72, 0)); } else if(addChr.getFamily() != null && addChr.getFamily() == chr.getFamily()) { //same family - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } else if(MapleInviteCoordinator.hasInvite(InviteType.FAMILY, addChr.getId())) { - c.announce(MaplePacketCreator.sendFamilyMessage(73, 0)); + c.announce(PacketCreator.sendFamilyMessage(73, 0)); } else if(chr.getFamily() != null && addChr.getFamily() != null && addChr.getFamily().getTotalGenerations() + chr.getFamily().getTotalGenerations() > YamlConfig.config.server.FAMILY_MAX_GENERATIONS) { - c.announce(MaplePacketCreator.sendFamilyMessage(76, 0)); + c.announce(PacketCreator.sendFamilyMessage(76, 0)); } else { MapleInviteCoordinator.createInvite(InviteType.FAMILY, chr, addChr, addChr.getId()); - addChr.getClient().announce(MaplePacketCreator.sendFamilyInvite(chr.getId(), chr.getName())); + addChr.getClient().announce(PacketCreator.sendFamilyInvite(chr.getId(), chr.getName())); chr.dropMessage("The invite has been sent."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } } diff --git a/src/main/java/net/server/channel/handlers/FamilyPreceptsHandler.java b/src/main/java/net/server/channel/handlers/FamilyPreceptsHandler.java index 7da34c29f2..68f79b3af3 100644 --- a/src/main/java/net/server/channel/handlers/FamilyPreceptsHandler.java +++ b/src/main/java/net/server/channel/handlers/FamilyPreceptsHandler.java @@ -3,7 +3,7 @@ package net.server.channel.handlers; import client.MapleClient; import client.MapleFamily; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public class FamilyPreceptsHandler extends AbstractMaplePacketHandler { @@ -17,7 +17,7 @@ public class FamilyPreceptsHandler extends AbstractMaplePacketHandler { if(newPrecepts.length() > 200) return; family.setMessage(newPrecepts, true); //family.broadcastFamilyInfoUpdate(); //probably don't need to broadcast for this? - c.announce(MaplePacketCreator.getFamilyInfo(c.getPlayer().getFamilyEntry())); + c.announce(PacketCreator.getFamilyInfo(c.getPlayer().getFamilyEntry())); } } diff --git a/src/main/java/net/server/channel/handlers/FamilySeparateHandler.java b/src/main/java/net/server/channel/handlers/FamilySeparateHandler.java index d1a69822b0..bfb72af671 100644 --- a/src/main/java/net/server/channel/handlers/FamilySeparateHandler.java +++ b/src/main/java/net/server/channel/handlers/FamilySeparateHandler.java @@ -24,7 +24,7 @@ import client.MapleFamily; import client.MapleFamilyEntry; import config.YamlConfig; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public class FamilySeparateHandler extends AbstractMaplePacketHandler { @@ -52,18 +52,18 @@ public class FamilySeparateHandler extends AbstractMaplePacketHandler { int cost = 2500 * levelDiff; cost += levelDiff * levelDiff; if(c.getPlayer().getMeso() < cost) { - c.announce(MaplePacketCreator.sendFamilyMessage(isSenior ? 81 : 80, cost)); + c.announce(PacketCreator.sendFamilyMessage(isSenior ? 81 : 80, cost)); return; } c.getPlayer().gainMeso(-cost); int repCost = separateRepCost(forkOn); senior.gainReputation(-repCost, false); if(senior.getSenior() != null) senior.getSenior().gainReputation(-(repCost/2), false); - forkOn.announceToSenior(MaplePacketCreator.serverNotice(5, forkOn.getName() + " has left the family."), true); + forkOn.announceToSenior(PacketCreator.serverNotice(5, forkOn.getName() + " has left the family."), true); forkOn.fork(); - c.announce(MaplePacketCreator.getFamilyInfo(forkOn)); //pedigree info will be requested from the client if the window is open + c.announce(PacketCreator.getFamilyInfo(forkOn)); //pedigree info will be requested from the client if the window is open forkOn.updateSeniorFamilyInfo(true); - c.announce(MaplePacketCreator.sendFamilyMessage(1, 0)); + c.announce(PacketCreator.sendFamilyMessage(1, 0)); } diff --git a/src/main/java/net/server/channel/handlers/FamilySummonResponseHandler.java b/src/main/java/net/server/channel/handlers/FamilySummonResponseHandler.java index 9f39b745f8..e01f38a2b0 100644 --- a/src/main/java/net/server/channel/handlers/FamilySummonResponseHandler.java +++ b/src/main/java/net/server/channel/handlers/FamilySummonResponseHandler.java @@ -11,7 +11,7 @@ import net.server.coordinator.world.MapleInviteCoordinator.InviteResult; import net.server.coordinator.world.MapleInviteCoordinator.InviteType; import net.server.coordinator.world.MapleInviteCoordinator.MapleInviteResult; import server.maps.MapleMap; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public class FamilySummonResponseHandler extends AbstractMaplePacketHandler { @@ -32,7 +32,7 @@ public class FamilySummonResponseHandler extends AbstractMaplePacketHandler { } else { inviterEntry.refundEntitlement(MapleFamilyEntitlement.SUMMON_FAMILY); inviterEntry.gainReputation(MapleFamilyEntitlement.SUMMON_FAMILY.getRepCost(), false); //refund rep cost if declined - inviter.announce(MaplePacketCreator.getFamilyInfo(inviterEntry)); + inviter.announce(PacketCreator.getFamilyInfo(inviterEntry)); inviter.dropMessage(5, c.getPlayer().getName() + " has denied the summon request."); } } diff --git a/src/main/java/net/server/channel/handlers/FamilyUseHandler.java b/src/main/java/net/server/channel/handlers/FamilyUseHandler.java index 344f8b541d..52a343cb03 100644 --- a/src/main/java/net/server/channel/handlers/FamilyUseHandler.java +++ b/src/main/java/net/server/channel/handlers/FamilyUseHandler.java @@ -31,7 +31,7 @@ import net.server.coordinator.world.MapleInviteCoordinator; import net.server.coordinator.world.MapleInviteCoordinator.InviteType; import server.maps.FieldLimit; import server.maps.MapleMap; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -51,7 +51,7 @@ public final class FamilyUseHandler extends AbstractMaplePacketHandler { if(entry.getReputation() < cost || entry.isEntitlementUsed(type)) { return; // shouldn't even be able to request it } - c.announce(MaplePacketCreator.getFamilyInfo(entry)); + c.announce(PacketCreator.getFamilyInfo(entry)); MapleCharacter victim; if(type == MapleFamilyEntitlement.FAMILY_REUINION || type == MapleFamilyEntitlement.SUMMON_FAMILY) { victim = c.getChannelServer().getPlayerStorage().getCharacterByName(slea.readMapleAsciiString()); @@ -67,7 +67,7 @@ public final class FamilyUseHandler extends AbstractMaplePacketHandler { c.getPlayer().changeMap(victim.getMap(), victim.getMap().getPortal(0)); useEntitlement(entry, type); } else { - c.announce(MaplePacketCreator.sendFamilyMessage(75, 0)); // wrong message, but close enough. (client should check this first anyway) + c.announce(PacketCreator.sendFamilyMessage(75, 0)); // wrong message, but close enough. (client should check this first anyway) return; } } else { @@ -75,20 +75,20 @@ public final class FamilyUseHandler extends AbstractMaplePacketHandler { && (ownMap.getForcedReturnId() == 999999999 || ownMap.getId() < 100000000) && ownMap.getEventInstance() == null) { if(MapleInviteCoordinator.hasInvite(InviteType.FAMILY_SUMMON, victim.getId())) { - c.announce(MaplePacketCreator.sendFamilyMessage(74, 0)); + c.announce(PacketCreator.sendFamilyMessage(74, 0)); return; } MapleInviteCoordinator.createInvite(InviteType.FAMILY_SUMMON, c.getPlayer(), victim, victim.getId(), c.getPlayer().getMap()); - victim.announce(MaplePacketCreator.sendFamilySummonRequest(c.getPlayer().getFamily().getName(), c.getPlayer().getName())); + victim.announce(PacketCreator.sendFamilySummonRequest(c.getPlayer().getFamily().getName(), c.getPlayer().getName())); useEntitlement(entry, type); } else { - c.announce(MaplePacketCreator.sendFamilyMessage(75, 0)); + c.announce(PacketCreator.sendFamilyMessage(75, 0)); return; } } } } else { - c.announce(MaplePacketCreator.sendFamilyMessage(67, 0)); + c.announce(PacketCreator.sendFamilyMessage(67, 0)); } } } else if(type == MapleFamilyEntitlement.FAMILY_BONDING) { @@ -133,7 +133,7 @@ public final class FamilyUseHandler extends AbstractMaplePacketHandler { private boolean useEntitlement(MapleFamilyEntry entry, MapleFamilyEntitlement entitlement) { if(entry.useEntitlement(entitlement)) { entry.gainReputation(-entitlement.getRepCost(), false); - entry.getChr().announce(MaplePacketCreator.getFamilyInfo(entry)); + entry.getChr().announce(PacketCreator.getFamilyInfo(entry)); return true; } return false; diff --git a/src/main/java/net/server/channel/handlers/FieldDamageMobHandler.java b/src/main/java/net/server/channel/handlers/FieldDamageMobHandler.java index 6eb53f5086..69b2954302 100644 --- a/src/main/java/net/server/channel/handlers/FieldDamageMobHandler.java +++ b/src/main/java/net/server/channel/handlers/FieldDamageMobHandler.java @@ -27,7 +27,7 @@ import server.life.MapleMonster; import server.life.MapleMonsterInformationProvider; import server.maps.MapleMap; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public class FieldDamageMobHandler extends AbstractMaplePacketHandler { @@ -52,7 +52,7 @@ public class FieldDamageMobHandler extends AbstractMaplePacketHandler { return; } - map.broadcastMessage(chr, MaplePacketCreator.damageMonster(mobOid, dmg), true); + map.broadcastMessage(chr, PacketCreator.damageMonster(mobOid, dmg), true); map.damageMonster(chr, mob, dmg); } } diff --git a/src/main/java/net/server/channel/handlers/FredrickHandler.java b/src/main/java/net/server/channel/handlers/FredrickHandler.java index 1e035ded11..7347eae914 100644 --- a/src/main/java/net/server/channel/handlers/FredrickHandler.java +++ b/src/main/java/net/server/channel/handlers/FredrickHandler.java @@ -24,7 +24,6 @@ package net.server.channel.handlers; import client.MapleCharacter; import client.MapleClient; import client.processor.npc.FredrickProcessor; - import net.AbstractMaplePacketHandler; import tools.data.input.SeekableLittleEndianAccessor; @@ -41,7 +40,7 @@ public class FredrickHandler extends AbstractMaplePacketHandler { switch (operation) { case 0x19: //Will never come... - //c.announce(MaplePacketCreator.getFredrick((byte) 0x24)); + //c.announce(PacketCreator.getFredrick((byte) 0x24)); break; case 0x1A: FredrickProcessor.fredrickRetrieveItems(c); diff --git a/src/main/java/net/server/channel/handlers/GeneralChatHandler.java b/src/main/java/net/server/channel/handlers/GeneralChatHandler.java index 6f56b1a16b..75c79e6c3a 100644 --- a/src/main/java/net/server/channel/handlers/GeneralChatHandler.java +++ b/src/main/java/net/server/channel/handlers/GeneralChatHandler.java @@ -29,7 +29,7 @@ import config.YamlConfig; import net.AbstractMaplePacketHandler; import tools.FilePrinter; import tools.LogHelper; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class GeneralChatHandler extends AbstractMaplePacketHandler { @@ -38,7 +38,7 @@ public final class GeneralChatHandler extends AbstractMaplePacketHandler { String s = slea.readMapleAsciiString(); MapleCharacter chr = c.getPlayer(); if(chr.getAutobanManager().getLastSpam(7) + 200 > currentServerTime()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (s.length() > Byte.MAX_VALUE && !chr.isGM()) { @@ -58,12 +58,12 @@ public final class GeneralChatHandler extends AbstractMaplePacketHandler { } if (!chr.isHidden()) { - chr.getMap().broadcastMessage(MaplePacketCreator.getChatText(chr.getId(), s, chr.getWhiteChat(), show)); + chr.getMap().broadcastMessage(PacketCreator.getChatText(chr.getId(), s, chr.getWhiteChat(), show)); if (YamlConfig.config.server.USE_ENABLE_CHAT_LOG) { LogHelper.logChat(c, "General", s); } } else { - chr.getMap().broadcastGMMessage(MaplePacketCreator.getChatText(chr.getId(), s, chr.getWhiteChat(), show)); + chr.getMap().broadcastGMMessage(PacketCreator.getChatText(chr.getId(), s, chr.getWhiteChat(), show)); if (YamlConfig.config.server.USE_ENABLE_CHAT_LOG) { LogHelper.logChat(c, "GM General", s); } diff --git a/src/main/java/net/server/channel/handlers/GiveFameHandler.java b/src/main/java/net/server/channel/handlers/GiveFameHandler.java index fadf9f8e6b..a171580708 100644 --- a/src/main/java/net/server/channel/handlers/GiveFameHandler.java +++ b/src/main/java/net/server/channel/handlers/GiveFameHandler.java @@ -23,12 +23,11 @@ package net.server.channel.handlers; import client.MapleCharacter; import client.MapleCharacter.FameStatus; -import client.autoban.AutobanFactory; import client.MapleClient; -import client.MapleStat; +import client.autoban.AutobanFactory; import net.AbstractMaplePacketHandler; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class GiveFameHandler extends AbstractMaplePacketHandler { @@ -58,7 +57,7 @@ public final class GiveFameHandler extends AbstractMaplePacketHandler { player.message("Could not process the request, since this character currently has the minimum/maximum level of fame."); } } else { - c.announce(MaplePacketCreator.giveFameErrorResponse(status == FameStatus.NOT_TODAY ? 3 : 4)); + c.announce(PacketCreator.giveFameErrorResponse(status == FameStatus.NOT_TODAY ? 3 : 4)); } } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/GrenadeEffectHandler.java b/src/main/java/net/server/channel/handlers/GrenadeEffectHandler.java index 59bdb84259..aeba09763e 100644 --- a/src/main/java/net/server/channel/handlers/GrenadeEffectHandler.java +++ b/src/main/java/net/server/channel/handlers/GrenadeEffectHandler.java @@ -19,15 +19,16 @@ */ package net.server.channel.handlers; -import client.MapleClient; import client.MapleCharacter; +import client.MapleClient; import constants.skills.Gunslinger; import constants.skills.NightWalker; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; -import tools.data.input.SeekableLittleEndianAccessor; -import java.awt.Point; import tools.FilePrinter; +import tools.PacketCreator; +import tools.data.input.SeekableLittleEndianAccessor; + +import java.awt.*; /* * @author GabrielSin @@ -46,7 +47,7 @@ public class GrenadeEffectHandler extends AbstractMaplePacketHandler { case Gunslinger.GRENADE: int skillLevel = chr.getSkillLevel(skillId); if (skillLevel > 0) { - chr.getMap().broadcastMessage(chr, MaplePacketCreator.throwGrenade(chr.getId(), position, keyDown, skillId, skillLevel), position); + chr.getMap().broadcastMessage(chr, PacketCreator.throwGrenade(chr.getId(), position, keyDown, skillId, skillLevel), position); } break; default: diff --git a/src/main/java/net/server/channel/handlers/GuildOperationHandler.java b/src/main/java/net/server/channel/handlers/GuildOperationHandler.java index 15cffe4c93..0fb36f08aa 100644 --- a/src/main/java/net/server/channel/handlers/GuildOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/GuildOperationHandler.java @@ -33,7 +33,7 @@ import net.server.guild.MapleGuild; import net.server.guild.MapleGuildResponse; import net.server.world.MapleParty; import net.server.world.World; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.util.HashSet; @@ -59,7 +59,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { int allianceId = -1; switch (type) { case 0x00: - //c.announce(MaplePacketCreator.showGuildInfo(mc)); + //c.announce(PacketCreator.showGuildInfo(mc)); break; case 0x02: if (mc.getGuildId() > 0) { @@ -140,14 +140,14 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { return; } - c.announce(MaplePacketCreator.showGuildInfo(mc)); + c.announce(PacketCreator.showGuildInfo(mc)); allianceId = mc.getGuild().getAllianceId(); if(allianceId > 0) Server.getInstance().getAlliance(allianceId).updateAlliancePackets(mc); mc.saveGuildStatus(); // update database - mc.getMap().broadcastMessage(mc, MaplePacketCreator.guildNameChanged(mc.getId(), mc.getGuild().getName())); // thanks Vcoc for pointing out an issue with updating guild tooltip to players in the map - mc.getMap().broadcastMessage(mc, MaplePacketCreator.guildMarkChanged(mc.getId(), mc.getGuild())); + mc.getMap().broadcastMessage(mc, PacketCreator.guildNameChanged(mc.getId(), mc.getGuild().getName())); // thanks Vcoc for pointing out an issue with updating guild tooltip to players in the map + mc.getMap().broadcastMessage(mc, PacketCreator.guildMarkChanged(mc.getId(), mc.getGuild())); break; case 0x07: cid = slea.readInt(); @@ -159,16 +159,16 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { allianceId = mc.getGuild().getAllianceId(); - c.announce(MaplePacketCreator.updateGP(mc.getGuildId(), 0)); + c.announce(PacketCreator.updateGP(mc.getGuildId(), 0)); Server.getInstance().leaveGuild(mc.getMGC()); - c.announce(MaplePacketCreator.showGuildInfo(null)); + c.announce(PacketCreator.showGuildInfo(null)); if(allianceId > 0) Server.getInstance().getAlliance(allianceId).updateAlliancePackets(mc); mc.getMGC().setGuildId(0); mc.getMGC().setGuildRank(5); mc.saveGuildStatus(); - mc.getMap().broadcastMessage(mc, MaplePacketCreator.guildNameChanged(mc.getId(), "")); + mc.getMap().broadcastMessage(mc, PacketCreator.guildNameChanged(mc.getId(), "")); break; case 0x08: allianceId = mc.getGuild().getAllianceId(); @@ -213,7 +213,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { return; } if (mc.getMeso() < YamlConfig.config.server.CHANGE_EMBLEM_COST) { - c.announce(MaplePacketCreator.serverNotice(1, "You do not have " + GameConstants.numberWithCommas(YamlConfig.config.server.CHANGE_EMBLEM_COST) + " mesos to change the Guild emblem.")); + c.announce(PacketCreator.serverNotice(1, "You do not have " + GameConstants.numberWithCommas(YamlConfig.config.server.CHANGE_EMBLEM_COST) + " mesos to change the Guild emblem.")); return; } short bg = slea.readShort(); @@ -224,7 +224,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { if (mc.getGuild() != null && mc.getGuild().getAllianceId() > 0) { MapleAlliance alliance = mc.getAlliance(); - Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.getGuildAlliances(alliance, c.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.getGuildAlliances(alliance, c.getWorld()), -1, -1); } mc.gainMeso(-YamlConfig.config.server.CHANGE_EMBLEM_COST, true, false, true); diff --git a/src/main/java/net/server/channel/handlers/HealOvertimeHandler.java b/src/main/java/net/server/channel/handlers/HealOvertimeHandler.java index 35ab9233d0..ade95b5eda 100644 --- a/src/main/java/net/server/channel/handlers/HealOvertimeHandler.java +++ b/src/main/java/net/server/channel/handlers/HealOvertimeHandler.java @@ -28,8 +28,8 @@ import client.autoban.AutobanManager; import net.AbstractMaplePacketHandler; import net.server.Server; import server.maps.MapleMap; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; -import tools.MaplePacketCreator; public final class HealOvertimeHandler extends AbstractMaplePacketHandler { @Override @@ -54,7 +54,7 @@ public final class HealOvertimeHandler extends AbstractMaplePacketHandler { } chr.addHP(healHP); - chr.getMap().broadcastMessage(chr, MaplePacketCreator.showHpHealed(chr.getId(), healHP), false); + chr.getMap().broadcastMessage(chr, PacketCreator.showHpHealed(chr.getId(), healHP), false); abm.spam(0, timestamp); } short healMP = slea.readShort(); diff --git a/src/main/java/net/server/channel/handlers/HiredMerchantRequest.java b/src/main/java/net/server/channel/handlers/HiredMerchantRequest.java index 160cdfff0d..64fe53fd34 100644 --- a/src/main/java/net/server/channel/handlers/HiredMerchantRequest.java +++ b/src/main/java/net/server/channel/handlers/HiredMerchantRequest.java @@ -21,21 +21,22 @@ */ package net.server.channel.handlers; -import client.inventory.ItemFactory; import client.MapleCharacter; -import java.sql.SQLException; -import java.util.Arrays; import client.MapleClient; +import client.inventory.ItemFactory; import constants.game.GameConstants; -import java.awt.Point; import net.AbstractMaplePacketHandler; -import server.maps.MaplePortal; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; import server.maps.MaplePlayerShop; -import tools.MaplePacketCreator; +import server.maps.MaplePortal; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; +import java.awt.*; +import java.sql.SQLException; +import java.util.Arrays; + /** * * @author XoticStory @@ -52,11 +53,11 @@ public final class HiredMerchantRequest extends AbstractMaplePacketHandler { MaplePlayerShop shop = mc.getPlayerShop(); if (shop != null && shop.isOwner(mc)) { - chr.announce(MaplePacketCreator.getMiniRoomError(13)); + chr.announce(PacketCreator.getMiniRoomError(13)); return; } } else { - chr.announce(MaplePacketCreator.getMiniRoomError(13)); + chr.announce(PacketCreator.getMiniRoomError(13)); return; } } @@ -64,7 +65,7 @@ public final class HiredMerchantRequest extends AbstractMaplePacketHandler { Point cpos = chr.getPosition(); MaplePortal portal = chr.getMap().findClosestTeleportPortal(cpos); if (portal != null && portal.getPosition().distance(cpos) < 120.0) { - chr.announce(MaplePacketCreator.getMiniRoomError(10)); + chr.announce(PacketCreator.getMiniRoomError(10)); return; } } catch (Exception e) { @@ -75,9 +76,9 @@ public final class HiredMerchantRequest extends AbstractMaplePacketHandler { if (!chr.hasMerchant()) { try { if (ItemFactory.MERCHANT.loadItems(chr.getId(), false).isEmpty() && chr.getMerchantMeso() == 0) { - c.announce(MaplePacketCreator.hiredMerchantBox()); + c.announce(PacketCreator.hiredMerchantBox()); } else { - chr.announce(MaplePacketCreator.retrieveFirstMessage()); + chr.announce(PacketCreator.retrieveFirstMessage()); } } catch (SQLException ex) { ex.printStackTrace(); diff --git a/src/main/java/net/server/channel/handlers/InventoryMergeHandler.java b/src/main/java/net/server/channel/handlers/InventoryMergeHandler.java index ae8c2feb3b..307e62ea04 100644 --- a/src/main/java/net/server/channel/handlers/InventoryMergeHandler.java +++ b/src/main/java/net/server/channel/handlers/InventoryMergeHandler.java @@ -21,18 +21,18 @@ */ package net.server.channel.handlers; -import config.YamlConfig; -import net.AbstractMaplePacketHandler; -import client.inventory.manipulator.MapleInventoryManipulator; -import tools.MaplePacketCreator; -import tools.data.input.SeekableLittleEndianAccessor; import client.MapleCharacter; import client.MapleClient; import client.inventory.Item; import client.inventory.MapleInventory; import client.inventory.MapleInventoryType; +import client.inventory.manipulator.MapleInventoryManipulator; +import config.YamlConfig; +import net.AbstractMaplePacketHandler; import net.server.Server; import server.MapleItemInformationProvider; +import tools.PacketCreator; +import tools.data.input.SeekableLittleEndianAccessor; public final class InventoryMergeHandler extends AbstractMaplePacketHandler { @@ -43,7 +43,7 @@ public final class InventoryMergeHandler extends AbstractMaplePacketHandler { chr.getAutobanManager().setTimestamp(2, Server.getInstance().getCurrentTimestamp(), 4); if(!YamlConfig.config.server.USE_ITEM_SORT) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -106,7 +106,7 @@ public final class InventoryMergeHandler extends AbstractMaplePacketHandler { inventory.unlockInventory(); } - c.announce(MaplePacketCreator.finishedSort(inventoryType.getType())); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.finishedSort(inventoryType.getType())); + c.announce(PacketCreator.enableActions()); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/InventorySortHandler.java b/src/main/java/net/server/channel/handlers/InventorySortHandler.java index b993695db8..e3b63fe9a0 100644 --- a/src/main/java/net/server/channel/handlers/InventorySortHandler.java +++ b/src/main/java/net/server/channel/handlers/InventorySortHandler.java @@ -28,7 +28,7 @@ import config.YamlConfig; import net.AbstractMaplePacketHandler; import net.server.Server; import server.MapleItemInformationProvider; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.util.ArrayList; @@ -267,7 +267,7 @@ public final class InventorySortHandler extends AbstractMaplePacketHandler { chr.getAutobanManager().setTimestamp(3, Server.getInstance().getCurrentTimestamp(), 4); if(!YamlConfig.config.server.USE_ITEM_SORT) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -308,8 +308,8 @@ public final class InventorySortHandler extends AbstractMaplePacketHandler { inventory.unlockInventory(); } - c.announce(MaplePacketCreator.modifyInventory(true, mods)); - c.announce(MaplePacketCreator.finishedSort2(invType)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.modifyInventory(true, mods)); + c.announce(PacketCreator.finishedSort2(invType)); + c.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/ItemMoveHandler.java b/src/main/java/net/server/channel/handlers/ItemMoveHandler.java index 959232cd98..99c4594435 100644 --- a/src/main/java/net/server/channel/handlers/ItemMoveHandler.java +++ b/src/main/java/net/server/channel/handlers/ItemMoveHandler.java @@ -23,9 +23,9 @@ package net.server.channel.handlers; import client.MapleClient; import client.inventory.MapleInventoryType; -import net.AbstractMaplePacketHandler; import client.inventory.manipulator.MapleInventoryManipulator; -import tools.MaplePacketCreator; +import net.AbstractMaplePacketHandler; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -37,7 +37,7 @@ public final class ItemMoveHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { slea.skip(4); if(c.getPlayer().getAutobanManager().getLastSpam(6) + 300 > currentServerTime()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } diff --git a/src/main/java/net/server/channel/handlers/ItemRewardHandler.java b/src/main/java/net/server/channel/handlers/ItemRewardHandler.java index 6fc7586ecf..853f0f0c6d 100644 --- a/src/main/java/net/server/channel/handlers/ItemRewardHandler.java +++ b/src/main/java/net/server/channel/handlers/ItemRewardHandler.java @@ -24,18 +24,19 @@ package net.server.channel.handlers; import client.MapleClient; import client.inventory.Item; import client.inventory.MapleInventoryType; +import client.inventory.manipulator.MapleInventoryManipulator; import constants.inventory.ItemConstants; -import java.util.List; import net.AbstractMaplePacketHandler; import net.server.Server; -import client.inventory.manipulator.MapleInventoryManipulator; import server.MapleItemInformationProvider; import server.MapleItemInformationProvider.RewardItem; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.Randomizer; import tools.data.input.SeekableLittleEndianAccessor; +import java.util.List; + /** * @author Jay Estrella * @author kevintjuh93 @@ -53,7 +54,7 @@ public final class ItemRewardHandler extends AbstractMaplePacketHandler { Pair> rewards = ii.getItemReward(itemId); for (RewardItem reward : rewards.getRight()) { if (!MapleInventoryManipulator.checkSpace(c, reward.itemid, reward.quantity, "")) { - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.announce(PacketCreator.getShowInventoryFull()); break; } if (Randomizer.nextInt(rewards.getLeft()) < reward.prob) {//Is it even possible to get an item with prob 1? @@ -71,11 +72,11 @@ public final class ItemRewardHandler extends AbstractMaplePacketHandler { String msg = reward.worldmsg; msg.replaceAll("/name", c.getPlayer().getName()); msg.replaceAll("/item", ii.getName(reward.itemid)); - Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, msg)); + Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.serverNotice(6, msg)); } break; } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/LeftKnockbackHandler.java b/src/main/java/net/server/channel/handlers/LeftKnockbackHandler.java index 7a71d85ce5..8a05b55cb0 100644 --- a/src/main/java/net/server/channel/handlers/LeftKnockbackHandler.java +++ b/src/main/java/net/server/channel/handlers/LeftKnockbackHandler.java @@ -24,7 +24,7 @@ package net.server.channel.handlers; import client.MapleClient; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -33,7 +33,7 @@ import tools.data.input.SeekableLittleEndianAccessor; */ public class LeftKnockbackHandler extends AbstractMaplePacketHandler { public void handlePacket(SeekableLittleEndianAccessor slea, final MapleClient c) { - c.announce(MaplePacketCreator.leftKnockBack()); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.leftKnockBack()); + c.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/MTSHandler.java b/src/main/java/net/server/channel/handlers/MTSHandler.java index 97fce7ec6c..2b4b3aa46b 100644 --- a/src/main/java/net/server/channel/handlers/MTSHandler.java +++ b/src/main/java/net/server/channel/handlers/MTSHandler.java @@ -34,7 +34,7 @@ import net.server.channel.Channel; import server.MTSItemInfo; import server.MapleItemInformationProvider; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; @@ -115,8 +115,8 @@ public final class MTSHandler extends AbstractMaplePacketHandler { if (rs.getInt(1) > 10) { //They have more than 10 items up for sale already! c.getPlayer().dropMessage(1, "You already have 10 items up for auction!"); c.announce(getMTS(1, 0, 0)); - c.announce(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); rs.close(); ps.close(); return; @@ -219,11 +219,11 @@ public final class MTSHandler extends AbstractMaplePacketHandler { e.printStackTrace(); } c.getPlayer().gainMeso(-5000, false); - c.announce(MaplePacketCreator.MTSConfirmSell()); + c.announce(PacketCreator.MTSConfirmSell()); c.announce(getMTS(1, 0, 0)); c.enableCSActions(); - c.announce(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); } } else if (op == 3) { //send offer for wanted item } else if (op == 4) { //list wanted item @@ -248,8 +248,8 @@ public final class MTSHandler extends AbstractMaplePacketHandler { c.getPlayer().changeTab(tab); c.getPlayer().changeType(type); c.enableCSActions(); - c.announce(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); } else if (op == 6) { //search int tab = slea.readInt(); int type = slea.readInt(); @@ -261,11 +261,11 @@ public final class MTSHandler extends AbstractMaplePacketHandler { c.getPlayer().changeType(type); c.getPlayer().changeCI(ci); c.enableCSActions(); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); c.announce(getMTSSearch(tab, type, ci, search, c.getPlayer().getCurrentPage())); - c.announce(MaplePacketCreator.showMTSCash(c.getPlayer())); - c.announce(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.announce(PacketCreator.showMTSCash(c.getPlayer())); + c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); } else if (op == 7) { //cancel sale int id = slea.readInt(); //id of the item Connection con = null; @@ -286,8 +286,8 @@ public final class MTSHandler extends AbstractMaplePacketHandler { } c.enableCSActions(); c.announce(getMTS(c.getPlayer().getCurrentTab(), c.getPlayer().getCurrentType(), c.getPlayer().getCurrentPage())); - c.announce(MaplePacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); } else if (op == 8) { //transfer item from transfer inv. int id = slea.readInt(); //id of the item Connection con = null; @@ -346,8 +346,8 @@ public final class MTSHandler extends AbstractMaplePacketHandler { c.enableCSActions(); c.announce(getCart(c.getPlayer().getId())); c.announce(getMTS(c.getPlayer().getCurrentTab(), c.getPlayer().getCurrentType(), c.getPlayer().getCurrentPage())); - c.announce(MaplePacketCreator.MTSConfirmTransfer(i.getQuantity(), i.getPosition())); - c.announce(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.announce(PacketCreator.MTSConfirmTransfer(i.getQuantity(), i.getPosition())); + c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); } rs.close(); ps.close(); @@ -387,9 +387,9 @@ public final class MTSHandler extends AbstractMaplePacketHandler { } c.announce(getMTS(c.getPlayer().getCurrentTab(), c.getPlayer().getCurrentType(), c.getPlayer().getCurrentPage())); c.enableCSActions(); - c.announce(MaplePacketCreator.enableActions()); - c.announce(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.announce(PacketCreator.enableActions()); + c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); } else if (op == 10) { //delete from cart int id = slea.readInt(); //id of the item Connection con = null; @@ -406,8 +406,8 @@ public final class MTSHandler extends AbstractMaplePacketHandler { } c.announce(getCart(c.getPlayer().getId())); c.enableCSActions(); - c.announce(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); } else if (op == 12) { //put item up for auction } else if (op == 13) { //cancel wanted cart thing } else if (op == 14) { //buy auction item now @@ -459,13 +459,13 @@ public final class MTSHandler extends AbstractMaplePacketHandler { c.getPlayer().getCashShop().gainCash(4, -price); c.enableCSActions(); c.announce(getMTS(c.getPlayer().getCurrentTab(), c.getPlayer().getCurrentType(), c.getPlayer().getCurrentPage())); - c.announce(MaplePacketCreator.MTSConfirmBuy()); - c.announce(MaplePacketCreator.showMTSCash(c.getPlayer())); - c.announce(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.MTSConfirmBuy()); + c.announce(PacketCreator.showMTSCash(c.getPlayer())); + c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.announce(PacketCreator.enableActions()); } else { - c.announce(MaplePacketCreator.MTSFailBuy()); + c.announce(PacketCreator.MTSFailBuy()); } } rs.close(); @@ -473,7 +473,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler { con.close(); } catch (SQLException e) { e.printStackTrace(); - c.announce(MaplePacketCreator.MTSFailBuy()); + c.announce(PacketCreator.MTSFailBuy()); } } else if (op == 17) { //buy from cart int id = slea.readInt(); //id of the item @@ -520,12 +520,12 @@ public final class MTSHandler extends AbstractMaplePacketHandler { c.getPlayer().getCashShop().gainCash(4, -price); c.announce(getCart(c.getPlayer().getId())); c.enableCSActions(); - c.announce(MaplePacketCreator.MTSConfirmBuy()); - c.announce(MaplePacketCreator.showMTSCash(c.getPlayer())); - c.announce(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.announce(PacketCreator.MTSConfirmBuy()); + c.announce(PacketCreator.showMTSCash(c.getPlayer())); + c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); } else { - c.announce(MaplePacketCreator.MTSFailBuy()); + c.announce(PacketCreator.MTSFailBuy()); } } rs.close(); @@ -533,13 +533,13 @@ public final class MTSHandler extends AbstractMaplePacketHandler { con.close(); } catch (SQLException e) { e.printStackTrace(); - c.announce(MaplePacketCreator.MTSFailBuy()); + c.announce(PacketCreator.MTSFailBuy()); } } else { System.out.println("Unhandled OP(MTS): " + op + " Packet: " + slea.toString()); } } else { - c.announce(MaplePacketCreator.showMTSCash(c.getPlayer())); + c.announce(PacketCreator.showMTSCash(c.getPlayer())); } } @@ -668,7 +668,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler { } catch (SQLException e) { e.printStackTrace(); } - return MaplePacketCreator.sendMTS(items, 4, 0, 0, pages); + return PacketCreator.sendMTS(items, 4, 0, 0, pages); } public List getTransfer(int cid) { @@ -803,7 +803,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler { } catch (SQLException e) { e.printStackTrace(); } - return MaplePacketCreator.sendMTS(items, tab, type, page, pages); // resniff + return PacketCreator.sendMTS(items, tab, type, page, pages); // resniff } public byte[] getMTSSearch(int tab, int type, int cOi, String search, int page) { @@ -904,6 +904,6 @@ public final class MTSHandler extends AbstractMaplePacketHandler { } catch (SQLException e) { e.printStackTrace(); } - return MaplePacketCreator.sendMTS(items, tab, type, page, pages); + return PacketCreator.sendMTS(items, tab, type, page, pages); } } diff --git a/src/main/java/net/server/channel/handlers/MagicDamageHandler.java b/src/main/java/net/server/channel/handlers/MagicDamageHandler.java index b1f9c56303..72f00f05f4 100644 --- a/src/main/java/net/server/channel/handlers/MagicDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/MagicDamageHandler.java @@ -21,11 +21,7 @@ */ package net.server.channel.handlers; -import client.MapleBuffStat; -import client.MapleCharacter; -import client.MapleClient; -import client.Skill; -import client.SkillFactory; +import client.*; import config.YamlConfig; import constants.game.GameConstants; import constants.skills.Bishop; @@ -33,7 +29,7 @@ import constants.skills.Evan; import constants.skills.FPArchMage; import constants.skills.ILArchMage; import server.MapleStatEffect; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class MagicDamageHandler extends AbstractDealDamageHandler { @@ -59,11 +55,11 @@ public final class MagicDamageHandler extends AbstractDealDamageHandler { if (GameConstants.isDojo(chr.getMap().getId()) && attack.numAttacked > 0) { chr.setDojoEnergy(chr.getDojoEnergy() + + YamlConfig.config.server.DOJO_ENERGY_ATK); - c.announce(MaplePacketCreator.getEnergy("energy", chr.getDojoEnergy())); + c.announce(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); } int charge = (attack.skill == Evan.FIRE_BREATH || attack.skill == Evan.ICE_BREATH || attack.skill == FPArchMage.BIG_BANG || attack.skill == ILArchMage.BIG_BANG || attack.skill == Bishop.BIG_BANG) ? attack.charge : -1; - byte[] packet = MaplePacketCreator.magicAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, attack.allDamage, charge, attack.speed, attack.direction, attack.display); + byte[] packet = PacketCreator.magicAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, attack.allDamage, charge, attack.speed, attack.direction, attack.display); chr.getMap().broadcastMessage(chr, packet, false, true); MapleStatEffect effect = attack.getAttackEffect(chr, null); @@ -73,7 +69,7 @@ public final class MagicDamageHandler extends AbstractDealDamageHandler { if (chr.skillIsCooling(attack.skill)) { return; } else { - c.announce(MaplePacketCreator.skillCooldown(attack.skill, effect_.getCooldown())); + c.announce(PacketCreator.skillCooldown(attack.skill, effect_.getCooldown())); chr.addCooldown(attack.skill, currentServerTime(), effect_.getCooldown() * 1000); } } diff --git a/src/main/java/net/server/channel/handlers/MesoDropHandler.java b/src/main/java/net/server/channel/handlers/MesoDropHandler.java index e401d00582..cd37bc745f 100644 --- a/src/main/java/net/server/channel/handlers/MesoDropHandler.java +++ b/src/main/java/net/server/channel/handlers/MesoDropHandler.java @@ -21,11 +21,11 @@ */ package net.server.channel.handlers; -import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; -import tools.data.input.SeekableLittleEndianAccessor; import client.MapleCharacter; import client.MapleClient; +import net.AbstractMaplePacketHandler; +import tools.PacketCreator; +import tools.data.input.SeekableLittleEndianAccessor; /** * @@ -37,7 +37,7 @@ public final class MesoDropHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { MapleCharacter player = c.getPlayer(); if (!player.isAlive()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } slea.skip(4); @@ -48,14 +48,14 @@ public final class MesoDropHandler extends AbstractMaplePacketHandler { if (meso <= player.getMeso() && meso > 9 && meso < 50001) { player.gainMeso(-meso, false, true, false); } else { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } } finally { c.releaseClient(); } } else { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } diff --git a/src/main/java/net/server/channel/handlers/MessengerHandler.java b/src/main/java/net/server/channel/handlers/MessengerHandler.java index e30b9a8aca..62efac1f3b 100644 --- a/src/main/java/net/server/channel/handlers/MessengerHandler.java +++ b/src/main/java/net/server/channel/handlers/MessengerHandler.java @@ -31,7 +31,7 @@ import net.server.coordinator.world.MapleInviteCoordinator.MapleInviteResult; import net.server.world.MapleMessenger; import net.server.world.MapleMessengerCharacter; import net.server.world.World; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class MessengerHandler extends AbstractMaplePacketHandler { @@ -82,30 +82,30 @@ public final class MessengerHandler extends AbstractMaplePacketHandler { break; case 0x03: if (messenger == null) { - c.announce(MaplePacketCreator.messengerChat(player.getName() + " : This Maple Messenger is currently unavailable. Please quit this chat.")); + c.announce(PacketCreator.messengerChat(player.getName() + " : This Maple Messenger is currently unavailable. Please quit this chat.")); } else if (messenger.getMembers().size() < 3) { input = slea.readMapleAsciiString(); MapleCharacter target = c.getChannelServer().getPlayerStorage().getCharacterByName(input); if (target != null) { if (target.getMessenger() == null) { if (MapleInviteCoordinator.createInvite(InviteType.MESSENGER, c.getPlayer(), messenger.getId(), target.getId())) { - target.getClient().announce(MaplePacketCreator.messengerInvite(c.getPlayer().getName(), messenger.getId())); - c.announce(MaplePacketCreator.messengerNote(input, 4, 1)); + target.getClient().announce(PacketCreator.messengerInvite(c.getPlayer().getName(), messenger.getId())); + c.announce(PacketCreator.messengerNote(input, 4, 1)); } else { - c.announce(MaplePacketCreator.messengerChat(player.getName() + " : " + input + " is already managing a Maple Messenger invitation")); + c.announce(PacketCreator.messengerChat(player.getName() + " : " + input + " is already managing a Maple Messenger invitation")); } } else { - c.announce(MaplePacketCreator.messengerChat(player.getName() + " : " + input + " is already using Maple Messenger")); + c.announce(PacketCreator.messengerChat(player.getName() + " : " + input + " is already using Maple Messenger")); } } else { if (world.find(input) > -1) { world.messengerInvite(c.getPlayer().getName(), messenger.getId(), input, c.getChannel()); } else { - c.announce(MaplePacketCreator.messengerNote(input, 4, 0)); + c.announce(PacketCreator.messengerNote(input, 4, 0)); } } } else { - c.announce(MaplePacketCreator.messengerChat(player.getName() + " : You cannot have more than 3 people in the Maple Messenger")); + c.announce(PacketCreator.messengerChat(player.getName() + " : You cannot have more than 3 people in the Maple Messenger")); } break; case 0x05: diff --git a/src/main/java/net/server/channel/handlers/MobDamageMobFriendlyHandler.java b/src/main/java/net/server/channel/handlers/MobDamageMobFriendlyHandler.java index 39c318e64b..ec5a787e86 100644 --- a/src/main/java/net/server/channel/handlers/MobDamageMobFriendlyHandler.java +++ b/src/main/java/net/server/channel/handlers/MobDamageMobFriendlyHandler.java @@ -21,14 +21,14 @@ */ package net.server.channel.handlers; +import client.MapleClient; import net.AbstractMaplePacketHandler; import scripting.event.EventInstanceManager; import server.life.MapleMonster; import server.maps.MapleMap; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; import tools.data.input.SeekableLittleEndianAccessor; -import client.MapleClient; /** * @@ -53,19 +53,19 @@ public final class MobDamageMobFriendlyHandler extends AbstractMaplePacketHandle if (monster.getHp() - damage < 1) { // friendly dies if(monster.getId() == 9300102) { - map.broadcastMessage(MaplePacketCreator.serverNotice(6, "The Watch Hog has been injured by the aliens. Better luck next time...")); + map.broadcastMessage(PacketCreator.serverNotice(6, "The Watch Hog has been injured by the aliens. Better luck next time...")); } else if (monster.getId() == 9300061) { //moon bunny - map.broadcastMessage(MaplePacketCreator.serverNotice(6, "The Moon Bunny went home because he was sick.")); + map.broadcastMessage(PacketCreator.serverNotice(6, "The Moon Bunny went home because he was sick.")); } else if(monster.getId() == 9300093) { //tylus - map.broadcastMessage(MaplePacketCreator.serverNotice(6, "Tylus has fallen by the overwhelming forces of the ambush.")); + map.broadcastMessage(PacketCreator.serverNotice(6, "Tylus has fallen by the overwhelming forces of the ambush.")); } else if(monster.getId() == 9300137) { //juliet - map.broadcastMessage(MaplePacketCreator.serverNotice(6, "Juliet has fainted in the middle of the combat.")); + map.broadcastMessage(PacketCreator.serverNotice(6, "Juliet has fainted in the middle of the combat.")); } else if(monster.getId() == 9300138) { //romeo - map.broadcastMessage(MaplePacketCreator.serverNotice(6, "Romeo has fainted in the middle of the combat.")); + map.broadcastMessage(PacketCreator.serverNotice(6, "Romeo has fainted in the middle of the combat.")); } else if(monster.getId() == 9400322 || monster.getId() == 9400327 || monster.getId() == 9400332) { //snowman - map.broadcastMessage(MaplePacketCreator.serverNotice(6, "The Snowman has melted on the heat of the battle.")); + map.broadcastMessage(PacketCreator.serverNotice(6, "The Snowman has melted on the heat of the battle.")); } else if(monster.getId() == 9300162) { //delli - map.broadcastMessage(MaplePacketCreator.serverNotice(6, "Delli vanished after the ambush, sheets still laying on the ground...")); + map.broadcastMessage(PacketCreator.serverNotice(6, "Delli vanished after the ambush, sheets still laying on the ground...")); } map.killFriendlies(monster); @@ -83,7 +83,7 @@ public final class MobDamageMobFriendlyHandler extends AbstractMaplePacketHandle map.removeMapObject(monster); } - map.broadcastMessage(MaplePacketCreator.MobDamageMobFriendly(monster, damage, remainingHp), monster.getPosition()); - c.announce(MaplePacketCreator.enableActions()); + map.broadcastMessage(PacketCreator.MobDamageMobFriendly(monster, damage, remainingHp), monster.getPosition()); + c.announce(PacketCreator.enableActions()); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/MobDamageMobHandler.java b/src/main/java/net/server/channel/handlers/MobDamageMobHandler.java index f6d8ac7b0d..989063f3f2 100644 --- a/src/main/java/net/server/channel/handlers/MobDamageMobHandler.java +++ b/src/main/java/net/server/channel/handlers/MobDamageMobHandler.java @@ -21,9 +21,8 @@ */ package net.server.channel.handlers; -import java.util.Map; -import client.MapleClient; import client.MapleCharacter; +import client.MapleClient; import client.autoban.AutobanFactory; import client.status.MonsterStatus; import client.status.MonsterStatusEffect; @@ -32,9 +31,11 @@ import server.life.MapleMonster; import server.life.MapleMonsterInformationProvider; import server.maps.MapleMap; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; +import java.util.Map; + /** * * @author Jay Estrella @@ -65,7 +66,7 @@ public final class MobDamageMobHandler extends AbstractMaplePacketHandler { } map.damageMonster(chr, damaged, dmg); - map.broadcastMessage(chr, MaplePacketCreator.damageMonster(to, dmg), false); + map.broadcastMessage(chr, PacketCreator.damageMonster(to, dmg), false); } } diff --git a/src/main/java/net/server/channel/handlers/MonsterBombHandler.java b/src/main/java/net/server/channel/handlers/MonsterBombHandler.java index 56568d1f9d..7b1d637214 100644 --- a/src/main/java/net/server/channel/handlers/MonsterBombHandler.java +++ b/src/main/java/net/server/channel/handlers/MonsterBombHandler.java @@ -24,7 +24,7 @@ package net.server.channel.handlers; import client.MapleClient; import net.AbstractMaplePacketHandler; import server.life.MapleMonster; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class MonsterBombHandler extends AbstractMaplePacketHandler { @@ -36,7 +36,7 @@ public final class MonsterBombHandler extends AbstractMaplePacketHandler { return; } if (monster.getId() == 8500003 || monster.getId() == 8500004) { - monster.getMap().broadcastMessage(MaplePacketCreator.killMonster(monster.getObjectId(), 4)); + monster.getMap().broadcastMessage(PacketCreator.killMonster(monster.getObjectId(), 4)); c.getPlayer().getMap().removeMapObject(oid); } } diff --git a/src/main/java/net/server/channel/handlers/MonsterBookCoverHandler.java b/src/main/java/net/server/channel/handlers/MonsterBookCoverHandler.java index ebe97ea7d7..abb60a2b92 100644 --- a/src/main/java/net/server/channel/handlers/MonsterBookCoverHandler.java +++ b/src/main/java/net/server/channel/handlers/MonsterBookCoverHandler.java @@ -23,15 +23,15 @@ package net.server.channel.handlers; import client.MapleClient; import net.AbstractMaplePacketHandler; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; -import tools.MaplePacketCreator; public final class MonsterBookCoverHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { int id = slea.readInt(); if (id == 0 || id / 10000 == 238) { c.getPlayer().setMonsterBookCover(id); - c.announce(MaplePacketCreator.changeCover(id)); + c.announce(PacketCreator.changeCover(id)); } } } diff --git a/src/main/java/net/server/channel/handlers/MonsterCarnivalHandler.java b/src/main/java/net/server/channel/handlers/MonsterCarnivalHandler.java index 7878dd3254..912aac9463 100644 --- a/src/main/java/net/server/channel/handlers/MonsterCarnivalHandler.java +++ b/src/main/java/net/server/channel/handlers/MonsterCarnivalHandler.java @@ -24,8 +24,6 @@ package net.server.channel.handlers; import client.MapleCharacter; import client.MapleClient; import client.MapleDisease; -import java.awt.Point; -import java.util.List; import net.AbstractMaplePacketHandler; import net.server.world.MapleParty; import net.server.world.MaplePartyCharacter; @@ -34,10 +32,13 @@ import server.life.MapleMonster; import server.partyquest.MapleCarnivalFactory; import server.partyquest.MapleCarnivalFactory.MCSkill; import server.partyquest.MonsterCarnival; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; +import java.awt.*; +import java.util.List; + /** *@author Drago (Dragohe4rt) @@ -56,8 +57,8 @@ public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler { if (tab == 0) { final List> mobs = c.getPlayer().getMap().getMobsToSpawn(); if (num >= mobs.size() || c.getPlayer().getCP() < mobs.get(num).right) { - c.announce(MaplePacketCreator.CPQMessage((byte) 1)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.CPQMessage((byte) 1)); + c.announce(PacketCreator.enableActions()); return; } @@ -65,8 +66,8 @@ public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler { MonsterCarnival mcpq = c.getPlayer().getMonsterCarnival(); if (mcpq != null) { if (!mcpq.canSummonR() && c.getPlayer().getTeam() == 0 || !mcpq.canSummonB() && c.getPlayer().getTeam() == 1) { - c.announce(MaplePacketCreator.CPQMessage((byte) 2)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.CPQMessage((byte) 2)); + c.announce(PacketCreator.enableActions()); return; } @@ -81,7 +82,7 @@ public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler { c.getPlayer().getMap().addMonsterSpawn(mob, 1, c.getPlayer().getTeam()); c.getPlayer().getMap().addAllMonsterSpawn(mob, 1, c.getPlayer().getTeam()); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } neededCP = mobs.get(num).right; @@ -89,13 +90,13 @@ public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler { final List skillid = c.getPlayer().getMap().getSkillIds(); if (num >= skillid.size()) { c.getPlayer().dropMessage(5, "An unexpected error has occurred."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } final MCSkill skill = MapleCarnivalFactory.getInstance().getSkill(skillid.get(num)); //ugh wtf if (skill == null || c.getPlayer().getCP() < skill.cpLoss) { - c.announce(MaplePacketCreator.CPQMessage((byte) 1)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.CPQMessage((byte) 1)); + c.announce(PacketCreator.enableActions()); return; } final MapleDisease dis = skill.getDisease(); @@ -130,20 +131,20 @@ public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler { } } neededCP = skill.cpLoss; - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } else if (tab == 2) { //protectors final MCSkill skill = MapleCarnivalFactory.getInstance().getGuardian(num); if (skill == null || c.getPlayer().getCP() < skill.cpLoss) { - c.announce(MaplePacketCreator.CPQMessage((byte) 1)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.CPQMessage((byte) 1)); + c.announce(PacketCreator.enableActions()); return; } MonsterCarnival mcpq = c.getPlayer().getMonsterCarnival(); if (mcpq != null) { if (!mcpq.canGuardianR() && c.getPlayer().getTeam() == 0 || !mcpq.canGuardianB() && c.getPlayer().getTeam() == 1) { - c.announce(MaplePacketCreator.CPQMessage((byte) 2)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.CPQMessage((byte) 2)); + c.announce(PacketCreator.enableActions()); return; } @@ -151,17 +152,17 @@ public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler { if (success != 1) { switch (success) { case -1: - c.announce(MaplePacketCreator.CPQMessage((byte) 3)); + c.announce(PacketCreator.CPQMessage((byte) 3)); break; case 0: - c.announce(MaplePacketCreator.CPQMessage((byte) 4)); + c.announce(PacketCreator.CPQMessage((byte) 4)); break; default: - c.announce(MaplePacketCreator.CPQMessage((byte) 3)); + c.announce(PacketCreator.CPQMessage((byte) 3)); } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } else { neededCP = skill.cpLoss; @@ -169,7 +170,7 @@ public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler { } } c.getPlayer().gainCP(-neededCP); - c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.playerSummoned(c.getPlayer().getName(), tab, num)); + c.getPlayer().getMap().broadcastMessage(PacketCreator.playerSummoned(c.getPlayer().getName(), tab, num)); }catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/net/server/channel/handlers/MoveDragonHandler.java b/src/main/java/net/server/channel/handlers/MoveDragonHandler.java index d66e0abac0..2195e42d76 100644 --- a/src/main/java/net/server/channel/handlers/MoveDragonHandler.java +++ b/src/main/java/net/server/channel/handlers/MoveDragonHandler.java @@ -21,15 +21,15 @@ along with this program. If not, see . */ package net.server.channel.handlers; -import java.awt.Point; - import client.MapleCharacter; import client.MapleClient; import server.maps.MapleDragon; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import tools.exceptions.EmptyMovementException; +import java.awt.*; + public class MoveDragonHandler extends AbstractMovementPacketHandler { @Override @@ -45,9 +45,9 @@ public class MoveDragonHandler extends AbstractMovementPacketHandler { slea.seek(movementDataStart); if (chr.isHidden()) { - chr.getMap().broadcastGMMessage(chr, MaplePacketCreator.moveDragon(dragon, startPos, slea, movementDataLength)); + chr.getMap().broadcastGMMessage(chr, PacketCreator.moveDragon(dragon, startPos, slea, movementDataLength)); } else { - chr.getMap().broadcastMessage(chr, MaplePacketCreator.moveDragon(dragon, startPos, slea, movementDataLength), dragon.getPosition()); + chr.getMap().broadcastMessage(chr, PacketCreator.moveDragon(dragon, startPos, slea, movementDataLength), dragon.getPosition()); } } catch (EmptyMovementException e) {} } diff --git a/src/main/java/net/server/channel/handlers/MoveLifeHandler.java b/src/main/java/net/server/channel/handlers/MoveLifeHandler.java index 370bc3011b..bd0d6ba87c 100644 --- a/src/main/java/net/server/channel/handlers/MoveLifeHandler.java +++ b/src/main/java/net/server/channel/handlers/MoveLifeHandler.java @@ -23,26 +23,24 @@ package net.server.channel.handlers; import client.MapleCharacter; import client.MapleClient; -import java.awt.Point; -import java.util.LinkedList; -import java.util.List; - import config.YamlConfig; import server.life.MapleMonster; import server.life.MapleMonsterInformationProvider; -//import server.life.MobAttackInfo; -//import server.life.MobAttackInfoFactory; import server.life.MobSkill; import server.life.MobSkillFactory; import server.maps.MapleMap; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.Randomizer; import tools.data.input.SeekableLittleEndianAccessor; import tools.exceptions.EmptyMovementException; +import java.awt.*; +import java.util.LinkedList; +import java.util.List; + /** * @author Danny (Leifde) * @author ExtremeDevilz @@ -152,9 +150,9 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler { if (aggro == null) return; if (nextUse != null) { - c.announce(MaplePacketCreator.moveMonsterResponse(objectid, moveid, mobMp, aggro, nextSkillId, nextSkillLevel)); + c.announce(PacketCreator.moveMonsterResponse(objectid, moveid, mobMp, aggro, nextSkillId, nextSkillLevel)); } else { - c.announce(MaplePacketCreator.moveMonsterResponse(objectid, moveid, mobMp, aggro)); + c.announce(PacketCreator.moveMonsterResponse(objectid, moveid, mobMp, aggro)); } @@ -168,7 +166,7 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler { System.out.println((isSkill ? "SKILL " : (isAttack ? "ATTCK " : " ")) + "castPos: " + castPos + " rawAct: " + rawActivity + " opt: " + pOption + " skillID: " + useSkillId + " skillLV: " + useSkillLevel + " " + "allowSkill: " + nextMovementCouldBeSkill + " mobMp: " + mobMp); } - map.broadcastMessage(player, MaplePacketCreator.moveMonster(objectid, nextMovementCouldBeSkill, rawActivity, useSkillId, useSkillLevel, pOption, startPos, slea, movementDataLength), serverStartPos); + map.broadcastMessage(player, PacketCreator.moveMonster(objectid, nextMovementCouldBeSkill, rawActivity, useSkillId, useSkillLevel, pOption, startPos, slea, movementDataLength), serverStartPos); //updatePosition(res, monster, -2); //does this need to be done after the packet is broadcast? map.moveMonster(monster, monster.getPosition()); } catch (EmptyMovementException e) {} diff --git a/src/main/java/net/server/channel/handlers/MovePetHandler.java b/src/main/java/net/server/channel/handlers/MovePetHandler.java index fd8b120ab7..2cd3a154e8 100644 --- a/src/main/java/net/server/channel/handlers/MovePetHandler.java +++ b/src/main/java/net/server/channel/handlers/MovePetHandler.java @@ -21,14 +21,15 @@ */ package net.server.channel.handlers; -import java.util.List; import client.MapleCharacter; import client.MapleClient; import server.movement.LifeMovementFragment; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import tools.exceptions.EmptyMovementException; +import java.util.List; + public final class MovePetHandler extends AbstractMovementPacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { @@ -48,6 +49,6 @@ public final class MovePetHandler extends AbstractMovementPacketHandler { return; } player.getPet(slot).updatePosition(res); - player.getMap().broadcastMessage(player, MaplePacketCreator.movePet(player.getId(), petId, slot, res), false); + player.getMap().broadcastMessage(player, PacketCreator.movePet(player.getId(), petId, slot, res), false); } } diff --git a/src/main/java/net/server/channel/handlers/MovePlayerHandler.java b/src/main/java/net/server/channel/handlers/MovePlayerHandler.java index 85fc546951..058ee194c5 100644 --- a/src/main/java/net/server/channel/handlers/MovePlayerHandler.java +++ b/src/main/java/net/server/channel/handlers/MovePlayerHandler.java @@ -22,7 +22,7 @@ package net.server.channel.handlers; import client.MapleClient; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import tools.exceptions.EmptyMovementException; @@ -38,9 +38,9 @@ public final class MovePlayerHandler extends AbstractMovementPacketHandler { c.getPlayer().getMap().movePlayer(c.getPlayer(), c.getPlayer().getPosition()); if (c.getPlayer().isHidden()) { - c.getPlayer().getMap().broadcastGMMessage(c.getPlayer(), MaplePacketCreator.movePlayer(c.getPlayer().getId(), slea, movementDataLength), false); + c.getPlayer().getMap().broadcastGMMessage(c.getPlayer(), PacketCreator.movePlayer(c.getPlayer().getId(), slea, movementDataLength), false); } else { - c.getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.movePlayer(c.getPlayer().getId(), slea, movementDataLength), false); + c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.movePlayer(c.getPlayer().getId(), slea, movementDataLength), false); } } catch (EmptyMovementException e) {} } diff --git a/src/main/java/net/server/channel/handlers/MoveSummonHandler.java b/src/main/java/net/server/channel/handlers/MoveSummonHandler.java index a6cf0a4420..2d74ea8ae6 100644 --- a/src/main/java/net/server/channel/handlers/MoveSummonHandler.java +++ b/src/main/java/net/server/channel/handlers/MoveSummonHandler.java @@ -21,16 +21,16 @@ */ package net.server.channel.handlers; -import java.awt.Point; -import java.util.Collection; - import client.MapleCharacter; import client.MapleClient; import server.maps.MapleSummon; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import tools.exceptions.EmptyMovementException; +import java.awt.*; +import java.util.Collection; + public final class MoveSummonHandler extends AbstractMovementPacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { @@ -52,7 +52,7 @@ public final class MoveSummonHandler extends AbstractMovementPacketHandler { long movementDataLength = slea.getPosition() - movementDataStart; //how many bytes were read by updatePosition slea.seek(movementDataStart); - player.getMap().broadcastMessage(player, MaplePacketCreator.moveSummon(player.getId(), oid, startPos, slea, movementDataLength), summon.getPosition()); + player.getMap().broadcastMessage(player, PacketCreator.moveSummon(player.getId(), oid, startPos, slea, movementDataLength), summon.getPosition()); } catch (EmptyMovementException e) {} } } diff --git a/src/main/java/net/server/channel/handlers/MultiChatHandler.java b/src/main/java/net/server/channel/handlers/MultiChatHandler.java index df75fd41b5..c9d98c2aca 100644 --- a/src/main/java/net/server/channel/handlers/MultiChatHandler.java +++ b/src/main/java/net/server/channel/handlers/MultiChatHandler.java @@ -30,7 +30,7 @@ import net.server.Server; import net.server.world.World; import tools.FilePrinter; import tools.LogHelper; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class MultiChatHandler extends AbstractMaplePacketHandler { @@ -73,7 +73,7 @@ public final class MultiChatHandler extends AbstractMaplePacketHandler { } else if (type == 3 && player.getGuild() != null) { int allianceId = player.getGuild().getAllianceId(); if (allianceId > 0) { - Server.getInstance().allianceMessage(allianceId, MaplePacketCreator.multiChat(player.getName(), chattext, 3), player.getId(), -1); + Server.getInstance().allianceMessage(allianceId, PacketCreator.multiChat(player.getName(), chattext, 3), player.getId(), -1); if (YamlConfig.config.server.USE_ENABLE_CHAT_LOG) { LogHelper.logChat(c, "Ally", chattext); } diff --git a/src/main/java/net/server/channel/handlers/NPCTalkHandler.java b/src/main/java/net/server/channel/handlers/NPCTalkHandler.java index 73fec20467..a283e495b2 100644 --- a/src/main/java/net/server/channel/handlers/NPCTalkHandler.java +++ b/src/main/java/net/server/channel/handlers/NPCTalkHandler.java @@ -27,22 +27,22 @@ import config.YamlConfig; import net.AbstractMaplePacketHandler; import scripting.npc.NPCScriptManager; import server.life.MapleNPC; -import server.maps.MapleMapObject; import server.life.MaplePlayerNPC; +import server.maps.MapleMapObject; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class NPCTalkHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { if (!c.getPlayer().isAlive()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if(currentServerTime() - c.getPlayer().getNpcCooldown() < YamlConfig.config.server.BLOCK_NPC_RACE_CONDT) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -56,7 +56,7 @@ public final class NPCTalkHandler extends AbstractMaplePacketHandler { DueyProcessor.dueySendTalk(c, false); } else { if (c.getCM() != null || c.getQM() != null) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -74,7 +74,7 @@ public final class NPCTalkHandler extends AbstractMaplePacketHandler { FilePrinter.printError(FilePrinter.NPC_UNCODED, "NPC " + npc.getName() + "(" + npc.getId() + ") is not coded."); return; } else if (c.getPlayer().getShop() != null) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } diff --git a/src/main/java/net/server/channel/handlers/NewYearCardHandler.java b/src/main/java/net/server/channel/handlers/NewYearCardHandler.java index af7d3102bb..0c351feed2 100644 --- a/src/main/java/net/server/channel/handlers/NewYearCardHandler.java +++ b/src/main/java/net/server/channel/handlers/NewYearCardHandler.java @@ -19,21 +19,21 @@ */ package net.server.channel.handlers; -import constants.inventory.ItemConstants; - import client.MapleCharacter; import client.MapleClient; import client.inventory.Item; import client.newyear.NewYearCardRecord; +import constants.inventory.ItemConstants; +import net.AbstractMaplePacketHandler; +import net.server.Server; +import tools.DatabaseConnection; +import tools.PacketCreator; +import tools.data.input.SeekableLittleEndianAccessor; + import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import net.AbstractMaplePacketHandler; -import net.server.Server; -import tools.DatabaseConnection; -import tools.MaplePacketCreator; -import tools.data.input.SeekableLittleEndianAccessor; /** * @@ -72,21 +72,21 @@ public final class NewYearCardHandler extends AbstractMaplePacketHandler { Server.getInstance().setNewYearCard(newyear); newyear.startNewYearCardTask(); - player.announce(MaplePacketCreator.onNewYearCardRes(player, newyear, 4, 0)); // successfully sent + player.announce(PacketCreator.onNewYearCardRes(player, newyear, 4, 0)); // successfully sent } else { - player.announce(MaplePacketCreator.onNewYearCardRes(player, -1, 5, 0xF)); // cannot send to yourself + player.announce(PacketCreator.onNewYearCardRes(player, -1, 5, 0xF)); // cannot send to yourself } } else { - player.announce(MaplePacketCreator.onNewYearCardRes(player, -1, 5, 0x13)); // cannot find such character + player.announce(PacketCreator.onNewYearCardRes(player, -1, 5, 0x13)); // cannot find such character } } else { - player.announce(MaplePacketCreator.onNewYearCardRes(player, -1, 5, 0x10)); // inventory full + player.announce(PacketCreator.onNewYearCardRes(player, -1, 5, 0x10)); // inventory full } } else { - player.announce(MaplePacketCreator.onNewYearCardRes(player, -1, 5, status)); // item and inventory errors + player.announce(PacketCreator.onNewYearCardRes(player, -1, 5, status)); // item and inventory errors } } else { - player.announce(MaplePacketCreator.onNewYearCardRes(player, -1, 5, 0x11)); // have no card to send + player.announce(PacketCreator.onNewYearCardRes(player, -1, 5, 0x11)); // have no card to send } } else { //receiver accepted the card int cardid = slea.readInt(); @@ -103,17 +103,17 @@ public final class NewYearCardHandler extends AbstractMaplePacketHandler { if(!newyear.getMessage().isEmpty()) player.dropMessage(6, "[New Year] " + newyear.getSenderName() + ": " + newyear.getMessage()); player.addNewYearRecord(newyear); - player.announce(MaplePacketCreator.onNewYearCardRes(player, newyear, 6, 0)); // successfully rcvd + player.announce(PacketCreator.onNewYearCardRes(player, newyear, 6, 0)); // successfully rcvd - player.getMap().broadcastMessage(MaplePacketCreator.onNewYearCardRes(player, newyear, 0xD, 0)); + player.getMap().broadcastMessage(PacketCreator.onNewYearCardRes(player, newyear, 0xD, 0)); MapleCharacter sender = c.getWorldServer().getPlayerStorage().getCharacterById(newyear.getSenderId()); if(sender != null && sender.isLoggedinWorld()) { - sender.getMap().broadcastMessage(MaplePacketCreator.onNewYearCardRes(sender, newyear, 0xD, 0)); + sender.getMap().broadcastMessage(PacketCreator.onNewYearCardRes(sender, newyear, 0xD, 0)); sender.dropMessage(6, "[New Year] Your addressee successfully received the New Year card."); } } else { - player.announce(MaplePacketCreator.onNewYearCardRes(player, -1, 5, 0x10)); // inventory full + player.announce(PacketCreator.onNewYearCardRes(player, -1, 5, 0x10)); // inventory full } } else { player.dropMessage(6, "[New Year] The sender of the New Year card already dropped it. Nothing to receive."); diff --git a/src/main/java/net/server/channel/handlers/NoteActionHandler.java b/src/main/java/net/server/channel/handlers/NoteActionHandler.java index 9c7689bc38..00d5cb5d90 100644 --- a/src/main/java/net/server/channel/handlers/NoteActionHandler.java +++ b/src/main/java/net/server/channel/handlers/NoteActionHandler.java @@ -24,7 +24,7 @@ package net.server.channel.handlers; import client.MapleClient; import net.AbstractMaplePacketHandler; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.sql.Connection; @@ -41,7 +41,7 @@ public final class NoteActionHandler extends AbstractMaplePacketHandler { String message = slea.readMapleAsciiString(); try { if (c.getPlayer().getCashShop().isOpened()) { - c.announce(MaplePacketCreator.showCashInventory(c)); + c.announce(PacketCreator.showCashInventory(c)); } c.getPlayer().sendNote(charname, message, (byte) 1); diff --git a/src/main/java/net/server/channel/handlers/OpenFamilyHandler.java b/src/main/java/net/server/channel/handlers/OpenFamilyHandler.java index 0811842ed8..f4be5f63d7 100644 --- a/src/main/java/net/server/channel/handlers/OpenFamilyHandler.java +++ b/src/main/java/net/server/channel/handlers/OpenFamilyHandler.java @@ -19,11 +19,11 @@ */ package net.server.channel.handlers; -import config.YamlConfig; import client.MapleCharacter; import client.MapleClient; +import config.YamlConfig; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -35,7 +35,7 @@ public final class OpenFamilyHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) return; MapleCharacter chr = c.getPlayer(); - c.announce(MaplePacketCreator.getFamilyInfo(chr.getFamilyEntry())); + c.announce(PacketCreator.getFamilyInfo(chr.getFamilyEntry())); } } diff --git a/src/main/java/net/server/channel/handlers/OpenFamilyPedigreeHandler.java b/src/main/java/net/server/channel/handlers/OpenFamilyPedigreeHandler.java index 444cc9161a..30926e0289 100644 --- a/src/main/java/net/server/channel/handlers/OpenFamilyPedigreeHandler.java +++ b/src/main/java/net/server/channel/handlers/OpenFamilyPedigreeHandler.java @@ -19,11 +19,11 @@ */ package net.server.channel.handlers; -import config.YamlConfig; import client.MapleCharacter; import client.MapleClient; +import config.YamlConfig; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -36,7 +36,7 @@ public final class OpenFamilyPedigreeHandler extends AbstractMaplePacketHandler if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) return; MapleCharacter target = c.getChannelServer().getPlayerStorage().getCharacterByName(slea.readMapleAsciiString()); if(target != null && target.getFamily() != null) { - c.announce(MaplePacketCreator.showPedigree(target.getFamilyEntry())); + c.announce(PacketCreator.showPedigree(target.getFamilyEntry())); } } } diff --git a/src/main/java/net/server/channel/handlers/OwlWarpHandler.java b/src/main/java/net/server/channel/handlers/OwlWarpHandler.java index 5eab87fa5b..fed429d03e 100644 --- a/src/main/java/net/server/channel/handlers/OwlWarpHandler.java +++ b/src/main/java/net/server/channel/handlers/OwlWarpHandler.java @@ -19,12 +19,12 @@ */ package net.server.channel.handlers; -import constants.game.GameConstants; import client.MapleClient; +import constants.game.GameConstants; import net.AbstractMaplePacketHandler; -import server.maps.MaplePlayerShop; import server.maps.MapleHiredMerchant; -import tools.MaplePacketCreator; +import server.maps.MaplePlayerShop; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /* @@ -38,7 +38,7 @@ public final class OwlWarpHandler extends AbstractMaplePacketHandler { int mapid = slea.readInt(); if(ownerid == c.getPlayer().getId()) { - c.announce(MaplePacketCreator.serverNotice(1, "You cannot visit your own shop.")); + c.announce(PacketCreator.serverNotice(1, "You cannot visit your own shop.")); return; } @@ -47,8 +47,8 @@ public final class OwlWarpHandler extends AbstractMaplePacketHandler { if(hm == null || hm.getMapId() != mapid || !hm.hasItem(c.getPlayer().getOwlSearch())) { ps = c.getWorldServer().getPlayerShop(ownerid); if(ps == null || ps.getMapId() != mapid || !ps.hasItem(c.getPlayer().getOwlSearch())) { - if(hm == null && ps == null) c.announce(MaplePacketCreator.getOwlMessage(1)); - else c.announce(MaplePacketCreator.getOwlMessage(3)); + if(hm == null && ps == null) c.announce(PacketCreator.getOwlMessage(1)); + else c.announce(PacketCreator.getOwlMessage(3)); return; } @@ -59,22 +59,22 @@ public final class OwlWarpHandler extends AbstractMaplePacketHandler { if(ps.isOpen()) { //change map has a delay, must double check if(!ps.visitShop(c.getPlayer())) { - if(!ps.isBanned(c.getPlayer().getName())) c.announce(MaplePacketCreator.getOwlMessage(2)); - else c.announce(MaplePacketCreator.getOwlMessage(17)); + if(!ps.isBanned(c.getPlayer().getName())) c.announce(PacketCreator.getOwlMessage(2)); + else c.announce(PacketCreator.getOwlMessage(17)); } } else { - //c.announce(MaplePacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); - c.announce(MaplePacketCreator.getOwlMessage(18)); + //c.announce(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); + c.announce(PacketCreator.getOwlMessage(18)); } } else { - c.announce(MaplePacketCreator.serverNotice(1, "That shop is currently located in another channel. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); + c.announce(PacketCreator.serverNotice(1, "That shop is currently located in another channel. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); } } else { - c.announce(MaplePacketCreator.serverNotice(1, "That shop is currently located outside of the FM area. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); + c.announce(PacketCreator.serverNotice(1, "That shop is currently located outside of the FM area. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); } } else { - //c.announce(MaplePacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); - c.announce(MaplePacketCreator.getOwlMessage(18)); + //c.announce(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); + c.announce(PacketCreator.getOwlMessage(18)); } } else { if(hm.isOpen()) { @@ -84,25 +84,25 @@ public final class OwlWarpHandler extends AbstractMaplePacketHandler { if(hm.isOpen()) { //change map has a delay, must double check if(hm.addVisitor(c.getPlayer())) { - c.announce(MaplePacketCreator.getHiredMerchant(c.getPlayer(), hm, false)); + c.announce(PacketCreator.getHiredMerchant(c.getPlayer(), hm, false)); c.getPlayer().setHiredMerchant(hm); } else { - //c.announce(MaplePacketCreator.serverNotice(1, hm.getOwner() + "'s merchant is full. Wait awhile before trying again.")); - c.announce(MaplePacketCreator.getOwlMessage(2)); + //c.announce(PacketCreator.serverNotice(1, hm.getOwner() + "'s merchant is full. Wait awhile before trying again.")); + c.announce(PacketCreator.getOwlMessage(2)); } } else { - //c.announce(MaplePacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); - c.announce(MaplePacketCreator.getOwlMessage(18)); + //c.announce(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); + c.announce(PacketCreator.getOwlMessage(18)); } } else { - c.announce(MaplePacketCreator.serverNotice(1, "That merchant is currently located in another channel. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); + c.announce(PacketCreator.serverNotice(1, "That merchant is currently located in another channel. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); } } else { - c.announce(MaplePacketCreator.serverNotice(1, "That merchant is currently located outside of the FM area. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); + c.announce(PacketCreator.serverNotice(1, "That merchant is currently located outside of the FM area. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); } } else { - //c.announce(MaplePacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); - c.announce(MaplePacketCreator.getOwlMessage(18)); + //c.announce(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); + c.announce(PacketCreator.getOwlMessage(18)); } } } diff --git a/src/main/java/net/server/channel/handlers/PartyOperationHandler.java b/src/main/java/net/server/channel/handlers/PartyOperationHandler.java index 4977ce0137..2bd2f3e0eb 100644 --- a/src/main/java/net/server/channel/handlers/PartyOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/PartyOperationHandler.java @@ -21,20 +21,20 @@ */ package net.server.channel.handlers; -import config.YamlConfig; -import net.AbstractMaplePacketHandler; -import net.server.world.MapleParty; -import net.server.world.MaplePartyCharacter; -import net.server.world.PartyOperation; -import net.server.world.World; -import tools.MaplePacketCreator; -import tools.data.input.SeekableLittleEndianAccessor; import client.MapleCharacter; import client.MapleClient; +import config.YamlConfig; +import net.AbstractMaplePacketHandler; import net.server.coordinator.world.MapleInviteCoordinator; import net.server.coordinator.world.MapleInviteCoordinator.InviteResult; import net.server.coordinator.world.MapleInviteCoordinator.InviteType; import net.server.coordinator.world.MapleInviteCoordinator.MapleInviteResult; +import net.server.world.MapleParty; +import net.server.world.MaplePartyCharacter; +import net.server.world.PartyOperation; +import net.server.world.World; +import tools.PacketCreator; +import tools.data.input.SeekableLittleEndianAccessor; import java.util.List; @@ -69,7 +69,7 @@ public final class PartyOperationHandler extends AbstractMaplePacketHandler { if (res == InviteResult.ACCEPTED) { MapleParty.joinParty(player, partyid, false); } else { - c.announce(MaplePacketCreator.serverNotice(5, "You couldn't join the party due to an expired invitation request.")); + c.announce(PacketCreator.serverNotice(5, "You couldn't join the party due to an expired invitation request.")); } break; } @@ -78,11 +78,11 @@ public final class PartyOperationHandler extends AbstractMaplePacketHandler { MapleCharacter invited = world.getPlayerStorage().getCharacterByName(name); if (invited != null) { if(invited.getLevel() < 10 && (!YamlConfig.config.server.USE_PARTY_FOR_STARTERS || player.getLevel() >= 10)) { //min requirement is level 10 - c.announce(MaplePacketCreator.serverNotice(5, "The player you have invited does not meet the requirements.")); + c.announce(PacketCreator.serverNotice(5, "The player you have invited does not meet the requirements.")); return; } if(YamlConfig.config.server.USE_PARTY_FOR_STARTERS && invited.getLevel() >= 10 && player.getLevel() < 10) { //trying to invite high level - c.announce(MaplePacketCreator.serverNotice(5, "The player you have invited does not meet the requirements.")); + c.announce(PacketCreator.serverNotice(5, "The player you have invited does not meet the requirements.")); return; } @@ -96,18 +96,18 @@ public final class PartyOperationHandler extends AbstractMaplePacketHandler { } if (party.getMembers().size() < 6) { if (MapleInviteCoordinator.createInvite(InviteType.PARTY, player, party.getId(), invited.getId())) { - invited.getClient().announce(MaplePacketCreator.partyInvite(player)); + invited.getClient().announce(PacketCreator.partyInvite(player)); } else { - c.announce(MaplePacketCreator.partyStatusMessage(22, invited.getName())); + c.announce(PacketCreator.partyStatusMessage(22, invited.getName())); } } else { - c.announce(MaplePacketCreator.partyStatusMessage(17)); + c.announce(PacketCreator.partyStatusMessage(17)); } } else { - c.announce(MaplePacketCreator.partyStatusMessage(16)); + c.announce(PacketCreator.partyStatusMessage(16)); } } else { - c.announce(MaplePacketCreator.partyStatusMessage(19)); + c.announce(PacketCreator.partyStatusMessage(19)); } break; } diff --git a/src/main/java/net/server/channel/handlers/PartySearchStartHandler.java b/src/main/java/net/server/channel/handlers/PartySearchStartHandler.java index ca7f1c53f1..f4d21c7c90 100644 --- a/src/main/java/net/server/channel/handlers/PartySearchStartHandler.java +++ b/src/main/java/net/server/channel/handlers/PartySearchStartHandler.java @@ -21,13 +21,13 @@ */ package net.server.channel.handlers; -import net.AbstractMaplePacketHandler; -import net.server.world.MapleParty; -import tools.data.input.SeekableLittleEndianAccessor; -import tools.MaplePacketCreator; import client.MapleCharacter; import client.MapleClient; +import net.AbstractMaplePacketHandler; +import net.server.world.MapleParty; import net.server.world.World; +import tools.PacketCreator; +import tools.data.input.SeekableLittleEndianAccessor; /** * @@ -44,19 +44,19 @@ public class PartySearchStartHandler extends AbstractMaplePacketHandler { MapleCharacter chr = c.getPlayer(); if (min > max) { chr.dropMessage(1, "The min. value is higher than the max!"); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (max - min > 30) { chr.dropMessage(1, "You can only search for party members within a range of 30 levels."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (chr.getLevel() < min || chr.getLevel() > max) { chr.dropMessage(1, "The range of level for search has to include your own level."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } diff --git a/src/main/java/net/server/channel/handlers/PetChatHandler.java b/src/main/java/net/server/channel/handlers/PetChatHandler.java index b18db64dbb..b2e13d74e5 100644 --- a/src/main/java/net/server/channel/handlers/PetChatHandler.java +++ b/src/main/java/net/server/channel/handlers/PetChatHandler.java @@ -27,7 +27,7 @@ import config.YamlConfig; import net.AbstractMaplePacketHandler; import tools.FilePrinter; import tools.LogHelper; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class PetChatHandler extends AbstractMaplePacketHandler { @@ -49,7 +49,7 @@ public final class PetChatHandler extends AbstractMaplePacketHandler { c.disconnect(true, false); return; } - c.getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.petChat(c.getPlayer().getId(), pet, act, text), true); + c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.petChat(c.getPlayer().getId(), pet, act, text), true); if (YamlConfig.config.server.USE_ENABLE_CHAT_LOG) { LogHelper.logChat(c, "Pet", text); } diff --git a/src/main/java/net/server/channel/handlers/PetCommandHandler.java b/src/main/java/net/server/channel/handlers/PetCommandHandler.java index f25768b5a8..d71ef7e748 100644 --- a/src/main/java/net/server/channel/handlers/PetCommandHandler.java +++ b/src/main/java/net/server/channel/handlers/PetCommandHandler.java @@ -27,7 +27,7 @@ import client.inventory.MaplePet; import client.inventory.PetCommand; import client.inventory.PetDataFactory; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; import tools.data.input.SeekableLittleEndianAccessor; @@ -54,9 +54,9 @@ public final class PetCommandHandler extends AbstractMaplePacketHandler { if (Randomizer.nextInt(100) < petCommand.getProbability()) { pet.gainClosenessFullness(chr, petCommand.getIncrease(), 0, command); - chr.getMap().broadcastMessage(MaplePacketCreator.commandResponse(chr.getId(), petIndex, false, command, false)); + chr.getMap().broadcastMessage(PacketCreator.commandResponse(chr.getId(), petIndex, false, command, false)); } else { - chr.getMap().broadcastMessage(MaplePacketCreator.commandResponse(chr.getId(), petIndex, true, command, false)); + chr.getMap().broadcastMessage(PacketCreator.commandResponse(chr.getId(), petIndex, true, command, false)); } } } diff --git a/src/main/java/net/server/channel/handlers/PetFoodHandler.java b/src/main/java/net/server/channel/handlers/PetFoodHandler.java index 23e9b7f4b0..6d56611372 100644 --- a/src/main/java/net/server/channel/handlers/PetFoodHandler.java +++ b/src/main/java/net/server/channel/handlers/PetFoodHandler.java @@ -21,17 +21,17 @@ */ package net.server.channel.handlers; -import net.AbstractMaplePacketHandler; import client.MapleCharacter; import client.MapleClient; +import client.autoban.AutobanManager; +import client.inventory.Item; import client.inventory.MapleInventory; import client.inventory.MapleInventoryType; import client.inventory.MaplePet; -import client.autoban.AutobanManager; -import client.inventory.Item; import client.inventory.manipulator.MapleInventoryManipulator; +import net.AbstractMaplePacketHandler; import net.server.Server; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class PetFoodHandler extends AbstractMaplePacketHandler { @@ -41,14 +41,14 @@ public final class PetFoodHandler extends AbstractMaplePacketHandler { MapleCharacter chr = c.getPlayer(); AutobanManager abm = chr.getAutobanManager(); if (abm.getLastSpam(2) + 500 > currentServerTime()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } abm.spam(2); slea.readInt(); // timestamp issue detected thanks to Masterrulax abm.setTimestamp(1, Server.getInstance().getCurrentTimestamp(), 3); if (chr.getNoPets() == 0) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } int previousFullness = 100; diff --git a/src/main/java/net/server/channel/handlers/PetLootHandler.java b/src/main/java/net/server/channel/handlers/PetLootHandler.java index 8b794344f2..68494ba459 100644 --- a/src/main/java/net/server/channel/handlers/PetLootHandler.java +++ b/src/main/java/net/server/channel/handlers/PetLootHandler.java @@ -21,17 +21,17 @@ */ package net.server.channel.handlers; -import java.util.Set; - import client.MapleCharacter; import client.MapleClient; import client.inventory.MaplePet; import net.AbstractMaplePacketHandler; import server.maps.MapleMapItem; import server.maps.MapleMapObject; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; +import java.util.Set; + /** * @author TheRamon * @author Ronan @@ -44,7 +44,7 @@ public final class PetLootHandler extends AbstractMaplePacketHandler { int petIndex = chr.getPetIndex(slea.readInt()); MaplePet pet = chr.getPet(petIndex); if (pet == null || !pet.isSummoned()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -55,27 +55,27 @@ public final class PetLootHandler extends AbstractMaplePacketHandler { MapleMapItem mapitem = (MapleMapItem) ob; if (mapitem.getMeso() > 0) { if (!chr.isEquippedMesoMagnet()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (chr.isEquippedPetItemIgnore()) { final Set petIgnore = chr.getExcludedItems(); if(!petIgnore.isEmpty() && petIgnore.contains(Integer.MAX_VALUE)) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } } } else { if (!chr.isEquippedItemPouch()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (chr.isEquippedPetItemIgnore()) { final Set petIgnore = chr.getExcludedItems(); if(!petIgnore.isEmpty() && petIgnore.contains(mapitem.getItem().getItemId())) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } } @@ -83,7 +83,7 @@ public final class PetLootHandler extends AbstractMaplePacketHandler { chr.pickupItem(ob, petIndex); } catch (NullPointerException | ClassCastException e) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } } diff --git a/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java b/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java index a066a7fbb2..52fa49abb0 100644 --- a/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java @@ -30,26 +30,18 @@ import client.inventory.MapleInventoryType; import client.inventory.manipulator.MapleInventoryManipulator; import client.inventory.manipulator.MapleKarmaManipulator; import config.YamlConfig; +import constants.game.GameConstants; import constants.inventory.ItemConstants; - import net.AbstractMaplePacketHandler; import server.MapleItemInformationProvider; -import server.maps.MaplePortal; import server.MapleTrade; -import constants.game.GameConstants; -import server.maps.FieldLimit; -import server.maps.MapleHiredMerchant; -import server.maps.MapleMapObject; -import server.maps.MapleMapObjectType; -import server.maps.MapleMiniGame; +import server.maps.*; import server.maps.MapleMiniGame.MiniGameType; -import server.maps.MaplePlayerShop; -import server.maps.MaplePlayerShopItem; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; -import java.awt.Point; +import java.awt.*; import java.sql.SQLException; import java.util.Arrays; @@ -136,7 +128,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { if (!c.tryacquireClient()) { // thanks GabrielSin for pointing dupes within player interactions - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -146,7 +138,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if (mode == Action.CREATE.getCode()) { if(!chr.isAlive()) { // thanks GabrielSin for pointing this - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(4)); + chr.getClient().announce(PacketCreator.getMiniRoomError(4)); return; } @@ -156,7 +148,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { } else if (createType == 1) { // omok mini game int status = establishMiniroomStatus(chr, true); if (status > 0) { - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(status)); + chr.getClient().announce(PacketCreator.getMiniRoomError(status)); return; } @@ -176,7 +168,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { type = 0; } if (!chr.haveItem(4080000 + type)) { - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(6)); + chr.getClient().announce(PacketCreator.getMiniRoomError(6)); return; } @@ -185,12 +177,12 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { game.setPieceType(type); game.setGameType(MiniGameType.OMOK); chr.getMap().addMapObject(game); - chr.getMap().broadcastMessage(MaplePacketCreator.addOmokBox(chr, 1, 0)); + chr.getMap().broadcastMessage(PacketCreator.addOmokBox(chr, 1, 0)); game.sendOmok(c, type); } else if (createType == 2) { // matchcard int status = establishMiniroomStatus(chr, true); if (status > 0) { - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(status)); + chr.getClient().announce(PacketCreator.getMiniRoomError(status)); return; } @@ -210,7 +202,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { type = 0; } if (!chr.haveItem(4080100)) { - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(6)); + chr.getClient().announce(PacketCreator.getMiniRoomError(6)); return; } @@ -226,17 +218,17 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { game.setGameType(MiniGameType.MATCH_CARD); chr.setMiniGame(game); chr.getMap().addMapObject(game); - chr.getMap().broadcastMessage(MaplePacketCreator.addMatchCardBox(chr, 1, 0)); + chr.getMap().broadcastMessage(PacketCreator.addMatchCardBox(chr, 1, 0)); game.sendMatchCard(c, type); } else if (createType == 4 || createType == 5) { // shop if(!GameConstants.isFreeMarketRoom(chr.getMapId())) { - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(15)); + chr.getClient().announce(PacketCreator.getMiniRoomError(15)); return; } int status = establishMiniroomStatus(chr, false); if (status > 0) { - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(status)); + chr.getClient().announce(PacketCreator.getMiniRoomError(status)); return; } @@ -248,7 +240,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { slea.skip(3); int itemId = slea.readInt(); if (chr.getInventory(MapleInventoryType.CASH).countById(itemId) < 1) { - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(6)); + chr.getClient().announce(PacketCreator.getMiniRoomError(6)); return; } @@ -258,13 +250,13 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { chr.getMap().addMapObject(shop); shop.sendShop(c); c.getWorldServer().registerPlayerShop(shop); - //c.announce(MaplePacketCreator.getPlayerShopRemoveVisitor(1)); + //c.announce(PacketCreator.getPlayerShopRemoveVisitor(1)); } else if (ItemConstants.isHiredMerchant(itemId)) { MapleHiredMerchant merchant = new MapleHiredMerchant(chr, desc, itemId); chr.setHiredMerchant(merchant); c.getWorldServer().registerHiredMerchant(merchant); chr.getClient().getChannelServer().addHiredMerchant(chr.getId(), merchant); - chr.announce(MaplePacketCreator.getHiredMerchant(chr, merchant, true)); + chr.announce(PacketCreator.getHiredMerchant(chr, merchant, true)); } } } else if (mode == Action.INVITE.getCode()) { @@ -282,7 +274,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if (!chr.getTrade().isFullTrade() && !chr.getTrade().getPartner().isFullTrade()) { MapleTrade.visitTrade(chr, chr.getTrade().getPartner().getChr()); } else { - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(2)); + chr.getClient().announce(PacketCreator.getMiniRoomError(2)); return; } } else { @@ -311,10 +303,10 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { break; } } else { - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(2)); + chr.getClient().announce(PacketCreator.getMiniRoomError(2)); } } else { - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(22)); + chr.getClient().announce(PacketCreator.getMiniRoomError(22)); } } else if (ob instanceof MapleHiredMerchant && chr.getHiredMerchant() == null) { MapleHiredMerchant merchant = (MapleHiredMerchant) ob; @@ -355,11 +347,11 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { slea.readShort(); int birthday = slea.readInt(); if (!CashOperationHandler.checkBirthday(c, birthday)) { // birthday check here found thanks to lucasziron - c.announce(MaplePacketCreator.serverNotice(1, "Please check again the birthday date.")); + c.announce(PacketCreator.serverNotice(1, "Please check again the birthday date.")); return; } - c.announce(MaplePacketCreator.hiredMerchantOwnerMaintenanceLeave()); + c.announce(PacketCreator.hiredMerchantOwnerMaintenanceLeave()); } if (!canPlaceStore(chr)) { // thanks Ari for noticing player shops overlapping on opening time @@ -375,32 +367,32 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { } catch(RuntimeException re) {} // fella does not have a player shop permit... } - chr.getMap().broadcastMessage(MaplePacketCreator.updatePlayerShopBox(shop)); + chr.getMap().broadcastMessage(PacketCreator.updatePlayerShopBox(shop)); shop.setOpen(true); } else if (merchant != null && merchant.isOwner(chr)) { chr.setHasMerchant(true); merchant.setOpen(true); chr.getMap().addMapObject(merchant); chr.setHiredMerchant(null); - chr.getMap().broadcastMessage(MaplePacketCreator.spawnHiredMerchantBox(merchant)); + chr.getMap().broadcastMessage(PacketCreator.spawnHiredMerchantBox(merchant)); } } else if (mode == Action.READY.getCode()) { MapleMiniGame game = chr.getMiniGame(); - game.broadcast(MaplePacketCreator.getMiniGameReady(game)); + game.broadcast(PacketCreator.getMiniGameReady(game)); } else if (mode == Action.UN_READY.getCode()) { MapleMiniGame game = chr.getMiniGame(); - game.broadcast(MaplePacketCreator.getMiniGameUnReady(game)); + game.broadcast(PacketCreator.getMiniGameUnReady(game)); } else if (mode == Action.START.getCode()) { MapleMiniGame game = chr.getMiniGame(); if (game.getGameType().equals(MiniGameType.OMOK)) { game.minigameMatchStarted(); - game.broadcast(MaplePacketCreator.getMiniGameStart(game, game.getLoser())); - chr.getMap().broadcastMessage(MaplePacketCreator.addOmokBox(game.getOwner(), 2, 1)); + game.broadcast(PacketCreator.getMiniGameStart(game, game.getLoser())); + chr.getMap().broadcastMessage(PacketCreator.addOmokBox(game.getOwner(), 2, 1)); } else if (game.getGameType().equals(MiniGameType.MATCH_CARD)) { game.minigameMatchStarted(); game.shuffleList(); - game.broadcast(MaplePacketCreator.getMatchCardStart(game, game.getLoser())); - chr.getMap().broadcastMessage(MaplePacketCreator.addMatchCardBox(game.getOwner(), 2, 1)); + game.broadcast(PacketCreator.getMatchCardStart(game, game.getLoser())); + chr.getMap().broadcastMessage(PacketCreator.addMatchCardBox(game.getOwner(), 2, 1)); } } else if (mode == Action.GIVE_UP.getCode()) { MapleMiniGame game = chr.getMiniGame(); @@ -421,9 +413,9 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MapleMiniGame game = chr.getMiniGame(); if (!game.isTieDenied(chr)) { if (game.isOwner(chr)) { - game.broadcastToVisitor(MaplePacketCreator.getMiniGameRequestTie(game)); + game.broadcastToVisitor(PacketCreator.getMiniGameRequestTie(game)); } else { - game.broadcastToOwner(MaplePacketCreator.getMiniGameRequestTie(game)); + game.broadcastToOwner(PacketCreator.getMiniGameRequestTie(game)); } } } else if (mode == Action.ANSWER_TIE.getCode()) { @@ -434,17 +426,17 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { game.denyTie(chr); if (game.isOwner(chr)) { - game.broadcastToVisitor(MaplePacketCreator.getMiniGameDenyTie(game)); + game.broadcastToVisitor(PacketCreator.getMiniGameDenyTie(game)); } else { - game.broadcastToOwner(MaplePacketCreator.getMiniGameDenyTie(game)); + game.broadcastToOwner(PacketCreator.getMiniGameDenyTie(game)); } } } else if (mode == Action.SKIP.getCode()) { MapleMiniGame game = chr.getMiniGame(); if (game.isOwner(chr)) { - game.broadcast(MaplePacketCreator.getMiniGameSkipOwner(game)); + game.broadcast(PacketCreator.getMiniGameSkipOwner(game)); } else { - game.broadcast(MaplePacketCreator.getMiniGameSkipVisitor(game)); + game.broadcast(PacketCreator.getMiniGameSkipVisitor(game)); } } else if (mode == Action.MOVE_OMOK.getCode()) { int x = slea.readInt(); // x point @@ -459,22 +451,22 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if (turn == 1) { game.setFirstSlot(slot); if (game.isOwner(chr)) { - game.broadcastToVisitor(MaplePacketCreator.getMatchCardSelect(game, turn, slot, firstslot, turn)); + game.broadcastToVisitor(PacketCreator.getMatchCardSelect(game, turn, slot, firstslot, turn)); } else { - game.getOwner().getClient().announce(MaplePacketCreator.getMatchCardSelect(game, turn, slot, firstslot, turn)); + game.getOwner().getClient().announce(PacketCreator.getMatchCardSelect(game, turn, slot, firstslot, turn)); } } else if ((game.getCardId(firstslot)) == (game.getCardId(slot))) { if (game.isOwner(chr)) { - game.broadcast(MaplePacketCreator.getMatchCardSelect(game, turn, slot, firstslot, 2)); + game.broadcast(PacketCreator.getMatchCardSelect(game, turn, slot, firstslot, 2)); game.setOwnerPoints(); } else { - game.broadcast(MaplePacketCreator.getMatchCardSelect(game, turn, slot, firstslot, 3)); + game.broadcast(PacketCreator.getMatchCardSelect(game, turn, slot, firstslot, 3)); game.setVisitorPoints(); } } else if (game.isOwner(chr)) { - game.broadcast(MaplePacketCreator.getMatchCardSelect(game, turn, slot, firstslot, 0)); + game.broadcast(PacketCreator.getMatchCardSelect(game, turn, slot, firstslot, 0)); } else { - game.broadcast(MaplePacketCreator.getMatchCardSelect(game, turn, slot, firstslot, 1)); + game.broadcast(PacketCreator.getMatchCardSelect(game, turn, slot, firstslot, 1)); } } else if (mode == Action.SET_MESO.getCode()) { chr.getTrade().setMeso(slea.readInt()); @@ -488,30 +480,30 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if (targetSlot < 1 || targetSlot > 9) { System.out.println("[Hack] " + chr.getName() + " Trying to dupe on trade slot."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (item == null) { - c.announce(MaplePacketCreator.serverNotice(1, "Invalid item description.")); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.serverNotice(1, "Invalid item description.")); + c.announce(PacketCreator.enableActions()); return; } if (ii.isUnmerchable(item.getItemId())) { if (ItemConstants.isPet(item.getItemId())) { - c.announce(MaplePacketCreator.serverNotice(1, "Pets are not allowed to be traded.")); + c.announce(PacketCreator.serverNotice(1, "Pets are not allowed to be traded.")); } else { - c.announce(MaplePacketCreator.serverNotice(1, "Cash items are not allowed to be traded.")); + c.announce(PacketCreator.serverNotice(1, "Cash items are not allowed to be traded.")); } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if (quantity < 1 || quantity > item.getQuantity()) { - c.announce(MaplePacketCreator.serverNotice(1, "You don't have enough quantity of the item.")); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.serverNotice(1, "You don't have enough quantity of the item.")); + c.announce(PacketCreator.enableActions()); return; } @@ -520,8 +512,8 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if ((quantity <= item.getQuantity() && quantity >= 0) || ItemConstants.isRechargeable(item.getItemId())) { if (ii.isDropRestricted(item.getItemId())) { // ensure that undroppable items do not make it to the trade window if (!MapleKarmaManipulator.hasKarmaFlag(item)) { - c.announce(MaplePacketCreator.serverNotice(1, "That item is untradeable.")); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.serverNotice(1, "That item is untradeable.")); + c.announce(PacketCreator.enableActions()); return; } } @@ -531,8 +523,8 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { try { Item checkItem = chr.getInventory(ivType).getItem(pos); if (checkItem != item || checkItem.getPosition() != item.getPosition()) { - c.announce(MaplePacketCreator.serverNotice(1, "Invalid item description.")); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.serverNotice(1, "Invalid item description.")); + c.announce(PacketCreator.enableActions()); return; } @@ -547,9 +539,9 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if (trade.addItem(tradeItem)) { MapleInventoryManipulator.removeFromSlot(c, ivType, item.getPosition(), quantity, true); - trade.getChr().announce(MaplePacketCreator.getTradeItemAdd((byte) 0, tradeItem)); + trade.getChr().announce(PacketCreator.getTradeItemAdd((byte) 0, tradeItem)); if (trade.getPartner() != null) { - trade.getPartner().getChr().announce(MaplePacketCreator.getTradeItemAdd((byte) 1, tradeItem)); + trade.getPartner().getChr().announce(PacketCreator.getTradeItemAdd((byte) 1, tradeItem)); } } } catch (Exception e) { @@ -570,17 +562,17 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { Item ivItem = chr.getInventory(ivType).getItem(slot); if (ivItem == null || ivItem.isUntradeable()) { - c.announce(MaplePacketCreator.serverNotice(1, "Could not perform shop operation with that item.")); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.serverNotice(1, "Could not perform shop operation with that item.")); + c.announce(PacketCreator.enableActions()); return; } else if (MapleItemInformationProvider.getInstance().isUnmerchable(ivItem.getItemId())) { if (ItemConstants.isPet(ivItem.getItemId())) { - c.announce(MaplePacketCreator.serverNotice(1, "Pets are not allowed to be sold on the Player Store.")); + c.announce(PacketCreator.serverNotice(1, "Pets are not allowed to be sold on the Player Store.")); } else { - c.announce(MaplePacketCreator.serverNotice(1, "Cash items are not allowed to be sold on the Player Store.")); + c.announce(PacketCreator.serverNotice(1, "Cash items are not allowed to be sold on the Player Store.")); } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -590,8 +582,8 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { perBundle = 1; bundles = 1; } else if (ivItem.getQuantity() < (bundles * perBundle)) { // thanks GabrielSin for finding a dupe here - c.announce(MaplePacketCreator.serverNotice(1, "Could not perform shop operation with that item.")); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.serverNotice(1, "Could not perform shop operation with that item.")); + c.announce(PacketCreator.enableActions()); return; } @@ -612,7 +604,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MapleHiredMerchant merchant = chr.getHiredMerchant(); if (shop != null && shop.isOwner(chr)) { if (shop.isOpen() || !shop.addItem(shopItem)) { // thanks Vcoc for pointing an exploit with unlimited shop slots - c.announce(MaplePacketCreator.serverNotice(1, "You can't sell it anymore.")); + c.announce(PacketCreator.serverNotice(1, "You can't sell it anymore.")); return; } @@ -622,15 +614,15 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.removeFromSlot(c, ivType, slot, (short) (bundles * perBundle), true); } - c.announce(MaplePacketCreator.getPlayerShopItemUpdate(shop)); + c.announce(PacketCreator.getPlayerShopItemUpdate(shop)); } else if (merchant != null && merchant.isOwner(chr)) { if (ivType.equals(MapleInventoryType.CASH) && merchant.isPublished()) { - c.announce(MaplePacketCreator.serverNotice(1, "Cash items are only allowed to be sold when first opening the store.")); + c.announce(PacketCreator.serverNotice(1, "Cash items are only allowed to be sold when first opening the store.")); return; } if (merchant.isOpen() || !merchant.addItem(shopItem)) { // thanks Vcoc for pointing an exploit with unlimited shop slots - c.announce(MaplePacketCreator.serverNotice(1, "You can't sell it anymore.")); + c.announce(PacketCreator.serverNotice(1, "You can't sell it anymore.")); return; } @@ -640,7 +632,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.removeFromSlot(c, ivType, slot, (short) (bundles * perBundle), true); } - c.announce(MaplePacketCreator.updateHiredMerchant(merchant, chr)); + c.announce(PacketCreator.updateHiredMerchant(merchant, chr)); if (YamlConfig.config.server.USE_ENFORCE_MERCHANT_SAVE) { chr.saveCharToDB(false); @@ -652,7 +644,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { ex.printStackTrace(); } } else { - c.announce(MaplePacketCreator.serverNotice(1, "You can't sell without owning a shop.")); + c.announce(PacketCreator.serverNotice(1, "You can't sell without owning a shop.")); } } else if (mode == Action.REMOVE_ITEM.getCode()) { if (isTradeOpen(chr)) return; @@ -660,7 +652,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MaplePlayerShop shop = chr.getPlayerShop(); if (shop != null && shop.isOwner(chr)) { if (shop.isOpen()) { - c.announce(MaplePacketCreator.serverNotice(1, "You can't take it with the store open.")); + c.announce(PacketCreator.serverNotice(1, "You can't take it with the store open.")); return; } @@ -690,7 +682,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { merchant.closeOwnerMerchant(chr); return; } - c.announce(MaplePacketCreator.updateHiredMerchant(merchant, chr)); + c.announce(PacketCreator.updateHiredMerchant(merchant, chr)); } else if (mode == Action.BUY.getCode() || mode == Action.MERCHANT_BUY.getCode()) { if (isTradeOpen(chr)) return; @@ -707,11 +699,11 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MapleHiredMerchant merchant = chr.getHiredMerchant(); if (shop != null && shop.isVisitor(chr)) { if (shop.buy(c, itemid, quantity)) { - shop.broadcast(MaplePacketCreator.getPlayerShopItemUpdate(shop)); + shop.broadcast(PacketCreator.getPlayerShopItemUpdate(shop)); } } else if (merchant != null && !merchant.isOwner(chr)) { merchant.buy(c, itemid, quantity); - merchant.broadcastToVisitorsThreadsafe(MaplePacketCreator.updateHiredMerchant(merchant, chr)); + merchant.broadcastToVisitorsThreadsafe(PacketCreator.updateHiredMerchant(merchant, chr)); } } else if (mode == Action.TAKE_ITEM_BACK.getCode()) { if (isTradeOpen(chr)) return; @@ -719,7 +711,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MapleHiredMerchant merchant = chr.getHiredMerchant(); if (merchant != null && merchant.isOwner(chr)) { if (merchant.isOpen()) { - c.announce(MaplePacketCreator.serverNotice(1, "You can't take it with the store open.")); + c.announce(PacketCreator.serverNotice(1, "You can't take it with the store open.")); return; } @@ -751,13 +743,13 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { } else { merchant.clearMessages(); merchant.setOpen(true); - merchant.getMap().broadcastMessage(MaplePacketCreator.updateHiredMerchantBox(merchant)); + merchant.getMap().broadcastMessage(PacketCreator.updateHiredMerchantBox(merchant)); } } } chr.setHiredMerchant(null); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } else if (mode == Action.BAN_PLAYER.getCode()) { slea.skip(1); @@ -772,7 +764,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if(visitor != null) { visitor.closeMiniGame(false); - visitor.announce(MaplePacketCreator.getMiniGameClose(true, 5)); + visitor.announce(PacketCreator.getMiniGameClose(true, 5)); } } } else if (mode == Action.EXIT_AFTER_GAME.getCode()) { @@ -794,7 +786,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { private static boolean isTradeOpen(MapleCharacter chr) { if (chr.getTrade() != null) { // thanks to Rien dev team //Apparently there is a dupe exploit that causes racing conditions when saving/retrieving from the db with stuff like trade open. - chr.announce(MaplePacketCreator.enableActions()); + chr.announce(PacketCreator.enableActions()); return true; } @@ -812,11 +804,11 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MaplePlayerShop shop = mc.getPlayerShop(); if (shop != null && shop.isOwner(mc)) { - chr.announce(MaplePacketCreator.getMiniRoomError(13)); + chr.announce(PacketCreator.getMiniRoomError(13)); return false; } } else { - chr.announce(MaplePacketCreator.getMiniRoomError(13)); + chr.announce(PacketCreator.getMiniRoomError(13)); return false; } } @@ -824,7 +816,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { Point cpos = chr.getPosition(); MaplePortal portal = chr.getMap().findClosestTeleportPortal(cpos); if (portal != null && portal.getPosition().distance(cpos) < 120.0) { - chr.announce(MaplePacketCreator.getMiniRoomError(10)); + chr.announce(PacketCreator.getMiniRoomError(10)); return false; } } catch (Exception e) { diff --git a/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java b/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java index dfa22824e4..e39875584a 100644 --- a/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java @@ -43,7 +43,7 @@ import scripting.event.EventInstanceManager; import server.life.MobSkill; import tools.DatabaseConnection; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; import tools.packets.Wedding; @@ -84,12 +84,12 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { - final int cid = slea.readInt(); // TODO: investigate if this is the "client id" supplied in MaplePacketCreator#getServerIP() + final int cid = slea.readInt(); // TODO: investigate if this is the "client id" supplied in PacketCreator#getServerIP() final Server server = Server.getInstance(); if (!c.tryacquireClient()) { // thanks MedicOP for assisting on concurrency protection here - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); } try { @@ -176,7 +176,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { if (state == MapleClient.LOGIN_LOGGEDIN) { c.disconnect(true, false); } else { - c.announce(MaplePacketCreator.getAfterLoginError(7)); + c.announce(PacketCreator.getAfterLoginError(7)); } return; @@ -188,7 +188,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { } else { c.setPlayer(null); c.setAccID(0); - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); return; } @@ -213,7 +213,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { player.silentApplyDiseases(diseases); } - c.announce(MaplePacketCreator.getCharInfo(player)); + c.announce(PacketCreator.getCharInfo(player)); if (!player.isHidden()) { if (player.isGM() && YamlConfig.config.server.USE_AUTOHIDE_GM) { player.toggleHide(true); @@ -225,10 +225,10 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { // pot bindings being passed through other characters on the account detected thanks to Croosade dev team MapleKeyBinding autohpPot = player.getKeymap().get(91); - player.announce(MaplePacketCreator.sendAutoHpPot(autohpPot != null ? autohpPot.getAction() : 0)); + player.announce(PacketCreator.sendAutoHpPot(autohpPot != null ? autohpPot.getAction() : 0)); MapleKeyBinding autompPot = player.getKeymap().get(92); - player.announce(MaplePacketCreator.sendAutoMpPot(autompPot != null ? autompPot.getAction() : 0)); + player.announce(PacketCreator.sendAutoMpPot(autompPot != null ? autompPot.getAction() : 0)); player.getMap().addPlayer(player); player.visitMap(player.getMap()); @@ -241,9 +241,9 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { ble.setChannel(onlineBuddy.getChannel()); bl.put(ble); } - c.announce(MaplePacketCreator.updateBuddylist(bl.getBuddies())); + c.announce(PacketCreator.updateBuddylist(bl.getBuddies())); - c.announce(MaplePacketCreator.loadFamily(player)); + c.announce(PacketCreator.loadFamily(player)); if (player.getFamilyId() > 0) { MapleFamily f = wserv.getFamily(player.getFamilyId()); if (f != null) { @@ -252,17 +252,17 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { familyEntry.setCharacter(player); player.setFamilyEntry(familyEntry); - c.announce(MaplePacketCreator.getFamilyInfo(familyEntry)); - familyEntry.announceToSenior(MaplePacketCreator.sendFamilyLoginNotice(player.getName(), true), true); + c.announce(PacketCreator.getFamilyInfo(familyEntry)); + familyEntry.announceToSenior(PacketCreator.sendFamilyLoginNotice(player.getName(), true), true); } else { FilePrinter.printError(FilePrinter.FAMILY_ERROR, "Player " + player.getName() + "'s family doesn't have an entry for them. (" + f.getID() + ")"); } } else { FilePrinter.printError(FilePrinter.FAMILY_ERROR, "Player " + player.getName() + " has an invalid family ID. (" + player.getFamilyId() + ")"); - c.announce(MaplePacketCreator.getFamilyInfo(null)); + c.announce(PacketCreator.getFamilyInfo(null)); } } else { - c.announce(MaplePacketCreator.getFamilyInfo(null)); + c.announce(PacketCreator.getFamilyInfo(null)); } if (player.getGuildId() > 0) { @@ -275,7 +275,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { playerGuild.getMGC(player.getId()).setCharacter(player); player.setMGC(playerGuild.getMGC(player.getId())); server.setGuildMemberOnline(player, true, c.getChannel()); - c.announce(MaplePacketCreator.showGuildInfo(player)); + c.announce(PacketCreator.showGuildInfo(player)); int allianceId = player.getGuild().getAllianceId(); if (allianceId > 0) { MapleAlliance newAlliance = server.getAlliance(allianceId); @@ -288,11 +288,11 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { } } if (newAlliance != null) { - c.announce(MaplePacketCreator.updateAllianceInfo(newAlliance, c.getWorld())); - c.announce(MaplePacketCreator.allianceNotice(newAlliance.getId(), newAlliance.getNotice())); + c.announce(PacketCreator.updateAllianceInfo(newAlliance, c.getWorld())); + c.announce(PacketCreator.allianceNotice(newAlliance.getId(), newAlliance.getNotice())); if (newcomer) { - server.allianceMessage(allianceId, MaplePacketCreator.allianceMemberOnline(player, true), player.getId(), -1); + server.allianceMessage(allianceId, PacketCreator.allianceMemberOnline(player, true), player.getId(), -1); } } } @@ -304,7 +304,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { MaplePartyCharacter pchar = player.getMPC(); //Use this in case of enabling party HPbar HUD when logging in, however "you created a party" will appear on chat. - //c.announce(MaplePacketCreator.partyCreated(pchar)); + //c.announce(PacketCreator.partyCreated(pchar)); pchar.setChannel(c.getChannel()); pchar.setMapId(player.getMapId()); @@ -323,16 +323,16 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { eqpInv.unlockInventory(); } - c.announce(MaplePacketCreator.updateBuddylist(player.getBuddylist().getBuddies())); + c.announce(PacketCreator.updateBuddylist(player.getBuddylist().getBuddies())); CharacterNameAndId pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest(); if (pendingBuddyRequest != null) { - c.announce(MaplePacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); + c.announce(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); } - c.announce(MaplePacketCreator.updateGender(player)); + c.announce(PacketCreator.updateGender(player)); player.checkMessenger(); - c.announce(MaplePacketCreator.enableReport()); + c.announce(PacketCreator.enableReport()); player.changeSkillLevel(SkillFactory.getSkill(10000000 * player.getJobType() + 12), (byte) (player.getLinkedLevel() / 10), 20, -1); player.checkBerserk(player.isHidden()); @@ -345,24 +345,24 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { MapleMount mount = player.getMount(); // thanks Ari for noticing a scenario where Silver Mane quest couldn't be started if (mount.getItemId() != 0) { - player.announce(MaplePacketCreator.updateMount(player.getId(), mount, false)); + player.announce(PacketCreator.updateMount(player.getId(), mount, false)); } player.reloadQuestExpirations(); /* if (!c.hasVotedAlready()){ - player.announce(MaplePacketCreator.earnTitleMessage("You can vote now! Vote and earn a vote point!")); + player.announce(PacketCreator.earnTitleMessage("You can vote now! Vote and earn a vote point!")); } */ if (player.isGM()) { - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.earnTitleMessage((player.gmLevel() < 6 ? "GM " : "Admin ") + player.getName() + " has logged in")); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.earnTitleMessage((player.gmLevel() < 6 ? "GM " : "Admin ") + player.getName() + " has logged in")); } if (diseases != null) { for (Entry> e : diseases.entrySet()) { final List> debuff = Collections.singletonList(new Pair<>(e.getKey(), e.getValue().getRight().getX())); - c.announce(MaplePacketCreator.giveDebuff(debuff, e.getValue().getRight())); + c.announce(PacketCreator.giveDebuff(debuff, e.getValue().getRight())); } } } else { @@ -427,7 +427,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { npcsIds.put(YamlConfig.config.server.REBIRTH_NPC_ID, "Rebirth"); } - c.announce(MaplePacketCreator.setNPCScriptable(npcsIds)); + c.announce(PacketCreator.setNPCScriptable(npcsIds)); } if (newcomer) player.setLoginTime(System.currentTimeMillis()); @@ -449,7 +449,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { ps2.setInt(1, player.getId()); ps2.executeUpdate(); - c.announce(MaplePacketCreator.sendDueyParcelNotification(rs.getInt("Type") == 1)); + c.announce(PacketCreator.sendDueyParcelNotification(rs.getInt("Type") == 1)); } } } diff --git a/src/main/java/net/server/channel/handlers/PlayerMapTransitionHandler.java b/src/main/java/net/server/channel/handlers/PlayerMapTransitionHandler.java index 760cd41bc9..4eb702b576 100644 --- a/src/main/java/net/server/channel/handlers/PlayerMapTransitionHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerMapTransitionHandler.java @@ -23,15 +23,16 @@ package net.server.channel.handlers; import client.MapleBuffStat; import client.MapleCharacter; import client.MapleClient; -import java.util.Collections; -import java.util.List; import net.AbstractMaplePacketHandler; import server.life.MapleMonster; import server.maps.MapleMapObject; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; +import java.util.Collections; +import java.util.List; + /** * * @author Ronan @@ -48,7 +49,7 @@ public final class PlayerMapTransitionHandler extends AbstractMaplePacketHandler chr.cancelBuffStats(MapleBuffStat.HOMING_BEACON); final List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.HOMING_BEACON, 0)); - chr.announce(MaplePacketCreator.giveBuff(1, beaconid, stat)); + chr.announce(PacketCreator.giveBuff(1, beaconid, stat)); } if (!chr.isHidden()) { // thanks Lame (Conrad) for noticing hidden characters controlling mobs @@ -56,7 +57,7 @@ public final class PlayerMapTransitionHandler extends AbstractMaplePacketHandler MapleMonster m = (MapleMonster) mo; if (m.getSpawnEffect() == 0 || m.getHp() < m.getMaxHp()) { // avoid effect-spawning mobs if (m.getController() == chr) { - c.announce(MaplePacketCreator.stopControllingMonster(m.getObjectId())); + c.announce(PacketCreator.stopControllingMonster(m.getObjectId())); m.sendDestroyData(c); m.aggroRemoveController(); } else { diff --git a/src/main/java/net/server/channel/handlers/RPSActionHandler.java b/src/main/java/net/server/channel/handlers/RPSActionHandler.java index f3eea78053..b185d7ca1f 100644 --- a/src/main/java/net/server/channel/handlers/RPSActionHandler.java +++ b/src/main/java/net/server/channel/handlers/RPSActionHandler.java @@ -2,9 +2,9 @@ package net.server.channel.handlers; import client.MapleCharacter; import client.MapleClient; -import server.minigame.MapleRockPaperScissor; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import server.minigame.MapleRockPaperScissor; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -37,29 +37,29 @@ public final class RPSActionHandler extends AbstractMaplePacketHandler{ if(chr.getMeso() >= 1000){ chr.setRPS(new MapleRockPaperScissor(c, mode)); }else{ - c.announce(MaplePacketCreator.rpsMesoError(-1)); + c.announce(PacketCreator.rpsMesoError(-1)); } break; case 1: // answer if(rps == null || !rps.answer(c, slea.readByte())){ - c.announce(MaplePacketCreator.rpsMode((byte) 0x0D));// 13 + c.announce(PacketCreator.rpsMode((byte) 0x0D));// 13 } break; case 2: // time over if(rps == null || !rps.timeOut(c)){ - c.announce(MaplePacketCreator.rpsMode((byte) 0x0D)); + c.announce(PacketCreator.rpsMode((byte) 0x0D)); } break; case 3: // continue if(rps == null || !rps.nextRound(c)){ - c.announce(MaplePacketCreator.rpsMode((byte) 0x0D)); + c.announce(PacketCreator.rpsMode((byte) 0x0D)); } break; case 4: // leave if(rps != null){ rps.dispose(c); }else{ - c.announce(MaplePacketCreator.rpsMode((byte) 0x0D)); + c.announce(PacketCreator.rpsMode((byte) 0x0D)); } break; } diff --git a/src/main/java/net/server/channel/handlers/RaiseIncExpHandler.java b/src/main/java/net/server/channel/handlers/RaiseIncExpHandler.java index b0ad63342a..21336fb4b1 100644 --- a/src/main/java/net/server/channel/handlers/RaiseIncExpHandler.java +++ b/src/main/java/net/server/channel/handlers/RaiseIncExpHandler.java @@ -10,7 +10,7 @@ import net.AbstractMaplePacketHandler; import server.MapleItemInformationProvider; import server.MapleItemInformationProvider.QuestConsItem; import server.quest.MapleQuest; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.util.Map; @@ -42,7 +42,7 @@ public class RaiseIncExpHandler extends AbstractMaplePacketHandler { MapleCharacter chr = c.getPlayer(); MapleQuest quest = MapleQuest.getInstanceFromInfoNumber(infoNumber); if (!chr.getQuest(quest).getStatus().equals(MapleQuestStatus.Status.STARTED)) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -64,7 +64,7 @@ public class RaiseIncExpHandler extends AbstractMaplePacketHandler { int nextValue = Math.min(consumables.get(consId) + c.getAbstractPlayerInteraction().getQuestProgressInt(questid, infoNumber), consItem.exp * consItem.grade); c.getAbstractPlayerInteraction().setQuestProgress(questid, infoNumber, nextValue); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } finally { c.releaseClient(); } diff --git a/src/main/java/net/server/channel/handlers/RangedAttackHandler.java b/src/main/java/net/server/channel/handlers/RangedAttackHandler.java index 5b7f7e19cb..7b758a0dd4 100644 --- a/src/main/java/net/server/channel/handlers/RangedAttackHandler.java +++ b/src/main/java/net/server/channel/handlers/RangedAttackHandler.java @@ -21,11 +21,7 @@ along with this program. If not, see . */ package net.server.channel.handlers; -import client.MapleBuffStat; -import client.MapleCharacter; -import client.MapleClient; -import client.Skill; -import client.SkillFactory; +import client.*; import client.inventory.Item; import client.inventory.MapleInventory; import client.inventory.MapleInventoryType; @@ -34,16 +30,10 @@ import client.inventory.manipulator.MapleInventoryManipulator; import config.YamlConfig; import constants.game.GameConstants; import constants.inventory.ItemConstants; -import constants.skills.Aran; -import constants.skills.Buccaneer; -import constants.skills.NightLord; -import constants.skills.NightWalker; -import constants.skills.Shadower; -import constants.skills.ThunderBreaker; -import constants.skills.WindArcher; +import constants.skills.*; import server.MapleItemInformationProvider; import server.MapleStatEffect; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; import tools.data.input.SeekableLittleEndianAccessor; @@ -72,21 +62,21 @@ public final class RangedAttackHandler extends AbstractDealDamageHandler { if (GameConstants.isDojo(chr.getMap().getId()) && attack.numAttacked > 0) { chr.setDojoEnergy(chr.getDojoEnergy() + YamlConfig.config.server.DOJO_ENERGY_ATK); - c.announce(MaplePacketCreator.getEnergy("energy", chr.getDojoEnergy())); + c.announce(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); } if (attack.skill == Buccaneer.ENERGY_ORB || attack.skill == ThunderBreaker.SPARK || attack.skill == Shadower.TAUNT || attack.skill == NightLord.TAUNT) { - chr.getMap().broadcastMessage(chr, MaplePacketCreator.rangedAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, 0, attack.allDamage, attack.speed, attack.direction, attack.display), false); + chr.getMap().broadcastMessage(chr, PacketCreator.rangedAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, 0, attack.allDamage, attack.speed, attack.direction, attack.display), false); applyAttack(attack, chr, 1); } else if (attack.skill == ThunderBreaker.SHARK_WAVE && chr.getSkillLevel(ThunderBreaker.SHARK_WAVE) > 0) { - chr.getMap().broadcastMessage(chr, MaplePacketCreator.rangedAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, 0, attack.allDamage, attack.speed, attack.direction, attack.display), false); + chr.getMap().broadcastMessage(chr, PacketCreator.rangedAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, 0, attack.allDamage, attack.speed, attack.direction, attack.display), false); applyAttack(attack, chr, 1); for (int i = 0; i < attack.numAttacked; i++) { chr.handleEnergyChargeGain(); } } else if (attack.skill == Aran.COMBO_SMASH || attack.skill == Aran.COMBO_FENRIR || attack.skill == Aran.COMBO_TEMPEST) { - chr.getMap().broadcastMessage(chr, MaplePacketCreator.rangedAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, 0, attack.allDamage, attack.speed, attack.direction, attack.display), false); + chr.getMap().broadcastMessage(chr, PacketCreator.rangedAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, 0, attack.allDamage, attack.speed, attack.direction, attack.display), false); if (attack.skill == Aran.COMBO_SMASH && chr.getCombo() >= 30) { chr.setCombo((short) 0); applyAttack(attack, chr, 1); @@ -111,7 +101,7 @@ public final class RangedAttackHandler extends AbstractDealDamageHandler { effect = attack.getAttackEffect(chr, null); bulletCount = effect.getBulletCount(); if (effect.getCooldown() > 0) { - c.announce(MaplePacketCreator.skillCooldown(attack.skill, effect.getCooldown())); + c.announce(PacketCreator.skillCooldown(attack.skill, effect.getCooldown())); } if(attack.skill == 4111004) { // shadow meso @@ -203,10 +193,10 @@ public final class RangedAttackHandler extends AbstractDealDamageHandler { case 3221001: // Pierce case 5221004: // Rapid Fire case 13111002: // KoC Hurricane - packet = MaplePacketCreator.rangedAttack(chr, attack.skill, attack.skilllevel, attack.rangedirection, attack.numAttackedAndDamage, visProjectile, attack.allDamage, attack.speed, attack.direction, attack.display); + packet = PacketCreator.rangedAttack(chr, attack.skill, attack.skilllevel, attack.rangedirection, attack.numAttackedAndDamage, visProjectile, attack.allDamage, attack.speed, attack.direction, attack.display); break; default: - packet = MaplePacketCreator.rangedAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, visProjectile, attack.allDamage, attack.speed, attack.direction, attack.display); + packet = PacketCreator.rangedAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, visProjectile, attack.allDamage, attack.speed, attack.direction, attack.display); break; } chr.getMap().broadcastMessage(chr, packet, false, true); @@ -218,7 +208,7 @@ public final class RangedAttackHandler extends AbstractDealDamageHandler { if (chr.skillIsCooling(attack.skill)) { return; } else { - c.announce(MaplePacketCreator.skillCooldown(attack.skill, effect_.getCooldown())); + c.announce(PacketCreator.skillCooldown(attack.skill, effect_.getCooldown())); chr.addCooldown(attack.skill, currentServerTime(), effect_.getCooldown() * 1000); } } diff --git a/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java b/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java index 0a24fe84d7..0447680ffa 100644 --- a/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java +++ b/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java @@ -26,7 +26,7 @@ import client.MapleCharacter; import client.MapleClient; import net.AbstractMaplePacketHandler; import server.maps.MapleHiredMerchant; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -42,13 +42,13 @@ public class RemoteStoreHandler extends AbstractMaplePacketHandler { if (hm.getChannel() == chr.getClient().getChannel()) { hm.visitShop(chr); } else { - c.announce(MaplePacketCreator.remoteChannelChange((byte) (hm.getChannel() - 1))); + c.announce(PacketCreator.remoteChannelChange((byte) (hm.getChannel() - 1))); } return; } else { chr.dropMessage(1, "You don't have a Merchant open."); } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } private static MapleHiredMerchant getMerchant(MapleClient c) { diff --git a/src/main/java/net/server/channel/handlers/ReportHandler.java b/src/main/java/net/server/channel/handlers/ReportHandler.java index 2cc21962f1..219ee9e9d8 100644 --- a/src/main/java/net/server/channel/handlers/ReportHandler.java +++ b/src/main/java/net/server/channel/handlers/ReportHandler.java @@ -26,7 +26,7 @@ import client.MapleClient; import net.AbstractMaplePacketHandler; import net.server.Server; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.sql.Connection; @@ -51,14 +51,14 @@ public final class ReportHandler extends AbstractMaplePacketHandler { c.getPlayer().decreaseReports(); c.getPlayer().gainMeso(-300, true); } else { - c.announce(MaplePacketCreator.reportResponse((byte) 4)); + c.announce(PacketCreator.reportResponse((byte) 4)); return; } } else { - c.announce(MaplePacketCreator.reportResponse((byte) 2)); + c.announce(PacketCreator.reportResponse((byte) 2)); return; } - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, victim + " was reported for: " + description)); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(6, victim + " was reported for: " + description)); addReport(c.getPlayer().getId(), MapleCharacter.getIdByName(victim), 0, description, null); } else if (type == 1) { String chatlog = slea.readMapleAsciiString(); @@ -70,14 +70,14 @@ public final class ReportHandler extends AbstractMaplePacketHandler { c.getPlayer().decreaseReports(); c.getPlayer().gainMeso(-300, true); } else { - c.announce(MaplePacketCreator.reportResponse((byte) 4)); + c.announce(PacketCreator.reportResponse((byte) 4)); return; } } - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, victim + " was reported for: " + description)); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(6, victim + " was reported for: " + description)); addReport(c.getPlayer().getId(), MapleCharacter.getIdByName(victim), reason, description, chatlog); } else { - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, c.getPlayer().getName() + " is probably packet editing. Got unknown report type, which is impossible.")); + Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(6, c.getPlayer().getName() + " is probably packet editing. Got unknown report type, which is impossible.")); } } diff --git a/src/main/java/net/server/channel/handlers/RingActionHandler.java b/src/main/java/net/server/channel/handlers/RingActionHandler.java index 08a063ea9b..0d5bcbeaa8 100644 --- a/src/main/java/net/server/channel/handlers/RingActionHandler.java +++ b/src/main/java/net/server/channel/handlers/RingActionHandler.java @@ -35,7 +35,7 @@ import net.server.world.World; import scripting.event.EventInstanceManager; import server.MapleItemInformationProvider; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; import tools.packets.Wedding; @@ -315,20 +315,20 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { final MapleCharacter target = c.getPlayer(); if (source == null) { - target.announce(MaplePacketCreator.enableActions()); + target.announce(PacketCreator.enableActions()); return; } final int itemid = source.getMarriageItemId(); if (target.getPartnerId() > 0 || source.getId() != id || itemid <= 0 || !source.haveItem(itemid) || source.getPartnerId() > 0 || !source.isAlive() || !target.isAlive()) { - target.announce(MaplePacketCreator.enableActions()); + target.announce(PacketCreator.enableActions()); return; } if (accepted) { final int newItemId = getBoxId(itemid); if (!MapleInventoryManipulator.checkSpace(c, newItemId, 1, "") || !MapleInventoryManipulator.checkSpace(source.getClient(), newItemId, 1, "")) { - target.announce(MaplePacketCreator.enableActions()); + target.announce(PacketCreator.enableActions()); return; } @@ -374,12 +374,12 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { try { itemId = c.getPlayer().getInventory(MapleInventoryType.ETC).getItem(slot).getItemId(); } catch(NullPointerException npe) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } if((itemId != 4031377 && itemId != 4031395) || !c.getPlayer().haveItem(itemId)) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -444,7 +444,7 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { if(invitationid == 4031406 || invitationid == 4031407) { Item item = c.getPlayer().getInventory(MapleInventoryType.ETC).getItem(slot); if(item == null || item.getItemId() != invitationid) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -502,6 +502,6 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { break; } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/ScrollHandler.java b/src/main/java/net/server/channel/handlers/ScrollHandler.java index d8b9911855..a22d413c5e 100644 --- a/src/main/java/net/server/channel/handlers/ScrollHandler.java +++ b/src/main/java/net/server/channel/handlers/ScrollHandler.java @@ -31,7 +31,7 @@ import client.inventory.manipulator.MapleInventoryManipulator; import constants.inventory.ItemConstants; import net.AbstractMaplePacketHandler; import server.MapleItemInformationProvider; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.util.ArrayList; @@ -171,8 +171,8 @@ public final class ScrollHandler extends AbstractMaplePacketHandler { mods.add(new ModifyInventory(3, scrolled)); mods.add(new ModifyInventory(0, scrolled)); } - c.announce(MaplePacketCreator.modifyInventory(true, mods)); - chr.getMap().broadcastMessage(MaplePacketCreator.getScrollEffect(chr.getId(), scrollSuccess, legendarySpirit, whiteScroll)); + c.announce(PacketCreator.modifyInventory(true, mods)); + chr.getMap().broadcastMessage(PacketCreator.getScrollEffect(chr.getId(), scrollSuccess, legendarySpirit, whiteScroll)); if (dst < 0 && (scrollSuccess == Equip.ScrollResult.SUCCESS || scrollSuccess == Equip.ScrollResult.CURSE)) { chr.equipChanged(); } @@ -184,9 +184,9 @@ public final class ScrollHandler extends AbstractMaplePacketHandler { private static void announceCannotScroll(MapleClient c, boolean legendarySpirit) { if (legendarySpirit) { - c.announce(MaplePacketCreator.getScrollEffect(c.getPlayer().getId(), Equip.ScrollResult.FAIL, false, false)); + c.announce(PacketCreator.getScrollEffect(c.getPlayer().getId(), Equip.ScrollResult.FAIL, false, false)); } else { - c.announce(MaplePacketCreator.getInventoryFull()); + c.announce(PacketCreator.getInventoryFull()); } } diff --git a/src/main/java/net/server/channel/handlers/SkillBookHandler.java b/src/main/java/net/server/channel/handlers/SkillBookHandler.java index 9ff146ecb6..5a4774cc9d 100644 --- a/src/main/java/net/server/channel/handlers/SkillBookHandler.java +++ b/src/main/java/net/server/channel/handlers/SkillBookHandler.java @@ -31,7 +31,7 @@ import client.inventory.MapleInventoryType; import client.inventory.manipulator.MapleInventoryManipulator; import net.AbstractMaplePacketHandler; import server.MapleItemInformationProvider; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.util.Map; @@ -40,7 +40,7 @@ public final class SkillBookHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { if (!c.getPlayer().isAlive()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -97,7 +97,7 @@ public final class SkillBookHandler extends AbstractMaplePacketHandler { } // thanks Vcoc for noting skill book result not showing for all in area - player.getMap().broadcastMessage(MaplePacketCreator.skillBookResult(player, skill, maxlevel, canuse, success)); + player.getMap().broadcastMessage(PacketCreator.skillBookResult(player, skill, maxlevel, canuse, success)); } } } diff --git a/src/main/java/net/server/channel/handlers/SkillEffectHandler.java b/src/main/java/net/server/channel/handlers/SkillEffectHandler.java index d0d3679485..01d7e6bc03 100644 --- a/src/main/java/net/server/channel/handlers/SkillEffectHandler.java +++ b/src/main/java/net/server/channel/handlers/SkillEffectHandler.java @@ -22,25 +22,9 @@ package net.server.channel.handlers; import client.MapleClient; -import constants.skills.Bishop; -import constants.skills.Bowmaster; -import constants.skills.Brawler; -import constants.skills.ChiefBandit; -import constants.skills.Corsair; -import constants.skills.DarkKnight; -import constants.skills.Evan; -import constants.skills.FPArchMage; -import constants.skills.FPMage; -import constants.skills.Gunslinger; -import constants.skills.Hero; -import constants.skills.ILArchMage; -import constants.skills.Marksman; -import constants.skills.NightWalker; -import constants.skills.Paladin; -import constants.skills.ThunderBreaker; -import constants.skills.WindArcher; +import constants.skills.*; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class SkillEffectHandler extends AbstractMaplePacketHandler { @@ -70,7 +54,7 @@ public final class SkillEffectHandler extends AbstractMaplePacketHandler { case Hero.MONSTER_MAGNET: case Evan.FIRE_BREATH: case Evan.ICE_BREATH: - c.getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.skillEffect(c.getPlayer(), skillId, level, flags, speed, aids), false); + c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.skillEffect(c.getPlayer(), skillId, level, flags, speed, aids), false); return; default: System.out.println(c.getPlayer() + " entered SkillEffectHandler without being handled using " + skillId + "."); diff --git a/src/main/java/net/server/channel/handlers/SpecialMoveHandler.java b/src/main/java/net/server/channel/handlers/SpecialMoveHandler.java index cf988013d8..2b96e283ed 100644 --- a/src/main/java/net/server/channel/handlers/SpecialMoveHandler.java +++ b/src/main/java/net/server/channel/handlers/SpecialMoveHandler.java @@ -21,26 +21,20 @@ */ package net.server.channel.handlers; -import java.awt.Point; - -import config.YamlConfig; -import net.AbstractMaplePacketHandler; -import server.MapleStatEffect; -import server.life.MapleMonster; -import tools.MaplePacketCreator; -import tools.data.input.SeekableLittleEndianAccessor; import client.MapleCharacter; import client.MapleClient; import client.Skill; import client.SkillFactory; -import constants.skills.Brawler; -import constants.skills.Corsair; -import constants.skills.DarkKnight; -import constants.skills.Hero; -import constants.skills.Paladin; -import constants.skills.Priest; -import constants.skills.SuperGM; +import config.YamlConfig; +import constants.skills.*; +import net.AbstractMaplePacketHandler; import net.server.Server; +import server.MapleStatEffect; +import server.life.MapleMonster; +import tools.PacketCreator; +import tools.data.input.SeekableLittleEndianAccessor; + +import java.awt.*; public final class SpecialMoveHandler extends AbstractMaplePacketHandler { @@ -70,8 +64,8 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler { } skillLevel = 1; chr.setDojoEnergy(0); - c.announce(MaplePacketCreator.getEnergy("energy", chr.getDojoEnergy())); - c.announce(MaplePacketCreator.serverNotice(5, "As you used the secret skill, your energy bar has been reset.")); + c.announce(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); + c.announce(PacketCreator.serverNotice(5, "As you used the secret skill, your energy bar has been reset.")); } if (skillLevel == 0 || skillLevel != __skillLevel) return; @@ -85,7 +79,7 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler { cooldownTime /= 60; } - c.announce(MaplePacketCreator.skillCooldown(skillid, cooldownTime)); + c.announce(PacketCreator.skillCooldown(skillid, cooldownTime)); chr.addCooldown(skillid, currentServerTime(), cooldownTime * 1000); } } @@ -94,7 +88,7 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler { for (int i = 0; i < num; i++) { int mobOid = slea.readInt(); byte success = slea.readByte(); - chr.getMap().broadcastMessage(chr, MaplePacketCreator.catchMonster(mobOid, success), false); + chr.getMap().broadcastMessage(chr, PacketCreator.catchMonster(mobOid, success), false); MapleMonster monster = chr.getMap().getMonsterByOid(mobOid); if (monster != null) { if (!monster.isBoss()) { @@ -108,8 +102,8 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler { } } byte direction = slea.readByte(); // thanks MedicOP for pointing some 3rd-party related issues with Magnet - chr.getMap().broadcastMessage(chr, MaplePacketCreator.showBuffeffect(chr.getId(), skillid, chr.getSkillLevel(skillid), 1, direction), false); - c.announce(MaplePacketCreator.enableActions()); + chr.getMap().broadcastMessage(chr, PacketCreator.showBuffeffect(chr.getId(), skillid, chr.getSkillLevel(skillid), 1, direction), false); + c.announce(PacketCreator.enableActions()); return; } else if (skillid == Brawler.MP_RECOVERY) {// MP Recovery Skill s = SkillFactory.getSkill(skillid); @@ -120,7 +114,7 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler { chr.addMP(gain); } else if (skillid == SuperGM.HEAL_PLUS_DISPEL) { slea.skip(11); - chr.getMap().broadcastMessage(chr, MaplePacketCreator.showBuffeffect(chr.getId(), skillid, chr.getSkillLevel(skillid)), false); + chr.getMap().broadcastMessage(chr, PacketCreator.showBuffeffect(chr.getId(), skillid, chr.getSkillLevel(skillid)), false); } else if (skillid % 10000000 == 1004) { slea.readShort(); } @@ -149,10 +143,10 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler { } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } else { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/SpouseChatHandler.java b/src/main/java/net/server/channel/handlers/SpouseChatHandler.java index 46d4bff57f..6da509343d 100644 --- a/src/main/java/net/server/channel/handlers/SpouseChatHandler.java +++ b/src/main/java/net/server/channel/handlers/SpouseChatHandler.java @@ -26,7 +26,7 @@ import client.MapleClient; import config.YamlConfig; import net.AbstractMaplePacketHandler; import tools.LogHelper; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class SpouseChatHandler extends AbstractMaplePacketHandler { @@ -39,8 +39,8 @@ public final class SpouseChatHandler extends AbstractMaplePacketHandler { if (partnerId > 0) { // yay marriage MapleCharacter spouse = c.getWorldServer().getPlayerStorage().getCharacterById(partnerId); if (spouse != null) { - spouse.announce(MaplePacketCreator.OnCoupleMessage(c.getPlayer().getName(), msg, true)); - c.announce(MaplePacketCreator.OnCoupleMessage(c.getPlayer().getName(), msg, true)); + spouse.announce(PacketCreator.OnCoupleMessage(c.getPlayer().getName(), msg, true)); + c.announce(PacketCreator.OnCoupleMessage(c.getPlayer().getName(), msg, true)); if (YamlConfig.config.server.USE_ENABLE_CHAT_LOG) { LogHelper.logChat(c, "Spouse", msg); } diff --git a/src/main/java/net/server/channel/handlers/SummonDamageHandler.java b/src/main/java/net/server/channel/handlers/SummonDamageHandler.java index 18722edf21..379a288d20 100644 --- a/src/main/java/net/server/channel/handlers/SummonDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/SummonDamageHandler.java @@ -31,17 +31,18 @@ import client.inventory.MapleInventoryType; import client.inventory.MapleWeaponType; import client.status.MonsterStatusEffect; import constants.skills.Outlaw; -import java.util.ArrayList; -import java.util.List; import server.MapleItemInformationProvider; import server.MapleStatEffect; import server.life.MapleMonster; import server.life.MapleMonsterInformationProvider; import server.maps.MapleSummon; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; +import java.util.ArrayList; +import java.util.List; + public final class SummonDamageHandler extends AbstractDealDamageHandler { public final class SummonAttackEntry { @@ -93,7 +94,7 @@ public final class SummonDamageHandler extends AbstractDealDamageHandler { int damage = slea.readInt(); allDamage.add(new SummonAttackEntry(monsterOid, damage)); } - player.getMap().broadcastMessage(player, MaplePacketCreator.summonAttack(player.getId(), summon.getObjectId(), direction, allDamage), summon.getPosition()); + player.getMap().broadcastMessage(player, PacketCreator.summonAttack(player.getId(), summon.getObjectId(), direction, allDamage), summon.getPosition()); if (player.getMap().isOwnershipRestricted(player)) { return; diff --git a/src/main/java/net/server/channel/handlers/TakeDamageHandler.java b/src/main/java/net/server/channel/handlers/TakeDamageHandler.java index c04a258e18..8e59aace0e 100644 --- a/src/main/java/net/server/channel/handlers/TakeDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/TakeDamageHandler.java @@ -39,7 +39,7 @@ import server.life.*; import server.maps.MapleMap; import server.maps.MapleMapObject; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; import tools.data.input.SeekableLittleEndianAccessor; @@ -168,9 +168,9 @@ public final class TakeDamageHandler extends AbstractMaplePacketHandler { bouncedamage = attacker.getMaxHp() / 5; } map.damageMonster(chr, attacker, bouncedamage); - map.broadcastMessage(chr, MaplePacketCreator.damageMonster(oid, bouncedamage), true); - chr.getClient().announce(MaplePacketCreator.showOwnBuffEffect(id, 5)); - map.broadcastMessage(chr, MaplePacketCreator.showBuffeffect(chr.getId(), id, 5), false); + map.broadcastMessage(chr, PacketCreator.damageMonster(oid, bouncedamage), true); + chr.getClient().announce(PacketCreator.showOwnBuffEffect(id, 5)); + map.broadcastMessage(chr, PacketCreator.showBuffeffect(chr.getId(), id, 5), false); } } } @@ -201,7 +201,7 @@ public final class TakeDamageHandler extends AbstractMaplePacketHandler { bouncedamage = Math.min(bouncedamage, attacker.getMaxHp() / 10); damage -= bouncedamage; map.damageMonster(chr, attacker, bouncedamage); - map.broadcastMessage(chr, MaplePacketCreator.damageMonster(oid, bouncedamage), false, true); + map.broadcastMessage(chr, PacketCreator.damageMonster(oid, bouncedamage), false, true); attacker.aggroMonsterDamage(chr, bouncedamage); } MapleStatEffect bPressure = chr.getBuffEffect(MapleBuffStat.BODY_PRESSURE); // thanks Atoot for noticing an issue on Body Pressure neutralise @@ -268,13 +268,13 @@ public final class TakeDamageHandler extends AbstractMaplePacketHandler { } } if (!chr.isHidden()) { - map.broadcastMessage(chr, MaplePacketCreator.damagePlayer(damagefrom, monsteridfrom, chr.getId(), damage, fake, direction, is_pgmr, pgmr, is_pg, oid, pos_x, pos_y), false); + map.broadcastMessage(chr, PacketCreator.damagePlayer(damagefrom, monsteridfrom, chr.getId(), damage, fake, direction, is_pgmr, pgmr, is_pg, oid, pos_x, pos_y), false); } else { - map.broadcastGMMessage(chr, MaplePacketCreator.damagePlayer(damagefrom, monsteridfrom, chr.getId(), damage, fake, direction, is_pgmr, pgmr, is_pg, oid, pos_x, pos_y), false); + map.broadcastGMMessage(chr, PacketCreator.damagePlayer(damagefrom, monsteridfrom, chr.getId(), damage, fake, direction, is_pgmr, pgmr, is_pg, oid, pos_x, pos_y), false); } if (GameConstants.isDojo(map.getId())) { chr.setDojoEnergy(chr.getDojoEnergy() + YamlConfig.config.server.DOJO_ENERGY_DMG); - c.announce(MaplePacketCreator.getEnergy("energy", chr.getDojoEnergy())); + c.announce(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); } for (MapleCharacter player : banishPlayers) { // chill, if this list ever gets non-empty an attacker does exist, trust me :) diff --git a/src/main/java/net/server/channel/handlers/TouchingCashShopHandler.java b/src/main/java/net/server/channel/handlers/TouchingCashShopHandler.java index be241138b5..c6613ceeb7 100644 --- a/src/main/java/net/server/channel/handlers/TouchingCashShopHandler.java +++ b/src/main/java/net/server/channel/handlers/TouchingCashShopHandler.java @@ -23,7 +23,7 @@ package net.server.channel.handlers; import client.MapleClient; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -33,6 +33,6 @@ import tools.data.input.SeekableLittleEndianAccessor; public final class TouchingCashShopHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { - c.announce(MaplePacketCreator.showCash(c.getPlayer())); + c.announce(PacketCreator.showCash(c.getPlayer())); } } diff --git a/src/main/java/net/server/channel/handlers/TransferNameHandler.java b/src/main/java/net/server/channel/handlers/TransferNameHandler.java index d434fae6be..89f38629c5 100644 --- a/src/main/java/net/server/channel/handlers/TransferNameHandler.java +++ b/src/main/java/net/server/channel/handlers/TransferNameHandler.java @@ -25,7 +25,7 @@ import client.MapleClient; import config.YamlConfig; import net.AbstractMaplePacketHandler; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.sql.*; @@ -43,20 +43,20 @@ public final class TransferNameHandler extends AbstractMaplePacketHandler { slea.readInt(); //cid int birthday = slea.readInt(); if (!CashOperationHandler.checkBirthday(c, birthday)) { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC4)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.showCashShopMessage((byte) 0xC4)); + c.announce(PacketCreator.enableActions()); return; } if(!YamlConfig.config.server.ALLOW_CASHSHOP_NAME_CHANGE) { - c.announce(MaplePacketCreator.sendNameTransferRules(4)); + c.announce(PacketCreator.sendNameTransferRules(4)); return; } MapleCharacter chr = c.getPlayer(); if(chr.getLevel() < 10) { - c.announce(MaplePacketCreator.sendNameTransferRules(4)); + c.announce(PacketCreator.sendNameTransferRules(4)); return; } else if(c.getTempBanCalendar() != null && c.getTempBanCalendar().getTimeInMillis() + (30*24*60*60*1000) < Calendar.getInstance().getTimeInMillis()) { - c.announce(MaplePacketCreator.sendNameTransferRules(2)); + c.announce(PacketCreator.sendNameTransferRules(2)); return; } //sql queries @@ -67,10 +67,10 @@ public final class TransferNameHandler extends AbstractMaplePacketHandler { while(rs.next()) { Timestamp completedTimestamp = rs.getTimestamp("completionTime"); if(completedTimestamp == null) { //has pending name request - c.announce(MaplePacketCreator.sendNameTransferRules(1)); + c.announce(PacketCreator.sendNameTransferRules(1)); return; } else if(completedTimestamp.getTime() + YamlConfig.config.server.NAME_CHANGE_COOLDOWN > System.currentTimeMillis()) { - c.announce(MaplePacketCreator.sendNameTransferRules(3)); + c.announce(PacketCreator.sendNameTransferRules(3)); return; } } @@ -78,6 +78,6 @@ public final class TransferNameHandler extends AbstractMaplePacketHandler { e.printStackTrace(); return; } - c.announce(MaplePacketCreator.sendNameTransferRules(0)); + c.announce(PacketCreator.sendNameTransferRules(0)); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/TransferNameResultHandler.java b/src/main/java/net/server/channel/handlers/TransferNameResultHandler.java index aca218c523..647a043541 100644 --- a/src/main/java/net/server/channel/handlers/TransferNameResultHandler.java +++ b/src/main/java/net/server/channel/handlers/TransferNameResultHandler.java @@ -23,7 +23,7 @@ package net.server.channel.handlers; import client.MapleCharacter; import client.MapleClient; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -35,6 +35,6 @@ public final class TransferNameResultHandler extends AbstractMaplePacketHandler @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { String name = slea.readMapleAsciiString(); - c.announce(MaplePacketCreator.sendNameTransferCheck(name, MapleCharacter.canCreateChar(name))); + c.announce(PacketCreator.sendNameTransferCheck(name, MapleCharacter.canCreateChar(name))); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/TransferWorldHandler.java b/src/main/java/net/server/channel/handlers/TransferWorldHandler.java index b34078c1b4..b2fbc14c7a 100644 --- a/src/main/java/net/server/channel/handlers/TransferWorldHandler.java +++ b/src/main/java/net/server/channel/handlers/TransferWorldHandler.java @@ -26,7 +26,7 @@ import config.YamlConfig; import net.AbstractMaplePacketHandler; import net.server.Server; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.sql.*; @@ -43,18 +43,18 @@ public final class TransferWorldHandler extends AbstractMaplePacketHandler { slea.readInt(); //cid int birthday = slea.readInt(); if (!CashOperationHandler.checkBirthday(c, birthday)) { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC4)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.showCashShopMessage((byte) 0xC4)); + c.announce(PacketCreator.enableActions()); return; } MapleCharacter chr = c.getPlayer(); if(!YamlConfig.config.server.ALLOW_CASHSHOP_WORLD_TRANSFER || Server.getInstance().getWorldsSize() <= 1) { - c.announce(MaplePacketCreator.sendWorldTransferRules(9, c)); + c.announce(PacketCreator.sendWorldTransferRules(9, c)); return; } int worldTransferError = chr.checkWorldTransferEligibility(); if(worldTransferError != 0) { - c.announce(MaplePacketCreator.sendWorldTransferRules(worldTransferError, c)); + c.announce(PacketCreator.sendWorldTransferRules(worldTransferError, c)); return; } try (Connection con = DatabaseConnection.getConnection(); @@ -64,10 +64,10 @@ public final class TransferWorldHandler extends AbstractMaplePacketHandler { while(rs.next()) { Timestamp completedTimestamp = rs.getTimestamp("completionTime"); if(completedTimestamp == null) { //has pending world transfer - c.announce(MaplePacketCreator.sendWorldTransferRules(6, c)); + c.announce(PacketCreator.sendWorldTransferRules(6, c)); return; } else if(completedTimestamp.getTime() + YamlConfig.config.server.WORLD_TRANSFER_COOLDOWN > System.currentTimeMillis()) { - c.announce(MaplePacketCreator.sendWorldTransferRules(7, c)); + c.announce(PacketCreator.sendWorldTransferRules(7, c)); return; } } @@ -75,6 +75,6 @@ public final class TransferWorldHandler extends AbstractMaplePacketHandler { e.printStackTrace(); return; } - c.announce(MaplePacketCreator.sendWorldTransferRules(0, c)); + c.announce(PacketCreator.sendWorldTransferRules(0, c)); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/TrockAddMapHandler.java b/src/main/java/net/server/channel/handlers/TrockAddMapHandler.java index 0f0c34364b..0011af7535 100644 --- a/src/main/java/net/server/channel/handlers/TrockAddMapHandler.java +++ b/src/main/java/net/server/channel/handlers/TrockAddMapHandler.java @@ -25,7 +25,7 @@ import client.MapleCharacter; import client.MapleClient; import net.AbstractMaplePacketHandler; import server.maps.FieldLimit; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -45,7 +45,7 @@ public final class TrockAddMapHandler extends AbstractMaplePacketHandler { chr.deleteFromVipTrocks(mapId); else chr.deleteFromTrocks(mapId); - c.announce(MaplePacketCreator.trockRefreshMapList(chr, true, vip)); + c.announce(PacketCreator.trockRefreshMapList(chr, true, vip)); } else if (type == 0x01) { if (!FieldLimit.CANNOTVIPROCK.check(chr.getMap().getFieldLimit())) { if (vip) @@ -53,7 +53,7 @@ public final class TrockAddMapHandler extends AbstractMaplePacketHandler { else chr.addTrockMap(); - c.announce(MaplePacketCreator.trockRefreshMapList(chr, false, vip)); + c.announce(PacketCreator.trockRefreshMapList(chr, false, vip)); } else { chr.message("You may not save this map."); } diff --git a/src/main/java/net/server/channel/handlers/UseCashItemHandler.java b/src/main/java/net/server/channel/handlers/UseCashItemHandler.java index 3cf50014fd..3bc6beff29 100644 --- a/src/main/java/net/server/channel/handlers/UseCashItemHandler.java +++ b/src/main/java/net/server/channel/handlers/UseCashItemHandler.java @@ -40,7 +40,7 @@ import server.MapleShop; import server.MapleShopFactory; import server.TimerManager; import server.maps.*; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; @@ -58,7 +58,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { long timeNow = currentServerTime(); if (timeNow - player.getLastUsedCashItem() < 3000) { player.dropMessage(1, "You have used a cash item recently. Wait a moment, then try again."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } player.setLastUsedCashItem(timeNow); @@ -74,7 +74,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { toUse = cashInv.findById(itemId); if (toUse == null) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -82,7 +82,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { } if (toUse.getQuantity() < 1) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -133,11 +133,11 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { if (!success) { MapleInventoryManipulator.addById(c, itemId, (short) 1); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } else if (itemType == 505) { // AP/SP reset if(!player.isAlive()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -254,14 +254,14 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { switch ((itemId / 1000) % 10) { case 1: // Megaphone if (player.getLevel() > 9) { - player.getClient().getChannelServer().broadcastPacket(MaplePacketCreator.serverNotice(2, medal + player.getName() + " : " + slea.readMapleAsciiString())); + player.getClient().getChannelServer().broadcastPacket(PacketCreator.serverNotice(2, medal + player.getName() + " : " + slea.readMapleAsciiString())); } else { player.dropMessage(1, "You may not use this until you're level 10."); return; } break; case 2: // Super megaphone - Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(3, c.getChannel(), medal + player.getName() + " : " + slea.readMapleAsciiString(), (slea.readByte() != 0))); + Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.serverNotice(3, c.getChannel(), medal + player.getName() + " : " + slea.readMapleAsciiString(), (slea.readByte() != 0))); break; case 5: // Maple TV int tvType = itemId % 10; @@ -299,7 +299,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { } if (megassenger) { - Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(3, c.getChannel(), medal + player.getName() + " : " + builder.toString(), ear)); + Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.serverNotice(3, c.getChannel(), medal + player.getName() + " : " + builder.toString(), ear)); } break; @@ -316,7 +316,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { // thanks Conrad for noticing that untradeable items should be allowed in megas } - Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.itemMegaphone(msg, whisper, c.getChannel(), item)); + Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.itemMegaphone(msg, whisper, c.getChannel(), item)); break; case 7: //triple megaphone int lines = slea.readByte(); @@ -329,7 +329,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { msg2[i] = medal + player.getName() + " : " + slea.readMapleAsciiString(); } whisper = slea.readByte() == 1; - Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.getMultiMegaphone(msg2, c.getChannel(), whisper)); + Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.getMultiMegaphone(msg2, c.getChannel(), whisper)); break; } remove(c, position, itemId); @@ -340,7 +340,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { player.getMap().spawnKite(kite); remove(c, position, itemId); } else { - c.announce(MaplePacketCreator.sendCannotSpawnKite()); + c.announce(PacketCreator.sendCannotSpawnKite()); } } else if (itemType == 509) { String sendTo = slea.readMapleAsciiString(); @@ -352,7 +352,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { } remove(c, position, itemId); } else if (itemType == 510) { - player.getMap().broadcastMessage(MaplePacketCreator.musicChange("Jukebox/Congratulation")); + player.getMap().broadcastMessage(PacketCreator.musicChange("Jukebox/Congratulation")); remove(c, position, itemId); } else if (itemType == 512) { if (ii.getStateChangeItem(itemId) != 0) { @@ -365,7 +365,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { } else if (itemType == 517) { MaplePet pet = player.getPet(0); if (pet == null) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } String newName = slea.readMapleAsciiString(); @@ -376,13 +376,13 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { if (item != null) player.forceUpdateItem(item); - player.getMap().broadcastMessage(player, MaplePacketCreator.changePetName(player, newName, 1), true); - c.announce(MaplePacketCreator.enableActions()); + player.getMap().broadcastMessage(player, PacketCreator.changePetName(player, newName, 1), true); + c.announce(PacketCreator.enableActions()); remove(c, position, itemId); } else if (itemType == 520) { player.gainMeso(ii.getMeso(itemId), true, false, true); remove(c, position, itemId); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } else if (itemType == 523) { int itemid = slea.readInt(); @@ -391,8 +391,8 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { List> hmsAvailable = c.getWorldServer().getAvailableItemBundles(itemid); if(!hmsAvailable.isEmpty()) remove(c, position, itemId); - c.announce(MaplePacketCreator.owlOfMinerva(c, itemid, hmsAvailable)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.owlOfMinerva(c, itemid, hmsAvailable)); + c.announce(PacketCreator.enableActions()); } else if (itemType == 524) { for (byte i = 0; i < 3; i++) { @@ -409,7 +409,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { break; } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } else if (itemType == 530) { ii.getItemEffect(itemId).applyTo(player); remove(c, position, itemId); @@ -418,13 +418,13 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { } else if (itemType == 537) { if (GameConstants.isFreeMarketRoom(player.getMapId())) { player.dropMessage(5, "You cannot use the chalkboard here."); - player.getClient().announce(MaplePacketCreator.enableActions()); + player.getClient().announce(PacketCreator.enableActions()); return; } player.setChalkboard(slea.readMapleAsciiString()); - player.getMap().broadcastMessage(MaplePacketCreator.useChalkboard(player, false)); - player.getClient().announce(MaplePacketCreator.enableActions()); + player.getMap().broadcastMessage(PacketCreator.useChalkboard(player, false)); + player.getClient().announce(PacketCreator.enableActions()); //remove(c, position, itemId); thanks Conrad for noticing chalkboards shouldn't be depleted upon use } else if (itemType == 539) { List strLines = new LinkedList<>(); @@ -433,23 +433,23 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { } final int world = c.getWorld(); - Server.getInstance().broadcastMessage(world, MaplePacketCreator.getAvatarMega(player, medal, c.getChannel(), itemId, strLines, (slea.readByte() != 0))); - TimerManager.getInstance().schedule(() -> Server.getInstance().broadcastMessage(world, MaplePacketCreator.byeAvatarMega()), 1000 * 10); + Server.getInstance().broadcastMessage(world, PacketCreator.getAvatarMega(player, medal, c.getChannel(), itemId, strLines, (slea.readByte() != 0))); + TimerManager.getInstance().schedule(() -> Server.getInstance().broadcastMessage(world, PacketCreator.byeAvatarMega()), 1000 * 10); remove(c, position, itemId); } else if (itemType == 540) { slea.readByte(); slea.readInt(); if(itemId == 5400000) { //name change - c.announce(MaplePacketCreator.showNameChangeCancel(player.cancelPendingNameChange())); + c.announce(PacketCreator.showNameChangeCancel(player.cancelPendingNameChange())); } else if(itemId == 5401000) { //world transfer - c.announce(MaplePacketCreator.showWorldTransferCancel(player.cancelPendingWorldTranfer())); + c.announce(PacketCreator.showWorldTransferCancel(player.cancelPendingWorldTranfer())); } remove(c, position, itemId); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } else if (itemType == 543) { if(itemId == 5432000 && !c.gainCharacterSlot()) { player.dropMessage(1, "You have already used up all 12 extra character slots."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -485,15 +485,15 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { } if(createStatus == 0) { - c.announce(MaplePacketCreator.sendMapleLifeError(0)); // success! + c.announce(PacketCreator.sendMapleLifeError(0)); // success! player.showHint("#bSuccess#k on creation of the new character through the Maple Life card."); remove(c, position, itemId); } else { if(createStatus == -1) { // check name - c.announce(MaplePacketCreator.sendMapleLifeNameError()); + c.announce(PacketCreator.sendMapleLifeNameError()); } else { - c.announce(MaplePacketCreator.sendMapleLifeError(-1 * createStatus)); + c.announce(PacketCreator.sendMapleLifeError(-1 * createStatus)); } } } else if (itemType == 545) { // MiuMiu's travel store @@ -504,25 +504,25 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { remove(c, position, itemId); } } else { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } else if (itemType == 550) { //Extend item expiration - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } else if (itemType == 552) { MapleInventoryType type = MapleInventoryType.getByType((byte) slea.readInt()); short slot = (short) slea.readInt(); Item item = player.getInventory(type).getItem(slot); if (item == null || item.getQuantity() <= 0 || MapleKarmaManipulator.hasKarmaFlag(item) || !ii.isKarmaAble(item.getItemId())) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } MapleKarmaManipulator.setKarmaFlag(item); player.forceUpdateItem(item); remove(c, position, itemId); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } else if (itemType == 552) { //DS EGG THING - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } else if (itemType == 557) { slea.readInt(); int itemSlot = slea.readInt(); @@ -534,8 +534,8 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { equip.setVicious(equip.getVicious() + 1); equip.setUpgradeSlots(equip.getUpgradeSlots() + 1); remove(c, position, itemId); - c.announce(MaplePacketCreator.enableActions()); - c.announce(MaplePacketCreator.sendHammerData(equip.getVicious())); + c.announce(PacketCreator.enableActions()); + c.announce(PacketCreator.sendHammerData(equip.getVicious())); player.forceUpdateItem(equip); } else if (itemType == 561) { //VEGA'S SPELL if (slea.readInt() != 1) { @@ -557,7 +557,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { Equip toScroll = (Equip) eitem; if (toScroll.getUpgradeSlots() < 1) { - c.announce(MaplePacketCreator.getInventoryFull()); + c.announce(PacketCreator.getInventoryFull()); return; } @@ -567,10 +567,10 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { player.toggleBlockCashShop(); final int curlevel = toScroll.getLevel(); - c.announce(MaplePacketCreator.sendVegaScroll(0x40)); + c.announce(PacketCreator.sendVegaScroll(0x40)); final Equip scrolled = (Equip) ii.scrollEquipWithId(toScroll, uitem.getItemId(), false, itemId, player.isGM()); - c.announce(MaplePacketCreator.sendVegaScroll(scrolled.getLevel() > curlevel ? 0x41 : 0x43)); + c.announce(PacketCreator.sendVegaScroll(scrolled.getLevel() > curlevel ? 0x41 : 0x43)); //opcodes 0x42, 0x44: "this item cannot be used"; 0x39, 0x45: crashes MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, uSlot, (short) 1, false); @@ -585,19 +585,19 @@ player.toggleBlockCashShop(); final List mods = new ArrayList<>(); mods.add(new ModifyInventory(3, scrolled)); mods.add(new ModifyInventory(0, scrolled)); -client.announce(MaplePacketCreator.modifyInventory(true, mods)); +client.announce(PacketCreator.modifyInventory(true, mods)); ScrollResult scrollResult = scrolled.getLevel() > curlevel ? ScrollResult.SUCCESS : ScrollResult.FAIL; -player.getMap().broadcastMessage(MaplePacketCreator.getScrollEffect(player.getId(), scrollResult, false, false)); +player.getMap().broadcastMessage(PacketCreator.getScrollEffect(player.getId(), scrollResult, false, false)); if (eSlot < 0 && (scrollResult == ScrollResult.SUCCESS)) { player.equipChanged(); } -client.announce(MaplePacketCreator.enableActions()); +client.announce(PacketCreator.enableActions()); }, 1000 * 3); } else { System.out.println("NEW CASH ITEM: " + itemType + "\n" + slea.toString()); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/UseCatchItemHandler.java b/src/main/java/net/server/channel/handlers/UseCatchItemHandler.java index ef3ee4b444..906d86772c 100644 --- a/src/main/java/net/server/channel/handlers/UseCatchItemHandler.java +++ b/src/main/java/net/server/channel/handlers/UseCatchItemHandler.java @@ -23,15 +23,15 @@ package net.server.channel.handlers; import client.MapleCharacter; import client.MapleClient; -import client.inventory.MapleInventoryType; import client.autoban.AutobanManager; +import client.inventory.MapleInventoryType; +import client.inventory.manipulator.MapleInventoryManipulator; import constants.inventory.ItemConstants; import net.AbstractMaplePacketHandler; import net.server.Server; -import client.inventory.manipulator.MapleInventoryManipulator; import server.MapleItemInformationProvider; import server.life.MapleMonster; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -59,27 +59,27 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { switch (itemId) { case 2270000: if (mob.getId() == 9300101) { - chr.getMap().broadcastMessage(MaplePacketCreator.catchMonster(monsterid, itemId, (byte) 1)); + chr.getMap().broadcastMessage(PacketCreator.catchMonster(monsterid, itemId, (byte) 1)); mob.getMap().killMonster(mob, null, false); MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 1902000, (short) 1, "", -1); } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); break; case 2270001: if (mob.getId() == 9500197) { if ((abm.getLastSpam(10) + 1000) < currentServerTime()) { if (mob.getHp() < ((mob.getMaxHp() / 10) * 4)) { - chr.getMap().broadcastMessage(MaplePacketCreator.catchMonster(monsterid, itemId, (byte) 1)); + chr.getMap().broadcastMessage(PacketCreator.catchMonster(monsterid, itemId, (byte) 1)); mob.getMap().killMonster(mob, null, false); MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 4031830, (short) 1, "", -1); } else { abm.spam(10); - c.announce(MaplePacketCreator.catchMessage(0)); + c.announce(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } break; case 2270002: @@ -88,12 +88,12 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { if (mob.getHp() < ((mob.getMaxHp() / 10) * 4)) { if (chr.canHold(4031868, 1)) { if (Math.random() < 0.5) { // 50% chance - chr.getMap().broadcastMessage(MaplePacketCreator.catchMonster(monsterid, itemId, (byte) 1)); + chr.getMap().broadcastMessage(PacketCreator.catchMonster(monsterid, itemId, (byte) 1)); mob.getMap().killMonster(mob, null, false); MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 4031868, (short) 1, "", -1); } else { - chr.getMap().broadcastMessage(MaplePacketCreator.catchMonster(monsterid, itemId, (byte) 0)); + chr.getMap().broadcastMessage(PacketCreator.catchMonster(monsterid, itemId, (byte) 0)); } } else { chr.dropMessage(5, "Make a ETC slot available before using this item."); @@ -101,89 +101,89 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { abm.spam(10); } else { - c.announce(MaplePacketCreator.catchMessage(0)); + c.announce(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } break; case 2270003: if (mob.getId() == 9500320) { if (mob.getHp() < ((mob.getMaxHp() / 10) * 4)) { - chr.getMap().broadcastMessage(MaplePacketCreator.catchMonster(monsterid, itemId, (byte) 1)); + chr.getMap().broadcastMessage(PacketCreator.catchMonster(monsterid, itemId, (byte) 1)); mob.getMap().killMonster(mob, null, false); MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 4031887, (short) 1, "", -1); } else { - c.announce(MaplePacketCreator.catchMessage(0)); + c.announce(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); break; case 2270005: if (mob.getId() == 9300187) { if (mob.getHp() < ((mob.getMaxHp() / 10) * 3)) { - chr.getMap().broadcastMessage(MaplePacketCreator.catchMonster(monsterid, itemId, (byte) 1)); + chr.getMap().broadcastMessage(PacketCreator.catchMonster(monsterid, itemId, (byte) 1)); mob.getMap().killMonster(mob, null, false); MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 2109001, (short) 1, "", -1); } else { - c.announce(MaplePacketCreator.catchMessage(0)); + c.announce(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); break; case 2270006: if (mob.getId() == 9300189) { if (mob.getHp() < ((mob.getMaxHp() / 10) * 3)) { - chr.getMap().broadcastMessage(MaplePacketCreator.catchMonster(monsterid, itemId, (byte) 1)); + chr.getMap().broadcastMessage(PacketCreator.catchMonster(monsterid, itemId, (byte) 1)); mob.getMap().killMonster(mob, null, false); MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 2109002, (short) 1, "", -1); } else { - c.announce(MaplePacketCreator.catchMessage(0)); + c.announce(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); break; case 2270007: if (mob.getId() == 9300191) { if (mob.getHp() < ((mob.getMaxHp() / 10) * 3)) { - chr.getMap().broadcastMessage(MaplePacketCreator.catchMonster(monsterid, itemId, (byte) 1)); + chr.getMap().broadcastMessage(PacketCreator.catchMonster(monsterid, itemId, (byte) 1)); mob.getMap().killMonster(mob, null, false); MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 2109003, (short) 1, "", -1); } else { - c.announce(MaplePacketCreator.catchMessage(0)); + c.announce(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); break; case 2270004: if (mob.getId() == 9300175) { if (mob.getHp() < ((mob.getMaxHp() / 10) * 4)) { - chr.getMap().broadcastMessage(MaplePacketCreator.catchMonster(monsterid, itemId, (byte) 1)); + chr.getMap().broadcastMessage(PacketCreator.catchMonster(monsterid, itemId, (byte) 1)); mob.getMap().killMonster(mob, null, false); MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 4001169, (short) 1, "", -1); } else { - c.announce(MaplePacketCreator.catchMessage(0)); + c.announce(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); break; case 2270008: if (mob.getId() == 9500336) { if ((abm.getLastSpam(10) + 3000) < currentServerTime()) { abm.spam(10); - chr.getMap().broadcastMessage(MaplePacketCreator.catchMonster(monsterid, itemId, (byte) 1)); + chr.getMap().broadcastMessage(PacketCreator.catchMonster(monsterid, itemId, (byte) 1)); mob.getMap().killMonster(mob, null, false); MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 2022323, (short) 1, "", -1); } else { chr.message("You cannot use the Fishing Net yet."); } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } break; default: @@ -199,21 +199,21 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { if (timeCatch != 0 && (abm.getLastSpam(10) + timeCatch) < currentServerTime()) { if (mobHp != 0 && mob.getHp() < ((mob.getMaxHp() / 100) * mobHp)) { - chr.getMap().broadcastMessage(MaplePacketCreator.catchMonster(monsterid, itemId, (byte) 1)); + chr.getMap().broadcastMessage(PacketCreator.catchMonster(monsterid, itemId, (byte) 1)); mob.getMap().killMonster(mob, null, false); MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, itemGanho, (short) 1, "", -1); } else if (mob.getId() != 9500336) { if (mobHp != 0) { abm.spam(10); - c.announce(MaplePacketCreator.catchMessage(0)); + c.announce(PacketCreator.catchMessage(0)); } } else { chr.message("You cannot use the Fishing Net yet."); } } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); // System.out.println("UseCatchItemHandler: \r\n" + slea.toString()); } diff --git a/src/main/java/net/server/channel/handlers/UseDeathItemHandler.java b/src/main/java/net/server/channel/handlers/UseDeathItemHandler.java index d750301b40..5714263866 100644 --- a/src/main/java/net/server/channel/handlers/UseDeathItemHandler.java +++ b/src/main/java/net/server/channel/handlers/UseDeathItemHandler.java @@ -23,7 +23,7 @@ package net.server.channel.handlers; import client.MapleClient; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class UseDeathItemHandler extends AbstractMaplePacketHandler { @@ -31,6 +31,6 @@ public final class UseDeathItemHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { int itemId = slea.readInt(); c.getPlayer().setItemEffect(itemId); - c.announce(MaplePacketCreator.itemEffect(c.getPlayer().getId(), itemId)); + c.announce(PacketCreator.itemEffect(c.getPlayer().getId(), itemId)); } } diff --git a/src/main/java/net/server/channel/handlers/UseGachaExpHandler.java b/src/main/java/net/server/channel/handlers/UseGachaExpHandler.java index 61b8c27bf5..7aa95462c8 100644 --- a/src/main/java/net/server/channel/handlers/UseGachaExpHandler.java +++ b/src/main/java/net/server/channel/handlers/UseGachaExpHandler.java @@ -25,7 +25,7 @@ package net.server.channel.handlers; import client.MapleClient; import client.autoban.AutobanFactory; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -50,6 +50,6 @@ public class UseGachaExpHandler extends AbstractMaplePacketHandler { } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/UseHammerHandler.java b/src/main/java/net/server/channel/handlers/UseHammerHandler.java index dc80c8960e..68c4640575 100644 --- a/src/main/java/net/server/channel/handlers/UseHammerHandler.java +++ b/src/main/java/net/server/channel/handlers/UseHammerHandler.java @@ -23,7 +23,7 @@ package net.server.channel.handlers; import client.MapleClient; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -32,6 +32,6 @@ import tools.data.input.SeekableLittleEndianAccessor; */ public final class UseHammerHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { - c.announce(MaplePacketCreator.sendHammerMessage()); + c.announce(PacketCreator.sendHammerMessage()); } } diff --git a/src/main/java/net/server/channel/handlers/UseItemEffectHandler.java b/src/main/java/net/server/channel/handlers/UseItemEffectHandler.java index 45efffae3a..eabb6c36ed 100644 --- a/src/main/java/net/server/channel/handlers/UseItemEffectHandler.java +++ b/src/main/java/net/server/channel/handlers/UseItemEffectHandler.java @@ -25,7 +25,7 @@ import client.MapleClient; import client.inventory.Item; import client.inventory.MapleInventoryType; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class UseItemEffectHandler extends AbstractMaplePacketHandler { @@ -42,6 +42,6 @@ public final class UseItemEffectHandler extends AbstractMaplePacketHandler { if (itemId != 0) return; } c.getPlayer().setItemEffect(itemId); - c.getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.itemEffect(c.getPlayer().getId(), itemId), false); + c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.itemEffect(c.getPlayer().getId(), itemId), false); } } diff --git a/src/main/java/net/server/channel/handlers/UseItemHandler.java b/src/main/java/net/server/channel/handlers/UseItemHandler.java index 61f04cfec5..32e150d0df 100644 --- a/src/main/java/net/server/channel/handlers/UseItemHandler.java +++ b/src/main/java/net/server/channel/handlers/UseItemHandler.java @@ -26,13 +26,13 @@ import client.MapleClient; import client.MapleDisease; import client.inventory.Item; import client.inventory.MapleInventoryType; +import client.inventory.manipulator.MapleInventoryManipulator; import config.YamlConfig; import constants.inventory.ItemConstants; import net.AbstractMaplePacketHandler; -import client.inventory.manipulator.MapleInventoryManipulator; import server.MapleItemInformationProvider; import server.MapleStatEffect; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -44,7 +44,7 @@ public final class UseItemHandler extends AbstractMaplePacketHandler { MapleCharacter chr = c.getPlayer(); if (!chr.isAlive()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); @@ -108,6 +108,6 @@ public final class UseItemHandler extends AbstractMaplePacketHandler { private void remove(MapleClient c, short slot) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, slot, (short) 1, false); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/UseMapleLifeHandler.java b/src/main/java/net/server/channel/handlers/UseMapleLifeHandler.java index 4c45d4e593..43ca8b9b25 100644 --- a/src/main/java/net/server/channel/handlers/UseMapleLifeHandler.java +++ b/src/main/java/net/server/channel/handlers/UseMapleLifeHandler.java @@ -22,7 +22,7 @@ package net.server.channel.handlers; import client.MapleCharacter; import client.MapleClient; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -37,18 +37,18 @@ public class UseMapleLifeHandler extends AbstractMaplePacketHandler { if(timeNow - player.getLastUsedCashItem() < 3000) { player.dropMessage(5, "Please wait a moment before trying again."); - c.announce(MaplePacketCreator.sendMapleLifeError(3)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.sendMapleLifeError(3)); + c.announce(PacketCreator.enableActions()); return; } player.setLastUsedCashItem(timeNow); String name = slea.readMapleAsciiString(); if(MapleCharacter.canCreateChar(name)) { - c.announce(MaplePacketCreator.sendMapleLifeCharacterInfo()); + c.announce(PacketCreator.sendMapleLifeCharacterInfo()); } else { - c.announce(MaplePacketCreator.sendMapleLifeNameError()); + c.announce(PacketCreator.sendMapleLifeNameError()); } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/UseMountFoodHandler.java b/src/main/java/net/server/channel/handlers/UseMountFoodHandler.java index 3325baa280..8a44e3c5d0 100644 --- a/src/main/java/net/server/channel/handlers/UseMountFoodHandler.java +++ b/src/main/java/net/server/channel/handlers/UseMountFoodHandler.java @@ -21,16 +21,16 @@ */ package net.server.channel.handlers; -import client.MapleClient; import client.MapleCharacter; +import client.MapleClient; import client.MapleMount; import client.inventory.Item; import client.inventory.MapleInventory; import client.inventory.MapleInventoryType; +import client.inventory.manipulator.MapleInventoryManipulator; import constants.game.ExpTable; import net.AbstractMaplePacketHandler; -import client.inventory.manipulator.MapleInventoryManipulator; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -80,7 +80,7 @@ public final class UseMountFoodHandler extends AbstractMaplePacketHandler { } if (mountLevelup != null) { - chr.getMap().broadcastMessage(MaplePacketCreator.updateMount(chr.getId(), mount, mountLevelup)); + chr.getMap().broadcastMessage(PacketCreator.updateMount(chr.getId(), mount, mountLevelup)); } } finally { c.releaseClient(); diff --git a/src/main/java/net/server/channel/handlers/UseOwlOfMinervaHandler.java b/src/main/java/net/server/channel/handlers/UseOwlOfMinervaHandler.java index 5f0729a19a..1ca579a505 100644 --- a/src/main/java/net/server/channel/handlers/UseOwlOfMinervaHandler.java +++ b/src/main/java/net/server/channel/handlers/UseOwlOfMinervaHandler.java @@ -22,7 +22,7 @@ package net.server.channel.handlers; import client.MapleClient; import constants.game.GameConstants; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; @@ -59,6 +59,6 @@ public final class UseOwlOfMinervaHandler extends AbstractMaplePacketHandler { } } - c.announce(MaplePacketCreator.getOwlOpen(owlLeaderboards)); + c.announce(PacketCreator.getOwlOpen(owlLeaderboards)); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/UseSolomonHandler.java b/src/main/java/net/server/channel/handlers/UseSolomonHandler.java index 972e7dc69a..7d6aa7df59 100644 --- a/src/main/java/net/server/channel/handlers/UseSolomonHandler.java +++ b/src/main/java/net/server/channel/handlers/UseSolomonHandler.java @@ -23,13 +23,13 @@ package net.server.channel.handlers; import client.MapleCharacter; import client.MapleClient; -import client.inventory.MapleInventory; import client.inventory.Item; +import client.inventory.MapleInventory; import client.inventory.MapleInventoryType; -import net.AbstractMaplePacketHandler; import client.inventory.manipulator.MapleInventoryManipulator; +import net.AbstractMaplePacketHandler; import server.MapleItemInformationProvider; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -75,6 +75,6 @@ public final class UseSolomonHandler extends AbstractMaplePacketHandler { } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/UseSummonBagHandler.java b/src/main/java/net/server/channel/handlers/UseSummonBagHandler.java index da8d730d68..0eedeebe3f 100644 --- a/src/main/java/net/server/channel/handlers/UseSummonBagHandler.java +++ b/src/main/java/net/server/channel/handlers/UseSummonBagHandler.java @@ -28,7 +28,7 @@ import client.inventory.manipulator.MapleInventoryManipulator; import net.AbstractMaplePacketHandler; import server.MapleItemInformationProvider; import server.life.MapleLifeFactory; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; import tools.data.input.SeekableLittleEndianAccessor; @@ -42,7 +42,7 @@ public final class UseSummonBagHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { //[4A 00][6C 4C F2 02][02 00][63 0B 20 00] if (!c.getPlayer().isAlive()) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } slea.readInt(); @@ -58,6 +58,6 @@ public final class UseSummonBagHandler extends AbstractMaplePacketHandler { } } } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/WeddingHandler.java b/src/main/java/net/server/channel/handlers/WeddingHandler.java index 677f119786..3bfc0bc374 100644 --- a/src/main/java/net/server/channel/handlers/WeddingHandler.java +++ b/src/main/java/net/server/channel/handlers/WeddingHandler.java @@ -18,9 +18,10 @@ import config.YamlConfig; import constants.inventory.ItemConstants; import net.AbstractMaplePacketHandler; import server.MapleMarriage; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import tools.packets.Wedding; + import java.util.Collections; import java.util.List; @@ -98,7 +99,7 @@ public final class WeddingHandler extends AbstractMaplePacketHandler { } } catch (NumberFormatException nfe) {} } else { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } else if (mode == 7) { // take items slea.readByte(); // invType @@ -146,7 +147,7 @@ public final class WeddingHandler extends AbstractMaplePacketHandler { } } } else if (mode == 8) { // out of Wedding Registry - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } else { System.out.println(mode); } diff --git a/src/main/java/net/server/channel/handlers/WeddingTalkHandler.java b/src/main/java/net/server/channel/handlers/WeddingTalkHandler.java index 607cc7d194..9f93e371c7 100644 --- a/src/main/java/net/server/channel/handlers/WeddingTalkHandler.java +++ b/src/main/java/net/server/channel/handlers/WeddingTalkHandler.java @@ -23,7 +23,7 @@ package net.server.channel.handlers; import client.MapleClient; import net.AbstractMaplePacketHandler; import scripting.event.EventInstanceManager; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import tools.packets.Wedding; @@ -48,6 +48,6 @@ public final class WeddingTalkHandler extends AbstractMaplePacketHandler { c.announce(Wedding.OnWeddingProgress(true, 0, 0, (byte) 3)); } - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/WeddingTalkMoreHandler.java b/src/main/java/net/server/channel/handlers/WeddingTalkMoreHandler.java index d557b15912..00f1d054ec 100644 --- a/src/main/java/net/server/channel/handlers/WeddingTalkMoreHandler.java +++ b/src/main/java/net/server/channel/handlers/WeddingTalkMoreHandler.java @@ -23,7 +23,7 @@ package net.server.channel.handlers; import client.MapleClient; import net.AbstractMaplePacketHandler; import scripting.event.EventInstanceManager; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import tools.packets.Wedding; @@ -42,6 +42,6 @@ public final class WeddingTalkMoreHandler extends AbstractMaplePacketHandler { } c.announce(Wedding.OnWeddingProgress(true, 0, 0, (byte) 3)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/WhisperHandler.java b/src/main/java/net/server/channel/handlers/WhisperHandler.java index 1d622d16ff..6bb6ab73a1 100644 --- a/src/main/java/net/server/channel/handlers/WhisperHandler.java +++ b/src/main/java/net/server/channel/handlers/WhisperHandler.java @@ -28,8 +28,8 @@ import config.YamlConfig; import net.AbstractMaplePacketHandler; import tools.FilePrinter; import tools.LogHelper; -import tools.MaplePacketCreator; -import tools.MaplePacketCreator.WhisperFlag; +import tools.PacketCreator; +import tools.PacketCreator.WhisperFlag; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -50,7 +50,7 @@ public final class WhisperHandler extends AbstractMaplePacketHandler { MapleCharacter target = c.getWorldServer().getPlayerStorage().getCharacterByName(name); if (target == null) { - c.announce(MaplePacketCreator.getWhisperResult(name, false)); + c.announce(PacketCreator.getWhisperResult(name, false)); return; } @@ -74,15 +74,15 @@ public final class WhisperHandler extends AbstractMaplePacketHandler { private void handleFind(MapleCharacter user, MapleCharacter target, byte flag) { if (user.gmLevel() >= target.gmLevel()) { if (target.getCashShop().isOpened()) { - user.announce(MaplePacketCreator.getFindResult(target, RT_CASH_SHOP, -1, flag)); + user.announce(PacketCreator.getFindResult(target, RT_CASH_SHOP, -1, flag)); } else if (target.getClient().getChannel() == user.getClient().getChannel()) { - user.announce(MaplePacketCreator.getFindResult(target, RT_SAME_CHANNEL, target.getMapId(), flag)); + user.announce(PacketCreator.getFindResult(target, RT_SAME_CHANNEL, target.getMapId(), flag)); } else { - user.announce(MaplePacketCreator.getFindResult(target, RT_DIFFERENT_CHANNEL, target.getClient().getChannel() - 1, flag)); + user.announce(PacketCreator.getFindResult(target, RT_DIFFERENT_CHANNEL, target.getClient().getChannel() - 1, flag)); } } else { // not found for whisper is the same message - user.announce(MaplePacketCreator.getWhisperResult(target.getName(), false)); + user.announce(PacketCreator.getWhisperResult(target.getName(), false)); } } @@ -103,9 +103,9 @@ public final class WhisperHandler extends AbstractMaplePacketHandler { LogHelper.logChat(user.getClient(), "Whisper To " + target.getName(), message); } - target.announce(MaplePacketCreator.getWhisperReceive(user.getName(), user.getClient().getChannel() - 1, user.isGM(), message)); + target.announce(PacketCreator.getWhisperReceive(user.getName(), user.getClient().getChannel() - 1, user.isGM(), message)); boolean hidden = target.isHidden() && target.gmLevel() > user.gmLevel(); - user.announce(MaplePacketCreator.getWhisperResult(target.getName(), !hidden)); + user.announce(PacketCreator.getWhisperResult(target.getName(), !hidden)); } } diff --git a/src/main/java/net/server/coordinator/matchchecker/listener/MatchCheckerGuildCreation.java b/src/main/java/net/server/coordinator/matchchecker/listener/MatchCheckerGuildCreation.java index 6c42b38dbb..d6694a841f 100644 --- a/src/main/java/net/server/coordinator/matchchecker/listener/MatchCheckerGuildCreation.java +++ b/src/main/java/net/server/coordinator/matchchecker/listener/MatchCheckerGuildCreation.java @@ -22,14 +22,15 @@ package net.server.coordinator.matchchecker.listener; import client.MapleCharacter; import config.YamlConfig; import constants.game.GameConstants; +import net.server.Server; import net.server.coordinator.matchchecker.AbstractMatchCheckerListener; import net.server.coordinator.matchchecker.MatchCheckerListenerRecipe; import net.server.guild.MapleGuild; import net.server.guild.MapleGuildCharacter; -import java.util.Set; -import net.server.Server; import net.server.world.MapleParty; -import tools.MaplePacketCreator; +import tools.PacketCreator; + +import java.util.Set; /** * @@ -40,7 +41,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { private static void broadcastGuildCreationDismiss(Set nonLeaderMatchPlayers) { for (MapleCharacter chr : nonLeaderMatchPlayers) { if (chr.isLoggedinWorld()) { - chr.announce(MaplePacketCreator.genericGuildMessage((byte) 0x26)); + chr.announce(PacketCreator.genericGuildMessage((byte) 0x26)); } } } @@ -55,7 +56,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { @Override public void onMatchCreated(MapleCharacter leader, Set nonLeaderMatchPlayers, String message) { - byte[] createGuildPacket = MaplePacketCreator.createGuildMessage(leader.getName(), message); + byte[] createGuildPacket = PacketCreator.createGuildMessage(leader.getName(), message); for (MapleCharacter chr : nonLeaderMatchPlayers) { if (chr.isLoggedinWorld()) { @@ -111,7 +112,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { int gid = Server.getInstance().createGuild(leader.getId(), message); if (gid == 0) { - leader.announce(MaplePacketCreator.genericGuildMessage((byte) 0x23)); + leader.announce(PacketCreator.genericGuildMessage((byte) 0x23)); broadcastGuildCreationDismiss(matchPlayers); return; } @@ -121,7 +122,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { MapleGuild guild = Server.getInstance().getGuild(leader.getGuildId(), leader.getWorld(), leader); // initialize guild structure Server.getInstance().changeRank(gid, leader.getId(), 1); - leader.announce(MaplePacketCreator.showGuildInfo(leader)); + leader.announce(PacketCreator.showGuildInfo(leader)); leader.dropMessage(1, "You have successfully created a Guild."); for (MapleCharacter chr : matchPlayers) { @@ -135,7 +136,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { Server.getInstance().addGuildMember(mgc, chr); if (chr.isLoggedinWorld()) { - chr.announce(MaplePacketCreator.showGuildInfo(chr)); + chr.announce(PacketCreator.showGuildInfo(chr)); if (cofounder) { chr.dropMessage(1, "You have successfully cofounded a Guild."); @@ -159,7 +160,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { } if (chr.isLoggedinWorld()) { - chr.announce(MaplePacketCreator.genericGuildMessage((byte)0x26)); + chr.announce(PacketCreator.genericGuildMessage((byte)0x26)); } } } @@ -189,7 +190,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { if (chr.isLoggedinWorld()) { chr.message(msg); - chr.announce(MaplePacketCreator.genericGuildMessage((byte)0x26)); + chr.announce(PacketCreator.genericGuildMessage((byte)0x26)); } } } diff --git a/src/main/java/net/server/coordinator/partysearch/MaplePartySearchCoordinator.java b/src/main/java/net/server/coordinator/partysearch/MaplePartySearchCoordinator.java index 4dcbb2f54a..9b3f2c6c36 100644 --- a/src/main/java/net/server/coordinator/partysearch/MaplePartySearchCoordinator.java +++ b/src/main/java/net/server/coordinator/partysearch/MaplePartySearchCoordinator.java @@ -35,7 +35,7 @@ import provider.MapleData; import provider.MapleDataProviderFactory; import provider.MapleDataTool; import provider.wz.WZFiles; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import java.util.*; @@ -292,7 +292,7 @@ public class MaplePartySearchCoordinator { if (MapleInviteCoordinator.createInvite(InviteType.PARTY, leader, partyid, chr.getId())) { chr.disablePartySearchInvite(leader.getId()); - chr.announce(MaplePacketCreator.partySearchInvite(leader)); + chr.announce(PacketCreator.partySearchInvite(leader)); return true; } else { return false; diff --git a/src/main/java/net/server/guild/MapleAlliance.java b/src/main/java/net/server/guild/MapleAlliance.java index 3aa405f2e7..70007d2128 100644 --- a/src/main/java/net/server/guild/MapleAlliance.java +++ b/src/main/java/net/server/guild/MapleAlliance.java @@ -30,7 +30,7 @@ import net.server.coordinator.world.MapleInviteCoordinator.MapleInviteResult; import net.server.world.MapleParty; import net.server.world.MaplePartyCharacter; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.sql.Connection; import java.sql.PreparedStatement; @@ -141,8 +141,8 @@ public class MapleAlliance { Server.getInstance().addAlliance(id, alliance); int worldid = guildMasters.get(0).getWorld(); - Server.getInstance().allianceMessage(id, MaplePacketCreator.updateAllianceInfo(alliance, worldid), -1, -1); - Server.getInstance().allianceMessage(id, MaplePacketCreator.getGuildAlliances(alliance, worldid), -1, -1); // thanks Vcoc for noticing guilds from other alliances being visually stacked here due to this not being updated + Server.getInstance().allianceMessage(id, PacketCreator.updateAllianceInfo(alliance, worldid), -1, -1); + Server.getInstance().allianceMessage(id, PacketCreator.getGuildAlliances(alliance, worldid), -1, -1); // thanks Vcoc for noticing guilds from other alliances being visually stacked here due to this not being updated } catch (Exception e) { e.printStackTrace(); return null; @@ -273,7 +273,7 @@ public class MapleAlliance { ps.executeUpdate(); } - Server.getInstance().allianceMessage(allianceId, MaplePacketCreator.disbandAlliance(allianceId), -1, -1); + Server.getInstance().allianceMessage(allianceId, PacketCreator.disbandAlliance(allianceId), -1, -1); Server.getInstance().disbandAlliance(allianceId); } catch (SQLException sqle) { sqle.printStackTrace(); @@ -298,13 +298,13 @@ public class MapleAlliance { return false; } - srv.allianceMessage(alliance.getId(), MaplePacketCreator.removeGuildFromAlliance(alliance, guildId, worldId), -1, -1); + srv.allianceMessage(alliance.getId(), PacketCreator.removeGuildFromAlliance(alliance, guildId, worldId), -1, -1); srv.removeGuildFromAlliance(alliance.getId(), guildId); removeGuildFromAllianceOnDb(guildId); - srv.allianceMessage(alliance.getId(), MaplePacketCreator.getGuildAlliances(alliance, worldId), -1, -1); - srv.allianceMessage(alliance.getId(), MaplePacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); - srv.guildMessage(guildId, MaplePacketCreator.disbandAlliance(alliance.getId())); + srv.allianceMessage(alliance.getId(), PacketCreator.getGuildAlliances(alliance, worldId), -1, -1); + srv.allianceMessage(alliance.getId(), PacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); + srv.guildMessage(guildId, PacketCreator.disbandAlliance(alliance.getId())); alliance.dropMessage("[" + srv.getGuild(guildId, worldId).getName() + "] guild has left the union."); return true; @@ -312,8 +312,8 @@ public class MapleAlliance { public void updateAlliancePackets(MapleCharacter chr) { if (allianceId > 0) { - this.broadcastMessage(MaplePacketCreator.updateAllianceInfo(this, chr.getWorld())); - this.broadcastMessage(MaplePacketCreator.allianceNotice(this.getId(), this.getNotice())); + this.broadcastMessage(PacketCreator.updateAllianceInfo(this, chr.getWorld())); + this.broadcastMessage(PacketCreator.allianceNotice(this.getId(), this.getNotice())); } } @@ -448,7 +448,7 @@ public class MapleAlliance { c.getPlayer().dropMessage(5, "The master of the guild that you offered an invitation is currently not online."); } else { if (MapleInviteCoordinator.createInvite(InviteType.ALLIANCE, c.getPlayer(), allianceId, victim.getId())) { - victim.getClient().announce(MaplePacketCreator.allianceInvite(allianceId, c.getPlayer())); + victim.getClient().announce(PacketCreator.allianceInvite(allianceId, c.getPlayer())); } else { c.getPlayer().dropMessage(5, "The master of the guild that you offered an invitation is currently managing another invite."); } diff --git a/src/main/java/net/server/guild/MapleGuild.java b/src/main/java/net/server/guild/MapleGuild.java index 2c7f82e5da..5d825ccb64 100644 --- a/src/main/java/net/server/guild/MapleGuild.java +++ b/src/main/java/net/server/guild/MapleGuild.java @@ -34,7 +34,7 @@ import net.server.coordinator.world.MapleInviteCoordinator; import net.server.coordinator.world.MapleInviteCoordinator.InviteType; import net.server.coordinator.world.MapleInviteCoordinator.MapleInviteResult; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.sql.Connection; import java.sql.PreparedStatement; @@ -184,7 +184,7 @@ public class MapleGuild { membersLock.lock(); try { - this.broadcast(MaplePacketCreator.guildDisband(this.id)); + this.broadcast(PacketCreator.guildDisband(this.id)); } finally { membersLock.unlock(); } @@ -279,7 +279,7 @@ public class MapleGuild { continue; } - byte[] packet = MaplePacketCreator.guildNameChanged(chr.getId(), this.getName()); + byte[] packet = PacketCreator.guildNameChanged(chr.getId(), this.getName()); chr.getMap().broadcastMessage(chr, packet); } } @@ -293,7 +293,7 @@ public class MapleGuild { continue; } - byte[] packet = MaplePacketCreator.guildMarkChanged(chr.getId(), this); + byte[] packet = PacketCreator.guildMarkChanged(chr.getId(), this); chr.getMap().broadcastMessage(chr, packet); } } @@ -307,7 +307,7 @@ public class MapleGuild { continue; } - byte[] packet = MaplePacketCreator.showGuildInfo(chr); + byte[] packet = PacketCreator.showGuildInfo(chr); chr.announce(packet); } } @@ -401,7 +401,7 @@ public class MapleGuild { } } if (bBroadcast) { - this.broadcast(MaplePacketCreator.guildMemberOnline(id, cid, online), cid); + this.broadcast(PacketCreator.guildMemberOnline(id, cid, online), cid); } bDirty = true; } finally { @@ -412,7 +412,7 @@ public class MapleGuild { public void guildChat(String name, int cid, String message) { membersLock.lock(); try { - this.broadcast(MaplePacketCreator.multiChat(name, message, 2), cid); + this.broadcast(PacketCreator.multiChat(name, message, 2), cid); } finally { membersLock.unlock(); } @@ -479,7 +479,7 @@ public class MapleGuild { } } - this.broadcast(MaplePacketCreator.newGuildMember(mgc)); + this.broadcast(PacketCreator.newGuildMember(mgc)); return 1; } finally { membersLock.unlock(); @@ -489,7 +489,7 @@ public class MapleGuild { public void leaveGuild(MapleGuildCharacter mgc) { membersLock.lock(); try { - this.broadcast(MaplePacketCreator.memberLeft(mgc, false)); + this.broadcast(PacketCreator.memberLeft(mgc, false)); members.remove(mgc); bDirty = true; } finally { @@ -505,7 +505,7 @@ public class MapleGuild { while (itr.hasNext()) { mgc = itr.next(); if (mgc.getId() == cid && initiator.getGuildRank() < mgc.getGuildRank()) { - this.broadcast(MaplePacketCreator.memberLeft(mgc, true)); + this.broadcast(PacketCreator.memberLeft(mgc, true)); itr.remove(); bDirty = true; try { @@ -568,7 +568,7 @@ public class MapleGuild { membersLock.lock(); try { - this.broadcast(MaplePacketCreator.changeRank(mgc)); + this.broadcast(PacketCreator.changeRank(mgc)); } finally { membersLock.unlock(); } @@ -580,7 +580,7 @@ public class MapleGuild { membersLock.lock(); try { - this.broadcast(MaplePacketCreator.guildNotice(this.id, notice)); + this.broadcast(PacketCreator.guildNotice(this.id, notice)); } finally { membersLock.unlock(); } @@ -593,7 +593,7 @@ public class MapleGuild { if (mgc.equals(member)) { member.setJobId(mgc.getJobId()); member.setLevel(mgc.getLevel()); - this.broadcast(MaplePacketCreator.guildMemberLevelJobUpdate(mgc)); + this.broadcast(PacketCreator.guildMemberLevelJobUpdate(mgc)); break; } } @@ -624,7 +624,7 @@ public class MapleGuild { membersLock.lock(); try { - this.broadcast(MaplePacketCreator.rankTitleChange(this.id, ranks)); + this.broadcast(PacketCreator.rankTitleChange(this.id, ranks)); } finally { membersLock.unlock(); } @@ -686,7 +686,7 @@ public class MapleGuild { membersLock.lock(); try { - this.broadcast(MaplePacketCreator.guildCapacityChange(this.id, this.capacity)); + this.broadcast(PacketCreator.guildCapacityChange(this.id, this.capacity)); } finally { membersLock.unlock(); } @@ -697,14 +697,14 @@ public class MapleGuild { public void gainGP(int amount) { this.gp += amount; this.writeToDB(false); - this.guildMessage(MaplePacketCreator.updateGP(this.id, this.gp)); - this.guildMessage(MaplePacketCreator.getGPMessage(amount)); + this.guildMessage(PacketCreator.updateGP(this.id, this.gp)); + this.guildMessage(PacketCreator.getGPMessage(amount)); } public void removeGP(int amount) { this.gp -= amount; this.writeToDB(false); - this.guildMessage(MaplePacketCreator.updateGP(this.id, this.gp)); + this.guildMessage(PacketCreator.updateGP(this.id, this.gp)); } public static MapleGuildResponse sendInvitation(MapleClient c, String targetName) { @@ -718,7 +718,7 @@ public class MapleGuild { MapleCharacter sender = c.getPlayer(); if (MapleInviteCoordinator.createInvite(InviteType.GUILD, sender, sender.getGuildId(), mc.getId())) { - mc.getClient().announce(MaplePacketCreator.guildInvite(sender.getGuildId(), sender.getName())); + mc.getClient().announce(PacketCreator.guildInvite(sender.getGuildId(), sender.getName())); return null; } else { return MapleGuildResponse.MANAGING_INVITE; @@ -766,7 +766,7 @@ public class MapleGuild { try (Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("SELECT `name`, `GP`, `logoBG`, `logoBGColor`, `logo`, `logoColor` FROM guilds ORDER BY `GP` DESC LIMIT 50", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = ps.executeQuery()) { - c.announce(MaplePacketCreator.showGuildRanks(npcid, rs)); + c.announce(PacketCreator.showGuildRanks(npcid, rs)); } catch (SQLException e) { e.printStackTrace(); System.out.println("failed to display guild ranks. " + e); diff --git a/src/main/java/net/server/guild/MapleGuildResponse.java b/src/main/java/net/server/guild/MapleGuildResponse.java index b8c04e1832..ec59fdba51 100644 --- a/src/main/java/net/server/guild/MapleGuildResponse.java +++ b/src/main/java/net/server/guild/MapleGuildResponse.java @@ -21,7 +21,7 @@ */ package net.server.guild; -import tools.MaplePacketCreator; +import tools.PacketCreator; public enum MapleGuildResponse { NOT_IN_CHANNEL(0x2a), @@ -39,9 +39,9 @@ public enum MapleGuildResponse { public final byte[] getPacket(String targetName) { if (value >= MANAGING_INVITE.value) { - return MaplePacketCreator.responseGuildMessage((byte) value, targetName); + return PacketCreator.responseGuildMessage((byte) value, targetName); } else { - return MaplePacketCreator.genericGuildMessage((byte) value); + return PacketCreator.genericGuildMessage((byte) value); } } } diff --git a/src/main/java/net/server/handlers/CustomPacketHandler.java b/src/main/java/net/server/handlers/CustomPacketHandler.java index 6da4ae94d8..8d00553530 100644 --- a/src/main/java/net/server/handlers/CustomPacketHandler.java +++ b/src/main/java/net/server/handlers/CustomPacketHandler.java @@ -23,14 +23,14 @@ package net.server.handlers; import client.MapleClient; import net.MaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public class CustomPacketHandler implements MaplePacketHandler { @Override public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { if (slea.available() > 0 && c.getGMLevel() == 4) {//w/e - c.announce(MaplePacketCreator.customPacket(slea.read((int) slea.available()))); + c.announce(PacketCreator.customPacket(slea.read((int) slea.available()))); } } diff --git a/src/main/java/net/server/handlers/login/AcceptToSHandler.java b/src/main/java/net/server/handlers/login/AcceptToSHandler.java index 52268c15a1..fe3675ab5f 100644 --- a/src/main/java/net/server/handlers/login/AcceptToSHandler.java +++ b/src/main/java/net/server/handlers/login/AcceptToSHandler.java @@ -2,7 +2,7 @@ package net.server.handlers.login; import client.MapleClient; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -23,9 +23,9 @@ public final class AcceptToSHandler extends AbstractMaplePacketHandler { return; } if (c.finishLogin() == 0) { - c.announce(MaplePacketCreator.getAuthSuccess(c)); + c.announce(PacketCreator.getAuthSuccess(c)); } else { - c.announce(MaplePacketCreator.getLoginFailed(9));//shouldn't happen XD + c.announce(PacketCreator.getLoginFailed(9));//shouldn't happen XD } } } diff --git a/src/main/java/net/server/handlers/login/AfterLoginHandler.java b/src/main/java/net/server/handlers/login/AfterLoginHandler.java index 2a4b306665..0d7741bf8d 100644 --- a/src/main/java/net/server/handlers/login/AfterLoginHandler.java +++ b/src/main/java/net/server/handlers/login/AfterLoginHandler.java @@ -24,7 +24,7 @@ package net.server.handlers.login; import client.MapleClient; import net.AbstractMaplePacketHandler; import net.server.coordinator.session.SessionCoordinator; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class AfterLoginHandler extends AbstractMaplePacketHandler { @@ -38,23 +38,23 @@ public final class AfterLoginHandler extends AbstractMaplePacketHandler { } if (c2 == 1 && c3 == 1) { if (c.getPin() == null || c.getPin().equals("")) { - c.announce(MaplePacketCreator.registerPin()); + c.announce(PacketCreator.registerPin()); } else { - c.announce(MaplePacketCreator.requestPin()); + c.announce(PacketCreator.requestPin()); } } else if (c2 == 1 && c3 == 0) { String pin = slea.readMapleAsciiString(); if (c.checkPin(pin)) { - c.announce(MaplePacketCreator.pinAccepted()); + c.announce(PacketCreator.pinAccepted()); } else { - c.announce(MaplePacketCreator.requestPinAfterFailure()); + c.announce(PacketCreator.requestPinAfterFailure()); } } else if (c2 == 2 && c3 == 0) { String pin = slea.readMapleAsciiString(); if (c.checkPin(pin)) { - c.announce(MaplePacketCreator.registerPin()); + c.announce(PacketCreator.registerPin()); } else { - c.announce(MaplePacketCreator.requestPinAfterFailure()); + c.announce(PacketCreator.requestPinAfterFailure()); } } else if (c2 == 0 && c3 == 5) { SessionCoordinator.getInstance().closeSession(c, null); diff --git a/src/main/java/net/server/handlers/login/CharSelectedHandler.java b/src/main/java/net/server/handlers/login/CharSelectedHandler.java index b879b30c21..eba95d5001 100644 --- a/src/main/java/net/server/handlers/login/CharSelectedHandler.java +++ b/src/main/java/net/server/handlers/login/CharSelectedHandler.java @@ -30,7 +30,7 @@ import net.server.coordinator.session.SessionCoordinator.AntiMulticlientResult; import net.server.world.World; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.net.InetAddress; @@ -61,7 +61,7 @@ public final class CharSelectedHandler extends AbstractMaplePacketHandler { hwid = Hwid.fromHostString(hostString); } catch (IllegalArgumentException e) { log.warn("Invalid host string: {}", hostString, e); - c.announce(MaplePacketCreator.getAfterLoginError(17)); + c.announce(PacketCreator.getAfterLoginError(17)); return; } @@ -70,7 +70,7 @@ public final class CharSelectedHandler extends AbstractMaplePacketHandler { AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(MaplePacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); + c.announce(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); return; } @@ -88,13 +88,13 @@ public final class CharSelectedHandler extends AbstractMaplePacketHandler { c.setWorld(server.getCharacterWorld(charId)); World wserv = c.getWorldServer(); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); return; } String[] socket = server.getInetSocket(c, c.getWorld(), c.getChannel()); if(socket == null) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); return; } @@ -102,7 +102,7 @@ public final class CharSelectedHandler extends AbstractMaplePacketHandler { c.setCharacterOnSessionTransitionState(charId); try { - c.announce(MaplePacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); + c.announce(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); } catch (UnknownHostException | NumberFormatException e) { e.printStackTrace(); } diff --git a/src/main/java/net/server/handlers/login/CharSelectedWithPicHandler.java b/src/main/java/net/server/handlers/login/CharSelectedWithPicHandler.java index 7311b931df..66c8842a86 100644 --- a/src/main/java/net/server/handlers/login/CharSelectedWithPicHandler.java +++ b/src/main/java/net/server/handlers/login/CharSelectedWithPicHandler.java @@ -9,7 +9,7 @@ import net.server.coordinator.session.SessionCoordinator.AntiMulticlientResult; import net.server.world.World; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.net.InetAddress; @@ -41,7 +41,7 @@ public class CharSelectedWithPicHandler extends AbstractMaplePacketHandler { hwid = Hwid.fromHostString(hostString); } catch (IllegalArgumentException e) { log.warn("Invalid host string: {}", hostString, e); - c.announce(MaplePacketCreator.getAfterLoginError(17)); + c.announce(PacketCreator.getAfterLoginError(17)); return; } @@ -63,19 +63,19 @@ public class CharSelectedWithPicHandler extends AbstractMaplePacketHandler { c.setWorld(server.getCharacterWorld(charId)); World wserv = c.getWorldServer(); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); return; } String[] socket = server.getInetSocket(c, c.getWorld(), c.getChannel()); if(socket == null) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); return; } AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(MaplePacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); + c.announce(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); return; } @@ -83,12 +83,12 @@ public class CharSelectedWithPicHandler extends AbstractMaplePacketHandler { c.setCharacterOnSessionTransitionState(charId); try { - c.announce(MaplePacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); + c.announce(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); } catch (UnknownHostException | NumberFormatException e) { e.printStackTrace(); } } else { - c.announce(MaplePacketCreator.wrongPic()); + c.announce(PacketCreator.wrongPic()); } } } diff --git a/src/main/java/net/server/handlers/login/CharlistRequestHandler.java b/src/main/java/net/server/handlers/login/CharlistRequestHandler.java index 66c290d3b7..99a19caada 100644 --- a/src/main/java/net/server/handlers/login/CharlistRequestHandler.java +++ b/src/main/java/net/server/handlers/login/CharlistRequestHandler.java @@ -26,7 +26,7 @@ import net.AbstractMaplePacketHandler; import net.server.Server; import net.server.channel.Channel; import net.server.world.World; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class CharlistRequestHandler extends AbstractMaplePacketHandler { @@ -38,14 +38,14 @@ public final class CharlistRequestHandler extends AbstractMaplePacketHandler { World wserv = Server.getInstance().getWorld(world); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(MaplePacketCreator.getServerStatus(2)); + c.announce(PacketCreator.getServerStatus(2)); return; } int channel = slea.readByte() + 1; Channel ch = wserv.getChannel(channel); if(ch == null) { - c.announce(MaplePacketCreator.getServerStatus(2)); + c.announce(PacketCreator.getServerStatus(2)); return; } diff --git a/src/main/java/net/server/handlers/login/CheckCharNameHandler.java b/src/main/java/net/server/handlers/login/CheckCharNameHandler.java index dc27beedb7..b1ff02223a 100644 --- a/src/main/java/net/server/handlers/login/CheckCharNameHandler.java +++ b/src/main/java/net/server/handlers/login/CheckCharNameHandler.java @@ -24,7 +24,7 @@ package net.server.handlers.login; import client.MapleCharacter; import client.MapleClient; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class CheckCharNameHandler extends AbstractMaplePacketHandler { @@ -32,6 +32,6 @@ public final class CheckCharNameHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { String name = slea.readMapleAsciiString(); - c.announce(MaplePacketCreator.charNameResponse(name, !MapleCharacter.canCreateChar(name))); + c.announce(PacketCreator.charNameResponse(name, !MapleCharacter.canCreateChar(name))); } } diff --git a/src/main/java/net/server/handlers/login/CreateCharHandler.java b/src/main/java/net/server/handlers/login/CreateCharHandler.java index ae709f4e02..cce3a4c801 100644 --- a/src/main/java/net/server/handlers/login/CreateCharHandler.java +++ b/src/main/java/net/server/handlers/login/CreateCharHandler.java @@ -27,7 +27,7 @@ import client.creator.novice.LegendCreator; import client.creator.novice.NoblesseCreator; import net.AbstractMaplePacketHandler; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.util.Arrays; @@ -84,12 +84,12 @@ public final class CreateCharHandler extends AbstractMaplePacketHandler { } else if (job == 2) { // Aran status = LegendCreator.createCharacter(c, name, face, hair + haircolor, skincolor, top, bottom, shoes, weapon, gender); } else { - c.announce(MaplePacketCreator.deleteCharResponse(0, 9)); + c.announce(PacketCreator.deleteCharResponse(0, 9)); return; } if (status == -2) { - c.announce(MaplePacketCreator.deleteCharResponse(0, 9)); + c.announce(PacketCreator.deleteCharResponse(0, 9)); } } } \ No newline at end of file diff --git a/src/main/java/net/server/handlers/login/DeleteCharHandler.java b/src/main/java/net/server/handlers/login/DeleteCharHandler.java index a57c1db128..3ad6485439 100644 --- a/src/main/java/net/server/handlers/login/DeleteCharHandler.java +++ b/src/main/java/net/server/handlers/login/DeleteCharHandler.java @@ -27,7 +27,7 @@ import net.AbstractMaplePacketHandler; import net.server.Server; import tools.DatabaseConnection; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.sql.Connection; @@ -57,12 +57,12 @@ public final class DeleteCharHandler extends AbstractMaplePacketHandler { int guildRank = rs.getInt("guildrank"); int familyId = rs.getInt("familyId"); if (guildId != 0 && guildRank <= 1) { - c.announce(MaplePacketCreator.deleteCharResponse(cid, 0x16)); + c.announce(PacketCreator.deleteCharResponse(cid, 0x16)); return; } else if (familyId != -1) { MapleFamily family = Server.getInstance().getWorld(world).getFamily(familyId); if (family != null && family.getTotalMembers() > 1) { - c.announce(MaplePacketCreator.deleteCharResponse(cid, 0x1D)); + c.announce(PacketCreator.deleteCharResponse(cid, 0x1D)); return; } } @@ -72,23 +72,23 @@ public final class DeleteCharHandler extends AbstractMaplePacketHandler { try (ResultSet rs = ps2.executeQuery()) { rs.next(); if (rs.getInt("rowcount") > 0) { - c.announce(MaplePacketCreator.deleteCharResponse(cid, 0x1A)); + c.announce(PacketCreator.deleteCharResponse(cid, 0x1A)); return; } } } catch (SQLException e) { e.printStackTrace(); - c.announce(MaplePacketCreator.deleteCharResponse(cid, 0x09)); + c.announce(PacketCreator.deleteCharResponse(cid, 0x09)); return; } if (c.deleteCharacter(cid, c.getAccID())) { FilePrinter.print(FilePrinter.DELETED_CHAR + c.getAccountName() + ".txt", c.getAccountName() + " deleted CID: " + cid); - c.announce(MaplePacketCreator.deleteCharResponse(cid, 0)); + c.announce(PacketCreator.deleteCharResponse(cid, 0)); } else { - c.announce(MaplePacketCreator.deleteCharResponse(cid, 0x09)); + c.announce(PacketCreator.deleteCharResponse(cid, 0x09)); } } else { - c.announce(MaplePacketCreator.deleteCharResponse(cid, 0x14)); + c.announce(PacketCreator.deleteCharResponse(cid, 0x14)); } } } diff --git a/src/main/java/net/server/handlers/login/GuestLoginHandler.java b/src/main/java/net/server/handlers/login/GuestLoginHandler.java index 8ad0f707d7..9aede70d00 100644 --- a/src/main/java/net/server/handlers/login/GuestLoginHandler.java +++ b/src/main/java/net/server/handlers/login/GuestLoginHandler.java @@ -23,7 +23,7 @@ package net.server.handlers.login; import client.MapleClient; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /* @@ -33,7 +33,7 @@ public final class GuestLoginHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { - c.announce(MaplePacketCreator.sendGuestTOS()); + c.announce(PacketCreator.sendGuestTOS()); //System.out.println(slea.toString()); new LoginPasswordHandler().handlePacket(slea, c); } diff --git a/src/main/java/net/server/handlers/login/LoginPasswordHandler.java b/src/main/java/net/server/handlers/login/LoginPasswordHandler.java index 3928d9506c..af94075058 100644 --- a/src/main/java/net/server/handlers/login/LoginPasswordHandler.java +++ b/src/main/java/net/server/handlers/login/LoginPasswordHandler.java @@ -30,7 +30,7 @@ import net.server.coordinator.session.Hwid; import tools.BCrypt; import tools.DatabaseConnection; import tools.HexTool; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.io.UnsupportedEncodingException; @@ -57,7 +57,7 @@ public final class LoginPasswordHandler implements MaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { String remoteHost = c.getRemoteAddress(); if (remoteHost.contentEquals("null")) { - c.announce(MaplePacketCreator.getLoginFailed(14)); // thanks Alchemist for noting remoteHost could be null + c.announce(PacketCreator.getLoginFailed(14)); // thanks Alchemist for noting remoteHost could be null return; } @@ -106,33 +106,33 @@ public final class LoginPasswordHandler implements MaplePacketHandler { } if (c.hasBannedIP() || c.hasBannedMac()) { - c.announce(MaplePacketCreator.getLoginFailed(3)); + c.announce(PacketCreator.getLoginFailed(3)); return; } Calendar tempban = c.getTempBanCalendarFromDB(); if (tempban != null) { if (tempban.getTimeInMillis() > Calendar.getInstance().getTimeInMillis()) { - c.announce(MaplePacketCreator.getTempBan(tempban.getTimeInMillis(), c.getGReason())); + c.announce(PacketCreator.getTempBan(tempban.getTimeInMillis(), c.getGReason())); return; } } if (loginok == 3) { - c.announce(MaplePacketCreator.getPermBan(c.getGReason()));//crashes but idc :D + c.announce(PacketCreator.getPermBan(c.getGReason()));//crashes but idc :D return; } else if (loginok != 0) { - c.announce(MaplePacketCreator.getLoginFailed(loginok)); + c.announce(PacketCreator.getLoginFailed(loginok)); return; } if (c.finishLogin() == 0) { c.checkChar(c.getAccID()); login(c); } else { - c.announce(MaplePacketCreator.getLoginFailed(7)); + c.announce(PacketCreator.getLoginFailed(7)); } } private static void login(MapleClient c) { - c.announce(MaplePacketCreator.getAuthSuccess(c));//why the fk did I do c.getAccountName()? + c.announce(PacketCreator.getAuthSuccess(c));//why the fk did I do c.getAccountName()? Server.getInstance().registerLoginState(c); } } diff --git a/src/main/java/net/server/handlers/login/RegisterPicHandler.java b/src/main/java/net/server/handlers/login/RegisterPicHandler.java index 8d3f4a7ad8..1442cb50e6 100644 --- a/src/main/java/net/server/handlers/login/RegisterPicHandler.java +++ b/src/main/java/net/server/handlers/login/RegisterPicHandler.java @@ -9,7 +9,7 @@ import net.server.coordinator.session.SessionCoordinator.AntiMulticlientResult; import net.server.world.World; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.net.InetAddress; @@ -41,7 +41,7 @@ public final class RegisterPicHandler extends AbstractMaplePacketHandler { hwid = Hwid.fromHostString(hostString); } catch (IllegalArgumentException e) { log.warn("Invalid host string: {}", hostString, e); - c.announce(MaplePacketCreator.getAfterLoginError(17)); + c.announce(PacketCreator.getAfterLoginError(17)); return; } @@ -50,7 +50,7 @@ public final class RegisterPicHandler extends AbstractMaplePacketHandler { AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(MaplePacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); + c.announce(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); return; } @@ -72,13 +72,13 @@ public final class RegisterPicHandler extends AbstractMaplePacketHandler { c.setWorld(server.getCharacterWorld(charId)); World wserv = c.getWorldServer(); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); return; } String[] socket = server.getInetSocket(c, c.getWorld(), c.getChannel()); if(socket == null) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); return; } @@ -86,7 +86,7 @@ public final class RegisterPicHandler extends AbstractMaplePacketHandler { c.setCharacterOnSessionTransitionState(charId); try { - c.announce(MaplePacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); + c.announce(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); } catch (UnknownHostException e) { e.printStackTrace(); } diff --git a/src/main/java/net/server/handlers/login/RegisterPinHandler.java b/src/main/java/net/server/handlers/login/RegisterPinHandler.java index d35d6717e7..4c56774765 100644 --- a/src/main/java/net/server/handlers/login/RegisterPinHandler.java +++ b/src/main/java/net/server/handlers/login/RegisterPinHandler.java @@ -24,7 +24,7 @@ package net.server.handlers.login; import client.MapleClient; import net.AbstractMaplePacketHandler; import net.server.coordinator.session.SessionCoordinator; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /* @@ -41,7 +41,7 @@ public final class RegisterPinHandler extends AbstractMaplePacketHandler { String pin = slea.readMapleAsciiString(); if (pin != null) { c.setPin(pin); - c.announce(MaplePacketCreator.pinRegistered()); + c.announce(PacketCreator.pinRegistered()); SessionCoordinator.getInstance().closeSession(c, null); c.updateLoginState(MapleClient.LOGIN_NOTLOGGEDIN); diff --git a/src/main/java/net/server/handlers/login/RelogRequestHandler.java b/src/main/java/net/server/handlers/login/RelogRequestHandler.java index 0e16342a07..1f50df5dea 100644 --- a/src/main/java/net/server/handlers/login/RelogRequestHandler.java +++ b/src/main/java/net/server/handlers/login/RelogRequestHandler.java @@ -23,7 +23,7 @@ package net.server.handlers.login; import client.MapleClient; import net.AbstractMaplePacketHandler; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class RelogRequestHandler extends AbstractMaplePacketHandler { @@ -34,6 +34,6 @@ public final class RelogRequestHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { - c.announce(MaplePacketCreator.getRelogResponse()); + c.announce(PacketCreator.getRelogResponse()); } } diff --git a/src/main/java/net/server/handlers/login/ServerStatusRequestHandler.java b/src/main/java/net/server/handlers/login/ServerStatusRequestHandler.java index b2c37b302a..ad72f23dbe 100644 --- a/src/main/java/net/server/handlers/login/ServerStatusRequestHandler.java +++ b/src/main/java/net/server/handlers/login/ServerStatusRequestHandler.java @@ -23,9 +23,9 @@ package net.server.handlers.login; import client.MapleClient; import net.AbstractMaplePacketHandler; -import net.server.world.World; import net.server.Server; -import tools.MaplePacketCreator; +import net.server.world.World; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class ServerStatusRequestHandler extends AbstractMaplePacketHandler { @@ -36,9 +36,9 @@ public final class ServerStatusRequestHandler extends AbstractMaplePacketHandler World wserv = Server.getInstance().getWorld(world); if(wserv != null) { int status = wserv.getWorldCapacityStatus(); - c.announce(MaplePacketCreator.getServerStatus(status)); + c.announce(PacketCreator.getServerStatus(status)); } else { - c.announce(MaplePacketCreator.getServerStatus(2)); + c.announce(PacketCreator.getServerStatus(2)); } } } diff --git a/src/main/java/net/server/handlers/login/ServerlistRequestHandler.java b/src/main/java/net/server/handlers/login/ServerlistRequestHandler.java index 9391bafac4..bf1b7501b6 100644 --- a/src/main/java/net/server/handlers/login/ServerlistRequestHandler.java +++ b/src/main/java/net/server/handlers/login/ServerlistRequestHandler.java @@ -23,13 +23,14 @@ package net.server.handlers.login; import client.MapleClient; import constants.game.GameConstants; -import java.util.List; import net.AbstractMaplePacketHandler; import net.server.Server; import net.server.world.World; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; +import java.util.List; + public final class ServerlistRequestHandler extends AbstractMaplePacketHandler { @Override @@ -39,10 +40,10 @@ public final class ServerlistRequestHandler extends AbstractMaplePacketHandler { c.requestedServerlist(worlds.size()); for (World world : worlds) { - c.announce(MaplePacketCreator.getServerList(world.getId(), GameConstants.WORLD_NAMES[world.getId()], world.getFlag(), world.getEventMessage(), world.getChannels())); + c.announce(PacketCreator.getServerList(world.getId(), GameConstants.WORLD_NAMES[world.getId()], world.getFlag(), world.getEventMessage(), world.getChannels())); } - c.announce(MaplePacketCreator.getEndOfServerList()); - c.announce(MaplePacketCreator.selectWorld(0));//too lazy to make a check lol - c.announce(MaplePacketCreator.sendRecommended(server.worldRecommendedList())); + c.announce(PacketCreator.getEndOfServerList()); + c.announce(PacketCreator.selectWorld(0));//too lazy to make a check lol + c.announce(PacketCreator.sendRecommended(server.worldRecommendedList())); } } \ No newline at end of file diff --git a/src/main/java/net/server/handlers/login/SetGenderHandler.java b/src/main/java/net/server/handlers/login/SetGenderHandler.java index 50c9292643..4465f3c3e8 100644 --- a/src/main/java/net/server/handlers/login/SetGenderHandler.java +++ b/src/main/java/net/server/handlers/login/SetGenderHandler.java @@ -26,7 +26,7 @@ import client.MapleClient; import net.AbstractMaplePacketHandler; import net.server.Server; import net.server.coordinator.session.SessionCoordinator; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; /** @@ -40,7 +40,7 @@ public class SetGenderHandler extends AbstractMaplePacketHandler { byte confirmed = slea.readByte(); if (confirmed == 0x01) { c.setGender(slea.readByte()); - c.announce(MaplePacketCreator.getAuthSuccess(c)); + c.announce(PacketCreator.getAuthSuccess(c)); Server.getInstance().registerLoginState(c); } else { diff --git a/src/main/java/net/server/handlers/login/ViewAllCharHandler.java b/src/main/java/net/server/handlers/login/ViewAllCharHandler.java index edf3a5f7dc..b8f0bcd39e 100644 --- a/src/main/java/net/server/handlers/login/ViewAllCharHandler.java +++ b/src/main/java/net/server/handlers/login/ViewAllCharHandler.java @@ -24,19 +24,20 @@ package net.server.handlers.login; import client.MapleCharacter; import client.MapleClient; import config.YamlConfig; -import java.util.List; import net.AbstractMaplePacketHandler; import net.server.Server; -import tools.MaplePacketCreator; -import tools.data.input.SeekableLittleEndianAccessor; +import tools.PacketCreator; import tools.Pair; +import tools.data.input.SeekableLittleEndianAccessor; + +import java.util.List; public final class ViewAllCharHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { try { if(!c.canRequestCharlist()) { // client breaks if the charlist request pops too soon - c.announce(MaplePacketCreator.showAllCharacter(0, 0)); + c.announce(PacketCreator.showAllCharacter(0, 0)); return; } @@ -61,10 +62,10 @@ public final class ViewAllCharHandler extends AbstractMaplePacketHandler { int charsSize = chrTotal; int unk = charsSize + (3 - charsSize % 3); //rowSize? - c.announce(MaplePacketCreator.showAllCharacter(charsSize, unk)); + c.announce(PacketCreator.showAllCharacter(charsSize, unk)); for (Pair> wchars : worldChars) { - c.announce(MaplePacketCreator.showAllCharacterInfo(wchars.getLeft(), wchars.getRight(), YamlConfig.config.server.ENABLE_PIC && !c.canBypassPic())); + c.announce(PacketCreator.showAllCharacterInfo(wchars.getLeft(), wchars.getRight(), YamlConfig.config.server.ENABLE_PIC && !c.canBypassPic())); } } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/net/server/handlers/login/ViewAllCharRegisterPicHandler.java b/src/main/java/net/server/handlers/login/ViewAllCharRegisterPicHandler.java index a2fc4842b5..a7bde1be57 100644 --- a/src/main/java/net/server/handlers/login/ViewAllCharRegisterPicHandler.java +++ b/src/main/java/net/server/handlers/login/ViewAllCharRegisterPicHandler.java @@ -9,7 +9,7 @@ import net.server.coordinator.session.SessionCoordinator.AntiMulticlientResult; import net.server.world.World; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; import tools.data.input.SeekableLittleEndianAccessor; @@ -43,7 +43,7 @@ public final class ViewAllCharRegisterPicHandler extends AbstractMaplePacketHand hwid = Hwid.fromHostString(hostString); } catch (IllegalArgumentException e) { log.warn("Invalid host string: {}", hostString, e); - c.announce(MaplePacketCreator.getAfterLoginError(17)); + c.announce(PacketCreator.getAfterLoginError(17)); return; } @@ -57,7 +57,7 @@ public final class ViewAllCharRegisterPicHandler extends AbstractMaplePacketHand AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(MaplePacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); + c.announce(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); return; } @@ -70,7 +70,7 @@ public final class ViewAllCharRegisterPicHandler extends AbstractMaplePacketHand c.setWorld(server.getCharacterWorld(charId)); World wserv = c.getWorldServer(); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); return; } @@ -82,7 +82,7 @@ public final class ViewAllCharRegisterPicHandler extends AbstractMaplePacketHand String[] socket = server.getInetSocket(c, c.getWorld(), channel); if (socket == null) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); return; } @@ -90,7 +90,7 @@ public final class ViewAllCharRegisterPicHandler extends AbstractMaplePacketHand c.setCharacterOnSessionTransitionState(charId); try { - c.announce(MaplePacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); + c.announce(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); } catch (UnknownHostException e) { e.printStackTrace(); } diff --git a/src/main/java/net/server/handlers/login/ViewAllCharSelectedHandler.java b/src/main/java/net/server/handlers/login/ViewAllCharSelectedHandler.java index 82157f8c89..24476b5562 100644 --- a/src/main/java/net/server/handlers/login/ViewAllCharSelectedHandler.java +++ b/src/main/java/net/server/handlers/login/ViewAllCharSelectedHandler.java @@ -30,7 +30,7 @@ import net.server.coordinator.session.SessionCoordinator.AntiMulticlientResult; import net.server.world.World; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; import tools.data.input.SeekableLittleEndianAccessor; @@ -63,7 +63,7 @@ public final class ViewAllCharSelectedHandler extends AbstractMaplePacketHandler hwid = Hwid.fromHostString(hostString); } catch (IllegalArgumentException e) { log.warn("Invalid host string: {}", hostString, e); - c.announce(MaplePacketCreator.getAfterLoginError(17)); + c.announce(PacketCreator.getAfterLoginError(17)); return; } @@ -77,7 +77,7 @@ public final class ViewAllCharSelectedHandler extends AbstractMaplePacketHandler AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(MaplePacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); + c.announce(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); return; } @@ -91,7 +91,7 @@ public final class ViewAllCharSelectedHandler extends AbstractMaplePacketHandler World wserv = c.getWorldServer(); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); return; } @@ -105,7 +105,7 @@ public final class ViewAllCharSelectedHandler extends AbstractMaplePacketHandler String[] socket = server.getInetSocket(c, c.getWorld(), c.getChannel()); if(socket == null) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); return; } @@ -113,7 +113,7 @@ public final class ViewAllCharSelectedHandler extends AbstractMaplePacketHandler c.setCharacterOnSessionTransitionState(charId); try { - c.announce(MaplePacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); + c.announce(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); } catch (UnknownHostException e) { e.printStackTrace(); } diff --git a/src/main/java/net/server/handlers/login/ViewAllCharSelectedWithPicHandler.java b/src/main/java/net/server/handlers/login/ViewAllCharSelectedWithPicHandler.java index 2b3a33e14c..599bf9f90e 100644 --- a/src/main/java/net/server/handlers/login/ViewAllCharSelectedWithPicHandler.java +++ b/src/main/java/net/server/handlers/login/ViewAllCharSelectedWithPicHandler.java @@ -9,7 +9,7 @@ import net.server.coordinator.session.SessionCoordinator.AntiMulticlientResult; import net.server.world.World; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; import tools.data.input.SeekableLittleEndianAccessor; @@ -44,7 +44,7 @@ public class ViewAllCharSelectedWithPicHandler extends AbstractMaplePacketHandle hwid = Hwid.fromHostString(hostString); } catch (IllegalArgumentException e) { log.warn("Invalid host string: {}", hostString, e); - c.announce(MaplePacketCreator.getAfterLoginError(17)); + c.announce(PacketCreator.getAfterLoginError(17)); return; } @@ -65,7 +65,7 @@ public class ViewAllCharSelectedWithPicHandler extends AbstractMaplePacketHandle c.setWorld(server.getCharacterWorld(charId)); World wserv = c.getWorldServer(); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); return; } @@ -75,13 +75,13 @@ public class ViewAllCharSelectedWithPicHandler extends AbstractMaplePacketHandle if (c.checkPic(pic)) { String[] socket = server.getInetSocket(c, c.getWorld(), c.getChannel()); if(socket == null) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.announce(PacketCreator.getAfterLoginError(10)); return; } AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(MaplePacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); + c.announce(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); return; } @@ -89,13 +89,13 @@ public class ViewAllCharSelectedWithPicHandler extends AbstractMaplePacketHandle c.setCharacterOnSessionTransitionState(charId); try { - c.announce(MaplePacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); + c.announce(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); } catch (UnknownHostException e) { e.printStackTrace(); } } else { - c.announce(MaplePacketCreator.wrongPic()); + c.announce(PacketCreator.wrongPic()); } } } diff --git a/src/main/java/net/server/services/task/channel/FaceExpressionService.java b/src/main/java/net/server/services/task/channel/FaceExpressionService.java index 1f788d4651..35aa7eff11 100644 --- a/src/main/java/net/server/services/task/channel/FaceExpressionService.java +++ b/src/main/java/net/server/services/task/channel/FaceExpressionService.java @@ -28,7 +28,7 @@ import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import net.server.services.BaseScheduler; import net.server.services.BaseService; import server.maps.MapleMap; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.Collections; @@ -75,7 +75,7 @@ public class FaceExpressionService extends BaseService { Runnable cancelAction = () -> { if(chr.isLoggedinWorld()) { - map.broadcastMessage(chr, MaplePacketCreator.facialExpression(chr, 0), false); + map.broadcastMessage(chr, PacketCreator.facialExpression(chr, 0), false); } }; @@ -90,7 +90,7 @@ public class FaceExpressionService extends BaseService { faceLock[lockid].unlock(); } - map.broadcastMessage(chr, MaplePacketCreator.facialExpression(chr, emote), false); + map.broadcastMessage(chr, PacketCreator.facialExpression(chr, emote), false); } public void unregisterFaceExpression(int mapid, MapleCharacter chr) { diff --git a/src/main/java/net/server/world/MapleParty.java b/src/main/java/net/server/world/MapleParty.java index c9fe9faab0..20091c40b4 100644 --- a/src/main/java/net/server/world/MapleParty.java +++ b/src/main/java/net/server/world/MapleParty.java @@ -34,7 +34,7 @@ import scripting.event.EventInstanceManager; import server.maps.MapleDoor; import server.maps.MapleMap; import server.partyquest.MonsterCarnival; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.*; import java.util.Map.Entry; @@ -330,7 +330,7 @@ public class MapleParty { MapleParty party = player.getParty(); if (party == null) { if (player.getLevel() < 10 && !YamlConfig.config.server.USE_PARTY_FOR_STARTERS) { - player.announce(MaplePacketCreator.partyStatusMessage(10)); + player.announce(PacketCreator.partyStatusMessage(10)); return false; } else if (player.getAriantColiseum() != null) { player.dropMessage(5, "You cannot request a party creation while participating the Ariant Battle Arena."); @@ -347,12 +347,12 @@ public class MapleParty { player.updatePartySearchAvailability(false); player.partyOperationUpdate(party, null); - player.announce(MaplePacketCreator.partyCreated(party, partyplayer.getId())); + player.announce(PacketCreator.partyCreated(party, partyplayer.getId())); return true; } else { if (!silentCheck) { - player.announce(MaplePacketCreator.partyStatusMessage(16)); + player.announce(PacketCreator.partyStatusMessage(16)); } return false; @@ -380,15 +380,15 @@ public class MapleParty { return true; } else { if (!silentCheck) { - player.announce(MaplePacketCreator.partyStatusMessage(17)); + player.announce(PacketCreator.partyStatusMessage(17)); } } } else { - player.announce(MaplePacketCreator.serverNotice(5, "You couldn't join the party since it had already been disbanded.")); + player.announce(PacketCreator.serverNotice(5, "You couldn't join the party since it had already been disbanded.")); } } else { if (!silentCheck) { - player.announce(MaplePacketCreator.serverNotice(5, "You can't join the party as you are already in one.")); + player.announce(PacketCreator.serverNotice(5, "You can't join the party as you are already in one.")); } } diff --git a/src/main/java/net/server/world/World.java b/src/main/java/net/server/world/World.java index c4fb749fa6..d7e086c212 100644 --- a/src/main/java/net/server/world/World.java +++ b/src/main/java/net/server/world/World.java @@ -55,7 +55,7 @@ import server.MapleStorage; import server.TimerManager; import server.maps.*; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.packets.Fishing; @@ -675,10 +675,10 @@ public class World { if (mc.isLoggedinWorld()) { MapleGuild guild = Server.getInstance().getGuild(guildid); if (guild != null) { - mc.getMap().broadcastMessage(mc, MaplePacketCreator.guildNameChanged(cid, guild.getName())); - mc.getMap().broadcastMessage(mc, MaplePacketCreator.guildMarkChanged(cid, guild)); + mc.getMap().broadcastMessage(mc, PacketCreator.guildNameChanged(cid, guild.getName())); + mc.getMap().broadcastMessage(mc, PacketCreator.guildMarkChanged(cid, guild)); } else { - mc.getMap().broadcastMessage(mc, MaplePacketCreator.guildNameChanged(cid, "")); + mc.getMap().broadcastMessage(mc, PacketCreator.guildNameChanged(cid, "")); } } } @@ -686,7 +686,7 @@ public class World { public void changeEmblem(int gid, List affectedPlayers, MapleGuildSummary mgs) { updateGuildSummary(gid, mgs); - sendPacket(affectedPlayers, MaplePacketCreator.guildEmblemChange(gid, mgs.getLogoBG(), mgs.getLogoBGColor(), mgs.getLogo(), mgs.getLogoColor()), -1); + sendPacket(affectedPlayers, PacketCreator.guildEmblemChange(gid, mgs.getLogoBG(), mgs.getLogoBGColor(), mgs.getLogo(), mgs.getLogoColor()), -1); setGuildAndRank(affectedPlayers, -1, -1, -1); //respawn player } @@ -911,7 +911,7 @@ public class World { chr.setParty(party); chr.setMPC(partychar); } - chr.announce(MaplePacketCreator.updateParty(chr.getClient().getChannel(), party, operation, target)); + chr.announce(PacketCreator.updateParty(chr.getClient().getChannel(), party, operation, target)); } } switch (operation) { @@ -919,7 +919,7 @@ public class World { case EXPEL: MapleCharacter chr = getPlayerStorage().getCharacterById(target.getId()); if (chr != null) { - chr.announce(MaplePacketCreator.updateParty(chr.getClient().getChannel(), party, operation, target)); + chr.announce(PacketCreator.updateParty(chr.getClient().getChannel(), party, operation, target)); chr.setParty(null); chr.setMPC(null); } @@ -1014,7 +1014,7 @@ public class World { if (!(partychar.getName().equals(namefrom))) { MapleCharacter chr = getPlayerStorage().getCharacterByName(partychar.getName()); if (chr != null) { - chr.getClient().announce(MaplePacketCreator.multiChat(namefrom, chattext, 1)); + chr.getClient().announce(PacketCreator.multiChat(namefrom, chattext, 1)); } } } @@ -1026,7 +1026,7 @@ public class World { MapleCharacter chr = playerStorage.getCharacterById(characterId); if (chr != null) { if (chr.getBuddylist().containsVisible(cidFrom)) { - chr.getClient().announce(MaplePacketCreator.multiChat(nameFrom, chattext, 0)); + chr.getClient().announce(PacketCreator.multiChat(nameFrom, chattext, 0)); } } } @@ -1065,15 +1065,15 @@ public class World { MapleCharacter from = getChannel(fromchannel).getPlayerStorage().getCharacterByName(sender); if (from != null) { if (MapleInviteCoordinator.createInvite(InviteType.MESSENGER, from, messengerid, targetChr.getId())) { - targetChr.getClient().announce(MaplePacketCreator.messengerInvite(sender, messengerid)); - from.getClient().announce(MaplePacketCreator.messengerNote(target, 4, 1)); + targetChr.getClient().announce(PacketCreator.messengerInvite(sender, messengerid)); + from.getClient().announce(PacketCreator.messengerNote(target, 4, 1)); } else { - from.announce(MaplePacketCreator.messengerChat(sender + " : " + target + " is already managing a Maple Messenger invitation")); + from.announce(PacketCreator.messengerChat(sender + " : " + target + " is already managing a Maple Messenger invitation")); } } } else { MapleCharacter from = getChannel(fromchannel).getPlayerStorage().getCharacterByName(sender); - from.getClient().announce(MaplePacketCreator.messengerChat(sender + " : " + target + " is already using Maple Messenger")); + from.getClient().announce(PacketCreator.messengerChat(sender + " : " + target + " is already using Maple Messenger")); } } } @@ -1087,10 +1087,10 @@ public class World { } if (!messengerchar.getName().equals(namefrom)) { MapleCharacter from = getChannel(fromchannel).getPlayerStorage().getCharacterByName(namefrom); - chr.getClient().announce(MaplePacketCreator.addMessengerPlayer(namefrom, from, position, (byte) (fromchannel - 1))); - from.getClient().announce(MaplePacketCreator.addMessengerPlayer(chr.getName(), chr, messengerchar.getPosition(), (byte) (messengerchar.getChannel() - 1))); + chr.getClient().announce(PacketCreator.addMessengerPlayer(namefrom, from, position, (byte) (fromchannel - 1))); + from.getClient().announce(PacketCreator.addMessengerPlayer(chr.getName(), chr, messengerchar.getPosition(), (byte) (messengerchar.getChannel() - 1))); } else { - chr.getClient().announce(MaplePacketCreator.joinMessenger(messengerchar.getPosition())); + chr.getClient().announce(PacketCreator.joinMessenger(messengerchar.getPosition())); } } } @@ -1099,7 +1099,7 @@ public class World { for (MapleMessengerCharacter messengerchar : messenger.getMembers()) { MapleCharacter chr = getPlayerStorage().getCharacterByName(messengerchar.getName()); if (chr != null) { - chr.getClient().announce(MaplePacketCreator.removeMessengerPlayer(position)); + chr.getClient().announce(PacketCreator.removeMessengerPlayer(position)); } } } @@ -1112,7 +1112,7 @@ public class World { if (!(messengerchar.getName().equals(namefrom))) { MapleCharacter chr = getPlayerStorage().getCharacterByName(messengerchar.getName()); if (chr != null) { - chr.getClient().announce(MaplePacketCreator.messengerChat(chattext)); + chr.getClient().announce(PacketCreator.messengerChat(chattext)); if (to1.equals("")){ to1 = messengerchar.getName(); } else if (to2.equals("")){ @@ -1130,7 +1130,7 @@ public class World { MapleCharacter senderChr = getPlayerStorage().getCharacterByName(sender); if (senderChr != null && senderChr.getMessenger() != null) { if (MapleInviteCoordinator.answerInvite(InviteType.MESSENGER, player.getId(), senderChr.getMessenger().getId(), false).result == InviteResult.DENIED) { - senderChr.getClient().announce(MaplePacketCreator.messengerNote(player.getName(), 5, 0)); + senderChr.getClient().announce(PacketCreator.messengerNote(player.getName(), 5, 0)); } } } @@ -1148,7 +1148,7 @@ public class World { if (!(messengerchar.getName().equals(namefrom))) { MapleCharacter chr = ch.getPlayerStorage().getCharacterByName(messengerchar.getName()); if (chr != null) { - chr.getClient().announce(MaplePacketCreator.updateMessengerPlayer(namefrom, getChannel(fromchannel).getPlayerStorage().getCharacterByName(namefrom), position, (byte) (fromchannel - 1))); + chr.getClient().announce(PacketCreator.updateMessengerPlayer(namefrom, getChannel(fromchannel).getPlayerStorage().getCharacterByName(namefrom), position, (byte) (fromchannel - 1))); } } } @@ -1214,13 +1214,13 @@ public class World { case ADDED: if (buddylist.contains(cidFrom)) { buddylist.put(new BuddylistEntry(name, "Default Group", cidFrom, channel, true)); - addChar.getClient().announce(MaplePacketCreator.updateBuddyChannel(cidFrom, (byte) (channel - 1))); + addChar.getClient().announce(PacketCreator.updateBuddyChannel(cidFrom, (byte) (channel - 1))); } break; case DELETED: if (buddylist.contains(cidFrom)) { buddylist.put(new BuddylistEntry(name, "Default Group", cidFrom, (byte) -1, buddylist.get(cidFrom).isVisible())); - addChar.getClient().announce(MaplePacketCreator.updateBuddyChannel(cidFrom, (byte) -1)); + addChar.getClient().announce(PacketCreator.updateBuddyChannel(cidFrom, (byte) -1)); } break; } @@ -1251,7 +1251,7 @@ public class World { mcChannel = (byte) (channel - 1); } chr.getBuddylist().put(ble); - chr.getClient().announce(MaplePacketCreator.updateBuddyChannel(ble.getCharacterId(), mcChannel)); + chr.getClient().announce(PacketCreator.updateBuddyChannel(ble.getCharacterId(), mcChannel)); } } } @@ -1721,7 +1721,7 @@ public class World { MapleCharacter chr = players.getCharacterById(chrid); if(chr != null && chr.isLoggedinWorld()) { - chr.announce(MaplePacketCreator.serverMessage(chr.getClient().getChannelServer().getServerMessage())); + chr.announce(PacketCreator.serverMessage(chr.getClient().getChannelServer().getServerMessage())); } } } diff --git a/src/main/java/scripting/AbstractPlayerInteraction.java b/src/main/java/scripting/AbstractPlayerInteraction.java index 35de7419da..dd4a972bec 100644 --- a/src/main/java/scripting/AbstractPlayerInteraction.java +++ b/src/main/java/scripting/AbstractPlayerInteraction.java @@ -47,7 +47,7 @@ import server.maps.MapleMapObjectType; import server.partyquest.PartyQuest; import server.partyquest.Pyramid; import server.quest.MapleQuest; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import java.awt.*; @@ -526,9 +526,9 @@ public class AbstractPlayerInteraction { getPlayer().addPet(evolved); - getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.showPet(c.getPlayer(), evolved, false, false), true); - c.announce(MaplePacketCreator.petStatUpdate(c.getPlayer())); - c.announce(MaplePacketCreator.enableActions()); + getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.showPet(c.getPlayer(), evolved, false, false), true); + c.announce(PacketCreator.petStatUpdate(c.getPlayer())); + c.announce(PacketCreator.enableActions()); chr.getClient().getWorldServer().registerPetHunger(chr, chr.getPetIndex(evolved)); */ @@ -635,7 +635,7 @@ public class AbstractPlayerInteraction { MapleInventoryManipulator.removeById(c, ItemConstants.getInventoryType(id), id, -quantity, true, false); } if (showMessage) { - c.announce(MaplePacketCreator.getShowItemGain(id, quantity, true)); + c.announce(PacketCreator.getShowItemGain(id, quantity, true)); } return item; @@ -646,11 +646,11 @@ public class AbstractPlayerInteraction { } public void changeMusic(String songName) { - getPlayer().getMap().broadcastMessage(MaplePacketCreator.musicChange(songName)); + getPlayer().getMap().broadcastMessage(PacketCreator.musicChange(songName)); } public void playerMessage(int type, String message) { - c.announce(MaplePacketCreator.serverNotice(type, message)); + c.announce(PacketCreator.serverNotice(type, message)); } public void message(String message) { @@ -662,15 +662,15 @@ public class AbstractPlayerInteraction { } public void mapMessage(int type, String message) { - getPlayer().getMap().broadcastMessage(MaplePacketCreator.serverNotice(type, message)); + getPlayer().getMap().broadcastMessage(PacketCreator.serverNotice(type, message)); } public void mapEffect(String path) { - c.announce(MaplePacketCreator.mapEffect(path)); + c.announce(PacketCreator.mapEffect(path)); } public void mapSound(String path) { - c.announce(MaplePacketCreator.mapSound(path)); + c.announce(PacketCreator.mapSound(path)); } public void displayAranIntro() { @@ -699,17 +699,17 @@ public class AbstractPlayerInteraction { } public void showIntro(String path) { - c.announce(MaplePacketCreator.showIntro(path)); + c.announce(PacketCreator.showIntro(path)); } public void showInfo(String path) { - c.announce(MaplePacketCreator.showInfo(path)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.showInfo(path)); + c.announce(PacketCreator.enableActions()); } public void guildMessage(int type, String message) { if (getGuild() != null) { - getGuild().guildMessage(MaplePacketCreator.serverNotice(type, message)); + getGuild().guildMessage(PacketCreator.serverNotice(type, message)); } } @@ -754,7 +754,7 @@ public class AbstractPlayerInteraction { } else { MapleInventoryManipulator.removeById(cl, ItemConstants.getInventoryType(id), id, -quantity, true, false); } - cl.announce(MaplePacketCreator.getShowItemGain(id, quantity, true)); + cl.announce(PacketCreator.getShowItemGain(id, quantity, true)); } } @@ -847,7 +847,7 @@ public class AbstractPlayerInteraction { int possesed = iv.countById(id); if (possesed > 0) { MapleInventoryManipulator.removeById(c, ItemConstants.getInventoryType(id), id, possesed, true, false); - chr.announce(MaplePacketCreator.getShowItemGain(id, (short) -possesed, true)); + chr.announce(PacketCreator.getShowItemGain(id, (short) -possesed, true)); } } } @@ -861,13 +861,13 @@ public class AbstractPlayerInteraction { int possessed = cl.getPlayer().getInventory(invType).countById(id); if (possessed > 0) { MapleInventoryManipulator.removeById(cl, ItemConstants.getInventoryType(id), id, possessed, true, false); - cl.announce(MaplePacketCreator.getShowItemGain(id, (short) -possessed, true)); + cl.announce(PacketCreator.getShowItemGain(id, (short) -possessed, true)); } if(invType == MapleInventoryType.EQUIP) { if(cl.getPlayer().getInventory(MapleInventoryType.EQUIPPED).countById(id) > 0) { MapleInventoryManipulator.removeById(cl, MapleInventoryType.EQUIPPED, id, 1, true, false); - cl.announce(MaplePacketCreator.getShowItemGain(id, (short) -1, true)); + cl.announce(PacketCreator.getShowItemGain(id, (short) -1, true)); } } } @@ -881,12 +881,12 @@ public class AbstractPlayerInteraction { } public void showInstruction(String msg, int width, int height) { - c.announce(MaplePacketCreator.sendHint(msg, width, height)); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.sendHint(msg, width, height)); + c.announce(PacketCreator.enableActions()); } public void disableMinimap() { - c.announce(MaplePacketCreator.disableMinimap()); + c.announce(PacketCreator.disableMinimap()); } public boolean isAllReactorState(final int reactorId, final int state) { @@ -898,13 +898,13 @@ public class AbstractPlayerInteraction { getMap(mapid).killAllMonsters(); for (MapleMapObject i : getMap(mapid).getMapObjectsInRange(c.getPlayer().getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.ITEM))) { getMap(mapid).removeMapObject(i); - getMap(mapid).broadcastMessage(MaplePacketCreator.removeItemFromMap(i.getObjectId(), 0, c.getPlayer().getId())); + getMap(mapid).broadcastMessage(PacketCreator.removeItemFromMap(i.getObjectId(), 0, c.getPlayer().getId())); } } public void useItem(int id) { MapleItemInformationProvider.getInstance().getItemEffect(id).applyTo(c.getPlayer()); - c.announce(MaplePacketCreator.getItemMessage(id));//Useful shet :3 + c.announce(PacketCreator.getItemMessage(id));//Useful shet :3 } public void cancelItem(final int id) { @@ -924,7 +924,7 @@ public class AbstractPlayerInteraction { return; } } else if (GameConstants.isAranSkills(skillid)) { - c.announce(MaplePacketCreator.showInfo("Effect/BasicEff.img/AranGetSkill")); + c.announce(PacketCreator.showInfo("Effect/BasicEff.img/AranGetSkill")); } getPlayer().changeSkillLevel(skill, level, masterLevel, expiration); @@ -943,7 +943,7 @@ public class AbstractPlayerInteraction { final Item newItem = MapleItemInformationProvider.getInstance().getEquipById(itemid); newItem.setPosition(slot); c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).addItemFromDB(newItem); - c.announce(MaplePacketCreator.modifyInventory(false, Collections.singletonList(new ModifyInventory(0, newItem)))); + c.announce(PacketCreator.modifyInventory(false, Collections.singletonList(new ModifyInventory(0, newItem)))); } public void spawnNpc(int npcId, Point pos, MapleMap map) { @@ -955,7 +955,7 @@ public class AbstractPlayerInteraction { npc.setRx1(pos.x - 50); npc.setFh(map.getFootholds().findBelow(pos).getId()); map.addMapObject(npc); - map.broadcastMessage(MaplePacketCreator.spawnNPC(npc)); + map.broadcastMessage(PacketCreator.spawnNPC(npc)); } } @@ -974,19 +974,19 @@ public class AbstractPlayerInteraction { } public void spawnGuide() { - c.announce(MaplePacketCreator.spawnGuide(true)); + c.announce(PacketCreator.spawnGuide(true)); } public void removeGuide() { - c.announce(MaplePacketCreator.spawnGuide(false)); + c.announce(PacketCreator.spawnGuide(false)); } public void displayGuide(int num) { - c.announce(MaplePacketCreator.showInfo("UI/tutorial.img/" + num)); + c.announce(PacketCreator.showInfo("UI/tutorial.img/" + num)); } public void goDojoUp() { - c.announce(MaplePacketCreator.dojoWarpUp()); + c.announce(PacketCreator.dojoWarpUp()); } public void resetDojoEnergy() { @@ -1000,28 +1000,28 @@ public class AbstractPlayerInteraction { } public void enableActions() { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } public void showEffect(String effect){ - c.announce(MaplePacketCreator.showEffect(effect)); + c.announce(PacketCreator.showEffect(effect)); } public void dojoEnergy() { - c.announce(MaplePacketCreator.getEnergy("energy", getPlayer().getDojoEnergy())); + c.announce(PacketCreator.getEnergy("energy", getPlayer().getDojoEnergy())); } public void talkGuide(String message) { - c.announce(MaplePacketCreator.talkGuide(message)); + c.announce(PacketCreator.talkGuide(message)); } public void guideHint(int hint) { - c.announce(MaplePacketCreator.guideHint(hint)); + c.announce(PacketCreator.guideHint(hint)); } public void updateAreaInfo(Short area, String info) { c.getPlayer().updateAreaInfo(area, info); - c.announce(MaplePacketCreator.enableActions());//idk, nexon does the same :P + c.announce(PacketCreator.enableActions());//idk, nexon does the same :P } public boolean containsAreaInfo(short area, String info) { @@ -1029,33 +1029,33 @@ public class AbstractPlayerInteraction { } public void earnTitle(String msg) { - c.announce(MaplePacketCreator.earnTitleMessage(msg)); + c.announce(PacketCreator.earnTitleMessage(msg)); } public void showInfoText(String msg) { - c.announce(MaplePacketCreator.showInfoText(msg)); + c.announce(PacketCreator.showInfoText(msg)); } public void openUI(byte ui) { - c.announce(MaplePacketCreator.openUI(ui)); + c.announce(PacketCreator.openUI(ui)); } public void lockUI() { - c.announce(MaplePacketCreator.disableUI(true)); - c.announce(MaplePacketCreator.lockUI(true)); + c.announce(PacketCreator.disableUI(true)); + c.announce(PacketCreator.lockUI(true)); } public void unlockUI() { - c.announce(MaplePacketCreator.disableUI(false)); - c.announce(MaplePacketCreator.lockUI(false)); + c.announce(PacketCreator.disableUI(false)); + c.announce(PacketCreator.lockUI(false)); } public void playSound(String sound) { - getPlayer().getMap().broadcastMessage(MaplePacketCreator.environmentChange(sound, 4)); + getPlayer().getMap().broadcastMessage(PacketCreator.environmentChange(sound, 4)); } public void environmentChange(String env, int mode) { - getPlayer().getMap().broadcastMessage(MaplePacketCreator.environmentChange(env, mode)); + getPlayer().getMap().broadcastMessage(PacketCreator.environmentChange(env, mode)); } public String numberWithCommas(int number) { @@ -1183,7 +1183,7 @@ public class AbstractPlayerInteraction { } public void npcTalk(int npcid, String message) { - c.announce(MaplePacketCreator.getNPCTalk(npcid, (byte) 0, message, "00 00", (byte) 0)); + c.announce(PacketCreator.getNPCTalk(npcid, (byte) 0, message, "00 00", (byte) 0)); } public long getCurrentTime() { diff --git a/src/main/java/scripting/event/EventInstanceManager.java b/src/main/java/scripting/event/EventInstanceManager.java index ee4dbc6104..3a4e6defa8 100644 --- a/src/main/java/scripting/event/EventInstanceManager.java +++ b/src/main/java/scripting/event/EventInstanceManager.java @@ -48,7 +48,7 @@ import server.maps.MapleMap; import server.maps.MapleMapManager; import server.maps.MaplePortal; import server.maps.MapleReactor; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import javax.script.ScriptException; @@ -282,7 +282,7 @@ public class EventInstanceManager { eventTime = time; for(MapleCharacter chr: getPlayers()) { - chr.announce(MaplePacketCreator.getClock((int) (time / 1000))); + chr.announce(PacketCreator.getClock((int) (time / 1000))); } event_schedule = TimerManager.getInstance().schedule(() -> { @@ -319,7 +319,7 @@ public class EventInstanceManager { private void dismissEventTimer() { for(MapleCharacter chr: getPlayers()) { - chr.getClient().announce(MaplePacketCreator.removeClock()); + chr.getClient().announce(PacketCreator.removeClock()); } event_schedule = null; @@ -857,7 +857,7 @@ public class EventInstanceManager { npc.setRx1(pos.x - 50); npc.setFh(map.getFootholds().findBelow(pos).getId()); map.addMapObject(npc); - map.broadcastMessage(MaplePacketCreator.spawnNPC(npc)); + map.broadcastMessage(PacketCreator.spawnNPC(npc)); } } @@ -1209,8 +1209,8 @@ public class EventInstanceManager { public final void showWrongEffect(int mapId) { MapleMap map = getMapInstance(mapId); - map.broadcastMessage(MaplePacketCreator.showEffect("quest/party/wrong_kor")); - map.broadcastMessage(MaplePacketCreator.playSound("Party1/Failed")); + map.broadcastMessage(PacketCreator.showEffect("quest/party/wrong_kor")); + map.broadcastMessage(PacketCreator.playSound("Party1/Failed")); } public final void showClearEffect() { @@ -1236,10 +1236,10 @@ public class EventInstanceManager { public final void showClearEffect(boolean hasGate, int mapId, String mapObj, int newState) { MapleMap map = getMapInstance(mapId); - map.broadcastMessage(MaplePacketCreator.showEffect("quest/party/clear")); - map.broadcastMessage(MaplePacketCreator.playSound("Party1/Clear")); + map.broadcastMessage(PacketCreator.showEffect("quest/party/clear")); + map.broadcastMessage(PacketCreator.playSound("Party1/Clear")); if(hasGate) { - map.broadcastMessage(MaplePacketCreator.environmentChange(mapObj, newState)); + map.broadcastMessage(PacketCreator.environmentChange(mapObj, newState)); wL.lock(); try { openedGates.put(map.getId(), new Pair<>(mapObj, newState)); @@ -1262,7 +1262,7 @@ public class EventInstanceManager { } if(gateData != null) { - chr.announce(MaplePacketCreator.environmentChange(gateData.getLeft(), gateData.getRight())); + chr.announce(PacketCreator.environmentChange(gateData.getLeft(), gateData.getRight())); } } diff --git a/src/main/java/scripting/map/MapScriptMethods.java b/src/main/java/scripting/map/MapScriptMethods.java index cc94de2edd..6435e9dc88 100644 --- a/src/main/java/scripting/map/MapScriptMethods.java +++ b/src/main/java/scripting/map/MapScriptMethods.java @@ -26,7 +26,7 @@ import client.MapleClient; import client.MapleQuestStatus; import scripting.AbstractPlayerInteraction; import server.quest.MapleQuest; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class MapScriptMethods extends AbstractPlayerInteraction { @@ -40,26 +40,26 @@ public class MapScriptMethods extends AbstractPlayerInteraction { switch (c.getPlayer().getMapId()) { case 913040100: lockUI(); - c.announce(MaplePacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene0")); + c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene0")); break; case 913040101: - c.announce(MaplePacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene1")); + c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene1")); break; case 913040102: - c.announce(MaplePacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene2")); + c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene2")); break; case 913040103: - c.announce(MaplePacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene3")); + c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene3")); break; case 913040104: - c.announce(MaplePacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene4")); + c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene4")); break; case 913040105: - c.announce(MaplePacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene5")); + c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene5")); break; case 913040106: lockUI(); - c.announce(MaplePacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene6")); + c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene6")); break; } } @@ -68,20 +68,20 @@ public class MapScriptMethods extends AbstractPlayerInteraction { switch (c.getPlayer().getMapId()) { case 914090010: lockUI(); - c.announce(MaplePacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene0")); + c.announce(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene0")); break; case 914090011: - c.announce(MaplePacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene1" + c.getPlayer().getGender())); + c.announce(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene1" + c.getPlayer().getGender())); break; case 914090012: - c.announce(MaplePacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene2" + c.getPlayer().getGender())); + c.announce(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene2" + c.getPlayer().getGender())); break; case 914090013: - c.announce(MaplePacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene3")); + c.announce(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene3")); break; case 914090100: lockUI(); - c.announce(MaplePacketCreator.showIntro("Effect/Direction1.img/aranTutorial/HandedPoleArm" + c.getPlayer().getGender())); + c.announce(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/HandedPoleArm" + c.getPlayer().getGender())); break; } } @@ -89,30 +89,30 @@ public class MapScriptMethods extends AbstractPlayerInteraction { public void startExplorerExperience() { if (c.getPlayer().getMapId() == 1020100) //Swordman { - c.announce(MaplePacketCreator.showIntro("Effect/Direction3.img/swordman/Scene" + c.getPlayer().getGender())); + c.announce(PacketCreator.showIntro("Effect/Direction3.img/swordman/Scene" + c.getPlayer().getGender())); } else if (c.getPlayer().getMapId() == 1020200) //Magician { - c.announce(MaplePacketCreator.showIntro("Effect/Direction3.img/magician/Scene" + c.getPlayer().getGender())); + c.announce(PacketCreator.showIntro("Effect/Direction3.img/magician/Scene" + c.getPlayer().getGender())); } else if (c.getPlayer().getMapId() == 1020300) //Archer { - c.announce(MaplePacketCreator.showIntro("Effect/Direction3.img/archer/Scene" + c.getPlayer().getGender())); + c.announce(PacketCreator.showIntro("Effect/Direction3.img/archer/Scene" + c.getPlayer().getGender())); } else if (c.getPlayer().getMapId() == 1020400) //Rogue { - c.announce(MaplePacketCreator.showIntro("Effect/Direction3.img/rogue/Scene" + c.getPlayer().getGender())); + c.announce(PacketCreator.showIntro("Effect/Direction3.img/rogue/Scene" + c.getPlayer().getGender())); } else if (c.getPlayer().getMapId() == 1020500) //Pirate { - c.announce(MaplePacketCreator.showIntro("Effect/Direction3.img/pirate/Scene" + c.getPlayer().getGender())); + c.announce(PacketCreator.showIntro("Effect/Direction3.img/pirate/Scene" + c.getPlayer().getGender())); } } public void goAdventure() { lockUI(); - c.announce(MaplePacketCreator.showIntro("Effect/Direction3.img/goAdventure/Scene" + c.getPlayer().getGender())); + c.announce(PacketCreator.showIntro("Effect/Direction3.img/goAdventure/Scene" + c.getPlayer().getGender())); } public void goLith() { lockUI(); - c.announce(MaplePacketCreator.showIntro("Effect/Direction3.img/goLith/Scene" + c.getPlayer().getGender())); + c.announce(PacketCreator.showIntro("Effect/Direction3.img/goLith/Scene" + c.getPlayer().getGender())); } public void explorerQuest(short questid, String questName) { @@ -134,13 +134,13 @@ public class MapScriptMethods extends AbstractPlayerInteraction { if (status.equals(infoex)) { etm.append("Earned the ").append(questName).append(" title!"); smp.append("You have earned the <").append(questName).append(">").append(rewardstring); - getPlayer().announce(MaplePacketCreator.getShowQuestCompletion(quest.getId())); + getPlayer().announce(PacketCreator.getShowQuestCompletion(quest.getId())); } else { - getPlayer().announce(MaplePacketCreator.earnTitleMessage(status + "/" + infoex + " regions explored.")); + getPlayer().announce(PacketCreator.earnTitleMessage(status + "/" + infoex + " regions explored.")); etm.append("Trying for the ").append(questName).append(" title."); smp.append("You made progress on the ").append(questName).append(" title. ").append(status).append("/").append(infoex); } - getPlayer().announce(MaplePacketCreator.earnTitleMessage(etm.toString())); + getPlayer().announce(PacketCreator.earnTitleMessage(etm.toString())); showInfoText(smp.toString()); } @@ -157,11 +157,11 @@ public class MapScriptMethods extends AbstractPlayerInteraction { } String status = Integer.toString(qs.getMedalProgress()); getPlayer().announceUpdateQuest(DelayedQuestUpdate.UPDATE, qs, true); - getPlayer().announce(MaplePacketCreator.earnTitleMessage(status + "/5 Completed")); - getPlayer().announce(MaplePacketCreator.earnTitleMessage("The One Who's Touched the Sky title in progress.")); + getPlayer().announce(PacketCreator.earnTitleMessage(status + "/5 Completed")); + getPlayer().announce(PacketCreator.earnTitleMessage("The One Who's Touched the Sky title in progress.")); if (Integer.toString(qs.getMedalProgress()).equals(qs.getInfoEx(0))) { showInfoText("The One Who's Touched the Sky" + rewardstring); - getPlayer().announce(MaplePacketCreator.getShowQuestCompletion(quest.getId())); + getPlayer().announce(PacketCreator.getShowQuestCompletion(quest.getId())); } else { showInfoText("The One Who's Touched the Sky title in progress. " + status + "/5 Completed"); } diff --git a/src/main/java/scripting/npc/NPCConversationManager.java b/src/main/java/scripting/npc/NPCConversationManager.java index c634ca6c3a..07886a81fb 100644 --- a/src/main/java/scripting/npc/NPCConversationManager.java +++ b/src/main/java/scripting/npc/NPCConversationManager.java @@ -59,7 +59,7 @@ import server.partyquest.Pyramid; import server.partyquest.Pyramid.PyramidMode; import tools.FilePrinter; import tools.LogHelper; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.packets.Wedding; import java.awt.*; @@ -133,23 +133,23 @@ public class NPCConversationManager extends AbstractPlayerInteraction { public void dispose() { NPCScriptManager.getInstance().dispose(this); - getClient().announce(MaplePacketCreator.enableActions()); + getClient().announce(PacketCreator.enableActions()); } public void sendNext(String text) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 0, text, "00 01", (byte) 0)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "00 01", (byte) 0)); } public void sendPrev(String text) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 0, text, "01 00", (byte) 0)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "01 00", (byte) 0)); } public void sendNextPrev(String text) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 0, text, "01 01", (byte) 0)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "01 01", (byte) 0)); } public void sendOk(String text) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 0, text, "00 00", (byte) 0)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "00 00", (byte) 0)); } public void sendDefault() { @@ -157,48 +157,48 @@ public class NPCConversationManager extends AbstractPlayerInteraction { } public void sendYesNo(String text) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 1, text, "", (byte) 0)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 1, text, "", (byte) 0)); } public void sendAcceptDecline(String text) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 0x0C, text, "", (byte) 0)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0x0C, text, "", (byte) 0)); } public void sendSimple(String text) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 4, text, "", (byte) 0)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 4, text, "", (byte) 0)); } public void sendNext(String text, byte speaker) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 0, text, "00 01", speaker)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "00 01", speaker)); } public void sendPrev(String text, byte speaker) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 0, text, "01 00", speaker)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "01 00", speaker)); } public void sendNextPrev(String text, byte speaker) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 0, text, "01 01", speaker)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "01 01", speaker)); } public void sendOk(String text, byte speaker) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 0, text, "00 00", speaker)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "00 00", speaker)); } public void sendYesNo(String text, byte speaker) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 1, text, "", speaker)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 1, text, "", speaker)); } public void sendAcceptDecline(String text, byte speaker) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 0x0C, text, "", speaker)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0x0C, text, "", speaker)); } public void sendSimple(String text, byte speaker) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 4, text, "", speaker)); + getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 4, text, "", speaker)); } public void sendStyle(String text, int[] styles) { if (styles.length > 0) { - getClient().announce(MaplePacketCreator.getNPCTalkStyle(npc, text, styles)); + getClient().announce(PacketCreator.getNPCTalkStyle(npc, text, styles)); } else { // thanks Conrad for noticing empty styles crashing players sendOk("Sorry, there are no options of cosmetics available for you here at the moment."); dispose(); @@ -206,11 +206,11 @@ public class NPCConversationManager extends AbstractPlayerInteraction { } public void sendGetNumber(String text, int def, int min, int max) { - getClient().announce(MaplePacketCreator.getNPCTalkNum(npc, text, def, min, max)); + getClient().announce(PacketCreator.getNPCTalkNum(npc, text, def, min, max)); } public void sendGetText(String text) { - getClient().announce(MaplePacketCreator.getNPCTalkText(npc, text, "")); + getClient().announce(PacketCreator.getNPCTalkText(npc, text, "")); } /* @@ -223,7 +223,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { * 6 = Kerning Subway */ public void sendDimensionalMirror(String text) { - getClient().announce(MaplePacketCreator.getDimensionalMirror(text)); + getClient().announce(PacketCreator.getDimensionalMirror(text)); } public void setGetText(String text) { @@ -278,7 +278,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { @Override public void showEffect(String effect) { - getPlayer().getMap().broadcastMessage(MaplePacketCreator.environmentChange(effect, 3)); + getPlayer().getMap().broadcastMessage(PacketCreator.environmentChange(effect, 3)); } public void setHair(int hair) { @@ -410,7 +410,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { LogHelper.logGacha(getPlayer(), item.getId(), map); if (item.getTier() > 0){ //Uncommon and Rare - Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.gachaponMessage(itemGained, map, getPlayer())); + Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.gachaponMessage(itemGained, map, getPlayer())); } } @@ -418,10 +418,10 @@ public class NPCConversationManager extends AbstractPlayerInteraction { MapleAlliance alliance = Server.getInstance().getAlliance(c.getPlayer().getGuild().getAllianceId()); alliance.increaseCapacity(1); - Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.getGuildAlliances(alliance, c.getWorld()), -1, -1); - Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.getGuildAlliances(alliance, c.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); - c.announce(MaplePacketCreator.updateAllianceInfo(alliance, c.getWorld())); // thanks Vcoc for finding an alliance update to leader issue + c.announce(PacketCreator.updateAllianceInfo(alliance, c.getWorld())); // thanks Vcoc for finding an alliance update to leader issue } public void disbandAlliance(MapleClient c, int allianceId) { @@ -461,7 +461,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { } public void showFredrick() { - c.announce(MaplePacketCreator.getFredrick(getPlayer())); + c.announce(PacketCreator.getFredrick(getPlayer())); } public int partyMembersInMap() { @@ -677,7 +677,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { if (mc != null) { mc.setChallenged(false); mc.changeMap(map, map.getPortal(0)); - mc.announce(MaplePacketCreator.serverNotice(6, LanguageConstants.getMessage(mc, LanguageConstants.CPQEntryLobby))); + mc.announce(PacketCreator.serverNotice(6, LanguageConstants.getMessage(mc, LanguageConstants.CPQEntryLobby))); TimerManager tMan = TimerManager.getInstance(); tMan.schedule(() -> mapClock(3 * 60), 1500); @@ -926,7 +926,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { if (mc != null) { mc.setChallenged(false); mc.changeMap(map, map.getPortal(0)); - mc.announce(MaplePacketCreator.serverNotice(6, LanguageConstants.getMessage(mc, LanguageConstants.CPQEntryLobby))); + mc.announce(PacketCreator.serverNotice(6, LanguageConstants.getMessage(mc, LanguageConstants.CPQEntryLobby))); TimerManager tMan = TimerManager.getInstance(); tMan.schedule(() -> mapClock(3 * 60), 1500); @@ -939,7 +939,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { } public void mapClock(int time) { - getPlayer().getMap().broadcastMessage(MaplePacketCreator.getClock(time)); + getPlayer().getMap().broadcastMessage(PacketCreator.getClock(time)); } private boolean sendCPQChallenge(String cpqType, int leaderid) { diff --git a/src/main/java/scripting/npc/NPCScriptManager.java b/src/main/java/scripting/npc/NPCScriptManager.java index 39b74f2bc1..6e7408ebb1 100644 --- a/src/main/java/scripting/npc/NPCScriptManager.java +++ b/src/main/java/scripting/npc/NPCScriptManager.java @@ -27,7 +27,7 @@ import net.server.world.MaplePartyCharacter; import scripting.AbstractScriptManager; import server.MapleItemInformationProvider.ScriptedItem; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import javax.script.Invocable; import javax.script.ScriptEngine; @@ -151,7 +151,7 @@ public class NPCScriptManager extends AbstractScriptManager { } } } else { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } return true; } catch (final Exception ute) { diff --git a/src/main/java/scripting/portal/PortalPlayerInteraction.java b/src/main/java/scripting/portal/PortalPlayerInteraction.java index d12ea79a1d..06e20baf5b 100644 --- a/src/main/java/scripting/portal/PortalPlayerInteraction.java +++ b/src/main/java/scripting/portal/PortalPlayerInteraction.java @@ -26,7 +26,7 @@ import scripting.AbstractPlayerInteraction; import scripting.map.MapScriptManager; import server.maps.MaplePortal; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.sql.Connection; import java.sql.PreparedStatement; @@ -78,6 +78,6 @@ public class PortalPlayerInteraction extends AbstractPlayerInteraction { } public void playPortalSound() { - c.announce(MaplePacketCreator.playPortalSound()); + c.announce(PacketCreator.playPortalSound()); } } \ No newline at end of file diff --git a/src/main/java/scripting/reactor/ReactorActionManager.java b/src/main/java/scripting/reactor/ReactorActionManager.java index b5246a69af..4140a79155 100644 --- a/src/main/java/scripting/reactor/ReactorActionManager.java +++ b/src/main/java/scripting/reactor/ReactorActionManager.java @@ -39,7 +39,7 @@ import server.maps.MapleReactor; import server.maps.ReactorDropEntry; import server.partyquest.MapleCarnivalFactory; import server.partyquest.MapleCarnivalFactory.MCSkill; -import tools.MaplePacketCreator; +import tools.PacketCreator; import javax.script.Invocable; import java.awt.*; @@ -294,7 +294,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction { if(chr != null) { map.damageMonster(chr, mm, damage); - map.broadcastMessage(MaplePacketCreator.damageMonster(mm.getObjectId(), damage)); + map.broadcastMessage(PacketCreator.damageMonster(mm.getObjectId(), damage)); } } } diff --git a/src/main/java/server/MapleItemInformationProvider.java b/src/main/java/server/MapleItemInformationProvider.java index 64b3253fed..c74b8b1bba 100644 --- a/src/main/java/server/MapleItemInformationProvider.java +++ b/src/main/java/server/MapleItemInformationProvider.java @@ -1668,7 +1668,7 @@ public class MapleItemInformationProvider { if (!EquipSlot.getFromTextSlot(islot).isAllowed(dst, isCash(id))) { equip.wear(false); String itemName = MapleItemInformationProvider.getInstance().getName(equip.getItemId()); - Server.getInstance().broadcastGMMessage(chr.getWorld(), MaplePacketCreator.sendYellowTip("[Warning]: " + chr.getName() + " tried to equip " + itemName + " into slot " + dst + ".")); + Server.getInstance().broadcastGMMessage(chr.getWorld(), PacketCreator.sendYellowTip("[Warning]: " + chr.getName() + " tried to equip " + itemName + " into slot " + dst + ".")); AutobanFactory.PACKET_EDIT.alert(chr, chr.getName() + " tried to forcibly equip an item."); FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to equip " + itemName + " into " + dst + " slot."); return false; diff --git a/src/main/java/server/MapleShop.java b/src/main/java/server/MapleShop.java index 241900da8f..71854b32bb 100644 --- a/src/main/java/server/MapleShop.java +++ b/src/main/java/server/MapleShop.java @@ -28,7 +28,7 @@ import client.inventory.MaplePet; import client.inventory.manipulator.MapleInventoryManipulator; import constants.inventory.ItemConstants; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.sql.Connection; import java.sql.PreparedStatement; @@ -76,7 +76,7 @@ public class MapleShop { public void sendShop(MapleClient c) { c.getPlayer().setShop(this); - c.announce(MaplePacketCreator.getNPCShop(c, getNpcId(), items)); + c.announce(PacketCreator.getNPCShop(c, getNpcId(), items)); } public void buy(MapleClient c, short slot, int itemId, short quantity) { @@ -103,12 +103,12 @@ public class MapleShop { MapleInventoryManipulator.addById(c, itemId, quantity, "", -1); c.getPlayer().gainMeso(-item.getPrice(), false); } - c.announce(MaplePacketCreator.shopTransaction((byte) 0)); + c.announce(PacketCreator.shopTransaction((byte) 0)); } else - c.announce(MaplePacketCreator.shopTransaction((byte) 3)); + c.announce(PacketCreator.shopTransaction((byte) 3)); } else - c.announce(MaplePacketCreator.shopTransaction((byte) 2)); + c.announce(PacketCreator.shopTransaction((byte) 2)); } else if (item.getPitch() > 0) { int amount = (int)Math.min((float) item.getPitch() * quantity, Integer.MAX_VALUE); @@ -124,9 +124,9 @@ public class MapleShop { MapleInventoryManipulator.addById(c, itemId, quantity, "", -1); MapleInventoryManipulator.removeById(c, MapleInventoryType.ETC, 4310000, amount, false, false); } - c.announce(MaplePacketCreator.shopTransaction((byte) 0)); + c.announce(PacketCreator.shopTransaction((byte) 0)); } else - c.announce(MaplePacketCreator.shopTransaction((byte) 3)); + c.announce(PacketCreator.shopTransaction((byte) 3)); } } else if (c.getPlayer().getInventory(MapleInventoryType.CASH).countById(token) != 0) { @@ -145,11 +145,11 @@ public class MapleShop { } c.getPlayer().gainMeso(diff, false); } else { - c.announce(MaplePacketCreator.shopTransaction((byte) 3)); + c.announce(PacketCreator.shopTransaction((byte) 3)); } - c.announce(MaplePacketCreator.shopTransaction((byte) 0)); + c.announce(PacketCreator.shopTransaction((byte) 0)); } else { - c.announce(MaplePacketCreator.shopTransaction((byte) 2)); + c.announce(PacketCreator.shopTransaction((byte) 2)); } } } @@ -203,9 +203,9 @@ public class MapleShop { if (recvMesos > 0) { c.getPlayer().gainMeso(recvMesos, false); } - c.announce(MaplePacketCreator.shopTransaction((byte) 0x8)); + c.announce(PacketCreator.shopTransaction((byte) 0x8)); } else { - c.announce(MaplePacketCreator.shopTransaction((byte) 0x5)); + c.announce(PacketCreator.shopTransaction((byte) 0x5)); } } @@ -225,9 +225,9 @@ public class MapleShop { item.setQuantity(slotMax); c.getPlayer().forceUpdateItem(item); c.getPlayer().gainMeso(-price, false, true, false); - c.announce(MaplePacketCreator.shopTransaction((byte) 0x8)); + c.announce(PacketCreator.shopTransaction((byte) 0x8)); } else { - c.announce(MaplePacketCreator.shopTransaction((byte) 0x2)); + c.announce(PacketCreator.shopTransaction((byte) 0x2)); } } } diff --git a/src/main/java/server/MapleStatEffect.java b/src/main/java/server/MapleStatEffect.java index d7aa812cd9..673a598999 100644 --- a/src/main/java/server/MapleStatEffect.java +++ b/src/main/java/server/MapleStatEffect.java @@ -43,7 +43,7 @@ import server.maps.*; import server.partyquest.MapleCarnivalFactory; import server.partyquest.MapleCarnivalFactory.MCSkill; import tools.ArrayMap; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import java.awt.*; @@ -826,8 +826,8 @@ public class MapleStatEffect { if (absorbMp > 0) { mob.setMp(mob.getMp() - absorbMp); applyto.addMP(absorbMp); - applyto.announce(MaplePacketCreator.showOwnBuffEffect(sourceid, 1)); - applyto.getMap().broadcastMessage(applyto, MaplePacketCreator.showBuffeffect(applyto.getId(), sourceid, 1), false); + applyto.announce(PacketCreator.showOwnBuffEffect(sourceid, 1)); + applyto.getMap().broadcastMessage(applyto, PacketCreator.showBuffeffect(applyto.getId(), sourceid, 1), false); } } break; @@ -875,7 +875,7 @@ public class MapleStatEffect { if (primary) { if (itemConNo != 0) { if (!applyto.getAbstractPlayerInteraction().hasItem(itemCon, itemConNo)) { - applyto.announce(MaplePacketCreator.enableActions()); + applyto.announce(PacketCreator.enableActions()); return false; } MapleInventoryManipulator.removeById(applyto.getClient(), ItemConstants.getInventoryType(itemCon), itemCon, itemConNo, false, true); @@ -899,7 +899,7 @@ public class MapleStatEffect { } */ if (!applyto.applyHpMpChange(hpCon, hpchange, mpchange)) { - applyto.announce(MaplePacketCreator.enableActions()); + applyto.announce(PacketCreator.enableActions()); return false; } @@ -970,7 +970,7 @@ public class MapleStatEffect { applyto.cancelBuffStats(MapleBuffStat.SUMMON); } - applyto.announce(MaplePacketCreator.enableActions()); + applyto.announce(PacketCreator.enableActions()); } applyBuffEffect(applyfrom, applyto, primary); @@ -1108,8 +1108,8 @@ public class MapleStatEffect { affectedc += affectedp.size(); // used for heal for (MapleCharacter affected : affectedp) { applyTo(applyfrom, affected, false, null, useMaxRange, affectedc); - affected.announce(MaplePacketCreator.showOwnBuffEffect(sourceid, 2)); - affected.getMap().broadcastMessage(affected, MaplePacketCreator.showBuffeffect(affected.getId(), sourceid, 2), false); + affected.announce(PacketCreator.showOwnBuffEffect(sourceid, 2)); + affected.getMap().broadcastMessage(affected, PacketCreator.showBuffeffect(affected.getId(), sourceid, 2), false); } } @@ -1182,7 +1182,7 @@ public class MapleStatEffect { public final void applyComboBuff(final MapleCharacter applyto, int combo) { final List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.ARAN_COMBO, combo)); - applyto.announce(MaplePacketCreator.giveBuff(sourceid, 99999, stat)); + applyto.announce(PacketCreator.giveBuff(sourceid, 99999, stat)); final long starttime = Server.getInstance().getCurrentTime(); // final CancelEffectAction cancelAction = new CancelEffectAction(applyto, this, starttime); @@ -1192,7 +1192,7 @@ public class MapleStatEffect { public final void applyBeaconBuff(final MapleCharacter applyto, int objectid) { // thanks Thora & Hyun for reporting an issue with homing beacon autoflagging mobs when changing maps final List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.HOMING_BEACON, objectid)); - applyto.announce(MaplePacketCreator.giveBuff(1, sourceid, stat)); + applyto.announce(PacketCreator.giveBuff(1, sourceid, stat)); final long starttime = Server.getInstance().getCurrentTime(); applyto.registerEffect(this, starttime, Long.MAX_VALUE, false); @@ -1205,9 +1205,9 @@ public class MapleStatEffect { long leftDuration = (starttime + localDuration) - Server.getInstance().getCurrentTime(); if (leftDuration > 0) { if (isDash() || isInfusion()) { - target.announce(MaplePacketCreator.givePirateBuff(activeStats, (skill ? sourceid : -sourceid), (int) leftDuration)); + target.announce(PacketCreator.givePirateBuff(activeStats, (skill ? sourceid : -sourceid), (int) leftDuration)); } else { - target.announce(MaplePacketCreator.giveBuff((skill ? sourceid : -sourceid), (int) leftDuration, activeStats)); + target.announce(PacketCreator.giveBuff((skill ? sourceid : -sourceid), (int) leftDuration, activeStats)); } } } @@ -1260,35 +1260,35 @@ public class MapleStatEffect { } if (primary) { localDuration = alchemistModifyVal(applyfrom, localDuration, false); - applyto.getMap().broadcastMessage(applyto, MaplePacketCreator.showBuffeffect(applyto.getId(), sourceid, 1, (byte) 3), false); + applyto.getMap().broadcastMessage(applyto, PacketCreator.showBuffeffect(applyto.getId(), sourceid, 1, (byte) 3), false); } if (localstatups.size() > 0) { byte[] buff = null; byte[] mbuff = null; if (this.isActive(applyto)) { - buff = MaplePacketCreator.giveBuff((skill ? sourceid : -sourceid), localDuration, localstatups); + buff = PacketCreator.giveBuff((skill ? sourceid : -sourceid), localDuration, localstatups); } if (isDash()) { - buff = MaplePacketCreator.givePirateBuff(statups, sourceid, seconds); - mbuff = MaplePacketCreator.giveForeignPirateBuff(applyto.getId(), sourceid, seconds, localstatups); + buff = PacketCreator.givePirateBuff(statups, sourceid, seconds); + mbuff = PacketCreator.giveForeignPirateBuff(applyto.getId(), sourceid, seconds, localstatups); } else if (isWkCharge()) { - mbuff = MaplePacketCreator.giveForeignWKChargeEffect(applyto.getId(), sourceid, localstatups); + mbuff = PacketCreator.giveForeignWKChargeEffect(applyto.getId(), sourceid, localstatups); } else if (isInfusion()) { - buff = MaplePacketCreator.givePirateBuff(localstatups, sourceid, seconds); - mbuff = MaplePacketCreator.giveForeignPirateBuff(applyto.getId(), sourceid, seconds, localstatups); + buff = PacketCreator.givePirateBuff(localstatups, sourceid, seconds); + mbuff = PacketCreator.giveForeignPirateBuff(applyto.getId(), sourceid, seconds, localstatups); } else if (isDs()) { List> dsstat = Collections.singletonList(new Pair<>(MapleBuffStat.DARKSIGHT, 0)); - mbuff = MaplePacketCreator.giveForeignBuff(applyto.getId(), dsstat); + mbuff = PacketCreator.giveForeignBuff(applyto.getId(), dsstat); } else if (isWw()) { List> dsstat = Collections.singletonList(new Pair<>(MapleBuffStat.WIND_WALK, 0)); - mbuff = MaplePacketCreator.giveForeignBuff(applyto.getId(), dsstat); + mbuff = PacketCreator.giveForeignBuff(applyto.getId(), dsstat); } else if (isCombo()) { Integer comboCount = applyto.getBuffedValue(MapleBuffStat.COMBO); if (comboCount == null) comboCount = 0; List> cbstat = Collections.singletonList(new Pair<>(MapleBuffStat.COMBO, comboCount)); - buff = MaplePacketCreator.giveBuff((skill ? sourceid : -sourceid), localDuration, cbstat); - mbuff = MaplePacketCreator.giveForeignBuff(applyto.getId(), cbstat); + buff = PacketCreator.giveBuff((skill ? sourceid : -sourceid), localDuration, cbstat); + mbuff = PacketCreator.giveForeignBuff(applyto.getId(), cbstat); } else if (isMonsterRiding()) { if (sourceid == Corsair.BATTLE_SHIP) {//hp if (applyto.getBattleshipHp() <= 0) { @@ -1297,23 +1297,23 @@ public class MapleStatEffect { localstatups = statups; } - buff = MaplePacketCreator.giveBuff(localsourceid, localDuration, localstatups); - mbuff = MaplePacketCreator.showMonsterRiding(applyto.getId(), givemount); + buff = PacketCreator.giveBuff(localsourceid, localDuration, localstatups); + mbuff = PacketCreator.showMonsterRiding(applyto.getId(), givemount); localDuration = duration; } else if (isShadowPartner()) { List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.SHADOWPARTNER, 0)); - mbuff = MaplePacketCreator.giveForeignBuff(applyto.getId(), stat); + mbuff = PacketCreator.giveForeignBuff(applyto.getId(), stat); } else if (isSoulArrow()) { List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.SOULARROW, 0)); - mbuff = MaplePacketCreator.giveForeignBuff(applyto.getId(), stat); + mbuff = PacketCreator.giveForeignBuff(applyto.getId(), stat); } else if (isEnrage()) { applyto.handleOrbconsume(); } else if (isMorph()) { List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.MORPH, getMorph(applyto))); - mbuff = MaplePacketCreator.giveForeignBuff(applyto.getId(), stat); + mbuff = PacketCreator.giveForeignBuff(applyto.getId(), stat); } else if (isAriantShield()) { List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.AURA, 1)); - mbuff = MaplePacketCreator.giveForeignBuff(applyto.getId(), stat); + mbuff = PacketCreator.giveForeignBuff(applyto.getId(), stat); } if (buff != null) { diff --git a/src/main/java/server/MapleStorage.java b/src/main/java/server/MapleStorage.java index ffb5aca046..02b940d2f6 100644 --- a/src/main/java/server/MapleStorage.java +++ b/src/main/java/server/MapleStorage.java @@ -32,7 +32,7 @@ import provider.MapleDataTool; import provider.wz.WZFiles; import tools.DatabaseConnection; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import java.sql.Connection; @@ -227,7 +227,7 @@ public class MapleStorage { public void sendStorage(MapleClient c, int npcId) { if (c.getPlayer().getLevel() < 15){ c.getPlayer().dropMessage(1, "You may only use the storage once you have reached level 15."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -248,7 +248,7 @@ public class MapleStorage { } currentNpcid = npcId; - c.announce(MaplePacketCreator.getStorage(npcId, slots, storageItems, meso)); + c.announce(PacketCreator.getStorage(npcId, slots, storageItems, meso)); } finally { lock.unlock(); } @@ -257,7 +257,7 @@ public class MapleStorage { public void sendStored(MapleClient c, MapleInventoryType type) { lock.lock(); try { - c.announce(MaplePacketCreator.storeStorage(slots, type, typeItems.get(type))); + c.announce(PacketCreator.storeStorage(slots, type, typeItems.get(type))); } finally { lock.unlock(); } @@ -266,7 +266,7 @@ public class MapleStorage { public void sendTakenOut(MapleClient c, MapleInventoryType type) { lock.lock(); try { - c.announce(MaplePacketCreator.takeOutStorage(slots, type, typeItems.get(type))); + c.announce(PacketCreator.takeOutStorage(slots, type, typeItems.get(type))); } finally { lock.unlock(); } @@ -283,7 +283,7 @@ public class MapleStorage { typeItems.put(type, new ArrayList<>(items)); } - c.announce(MaplePacketCreator.arrangeStorage(slots, items)); + c.announce(PacketCreator.arrangeStorage(slots, items)); } finally { lock.unlock(); } @@ -301,7 +301,7 @@ public class MapleStorage { } public void sendMeso(MapleClient c) { - c.announce(MaplePacketCreator.mesoStorage(slots, meso)); + c.announce(PacketCreator.mesoStorage(slots, meso)); } public int getStoreFee() { // thanks to GabrielSin diff --git a/src/main/java/server/MapleTrade.java b/src/main/java/server/MapleTrade.java index 7ad528c397..71ef61b8b4 100644 --- a/src/main/java/server/MapleTrade.java +++ b/src/main/java/server/MapleTrade.java @@ -21,27 +21,27 @@ */ package server; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; - -import config.YamlConfig; -import tools.LogHelper; -import tools.MaplePacketCreator; import client.MapleCharacter; import client.inventory.Item; import client.inventory.MapleInventory; import client.inventory.MapleInventoryType; import client.inventory.manipulator.MapleInventoryManipulator; import client.inventory.manipulator.MapleKarmaManipulator; +import config.YamlConfig; import constants.game.GameConstants; import net.server.coordinator.world.MapleInviteCoordinator; import net.server.coordinator.world.MapleInviteCoordinator.InviteResult; import net.server.coordinator.world.MapleInviteCoordinator.InviteType; import net.server.coordinator.world.MapleInviteCoordinator.MapleInviteResult; +import tools.LogHelper; +import tools.PacketCreator; import tools.Pair; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + /** * * @author Matze @@ -104,7 +104,7 @@ public class MapleTrade { private void lockTrade() { locked.set(true); - partner.getChr().getClient().announce(MaplePacketCreator.getTradeConfirmation()); + partner.getChr().getClient().announce(PacketCreator.getTradeConfirmation()); } private void fetchExchangedItems() { @@ -143,7 +143,7 @@ public class MapleTrade { exchangeItems.clear(); } - chr.getClient().announce(MaplePacketCreator.getTradeResult(number, result)); + chr.getClient().announce(PacketCreator.getTradeResult(number, result)); } private void cancel(byte result) { @@ -164,7 +164,7 @@ public class MapleTrade { exchangeItems.clear(); } - chr.getClient().announce(MaplePacketCreator.getTradeResult(number, result)); + chr.getClient().announce(PacketCreator.getTradeResult(number, result)); } private boolean isLocked() { @@ -186,9 +186,9 @@ public class MapleTrade { if (chr.getMeso() >= meso) { chr.gainMeso(-meso, false, true, false); this.meso += meso; - chr.getClient().announce(MaplePacketCreator.getTradeMesoSet((byte) 0, this.meso)); + chr.getClient().announce(PacketCreator.getTradeMesoSet((byte) 0, this.meso)); if (partner != null) { - partner.getChr().getClient().announce(MaplePacketCreator.getTradeMesoSet((byte) 1, this.meso)); + partner.getChr().getClient().announce(PacketCreator.getTradeMesoSet((byte) 1, this.meso)); } } else { } @@ -212,9 +212,9 @@ public class MapleTrade { } public void chat(String message) { - chr.getClient().announce(MaplePacketCreator.getTradeChat(chr, message, true)); + chr.getClient().announce(PacketCreator.getTradeChat(chr, message, true)); if (partner != null) { - partner.getChr().getClient().announce(MaplePacketCreator.getTradeChat(chr, message, false)); + partner.getChr().getClient().announce(PacketCreator.getTradeChat(chr, message, false)); } } @@ -334,7 +334,7 @@ public class MapleTrade { if (local.getChr().getLevel() < 15) { if (local.getChr().getMesosTraded() + local.exchangeMeso > 1000000) { cancelTrade(local.getChr(), TradeResult.NO_RESPONSE); - local.getChr().getClient().announce(MaplePacketCreator.serverNotice(1, "Characters under level 15 may not trade more than 1 million mesos per day.")); + local.getChr().getClient().announce(PacketCreator.serverNotice(1, "Characters under level 15 may not trade more than 1 million mesos per day.")); return; } else { local.getChr().addMesosTraded(local.exchangeMeso); @@ -342,7 +342,7 @@ public class MapleTrade { } else if (partner.getChr().getLevel() < 15) { if (partner.getChr().getMesosTraded() + partner.exchangeMeso > 1000000) { cancelTrade(partner.getChr(), TradeResult.NO_RESPONSE); - partner.getChr().getClient().announce(MaplePacketCreator.serverNotice(1, "Characters under level 15 may not trade more than 1 million mesos per day.")); + partner.getChr().getClient().announce(PacketCreator.serverNotice(1, "Characters under level 15 may not trade more than 1 million mesos per day.")); return; } else { partner.getChr().addMesosTraded(partner.exchangeMeso); @@ -463,8 +463,8 @@ public class MapleTrade { c2.getTrade().setPartner(c1.getTrade()); c1.getTrade().setPartner(c2.getTrade()); - c1.getClient().announce(MaplePacketCreator.getTradeStart(c1.getClient(), c1.getTrade(), (byte) 0)); - c2.getClient().announce(MaplePacketCreator.tradeInvite(c1)); + c1.getClient().announce(PacketCreator.getTradeStart(c1.getClient(), c1.getTrade(), (byte) 0)); + c2.getClient().announce(PacketCreator.tradeInvite(c1)); } else { c1.message("The other player is already trading with someone else."); cancelTrade(c1, TradeResult.NO_RESPONSE); @@ -482,8 +482,8 @@ public class MapleTrade { InviteResult res = inviteRes.result; if (res == InviteResult.ACCEPTED) { if (c1.getTrade() != null && c1.getTrade().getPartner() == c2.getTrade() && c2.getTrade() != null && c2.getTrade().getPartner() == c1.getTrade()) { - c2.getClient().announce(MaplePacketCreator.getTradePartnerAdd(c1)); - c1.getClient().announce(MaplePacketCreator.getTradeStart(c1.getClient(), c1.getTrade(), (byte) 1)); + c2.getClient().announce(PacketCreator.getTradePartnerAdd(c1)); + c1.getClient().announce(PacketCreator.getTradeStart(c1.getClient(), c1.getTrade(), (byte) 1)); c1.getTrade().setFullTrade(true); c2.getTrade().setFullTrade(true); } else { diff --git a/src/main/java/server/events/gm/MapleCoconut.java b/src/main/java/server/events/gm/MapleCoconut.java index c9ca7332bd..36cabad1d1 100644 --- a/src/main/java/server/events/gm/MapleCoconut.java +++ b/src/main/java/server/events/gm/MapleCoconut.java @@ -25,7 +25,7 @@ package server.events.gm; import client.MapleCharacter; import server.TimerManager; import server.maps.MapleMap; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.ArrayList; import java.util.LinkedList; @@ -55,9 +55,9 @@ public class MapleCoconut extends MapleEvent { for (int i = 0; i < 506; i++) { coconuts.add(new MapleCoconuts(i)); } - map.broadcastMessage(MaplePacketCreator.hitCoconut(true, 0, 0)); + map.broadcastMessage(PacketCreator.hitCoconut(true, 0, 0)); setCoconutsHittable(true); - map.broadcastMessage(MaplePacketCreator.getClock(300)); + map.broadcastMessage(PacketCreator.getClock(300)); TimerManager.getInstance().schedule(() -> { if (map.getId() == 109080000) { @@ -66,22 +66,22 @@ public class MapleCoconut extends MapleEvent { } else if (getMapleScore() > getStoryScore()) { for (MapleCharacter chr : map.getCharacters()) { if (chr.getTeam() == 0) { - chr.getClient().announce(MaplePacketCreator.showEffect("event/coconut/victory")); - chr.getClient().announce(MaplePacketCreator.playSound("Coconut/Victory")); + chr.getClient().announce(PacketCreator.showEffect("event/coconut/victory")); + chr.getClient().announce(PacketCreator.playSound("Coconut/Victory")); } else { - chr.getClient().announce(MaplePacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(MaplePacketCreator.playSound("Coconut/Failed")); + chr.getClient().announce(PacketCreator.showEffect("event/coconut/lose")); + chr.getClient().announce(PacketCreator.playSound("Coconut/Failed")); } } warpOut(); } else { for (MapleCharacter chr : map.getCharacters()) { if (chr.getTeam() == 1) { - chr.getClient().announce(MaplePacketCreator.showEffect("event/coconut/victory")); - chr.getClient().announce(MaplePacketCreator.playSound("Coconut/Victory")); + chr.getClient().announce(PacketCreator.showEffect("event/coconut/victory")); + chr.getClient().announce(PacketCreator.playSound("Coconut/Victory")); } else { - chr.getClient().announce(MaplePacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(MaplePacketCreator.playSound("Coconut/Failed")); + chr.getClient().announce(PacketCreator.showEffect("event/coconut/lose")); + chr.getClient().announce(PacketCreator.playSound("Coconut/Failed")); } } warpOut(); @@ -91,33 +91,33 @@ public class MapleCoconut extends MapleEvent { } public void bonusTime() { - map.broadcastMessage(MaplePacketCreator.getClock(120)); + map.broadcastMessage(PacketCreator.getClock(120)); TimerManager.getInstance().schedule(() -> { if (getMapleScore() == getStoryScore()) { for (MapleCharacter chr : map.getCharacters()) { - chr.getClient().announce(MaplePacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(MaplePacketCreator.playSound("Coconut/Failed")); + chr.getClient().announce(PacketCreator.showEffect("event/coconut/lose")); + chr.getClient().announce(PacketCreator.playSound("Coconut/Failed")); } warpOut(); } else if (getMapleScore() > getStoryScore()) { for (MapleCharacter chr : map.getCharacters()) { if (chr.getTeam() == 0) { - chr.getClient().announce(MaplePacketCreator.showEffect("event/coconut/victory")); - chr.getClient().announce(MaplePacketCreator.playSound("Coconut/Victory")); + chr.getClient().announce(PacketCreator.showEffect("event/coconut/victory")); + chr.getClient().announce(PacketCreator.playSound("Coconut/Victory")); } else { - chr.getClient().announce(MaplePacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(MaplePacketCreator.playSound("Coconut/Failed")); + chr.getClient().announce(PacketCreator.showEffect("event/coconut/lose")); + chr.getClient().announce(PacketCreator.playSound("Coconut/Failed")); } } warpOut(); } else { for (MapleCharacter chr : map.getCharacters()) { if (chr.getTeam() == 1) { - chr.getClient().announce(MaplePacketCreator.showEffect("event/coconut/victory")); - chr.getClient().announce(MaplePacketCreator.playSound("Coconut/Victory")); + chr.getClient().announce(PacketCreator.showEffect("event/coconut/victory")); + chr.getClient().announce(PacketCreator.playSound("Coconut/Victory")); } else { - chr.getClient().announce(MaplePacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(MaplePacketCreator.playSound("Coconut/Failed")); + chr.getClient().announce(PacketCreator.showEffect("event/coconut/lose")); + chr.getClient().announce(PacketCreator.playSound("Coconut/Failed")); } } warpOut(); diff --git a/src/main/java/server/events/gm/MapleFitness.java b/src/main/java/server/events/gm/MapleFitness.java index 4006a30eba..54eaa554a1 100644 --- a/src/main/java/server/events/gm/MapleFitness.java +++ b/src/main/java/server/events/gm/MapleFitness.java @@ -24,7 +24,7 @@ package server.events.gm; import client.MapleCharacter; import server.TimerManager; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.concurrent.ScheduledFuture; @@ -49,13 +49,13 @@ public class MapleFitness { public void startFitness() { chr.getMap().startEvent(); - chr.getClient().announce(MaplePacketCreator.getClock(900)); + chr.getClient().announce(PacketCreator.getClock(900)); this.timeStarted = System.currentTimeMillis(); this.time = 900000; checkAndMessage(); chr.getMap().getPortal("join00").setPortalStatus(true); - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "The portal has now opened. Press the up arrow key at the portal to enter.")); + chr.getClient().announce(PacketCreator.serverNotice(0, "The portal has now opened. Press the up arrow key at the portal to enter.")); } public boolean isTimerStarted() { @@ -84,29 +84,29 @@ public class MapleFitness { } if (chr.getMap().getId() >= 109040000 && chr.getMap().getId() <= 109040004) { if (getTimeLeft() > 9000 && getTimeLeft() < 11000) { - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "You have 10 sec left. Those of you unable to beat the game, we hope you beat it next time! Great job everyone!! See you later~")); + chr.getClient().announce(PacketCreator.serverNotice(0, "You have 10 sec left. Those of you unable to beat the game, we hope you beat it next time! Great job everyone!! See you later~")); } else if (getTimeLeft() > 99000 && getTimeLeft() < 101000) { - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "Alright, you don't have much time remaining. Please hurry up a little!")); + chr.getClient().announce(PacketCreator.serverNotice(0, "Alright, you don't have much time remaining. Please hurry up a little!")); } else if (getTimeLeft() > 239000 && getTimeLeft() < 241000) { - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "The 4th stage is the last one for [The Maple Physical Fitness Test]. Please don't give up at the last minute and try your best. The reward is waiting for you at the very top!")); + chr.getClient().announce(PacketCreator.serverNotice(0, "The 4th stage is the last one for [The Maple Physical Fitness Test]. Please don't give up at the last minute and try your best. The reward is waiting for you at the very top!")); } else if (getTimeLeft() > 299000 && getTimeLeft() < 301000) { - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "The 3rd stage offers traps where you may see them, but you won't be able to step on them. Please be careful of them as you make your way up.")); + chr.getClient().announce(PacketCreator.serverNotice(0, "The 3rd stage offers traps where you may see them, but you won't be able to step on them. Please be careful of them as you make your way up.")); } else if (getTimeLeft() > 359000 && getTimeLeft() < 361000) { - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "For those who have heavy lags, please make sure to move slowly to avoid falling all the way down because of lags.")); + chr.getClient().announce(PacketCreator.serverNotice(0, "For those who have heavy lags, please make sure to move slowly to avoid falling all the way down because of lags.")); } else if (getTimeLeft() > 499000 && getTimeLeft() < 501000) { - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "Please remember that if you die during the event, you'll be eliminated from the game. If you're running out of HP, either take a potion or recover HP first before moving on.")); + chr.getClient().announce(PacketCreator.serverNotice(0, "Please remember that if you die during the event, you'll be eliminated from the game. If you're running out of HP, either take a potion or recover HP first before moving on.")); } else if (getTimeLeft() > 599000 && getTimeLeft() < 601000) { - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "The most important thing you'll need to know to avoid the bananas thrown by the monkeys is *Timing* Timing is everything in this!")); + chr.getClient().announce(PacketCreator.serverNotice(0, "The most important thing you'll need to know to avoid the bananas thrown by the monkeys is *Timing* Timing is everything in this!")); } else if (getTimeLeft() > 659000 && getTimeLeft() < 661000) { - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "The 2nd stage offers monkeys throwing bananas. Please make sure to avoid them by moving along at just the right timing.")); + chr.getClient().announce(PacketCreator.serverNotice(0, "The 2nd stage offers monkeys throwing bananas. Please make sure to avoid them by moving along at just the right timing.")); } else if (getTimeLeft() > 699000 && getTimeLeft() < 701000) { - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "Please remember that if you die during the event, you'll be eliminated from the game. You still have plenty of time left, so either take a potion or recover HP first before moving on.")); + chr.getClient().announce(PacketCreator.serverNotice(0, "Please remember that if you die during the event, you'll be eliminated from the game. You still have plenty of time left, so either take a potion or recover HP first before moving on.")); } else if (getTimeLeft() > 779000 && getTimeLeft() < 781000) { - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "Everyone that clears [The Maple Physical Fitness Test] on time will be given an item, regardless of the order of finish, so just relax, take your time, and clear the 4 stages.")); + chr.getClient().announce(PacketCreator.serverNotice(0, "Everyone that clears [The Maple Physical Fitness Test] on time will be given an item, regardless of the order of finish, so just relax, take your time, and clear the 4 stages.")); } else if (getTimeLeft() > 839000 && getTimeLeft() < 841000) { - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "There may be a heavy lag due to many users at stage 1 all at once. It won't be difficult, so please make sure not to fall down because of heavy lag.")); + chr.getClient().announce(PacketCreator.serverNotice(0, "There may be a heavy lag due to many users at stage 1 all at once. It won't be difficult, so please make sure not to fall down because of heavy lag.")); } else if (getTimeLeft() > 869000 && getTimeLeft() < 871000) { - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "[MapleStory Physical Fitness Test] consists of 4 stages, and if you happen to die during the game, you'll be eliminated from the game, so please be careful of that.")); + chr.getClient().announce(PacketCreator.serverNotice(0, "[MapleStory Physical Fitness Test] consists of 4 stages, and if you happen to die during the game, you'll be eliminated from the game, so please be careful of that.")); } } else { resetTimes(); diff --git a/src/main/java/server/events/gm/MapleOla.java b/src/main/java/server/events/gm/MapleOla.java index 820c618ad6..fa51f0e629 100644 --- a/src/main/java/server/events/gm/MapleOla.java +++ b/src/main/java/server/events/gm/MapleOla.java @@ -23,7 +23,7 @@ package server.events.gm; import client.MapleCharacter; import server.TimerManager; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.concurrent.ScheduledFuture; @@ -48,12 +48,12 @@ public class MapleOla { public void startOla() { // TODO: Messages chr.getMap().startEvent(); - chr.getClient().announce(MaplePacketCreator.getClock(360)); + chr.getClient().announce(PacketCreator.getClock(360)); this.timeStarted = System.currentTimeMillis(); this.time = 360000; chr.getMap().getPortal("join00").setPortalStatus(true); - chr.getClient().announce(MaplePacketCreator.serverNotice(0, "The portal has now opened. Press the up arrow key at the portal to enter.")); + chr.getClient().announce(PacketCreator.serverNotice(0, "The portal has now opened. Press the up arrow key at the portal to enter.")); } public boolean isTimerStarted() { diff --git a/src/main/java/server/events/gm/MapleOxQuiz.java b/src/main/java/server/events/gm/MapleOxQuiz.java index 4849d01eff..03aa6143b7 100644 --- a/src/main/java/server/events/gm/MapleOxQuiz.java +++ b/src/main/java/server/events/gm/MapleOxQuiz.java @@ -28,7 +28,7 @@ import provider.MapleDataTool; import provider.wz.WZFiles; import server.TimerManager; import server.maps.MapleMap; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; import java.util.ArrayList; @@ -69,9 +69,9 @@ public final class MapleOxQuiz { } } final int number = gm; - map.broadcastMessage(MaplePacketCreator.showOXQuiz(round, question, true)); + map.broadcastMessage(PacketCreator.showOXQuiz(round, question, true)); TimerManager.getInstance().schedule(() -> { - map.broadcastMessage(MaplePacketCreator.showOXQuiz(round, question, true)); + map.broadcastMessage(PacketCreator.showOXQuiz(round, question, true)); List chars = new ArrayList<>(map.getCharacters()); for (MapleCharacter chr : chars) { @@ -92,7 +92,7 @@ public final class MapleOxQuiz { } //send question if (map.getCharacters().size() - number <= 2) { - map.broadcastMessage(MaplePacketCreator.serverNotice(6, "The event has ended")); + map.broadcastMessage(PacketCreator.serverNotice(6, "The event has ended")); map.getPortal("join00").setPortalStatus(true); map.setOx(null); map.setOxQuiz(false); diff --git a/src/main/java/server/events/gm/MapleSnowball.java b/src/main/java/server/events/gm/MapleSnowball.java index ab69320f70..528e876775 100644 --- a/src/main/java/server/events/gm/MapleSnowball.java +++ b/src/main/java/server/events/gm/MapleSnowball.java @@ -24,7 +24,7 @@ package server.events.gm; import client.MapleCharacter; import server.TimerManager; import server.maps.MapleMap; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.LinkedList; import java.util.List; @@ -58,8 +58,8 @@ public class MapleSnowball { for (MapleCharacter chr : characters) { if (chr != null) { - chr.announce(MaplePacketCreator.rollSnowBall(false, 1, map.getSnowball(0), map.getSnowball(1))); - chr.announce(MaplePacketCreator.getClock(600)); + chr.announce(PacketCreator.rollSnowBall(false, 1, map.getSnowball(0), map.getSnowball(1))); + chr.announce(PacketCreator.getClock(600)); } } hittable = true; @@ -67,13 +67,13 @@ public class MapleSnowball { if (map.getSnowball(team).getPosition() > map.getSnowball(team == 0 ? 1 : 0).getPosition()) { for (MapleCharacter chr : characters) { if (chr != null) - chr.announce(MaplePacketCreator.rollSnowBall(false, 3, map.getSnowball(0), map.getSnowball(0))); + chr.announce(PacketCreator.rollSnowBall(false, 3, map.getSnowball(0), map.getSnowball(0))); } winner = true; } else if (map.getSnowball(team == 0 ? 1 : 0).getPosition() > map.getSnowball(team).getPosition()) { for (MapleCharacter chr : characters) { if (chr != null) - chr.announce(MaplePacketCreator.rollSnowBall(false, 4, map.getSnowball(0), map.getSnowball(0))); + chr.announce(PacketCreator.rollSnowBall(false, 4, map.getSnowball(0), map.getSnowball(0))); } winner = true; } //Else @@ -116,7 +116,7 @@ public class MapleSnowball { }, 10000); } else this.snowmanhp -= damage; - map.broadcastMessage(MaplePacketCreator.rollSnowBall(false, 1, map.getSnowball(0), map.getSnowball(1))); + map.broadcastMessage(PacketCreator.rollSnowBall(false, 1, map.getSnowball(0), map.getSnowball(1))); } if (this.hits == 0) { @@ -129,16 +129,16 @@ public class MapleSnowball { map.getSnowball(team == 0 ? 1 : 0).message(3); this.hits = 3; - map.broadcastMessage(MaplePacketCreator.rollSnowBall(false, 0, map.getSnowball(0), map.getSnowball(1))); - map.broadcastMessage(MaplePacketCreator.rollSnowBall(false, 1, map.getSnowball(0), map.getSnowball(1))); + map.broadcastMessage(PacketCreator.rollSnowBall(false, 0, map.getSnowball(0), map.getSnowball(1))); + map.broadcastMessage(PacketCreator.rollSnowBall(false, 1, map.getSnowball(0), map.getSnowball(1))); } - map.broadcastMessage(MaplePacketCreator.hitSnowBall(what, damage)); + map.broadcastMessage(PacketCreator.hitSnowBall(what, damage)); } public void message(int message) { for (MapleCharacter chr : characters) { if (chr != null) - chr.announce(MaplePacketCreator.snowballMessage(team, message)); + chr.announce(PacketCreator.snowballMessage(team, message)); } } diff --git a/src/main/java/server/expeditions/MapleExpedition.java b/src/main/java/server/expeditions/MapleExpedition.java index 32262909e6..1cb82ec854 100644 --- a/src/main/java/server/expeditions/MapleExpedition.java +++ b/src/main/java/server/expeditions/MapleExpedition.java @@ -33,7 +33,7 @@ import server.TimerManager; import server.life.MapleMonster; import server.maps.MapleMap; import tools.LogHelper; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.text.SimpleDateFormat; import java.util.*; @@ -115,10 +115,10 @@ public class MapleExpedition { public void beginRegistration() { registering = true; - leader.announce(MaplePacketCreator.getClock(type.getRegistrationTime() * 60)); + leader.announce(PacketCreator.getClock(type.getRegistrationTime() * 60)); if (!silent) { - startMap.broadcastMessage(leader, MaplePacketCreator.serverNotice(6, "[Expedition] " + leader.getName() + " has been declared the expedition captain. Please register for the expedition."), false); - leader.announce(MaplePacketCreator.serverNotice(6, "[Expedition] You have become the expedition captain. Gather enough people for your team then talk to the NPC to start.")); + startMap.broadcastMessage(leader, PacketCreator.serverNotice(6, "[Expedition] " + leader.getName() + " has been declared the expedition captain. Please register for the expedition."), false); + leader.announce(PacketCreator.serverNotice(6, "[Expedition] You have become the expedition captain. Gather enough people for your team then talk to the NPC to start.")); } scheduleRegistrationEnd(); } @@ -130,7 +130,7 @@ public class MapleExpedition { schedule = TimerManager.getInstance().schedule(() -> { if (registering){ exped.removeChannelExpedition(startMap.getChannelServer()); - if (!silent) startMap.broadcastMessage(MaplePacketCreator.serverNotice(6, "[Expedition] The time limit has been reached. Expedition has been disbanded.")); + if (!silent) startMap.broadcastMessage(PacketCreator.serverNotice(6, "[Expedition] The time limit has been reached. Expedition has been disbanded.")); dispose(false); } @@ -138,7 +138,7 @@ dispose(false); } public void dispose(boolean log){ - broadcastExped(MaplePacketCreator.removeClock()); + broadcastExped(PacketCreator.removeClock()); if (schedule != null){ schedule.cancel(false); @@ -155,10 +155,10 @@ dispose(false); public void start(){ finishRegistration(); registerExpeditionAttempt(); - broadcastExped(MaplePacketCreator.removeClock()); - if (!silent) broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] The expedition has started! Good luck, brave heroes!")); + broadcastExped(PacketCreator.removeClock()); + if (!silent) broadcastExped(PacketCreator.serverNotice(6, "[Expedition] The expedition has started! Good luck, brave heroes!")); startTime = System.currentTimeMillis(); - Server.getInstance().broadcastGMMessage(startMap.getWorld(), MaplePacketCreator.serverNotice(6, "[Expedition] " + type.toString() + " Expedition started with leader: " + leader.getName())); + Server.getInstance().broadcastGMMessage(startMap.getWorld(), PacketCreator.serverNotice(6, "[Expedition] " + type.toString() + " Expedition started with leader: " + leader.getName())); } public String addMember(MapleCharacter player) { @@ -178,8 +178,8 @@ dispose(false); } members.put(player.getId(), player.getName()); - player.announce(MaplePacketCreator.getClock((int)(startTime - System.currentTimeMillis()) / 1000)); - if (!silent) broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] " + player.getName() + " has joined the expedition!")); + player.announce(PacketCreator.getClock((int)(startTime - System.currentTimeMillis()) / 1000)); + if (!silent) broadcastExped(PacketCreator.serverNotice(6, "[Expedition] " + player.getName() + " has joined the expedition!")); return "You have registered for the expedition successfully!"; } @@ -195,8 +195,8 @@ dispose(false); } members.put(player.getId(), player.getName()); - player.announce(MaplePacketCreator.getClock((int) (startTime - System.currentTimeMillis()) / 1000)); - if (!silent) broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] " + player.getName() + " has joined the expedition!")); + player.announce(PacketCreator.getClock((int) (startTime - System.currentTimeMillis()) / 1000)); + if (!silent) broadcastExped(PacketCreator.serverNotice(6, "[Expedition] " + player.getName() + " has joined the expedition!")); return 0; //"You have registered for the expedition successfully!"; } @@ -216,9 +216,9 @@ dispose(false); public boolean removeMember(MapleCharacter chr) { if(members.remove(chr.getId()) != null) { - chr.announce(MaplePacketCreator.removeClock()); + chr.announce(PacketCreator.removeClock()); if (!silent) { - broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] " + chr.getName() + " has left the expedition.")); + broadcastExped(PacketCreator.serverNotice(6, "[Expedition] " + chr.getName() + " has left the expedition.")); chr.dropMessage(6, "[Expedition] You have left this expedition."); } return true; @@ -233,11 +233,11 @@ dispose(false); banned.add(cid); members.remove(cid); - if (!silent) broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] " + chr.getValue() + " has been banned from the expedition.")); + if (!silent) broadcastExped(PacketCreator.serverNotice(6, "[Expedition] " + chr.getValue() + " has been banned from the expedition.")); MapleCharacter player = startMap.getWorldServer().getPlayerStorage().getCharacterById(cid); if (player != null && player.isLoggedinWorld()) { - player.announce(MaplePacketCreator.removeClock()); + player.announce(PacketCreator.removeClock()); if (!silent) player.dropMessage(6, "[Expedition] You have been banned from this expedition."); if (MapleExpeditionType.ARIANT.equals(type) || MapleExpeditionType.ARIANT1.equals(type) || MapleExpeditionType.ARIANT2.equals(type)) { player.changeMap(980010000); diff --git a/src/main/java/server/life/MapleMonster.java b/src/main/java/server/life/MapleMonster.java index 05b695e60a..728ee1cf76 100644 --- a/src/main/java/server/life/MapleMonster.java +++ b/src/main/java/server/life/MapleMonster.java @@ -48,7 +48,7 @@ import server.maps.MapleMap; import server.maps.MapleMapObjectType; import server.maps.MapleSummon; import tools.IntervalBuilder; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.Randomizer; @@ -365,7 +365,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { from.getMap().broadcastBossHpMessage(this, this.hashCode(), makeBossHPBarPacket(), getPosition()); } else if (!isBoss()) { int remainingHP = (int) Math.max(1, hp.get() * 100f / getMaxHp()); - byte[] packet = MaplePacketCreator.showMonsterHP(getObjectId(), remainingHP); + byte[] packet = PacketCreator.showMonsterHP(getObjectId(), remainingHP); if (from.getParty() != null) { for (MaplePartyCharacter mpc : from.getParty().getMembers()) { MapleCharacter member = from.getMap().getCharacterById(mpc.getId()); // god bless @@ -471,7 +471,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { setMp(mp2Heal); if (hp > 0) { - getMap().broadcastMessage(MaplePacketCreator.healMonster(getObjectId(), hp, getHp(), getMaxHp())); + getMap().broadcastMessage(PacketCreator.healMonster(getObjectId(), hp, getHp(), getMaxHp())); } maxHpPlusHeal.addAndGet(hpHealed); @@ -758,13 +758,13 @@ public class MapleMonster extends AbstractLoadedMapleLife { if (toSpawn != null) { final MapleMap reviveMap = map; if (toSpawn.contains(9300216) && reviveMap.getId() > 925000000 && reviveMap.getId() < 926000000) { - reviveMap.broadcastMessage(MaplePacketCreator.playSound("Dojang/clear")); - reviveMap.broadcastMessage(MaplePacketCreator.showEffect("dojang/end/clear")); + reviveMap.broadcastMessage(PacketCreator.playSound("Dojang/clear")); + reviveMap.broadcastMessage(PacketCreator.showEffect("dojang/end/clear")); } Pair timeMob = reviveMap.getTimeMob(); if (timeMob != null) { if (toSpawn.contains(timeMob.getLeft())) { - reviveMap.broadcastMessage(MaplePacketCreator.serverNotice(6, timeMob.getRight())); + reviveMap.broadcastMessage(PacketCreator.serverNotice(6, timeMob.getRight())); } } @@ -1006,7 +1006,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { } public byte[] makeBossHPBarPacket() { - return MaplePacketCreator.showBossHP(getId(), getHp(), getMaxHp(), getTagColor(), getTagBgColor()); + return PacketCreator.showBossHP(getId(), getHp(), getMaxHp(), getTagColor(), getTagBgColor()); } public boolean hasBossHPBar() { @@ -1019,9 +1019,9 @@ public class MapleMonster extends AbstractLoadedMapleLife { return; } if (fake) { - client.announce(MaplePacketCreator.spawnFakeMonster(this, 0)); + client.announce(PacketCreator.spawnFakeMonster(this, 0)); } else { - client.announce(MaplePacketCreator.spawnMonster(this, false)); + client.announce(PacketCreator.spawnMonster(this, false)); } if (hasBossHPBar()) { @@ -1031,8 +1031,8 @@ public class MapleMonster extends AbstractLoadedMapleLife { @Override public void sendDestroyData(MapleClient client) { - client.announce(MaplePacketCreator.killMonster(getObjectId(), false)); - client.announce(MaplePacketCreator.killMonster(getObjectId(), true)); + client.announce(PacketCreator.killMonster(getObjectId(), false)); + client.announce(PacketCreator.killMonster(getObjectId(), true)); } @Override @@ -1097,7 +1097,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { private int broadcastStatusEffect(final MonsterStatusEffect status) { int animationTime = status.getSkill().getAnimationTime(); - byte[] packet = MaplePacketCreator.applyMonsterStatus(getObjectId(), status, null); + byte[] packet = PacketCreator.applyMonsterStatus(getObjectId(), status, null); broadcastMonsterStatusMessage(packet); return animationTime; @@ -1172,7 +1172,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { final Runnable cancelTask = () -> { if (isAlive()) { - byte[] packet = MaplePacketCreator.cancelMonsterStatus(getObjectId(), status.getStati()); + byte[] packet = PacketCreator.cancelMonsterStatus(getObjectId(), status.getStati()); broadcastMonsterStatusMessage(packet); } @@ -1284,7 +1284,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { public void applyMonsterBuff(final Map stats, final int x, int skillId, long duration, MobSkill skill, final List reflection) { final Runnable cancelTask = () -> { if (isAlive()) { - byte[] packet = MaplePacketCreator.cancelMonsterStatus(getObjectId(), stats); + byte[] packet = PacketCreator.cancelMonsterStatus(getObjectId(), stats); broadcastMonsterStatusMessage(packet); statiLock.lock(); @@ -1298,7 +1298,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { } }; final MonsterStatusEffect effect = new MonsterStatusEffect(stats, null, skill, true); - byte[] packet = MaplePacketCreator.applyMonsterStatus(getObjectId(), effect, reflection); + byte[] packet = PacketCreator.applyMonsterStatus(getObjectId(), effect, reflection); broadcastMonsterStatusMessage(packet); statiLock.lock(); @@ -1323,7 +1323,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { aggroRemoveController(); setPosition(newPoint); - map.broadcastMessage(MaplePacketCreator.moveMonster(this.getObjectId(), false, -1, 0, 0, 0, this.getPosition(), this.getIdleMovement(), getIdleMovementDataLength())); + map.broadcastMessage(PacketCreator.moveMonster(this.getObjectId(), false, -1, 0, 0, 0, this.getPosition(), this.getIdleMovement(), getIdleMovementDataLength())); map.moveMonster(this, this.getPosition()); aggroUpdateController(); @@ -1339,7 +1339,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { } if (oldEffect != null) { - byte[] packet = MaplePacketCreator.cancelMonsterStatus(getObjectId(), oldEffect.getStati()); + byte[] packet = PacketCreator.cancelMonsterStatus(getObjectId(), oldEffect.getStati()); broadcastMonsterStatusMessage(packet); } } @@ -1639,10 +1639,10 @@ public class MapleMonster extends AbstractLoadedMapleLife { } if (type == 1) { - map.broadcastMessage(MaplePacketCreator.damageMonster(getObjectId(), damage), getPosition()); + map.broadcastMessage(PacketCreator.damageMonster(getObjectId(), damage), getPosition()); } else if (type == 2) { if(damage < dealDamage) { // ninja ambush (type 2) is already displaying DOT to the caster - map.broadcastMessage(MaplePacketCreator.damageMonster(getObjectId(), damage), getPosition()); + map.broadcastMessage(PacketCreator.damageMonster(getObjectId(), damage), getPosition()); } } } @@ -1884,7 +1884,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { } if (chrController != null) { // this can/should only happen when a hidden gm attacks the monster - if (!this.isFake()) chrController.announce(MaplePacketCreator.stopControllingMonster(this.getObjectId())); + if (!this.isFake()) chrController.announce(PacketCreator.stopControllingMonster(this.getObjectId())); chrController.stopControllingMonster(this); } @@ -2088,7 +2088,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { Maybe Nexon intended to interchange controllers at every attack... else if (chrController != null) { - chrController.announce(MaplePacketCreator.stopControllingMonster(this.getObjectId())); + chrController.announce(PacketCreator.stopControllingMonster(this.getObjectId())); aggroMonsterControl(chrController.getClient(), this, true); } */ @@ -2099,7 +2099,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { } private static void aggroMonsterControl(MapleClient c, MapleMonster mob, boolean immediateAggro) { - c.announce(MaplePacketCreator.controlMonster(mob, false, immediateAggro)); + c.announce(PacketCreator.controlMonster(mob, false, immediateAggro)); } private void aggroRefreshPuppetVisibility(MapleCharacter chrController, MapleSummon puppet) { @@ -2113,15 +2113,15 @@ public class MapleMonster extends AbstractLoadedMapleLife { } for (MapleMonster mob : puppetControlled) { - chrController.announce(MaplePacketCreator.stopControllingMonster(mob.getObjectId())); + chrController.announce(PacketCreator.stopControllingMonster(mob.getObjectId())); } - chrController.announce(MaplePacketCreator.removeSummon(puppet, false)); + chrController.announce(PacketCreator.removeSummon(puppet, false)); MapleClient c = chrController.getClient(); for (MapleMonster mob : puppetControlled) { // thanks BHB for noticing puppets disrupting mobstatuses for bowmans aggroMonsterControl(c, mob, mob.isControllerKnowsAboutAggro()); } - chrController.announce(MaplePacketCreator.spawnSummon(puppet, false)); + chrController.announce(PacketCreator.spawnSummon(puppet, false)); } public void aggroUpdatePuppetVisibility() { @@ -2151,7 +2151,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { if (controllerHasPuppet) { controllerHasPuppet = false; - chrController.announce(MaplePacketCreator.stopControllingMonster(MapleMonster.this.getObjectId())); + chrController.announce(PacketCreator.stopControllingMonster(MapleMonster.this.getObjectId())); aggroMonsterControl(chrController.getClient(), MapleMonster.this, MapleMonster.this.isControllerHasAggro()); } } finally { diff --git a/src/main/java/server/life/MapleNPC.java b/src/main/java/server/life/MapleNPC.java index a86fad4459..ef343786b4 100644 --- a/src/main/java/server/life/MapleNPC.java +++ b/src/main/java/server/life/MapleNPC.java @@ -24,7 +24,7 @@ package server.life; import client.MapleClient; import server.MapleShopFactory; import server.maps.MapleMapObjectType; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class MapleNPC extends AbstractLoadedMapleLife { private MapleNPCStats stats; @@ -44,14 +44,14 @@ public class MapleNPC extends AbstractLoadedMapleLife { @Override public void sendSpawnData(MapleClient client) { - client.announce(MaplePacketCreator.spawnNPC(this)); - client.announce(MaplePacketCreator.spawnNPCRequestController(this, true)); + client.announce(PacketCreator.spawnNPC(this)); + client.announce(PacketCreator.spawnNPCRequestController(this, true)); } @Override public void sendDestroyData(MapleClient client) { - client.announce(MaplePacketCreator.removeNPCController(getObjectId())); - client.announce(MaplePacketCreator.removeNPC(getObjectId())); + client.announce(PacketCreator.removeNPCController(getObjectId())); + client.announce(PacketCreator.removeNPC(getObjectId())); } @Override diff --git a/src/main/java/server/life/MaplePlayerNPC.java b/src/main/java/server/life/MaplePlayerNPC.java index 8c5c8d27b5..ddd3b852db 100644 --- a/src/main/java/server/life/MaplePlayerNPC.java +++ b/src/main/java/server/life/MaplePlayerNPC.java @@ -37,7 +37,7 @@ import server.maps.MapleMap; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import java.awt.*; @@ -200,14 +200,14 @@ public class MaplePlayerNPC extends AbstractMapleMapObject { @Override public void sendSpawnData(MapleClient client) { - client.announce(MaplePacketCreator.spawnPlayerNPC(this)); - client.announce(MaplePacketCreator.getPlayerNPC(this)); + client.announce(PacketCreator.spawnPlayerNPC(this)); + client.announce(PacketCreator.getPlayerNPC(this)); } @Override public void sendDestroyData(MapleClient client) { - client.announce(MaplePacketCreator.removeNPCController(this.getObjectId())); - client.announce(MaplePacketCreator.removePlayerNPC(this.getObjectId())); + client.announce(PacketCreator.removeNPCController(this.getObjectId())); + client.announce(PacketCreator.removePlayerNPC(this.getObjectId())); } private static void getRunningMetadata() { @@ -540,8 +540,8 @@ public class MaplePlayerNPC extends AbstractMapleMapObject { MapleMap m = channel.getMapFactory().getMap(mapid); m.addPlayerNPCMapObject(pn); - m.broadcastMessage(MaplePacketCreator.spawnPlayerNPC(pn)); - m.broadcastMessage(MaplePacketCreator.getPlayerNPC(pn)); + m.broadcastMessage(PacketCreator.spawnPlayerNPC(pn)); + m.broadcastMessage(PacketCreator.getPlayerNPC(pn)); } return true; @@ -577,8 +577,8 @@ public class MaplePlayerNPC extends AbstractMapleMapObject { MapleMap m = channel.getMapFactory().getMap(mapid); m.removeMapObject(pn); - m.broadcastMessage(MaplePacketCreator.removeNPCController(pn.getObjectId())); - m.broadcastMessage(MaplePacketCreator.removePlayerNPC(pn.getObjectId())); + m.broadcastMessage(PacketCreator.removeNPCController(pn.getObjectId())); + m.broadcastMessage(PacketCreator.removePlayerNPC(pn.getObjectId())); } } } @@ -615,8 +615,8 @@ public class MaplePlayerNPC extends AbstractMapleMapObject { for (MapleMapObject pnpcObj : m.getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.PLAYER_NPC))) { MaplePlayerNPC pn = (MaplePlayerNPC) pnpcObj; m.removeMapObject(pnpcObj); - m.broadcastMessage(MaplePacketCreator.removeNPCController(pn.getObjectId())); - m.broadcastMessage(MaplePacketCreator.removePlayerNPC(pn.getObjectId())); + m.broadcastMessage(PacketCreator.removeNPCController(pn.getObjectId())); + m.broadcastMessage(PacketCreator.removePlayerNPC(pn.getObjectId())); } } } diff --git a/src/main/java/server/life/positioner/MaplePlayerNPCPodium.java b/src/main/java/server/life/positioner/MaplePlayerNPCPodium.java index 3ac2eae064..7aa3e9c2ac 100644 --- a/src/main/java/server/life/positioner/MaplePlayerNPCPodium.java +++ b/src/main/java/server/life/positioner/MaplePlayerNPCPodium.java @@ -26,7 +26,7 @@ import server.life.MaplePlayerNPC; import server.maps.MapleMap; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.awt.*; import java.util.ArrayList; @@ -100,8 +100,8 @@ public class MaplePlayerNPCPodium { for(MaplePlayerNPC pn : playerNpcs) { m.removeMapObject(pn); - m.broadcastMessage(MaplePacketCreator.removeNPCController(pn.getObjectId())); - m.broadcastMessage(MaplePacketCreator.removePlayerNPC(pn.getObjectId())); + m.broadcastMessage(PacketCreator.removeNPCController(pn.getObjectId())); + m.broadcastMessage(PacketCreator.removePlayerNPC(pn.getObjectId())); } } @@ -112,8 +112,8 @@ public class MaplePlayerNPCPodium { for(MaplePlayerNPC pn : playerNpcs) { m.addPlayerNPCMapObject(pn); - m.broadcastMessage(MaplePacketCreator.spawnPlayerNPC(pn)); - m.broadcastMessage(MaplePacketCreator.getPlayerNPC(pn)); + m.broadcastMessage(PacketCreator.spawnPlayerNPC(pn)); + m.broadcastMessage(PacketCreator.getPlayerNPC(pn)); } } diff --git a/src/main/java/server/life/positioner/MaplePlayerNPCPositioner.java b/src/main/java/server/life/positioner/MaplePlayerNPCPositioner.java index 15b70471d0..5b153f671e 100644 --- a/src/main/java/server/life/positioner/MaplePlayerNPCPositioner.java +++ b/src/main/java/server/life/positioner/MaplePlayerNPCPositioner.java @@ -26,7 +26,7 @@ import server.life.MaplePlayerNPC; import server.maps.MapleMap; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.awt.*; import java.util.ArrayList; @@ -152,8 +152,8 @@ public class MaplePlayerNPCPositioner { for(MaplePlayerNPC pn : playerNpcs) { m.removeMapObject(pn); - m.broadcastMessage(MaplePacketCreator.removeNPCController(pn.getObjectId())); - m.broadcastMessage(MaplePacketCreator.removePlayerNPC(pn.getObjectId())); + m.broadcastMessage(PacketCreator.removeNPCController(pn.getObjectId())); + m.broadcastMessage(PacketCreator.removePlayerNPC(pn.getObjectId())); } } @@ -164,8 +164,8 @@ public class MaplePlayerNPCPositioner { for(MaplePlayerNPC pn : playerNpcs) { m.addPlayerNPCMapObject(pn); - m.broadcastMessage(MaplePacketCreator.spawnPlayerNPC(pn)); - m.broadcastMessage(MaplePacketCreator.getPlayerNPC(pn)); + m.broadcastMessage(PacketCreator.spawnPlayerNPC(pn)); + m.broadcastMessage(PacketCreator.getPlayerNPC(pn)); } } diff --git a/src/main/java/server/maps/MapleDoorObject.java b/src/main/java/server/maps/MapleDoorObject.java index 834bebd4d0..880094dd48 100644 --- a/src/main/java/server/maps/MapleDoorObject.java +++ b/src/main/java/server/maps/MapleDoorObject.java @@ -19,7 +19,6 @@ */ package server.maps; -import java.awt.Point; import client.MapleCharacter; import client.MapleClient; import net.server.audit.locks.MonitoredLockType; @@ -29,7 +28,9 @@ import net.server.audit.locks.MonitoredWriteLock; import net.server.audit.locks.factory.MonitoredReadLockFactory; import net.server.audit.locks.factory.MonitoredWriteLockFactory; import net.server.world.MapleParty; -import tools.MaplePacketCreator; +import tools.PacketCreator; + +import java.awt.*; /** * @@ -90,7 +91,7 @@ public class MapleDoorObject extends AbstractMapleMapObject { public void warp(final MapleCharacter chr) { MapleParty party = chr.getParty(); if (chr.getId() == ownerId || (party != null && party.getMemberById(ownerId) != null)) { - chr.announce(MaplePacketCreator.playPortalSound()); + chr.announce(PacketCreator.playPortalSound()); if(!inTown() && party == null) { chr.changeMap(to, getLinkedPortalId()); @@ -98,8 +99,8 @@ public class MapleDoorObject extends AbstractMapleMapObject { chr.changeMap(to, getLinkedPortalPosition()); } } else { - chr.getClient().announce(MaplePacketCreator.blockedMessage(6)); - chr.getClient().announce(MaplePacketCreator.enableActions()); + chr.getClient().announce(PacketCreator.blockedMessage(6)); + chr.getClient().announce(PacketCreator.enableActions()); } } @@ -112,12 +113,12 @@ public class MapleDoorObject extends AbstractMapleMapObject { MapleCharacter chr = client.getPlayer(); if (this.getFrom().getId() == chr.getMapId()) { if (chr.getParty() != null && (this.getOwnerId() == chr.getId() || chr.getParty().getMemberById(this.getOwnerId()) != null)) { - chr.announce(MaplePacketCreator.partyPortal(this.getFrom().getId(), this.getTo().getId(), this.toPosition())); + chr.announce(PacketCreator.partyPortal(this.getFrom().getId(), this.getTo().getId(), this.toPosition())); } - chr.announce(MaplePacketCreator.spawnPortal(this.getFrom().getId(), this.getTo().getId(), this.toPosition())); + chr.announce(PacketCreator.spawnPortal(this.getFrom().getId(), this.getTo().getId(), this.toPosition())); if (!this.inTown()) { - chr.announce(MaplePacketCreator.spawnDoor(this.getOwnerId(), this.getPosition(), launched)); + chr.announce(PacketCreator.spawnDoor(this.getOwnerId(), this.getPosition(), launched)); } } } @@ -128,16 +129,16 @@ public class MapleDoorObject extends AbstractMapleMapObject { if (from.getId() == chr.getMapId()) { MapleParty party = chr.getParty(); if (party != null && (ownerId == chr.getId() || party.getMemberById(ownerId) != null)) { - client.announce(MaplePacketCreator.partyPortal(999999999, 999999999, new Point(-1, -1))); + client.announce(PacketCreator.partyPortal(999999999, 999999999, new Point(-1, -1))); } - client.announce(MaplePacketCreator.removeDoor(ownerId, inTown())); + client.announce(PacketCreator.removeDoor(ownerId, inTown())); } } public void sendDestroyData(MapleClient client, boolean partyUpdate) { if (client != null && from.getId() == client.getPlayer().getMapId()) { - client.announce(MaplePacketCreator.partyPortal(999999999, 999999999, new Point(-1, -1))); - client.announce(MaplePacketCreator.removeDoor(ownerId, inTown())); + client.announce(PacketCreator.partyPortal(999999999, 999999999, new Point(-1, -1))); + client.announce(PacketCreator.removeDoor(ownerId, inTown())); } } diff --git a/src/main/java/server/maps/MapleDragon.java b/src/main/java/server/maps/MapleDragon.java index 6632b91940..6c669daa17 100644 --- a/src/main/java/server/maps/MapleDragon.java +++ b/src/main/java/server/maps/MapleDragon.java @@ -21,9 +21,9 @@ along with this program. If not, see . */ package server.maps; -import tools.MaplePacketCreator; import client.MapleCharacter; import client.MapleClient; +import tools.PacketCreator; @@ -46,7 +46,7 @@ public class MapleDragon extends AbstractAnimatedMapleMapObject { @Override public void sendSpawnData(MapleClient client) { - client.announce(MaplePacketCreator.spawnDragon(this)); + client.announce(PacketCreator.spawnDragon(this)); } @Override @@ -56,7 +56,7 @@ public class MapleDragon extends AbstractAnimatedMapleMapObject { @Override public void sendDestroyData(MapleClient c) { - c.announce(MaplePacketCreator.removeDragon(owner.getId())); + c.announce(PacketCreator.removeDragon(owner.getId())); } public MapleCharacter getOwner() { diff --git a/src/main/java/server/maps/MapleGenericPortal.java b/src/main/java/server/maps/MapleGenericPortal.java index 38d4301808..75d21b5a5d 100644 --- a/src/main/java/server/maps/MapleGenericPortal.java +++ b/src/main/java/server/maps/MapleGenericPortal.java @@ -21,15 +21,16 @@ along with this program. If not, see . */ package server.maps; -import client.MapleClient; import client.MapleCharacter; +import client.MapleClient; import constants.game.GameConstants; -import java.awt.Point; -import scripting.portal.PortalScriptManager; -import tools.MaplePacketCreator; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredReentrantLock; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; +import scripting.portal.PortalScriptManager; +import tools.PacketCreator; + +import java.awt.*; public class MapleGenericPortal implements MaplePortal { @@ -155,7 +156,7 @@ public class MapleGenericPortal implements MaplePortal { } } if (!changed) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); } } diff --git a/src/main/java/server/maps/MapleHiredMerchant.java b/src/main/java/server/maps/MapleHiredMerchant.java index 845e593fd3..0bce8bc3ce 100644 --- a/src/main/java/server/maps/MapleHiredMerchant.java +++ b/src/main/java/server/maps/MapleHiredMerchant.java @@ -37,7 +37,7 @@ import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import server.MapleItemInformationProvider; import server.MapleTrade; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import java.sql.Connection; @@ -126,8 +126,8 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { int i = this.getFreeSlot(); if (i > -1) { visitors[i] = visitor; - broadcastToVisitors(MaplePacketCreator.hiredMerchantVisitorAdd(visitor, i + 1)); - this.getMap().broadcastMessage(MaplePacketCreator.updateHiredMerchantBox(this)); + broadcastToVisitors(PacketCreator.hiredMerchantVisitorAdd(visitor, i + 1)); + this.getMap().broadcastMessage(PacketCreator.updateHiredMerchantBox(this)); return true; } @@ -147,8 +147,8 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { } if (visitors[slot] != null && visitors[slot].getId() == visitor.getId()) { visitors[slot] = null; - broadcastToVisitors(MaplePacketCreator.hiredMerchantVisitorLeave(slot + 1)); - this.getMap().broadcastMessage(MaplePacketCreator.updateHiredMerchantBox(this)); + broadcastToVisitors(PacketCreator.hiredMerchantVisitorLeave(slot + 1)); + this.getMap().broadcastMessage(PacketCreator.updateHiredMerchantBox(this)); } } finally { visitorLock.unlock(); @@ -182,14 +182,14 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { if (visitor != null) { visitor.setHiredMerchant(null); - visitor.getClient().announce(MaplePacketCreator.leaveHiredMerchant(i + 1, 0x11)); - visitor.getClient().announce(MaplePacketCreator.hiredMerchantMaintenanceMessage()); + visitor.getClient().announce(PacketCreator.leaveHiredMerchant(i + 1, 0x11)); + visitor.getClient().announce(PacketCreator.hiredMerchantMaintenanceMessage()); visitors[i] = null; } } - this.getMap().broadcastMessage(MaplePacketCreator.updateHiredMerchantBox(this)); + this.getMap().broadcastMessage(PacketCreator.updateHiredMerchantBox(this)); } finally { visitorLock.unlock(); } @@ -197,8 +197,8 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { private void removeOwner(MapleCharacter owner) { if (owner.getHiredMerchant() == this) { - owner.announce(MaplePacketCreator.hiredMerchantOwnerLeave()); - owner.announce(MaplePacketCreator.leaveHiredMerchant(0x00, 0x03)); + owner.announce(PacketCreator.hiredMerchantOwnerLeave()); + owner.announce(PacketCreator.leaveHiredMerchant(0x00, 0x03)); owner.setHiredMerchant(null); } } @@ -220,8 +220,8 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { iitem.setQuantity((short) (shopItem.getItem().getQuantity() * shopItem.getBundles())); if (!MapleInventory.checkSpot(chr, iitem)) { - chr.announce(MaplePacketCreator.serverNotice(1, "Have a slot available on your inventory to claim back the item.")); - chr.announce(MaplePacketCreator.enableActions()); + chr.announce(PacketCreator.serverNotice(1, "Have a slot available on your inventory to claim back the item.")); + chr.announce(PacketCreator.enableActions()); return; } @@ -229,7 +229,7 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { } removeFromSlot(slot); - chr.announce(MaplePacketCreator.updateHiredMerchant(this, chr)); + chr.announce(PacketCreator.updateHiredMerchant(this, chr)); } if (YamlConfig.config.server.USE_ENFORCE_MERCHANT_SAVE) { @@ -263,10 +263,10 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { newItem.setQuantity((short) ((pItem.getItem().getQuantity() * quantity))); if (quantity < 1 || !pItem.isExist() || pItem.getBundles() < quantity) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } else if (newItem.getInventoryType().equals(MapleInventoryType.EQUIP) && newItem.getQuantity() > 1) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } @@ -318,12 +318,12 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { } } else { c.getPlayer().dropMessage(1, "Your inventory is full. Please clear a slot before buying this item."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } } else { c.getPlayer().dropMessage(1, "You don't have enough mesos to purchase this item."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return; } try { @@ -345,7 +345,7 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { public void forceClose() { //Server.getInstance().getChannel(world, channel).removeHiredMerchant(ownerId); - map.broadcastMessage(MaplePacketCreator.removeHiredMerchantBox(getOwnerId())); + map.broadcastMessage(PacketCreator.removeHiredMerchantBox(getOwnerId())); map.removeMapObject(this); MapleCharacter owner = Server.getInstance().getWorld(world).getPlayerStorage().getCharacterById(ownerId); @@ -398,7 +398,7 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { private void closeShop(MapleClient c, boolean timeout) { map.removeMapObject(this); - map.broadcastMessage(MaplePacketCreator.removeHiredMerchantBox(ownerId)); + map.broadcastMessage(PacketCreator.removeHiredMerchantBox(ownerId)); c.getChannelServer().removeHiredMerchant(ownerId); this.removeAllVisitors(); @@ -461,15 +461,15 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { this.setOpen(false); this.removeAllVisitors(); - chr.announce(MaplePacketCreator.getHiredMerchant(chr, this, false)); + chr.announce(PacketCreator.getHiredMerchant(chr, this, false)); } else if (!this.isOpen()) { - chr.announce(MaplePacketCreator.getMiniRoomError(18)); + chr.announce(PacketCreator.getMiniRoomError(18)); return; } else if (!this.addVisitor(chr)) { - chr.announce(MaplePacketCreator.getMiniRoomError(2)); + chr.announce(PacketCreator.getMiniRoomError(2)); return; } else { - chr.announce(MaplePacketCreator.getHiredMerchant(chr, this, false)); + chr.announce(PacketCreator.getHiredMerchant(chr, this, false)); } chr.setHiredMerchant(this); } finally { @@ -599,7 +599,7 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { synchronized (messages) { messages.add(new Pair<>(message, slot)); } - broadcastToVisitorsThreadsafe(MaplePacketCreator.hiredMerchantChat(message, slot)); + broadcastToVisitorsThreadsafe(PacketCreator.hiredMerchantChat(message, slot)); } public List sendAvailableBundles(int itemid) { @@ -713,7 +713,7 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { @Override public void sendSpawnData(MapleClient client) { - client.announce(MaplePacketCreator.spawnHiredMerchantBox(this)); + client.announce(PacketCreator.spawnHiredMerchantBox(this)); } public class SoldItem { diff --git a/src/main/java/server/maps/MapleKite.java b/src/main/java/server/maps/MapleKite.java index d0cea46a48..f1fdbc54ed 100644 --- a/src/main/java/server/maps/MapleKite.java +++ b/src/main/java/server/maps/MapleKite.java @@ -1,9 +1,10 @@ package server.maps; -import java.awt.Point; import client.MapleCharacter; import client.MapleClient; -import tools.MaplePacketCreator; +import tools.PacketCreator; + +import java.awt.*; public class MapleKite extends AbstractMapleMapObject { @@ -51,10 +52,10 @@ public class MapleKite extends AbstractMapleMapObject { } public final byte[] makeSpawnData() { - return MaplePacketCreator.spawnKite(getObjectId(), itemid, owner.getName(), text, pos, ft); + return PacketCreator.spawnKite(getObjectId(), itemid, owner.getName(), text, pos, ft); } public final byte[] makeDestroyData() { - return MaplePacketCreator.removeKite(getObjectId(), 0); + return PacketCreator.removeKite(getObjectId(), 0); } } \ No newline at end of file diff --git a/src/main/java/server/maps/MapleMap.java b/src/main/java/server/maps/MapleMap.java index 135f5753d2..851b866553 100644 --- a/src/main/java/server/maps/MapleMap.java +++ b/src/main/java/server/maps/MapleMap.java @@ -62,7 +62,7 @@ import server.partyquest.GuardianSpawnPoint; import server.partyquest.MapleCarnivalFactory; import server.partyquest.MapleCarnivalFactory.MCSkill; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.Randomizer; @@ -307,7 +307,7 @@ public class MapleMap { mr.lockReactor(); try { mr.resetReactorActions(1); - broadcastMessage(MaplePacketCreator.triggerReactor((MapleReactor) o, 1)); + broadcastMessage(PacketCreator.triggerReactor((MapleReactor) o, 1)); } finally { mr.unlockReactor(); } @@ -1040,8 +1040,8 @@ public class MapleMap { mdrop.setPartyOwnerId(partyid); - byte[] removePacket = MaplePacketCreator.silentRemoveItemFromMap(mdrop.getObjectId()); - byte[] updatePacket = MaplePacketCreator.updateMapItemObject(mdrop, partyLeaver == null); + byte[] removePacket = PacketCreator.silentRemoveItemFromMap(mdrop.getObjectId()); + byte[] updatePacket = PacketCreator.updateMapItemObject(mdrop, partyLeaver == null); for (MapleCharacter mc : partyMembers) { if (this.equals(mc.getMap())) { @@ -1058,7 +1058,7 @@ public class MapleMap { partyLeaver.announce(removePacket); if (partyLeaver.needQuestItem(mdrop.getQuest(), mdrop.getItemId())) { - partyLeaver.announce(MaplePacketCreator.updateMapItemObject(mdrop, true)); + partyLeaver.announce(PacketCreator.updateMapItemObject(mdrop, true)); } } } @@ -1081,8 +1081,8 @@ public class MapleMap { continue; } - byte[] removePacket = MaplePacketCreator.silentRemoveItemFromMap(mdrop.getObjectId()); - byte[] updatePacket = MaplePacketCreator.updateMapItemObject(mdrop, true); + byte[] removePacket = PacketCreator.silentRemoveItemFromMap(mdrop.getObjectId()); + byte[] updatePacket = PacketCreator.updateMapItemObject(mdrop, true); if (newcomer != null) { if (this.equals(newcomer.getMap())) { @@ -1108,7 +1108,7 @@ public class MapleMap { if (chr1.needQuestItem(questid, idrop.getItemId())) { mdrop.lockItem(); try { - c.announce(MaplePacketCreator.dropItemFromMapObject(chr1, mdrop, dropper.getPosition(), dropPos, (byte) 1)); + c.announce(PacketCreator.dropItemFromMapObject(chr1, mdrop, dropper.getPosition(), dropPos, (byte) 1)); } finally { mdrop.unlockItem(); } @@ -1127,7 +1127,7 @@ public class MapleMap { spawnAndAddRangedMapObject(mdrop, c -> { mdrop.lockItem(); try { - c.announce(MaplePacketCreator.dropItemFromMapObject(c.getPlayer(), mdrop, dropper.getPosition(), droppos, (byte) 1)); + c.announce(PacketCreator.dropItemFromMapObject(c.getPlayer(), mdrop, dropper.getPosition(), droppos, (byte) 1)); } finally { mdrop.unlockItem(); } @@ -1379,7 +1379,7 @@ public class MapleMap { if (chr == null) { if (removeKilledMonsterObject(monster)) { monster.dispatchMonsterKilled(false); - broadcastMessage(MaplePacketCreator.killMonster(monster.getObjectId(), animation), monster.getPosition()); + broadcastMessage(PacketCreator.killMonster(monster.getObjectId(), animation), monster.getPosition()); monster.aggroSwitchController(null, false); } } else { @@ -1407,8 +1407,8 @@ public class MapleMap { MapleCharacter character = (MapleCharacter) mmo; if (character.isAlive()) { MapleStatEffect statEffect = mii.getItemEffect(buff); - character.getClient().announce(MaplePacketCreator.showOwnBuffEffect(buff, 1)); - broadcastMessage(character, MaplePacketCreator.showBuffeffect(character.getId(), buff, 1), false); + character.getClient().announce(PacketCreator.showOwnBuffEffect(buff, 1)); + broadcastMessage(character, PacketCreator.showBuffeffect(character.getId(), buff, 1), false); statEffect.applyTo(character); } } @@ -1460,7 +1460,7 @@ public class MapleMap { e.printStackTrace(); } finally { // thanks resinate for pointing out a memory leak possibly from an exception thrown monster.dispatchMonsterKilled(true); - broadcastMessage(MaplePacketCreator.killMonster(monster.getObjectId(), animation), monster.getPosition()); + broadcastMessage(PacketCreator.killMonster(monster.getObjectId(), animation), monster.getPosition()); } } } @@ -1593,7 +1593,7 @@ public class MapleMap { try { r.resetReactorActions(0); r.setAlive(true); - broadcastMessage(MaplePacketCreator.triggerReactor(r, 0)); + broadcastMessage(PacketCreator.triggerReactor(r, 0)); } finally { r.unlockReactor(); } @@ -1727,8 +1727,8 @@ public class MapleMap { try { for (MapleMapObject obj : npcs) { if (((MapleNPC) obj).getId() == npcid) { - broadcastMessage(MaplePacketCreator.removeNPCController(obj.getObjectId())); - broadcastMessage(MaplePacketCreator.removeNPC(obj.getObjectId())); + broadcastMessage(PacketCreator.removeNPCController(obj.getObjectId())); + broadcastMessage(PacketCreator.removeNPC(obj.getObjectId())); this.mapobjects.remove(obj.getObjectId()); } @@ -1867,7 +1867,7 @@ public class MapleMap { getEventInstance().registerMonster(monster); } - spawnAndAddRangedMapObject(monster, c -> c.announce(MaplePacketCreator.spawnMonster(monster, false))); + spawnAndAddRangedMapObject(monster, c -> c.announce(PacketCreator.spawnMonster(monster, false))); monster.aggroUpdateController(); updateBossSpawn(monster); @@ -1954,7 +1954,7 @@ public class MapleMap { getEventInstance().registerMonster(monster); } - spawnAndAddRangedMapObject(monster, c -> c.announce(MaplePacketCreator.spawnMonster(monster, true)), null); + spawnAndAddRangedMapObject(monster, c -> c.announce(PacketCreator.spawnMonster(monster, true)), null); monster.aggroUpdateController(); updateBossSpawn(monster); @@ -2015,7 +2015,7 @@ public class MapleMap { monster.setPosition(spos); monster.setSpawnEffect(effect); - spawnAndAddRangedMapObject(monster, c -> c.announce(MaplePacketCreator.spawnMonster(monster, true, effect))); + spawnAndAddRangedMapObject(monster, c -> c.announce(PacketCreator.spawnMonster(monster, true, effect))); monster.aggroUpdateController(); updateBossSpawn(monster); @@ -2028,7 +2028,7 @@ public class MapleMap { public void spawnFakeMonster(final MapleMonster monster) { monster.setMap(this); monster.setFake(true); - spawnAndAddRangedMapObject(monster, c -> c.announce(MaplePacketCreator.spawnFakeMonster(monster, 0))); + spawnAndAddRangedMapObject(monster, c -> c.announce(PacketCreator.spawnFakeMonster(monster, 0))); spawnedMonstersOnMap.incrementAndGet(); addSelfDestructive(monster); @@ -2036,7 +2036,7 @@ public class MapleMap { public void makeMonsterReal(final MapleMonster monster) { monster.setFake(false); - broadcastMessage(MaplePacketCreator.makeMonsterReal(monster)); + broadcastMessage(PacketCreator.makeMonsterReal(monster)); monster.aggroUpdateController(); updateBossSpawn(monster); } @@ -2069,7 +2069,7 @@ public class MapleMap { public void spawnSummon(final MapleSummon summon) { spawnAndAddRangedMapObject(summon, c -> { if (summon != null) { - c.announce(MaplePacketCreator.spawnSummon(summon, true)); + c.announce(PacketCreator.spawnSummon(summon, true)); } }, null); } @@ -2148,7 +2148,7 @@ public class MapleMap { spawnAndAddRangedMapObject(mdrop, c -> { mdrop.lockItem(); try { - c.announce(MaplePacketCreator.dropItemFromMapObject(c.getPlayer(), mdrop, dropper.getPosition(), droppos, (byte) 1)); + c.announce(PacketCreator.dropItemFromMapObject(c.getPlayer(), mdrop, dropper.getPosition(), droppos, (byte) 1)); } finally { mdrop.unlockItem(); } @@ -2268,7 +2268,7 @@ public class MapleMap { } public void changeEnvironment(String mapObj, int newState) { - broadcastMessage(MaplePacketCreator.environmentChange(mapObj, newState)); + broadcastMessage(PacketCreator.environmentChange(mapObj, newState)); } public void startMapEffect(String msg, int itemId) { @@ -2402,7 +2402,7 @@ public class MapleMap { if (mapid == 200090060) { // To Rien int travelTime = getWorldServer().getTransportationTime(1 * 60 * 1000); - chr.announce(MaplePacketCreator.getClock(travelTime / 1000)); + chr.announce(PacketCreator.getClock(travelTime / 1000)); TimerManager.getInstance().schedule(() -> { if (chr.getMapId() == 200090060) { chr.changeMap(140020300, 0); @@ -2410,7 +2410,7 @@ public class MapleMap { }, travelTime); } else if (mapid == 200090070) { // To Lith Harbor int travelTime = getWorldServer().getTransportationTime(1 * 60 * 1000); - chr.announce(MaplePacketCreator.getClock(travelTime / 1000)); + chr.announce(PacketCreator.getClock(travelTime / 1000)); TimerManager.getInstance().schedule(() -> { if (chr.getMapId() == 200090070) { chr.changeMap(104000000, 3); @@ -2418,7 +2418,7 @@ public class MapleMap { }, travelTime); } else if (mapid == 200090030) { // To Ereve (SkyFerry) int travelTime = getWorldServer().getTransportationTime(2 * 60 * 1000); - chr.announce(MaplePacketCreator.getClock(travelTime / 1000)); + chr.announce(PacketCreator.getClock(travelTime / 1000)); TimerManager.getInstance().schedule(() -> { if (chr.getMapId() == 200090030) { chr.changeMap(130000210, 0); @@ -2426,7 +2426,7 @@ public class MapleMap { }, travelTime); } else if (mapid == 200090031) { // To Victoria Island (SkyFerry) int travelTime = getWorldServer().getTransportationTime(2 * 60 * 1000); - chr.announce(MaplePacketCreator.getClock(travelTime / 1000)); + chr.announce(PacketCreator.getClock(travelTime / 1000)); TimerManager.getInstance().schedule(() -> { if (chr.getMapId() == 200090031) { chr.changeMap(101000400, 0); @@ -2434,7 +2434,7 @@ public class MapleMap { }, travelTime); } else if (mapid == 200090021) { // To Orbis (SkyFerry) int travelTime = getWorldServer().getTransportationTime(8 * 60 * 1000); - chr.announce(MaplePacketCreator.getClock(travelTime / 1000)); + chr.announce(PacketCreator.getClock(travelTime / 1000)); TimerManager.getInstance().schedule(() -> { if (chr.getMapId() == 200090021) { chr.changeMap(200000161, 0); @@ -2442,7 +2442,7 @@ public class MapleMap { }, travelTime); } else if (mapid == 200090020) { // To Ereve From Orbis (SkyFerry) int travelTime = getWorldServer().getTransportationTime(8 * 60 * 1000); - chr.announce(MaplePacketCreator.getClock(travelTime / 1000)); + chr.announce(PacketCreator.getClock(travelTime / 1000)); TimerManager.getInstance().schedule(() -> { if (chr.getMapId() == 200090020) { chr.changeMap(130000210, 0); @@ -2455,14 +2455,14 @@ public class MapleMap { } } else if (GameConstants.isAriantColiseumArena(mapid)) { int pqTimer = (10 * 60 * 1000); - chr.announce(MaplePacketCreator.getClock(pqTimer / 1000)); + chr.announce(PacketCreator.getClock(pqTimer / 1000)); } MaplePet[] pets = chr.getPets(); for (MaplePet pet : pets) { if (pet != null) { pet.setPos(getGroundBelow(chr.getPosition())); - chr.announce(MaplePacketCreator.showPet(chr, pet, false, false)); + chr.announce(PacketCreator.showPet(chr, pet, false, false)); } else { break; } @@ -2470,7 +2470,7 @@ public class MapleMap { chr.commitExcludedItems(); // thanks OishiiKawaiiDesu for noticing pet item ignore registry erasing upon changing maps if (chr.getMonsterCarnival() != null) { - chr.getClient().announce(MaplePacketCreator.getClock(chr.getMonsterCarnival().getTimeLeftSeconds())); + chr.getClient().announce(PacketCreator.getClock(chr.getMonsterCarnival().getTimeLeftSeconds())); if (isCPQMap()) { int team = -1; int oposition = -1; @@ -2482,7 +2482,7 @@ public class MapleMap { team = 1; oposition = 0; } - chr.getClient().announce(MaplePacketCreator.startMonsterCarnival(chr, team, oposition)); + chr.getClient().announce(PacketCreator.startMonsterCarnival(chr, team, oposition)); } } @@ -2490,7 +2490,7 @@ public class MapleMap { if (chr.getChalkboard() != null) { if (!GameConstants.isFreeMarketRoom(mapid)) { - chr.announce(MaplePacketCreator.useChalkboard(chr, false)); // update player's chalkboard when changing maps found thanks to Vcoc + chr.announce(PacketCreator.useChalkboard(chr, false)); // update player's chalkboard when changing maps found thanks to Vcoc } else { chr.setChalkboard(null); } @@ -2498,10 +2498,10 @@ public class MapleMap { if (chr.isHidden()) { broadcastGMSpawnPlayerMapObjectMessage(chr, chr, true); - chr.announce(MaplePacketCreator.getGMEffect(0x10, (byte) 1)); + chr.announce(PacketCreator.getGMEffect(0x10, (byte) 1)); List> dsstat = Collections.singletonList(new Pair<>(MapleBuffStat.DARKSIGHT, 0)); - broadcastGMMessage(chr, MaplePacketCreator.giveForeignBuff(chr.getId(), dsstat), false); + broadcastGMMessage(chr, PacketCreator.giveForeignBuff(chr.getId(), dsstat), false); } else { broadcastSpawnPlayerMapObjectMessage(chr, chr, true); } @@ -2512,11 +2512,11 @@ public class MapleMap { chr.getMap().getPortal("join00").setPortalStatus(false); } if (hasForcedEquip()) { - chr.getClient().announce(MaplePacketCreator.showForcedEquip(-1)); + chr.getClient().announce(PacketCreator.showForcedEquip(-1)); } if (specialEquip()) { - chr.getClient().announce(MaplePacketCreator.coconutScore(0, 0)); - chr.getClient().announce(MaplePacketCreator.showForcedEquip(chr.getTeam())); + chr.getClient().announce(PacketCreator.coconutScore(0, 0)); + chr.getClient().announce(PacketCreator.showForcedEquip(chr.getTeam())); } objectWLock.lock(); try { @@ -2534,9 +2534,9 @@ public class MapleMap { dragon.setPosition(chr.getPosition()); this.addMapObject(dragon); if (chr.isHidden()) { - this.broadcastGMMessage(chr, MaplePacketCreator.spawnDragon(dragon)); + this.broadcastGMMessage(chr, PacketCreator.spawnDragon(dragon)); } else { - this.broadcastMessage(chr, MaplePacketCreator.spawnDragon(dragon)); + this.broadcastMessage(chr, PacketCreator.spawnDragon(dragon)); } } @@ -2550,34 +2550,34 @@ public class MapleMap { if (mapEffect != null) { mapEffect.sendStartData(chr.getClient()); } - chr.getClient().announce(MaplePacketCreator.resetForcedStats()); + chr.getClient().announce(PacketCreator.resetForcedStats()); if (mapid == 914000200 || mapid == 914000210 || mapid == 914000220) { - chr.getClient().announce(MaplePacketCreator.aranGodlyStats()); + chr.getClient().announce(PacketCreator.aranGodlyStats()); } if (chr.getEventInstance() != null && chr.getEventInstance().isTimerStarted()) { - chr.getClient().announce(MaplePacketCreator.getClock((int) (chr.getEventInstance().getTimeLeft() / 1000))); + chr.getClient().announce(PacketCreator.getClock((int) (chr.getEventInstance().getTimeLeft() / 1000))); } if (chr.getFitness() != null && chr.getFitness().isTimerStarted()) { - chr.getClient().announce(MaplePacketCreator.getClock((int) (chr.getFitness().getTimeLeft() / 1000))); + chr.getClient().announce(PacketCreator.getClock((int) (chr.getFitness().getTimeLeft() / 1000))); } if (chr.getOla() != null && chr.getOla().isTimerStarted()) { - chr.getClient().announce(MaplePacketCreator.getClock((int) (chr.getOla().getTimeLeft() / 1000))); + chr.getClient().announce(PacketCreator.getClock((int) (chr.getOla().getTimeLeft() / 1000))); } if (mapid == 109060000) { - chr.announce(MaplePacketCreator.rollSnowBall(true, 0, null, null)); + chr.announce(PacketCreator.rollSnowBall(true, 0, null, null)); } if (hasClock()) { Calendar cal = Calendar.getInstance(); - chr.getClient().announce((MaplePacketCreator.getClockTime(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)))); + chr.getClient().announce((PacketCreator.getClockTime(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)))); } if (hasBoat() > 0) { if (hasBoat() == 1) { - chr.getClient().announce((MaplePacketCreator.boatPacket(true))); + chr.getClient().announce((PacketCreator.boatPacket(true))); } else { - chr.getClient().announce(MaplePacketCreator.boatPacket(false)); + chr.getClient().announce(PacketCreator.boatPacket(false)); } } @@ -2697,9 +2697,9 @@ public class MapleMap { removeMapObject(chr.getObjectId()); if (!chr.isHidden()) { - broadcastMessage(MaplePacketCreator.removePlayerFromMap(chr.getId())); + broadcastMessage(PacketCreator.removePlayerFromMap(chr.getId())); } else { - broadcastGMMessage(MaplePacketCreator.removePlayerFromMap(chr.getId())); + broadcastGMMessage(PacketCreator.removePlayerFromMap(chr.getId())); } chr.leaveMap(); @@ -2715,9 +2715,9 @@ public class MapleMap { if (chr.getDragon() != null) { removeMapObject(chr.getDragon()); if (chr.isHidden()) { - this.broadcastGMMessage(chr, MaplePacketCreator.removeDragon(chr.getId())); + this.broadcastGMMessage(chr, PacketCreator.removeDragon(chr.getId())); } else { - this.broadcastMessage(chr, MaplePacketCreator.removeDragon(chr.getId())); + this.broadcastMessage(chr, PacketCreator.removeDragon(chr.getId())); } } } @@ -2847,7 +2847,7 @@ public class MapleMap { chrRLock.lock(); try { for (MapleCharacter chr : characters) { - final byte[] packet = MaplePacketCreator.dropItemFromMapObject(chr, mdrop, dropperPos, dropPos, mod); + final byte[] packet = PacketCreator.dropItemFromMapObject(chr, mdrop, dropperPos, dropPos, mod); if (rangeSq < Double.POSITIVE_INFINITY) { if (rangedFrom.distanceSq(chr.getPosition()) <= rangeSq) { @@ -2877,14 +2877,14 @@ public class MapleMap { for (MapleCharacter chr : characters) { if (chr.isGM()) { if (chr != source) { - chr.announce(MaplePacketCreator.spawnPlayerMapObject(chr.getClient(), player, enteringField)); + chr.announce(PacketCreator.spawnPlayerMapObject(chr.getClient(), player, enteringField)); } } } } else { for (MapleCharacter chr : characters) { if (chr != source) { - chr.announce(MaplePacketCreator.spawnPlayerMapObject(chr.getClient(), player, enteringField)); + chr.announce(PacketCreator.spawnPlayerMapObject(chr.getClient(), player, enteringField)); } } } @@ -2898,7 +2898,7 @@ public class MapleMap { try { for (MapleCharacter chr : characters) { if (chr != source) { - chr.announce(MaplePacketCreator.updateCharLook(chr.getClient(), player)); + chr.announce(PacketCreator.updateCharLook(chr.getClient(), player)); } } } finally { @@ -2911,7 +2911,7 @@ public class MapleMap { } public void broadcastStringMessage(int type, String message) { - broadcastMessage(MaplePacketCreator.serverNotice(type, message)); + broadcastMessage(PacketCreator.serverNotice(type, message)); } private static boolean isNonRangedType(MapleMapObjectType type) { @@ -3234,7 +3234,7 @@ public class MapleMap { } public final void moveEnvironment(final String ms, final int type) { - broadcastMessage(MaplePacketCreator.environmentMove(ms, type)); + broadcastMessage(PacketCreator.environmentMove(ms, type)); objectWLock.lock(); try { @@ -3317,7 +3317,7 @@ public class MapleMap { public void sendNightEffect(MapleCharacter mc) { for (Entry types : backgroundTypes.entrySet()) { if (types.getValue() >= 3) { // 3 is a special number - mc.announce(MaplePacketCreator.changeBackgroundEffect(true, types.getKey(), 0)); + mc.announce(PacketCreator.changeBackgroundEffect(true, types.getKey(), 0)); } } } @@ -3363,7 +3363,7 @@ public class MapleMap { return true; } - MapleMap.this.pickItemDrop(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 0, 0), mapitem); + MapleMap.this.pickItemDrop(PacketCreator.removeItemFromMap(mapitem.getObjectId(), 0, 0), mapitem); return true; } finally { mapitem.unlockItem(); @@ -3442,7 +3442,7 @@ public class MapleMap { unregisterItemDrop(mapitem); reactor.setShouldCollect(false); - MapleMap.this.broadcastMessage(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 0, 0), mapitem.getPosition()); + MapleMap.this.broadcastMessage(PacketCreator.removeItemFromMap(mapitem.getObjectId(), 0, 0), mapitem.getPosition()); droppedItemCount.decrementAndGet(); MapleMap.this.removeMapObject(mapitem); @@ -3458,7 +3458,7 @@ public class MapleMap { try { reactor.resetReactorActions(0); reactor.setAlive(true); - broadcastMessage(MaplePacketCreator.triggerReactor(reactor, 0)); + broadcastMessage(PacketCreator.triggerReactor(reactor, 0)); } finally { reactor.unlockReactor(); } @@ -3803,7 +3803,7 @@ public class MapleMap { for (MapleMapObject i : getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.ITEM))) { droppedItemCount.decrementAndGet(); removeMapObject(i); - this.broadcastMessage(MaplePacketCreator.removeItemFromMap(i.getObjectId(), 0, player.getId())); + this.broadcastMessage(PacketCreator.removeItemFromMap(i.getObjectId(), 0, player.getId())); } } @@ -3811,7 +3811,7 @@ public class MapleMap { for (MapleMapObject i : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.ITEM))) { droppedItemCount.decrementAndGet(); removeMapObject(i); - this.broadcastMessage(MaplePacketCreator.removeItemFromMap(i.getObjectId(), 0, 0)); + this.broadcastMessage(PacketCreator.removeItemFromMap(i.getObjectId(), 0, 0)); } } @@ -3976,7 +3976,7 @@ public class MapleMap { npc.setHide(!npc.isHidden()); if (!npc.isHidden()) //Should only be hidden upon changing maps { - broadcastMessage(MaplePacketCreator.spawnNPC(npc)); + broadcastMessage(PacketCreator.spawnNPC(npc)); } } } @@ -4025,12 +4025,12 @@ public class MapleMap { } public void broadcastShip(final boolean state) { - broadcastMessage(MaplePacketCreator.boatPacket(state)); + broadcastMessage(PacketCreator.boatPacket(state)); this.setDocked(state); } public void broadcastEnemyShip(final boolean state) { - broadcastMessage(MaplePacketCreator.crogBoatPacket(state)); + broadcastMessage(PacketCreator.crogBoatPacket(state)); this.setDocked(state); } diff --git a/src/main/java/server/maps/MapleMapEffect.java b/src/main/java/server/maps/MapleMapEffect.java index a1f49891b1..0b304f806b 100644 --- a/src/main/java/server/maps/MapleMapEffect.java +++ b/src/main/java/server/maps/MapleMapEffect.java @@ -22,7 +22,7 @@ package server.maps; import client.MapleClient; -import tools.MaplePacketCreator; +import tools.PacketCreator; public class MapleMapEffect { private String msg; @@ -35,11 +35,11 @@ public class MapleMapEffect { } public final byte[] makeDestroyData() { - return MaplePacketCreator.removeMapEffect(); + return PacketCreator.removeMapEffect(); } public final byte[] makeStartData() { - return MaplePacketCreator.startMapEffect(msg, itemId, active); + return PacketCreator.startMapEffect(msg, itemId, active); } public void sendStartData(MapleClient client) { diff --git a/src/main/java/server/maps/MapleMapItem.java b/src/main/java/server/maps/MapleMapItem.java index 529cef07d9..16f4c231d2 100644 --- a/src/main/java/server/maps/MapleMapItem.java +++ b/src/main/java/server/maps/MapleMapItem.java @@ -23,11 +23,12 @@ package server.maps; import client.MapleCharacter; import client.MapleClient; import client.inventory.Item; -import java.awt.Point; -import java.util.concurrent.locks.Lock; -import tools.MaplePacketCreator; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; +import tools.PacketCreator; + +import java.awt.*; +import java.util.concurrent.locks.Lock; public class MapleMapItem extends AbstractMapleMapObject { protected MapleClient ownerClient; @@ -202,7 +203,7 @@ public class MapleMapItem extends AbstractMapleMapObject { if (chr.needQuestItem(questid, getItemId())) { this.lockItem(); try { - client.announce(MaplePacketCreator.dropItemFromMapObject(chr, this, null, getPosition(), (byte) 2)); + client.announce(PacketCreator.dropItemFromMapObject(chr, this, null, getPosition(), (byte) 2)); } finally { this.unlockItem(); } @@ -211,6 +212,6 @@ public class MapleMapItem extends AbstractMapleMapObject { @Override public void sendDestroyData(final MapleClient client) { - client.announce(MaplePacketCreator.removeItemFromMap(getObjectId(), 1, 0)); + client.announce(PacketCreator.removeItemFromMap(getObjectId(), 1, 0)); } } \ No newline at end of file diff --git a/src/main/java/server/maps/MapleMiniDungeon.java b/src/main/java/server/maps/MapleMiniDungeon.java index d001108b34..2fb9ffa62c 100644 --- a/src/main/java/server/maps/MapleMiniDungeon.java +++ b/src/main/java/server/maps/MapleMiniDungeon.java @@ -23,7 +23,7 @@ import client.MapleCharacter; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import server.TimerManager; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.ArrayList; import java.util.List; @@ -53,7 +53,7 @@ public class MapleMiniDungeon { public boolean registerPlayer(MapleCharacter chr) { int time = (int)((expireTime - System.currentTimeMillis()) / 1000); - if(time > 0) chr.getClient().announce(MaplePacketCreator.getClock(time)); + if(time > 0) chr.getClient().announce(PacketCreator.getClock(time)); lock.lock(); try { @@ -68,7 +68,7 @@ public class MapleMiniDungeon { } public boolean unregisterPlayer(MapleCharacter chr) { - chr.getClient().announce(MaplePacketCreator.removeClock()); + chr.getClient().announce(PacketCreator.removeClock()); lock.lock(); try { diff --git a/src/main/java/server/maps/MapleMiniGame.java b/src/main/java/server/maps/MapleMiniGame.java index 4f383da923..6427bea47c 100644 --- a/src/main/java/server/maps/MapleMiniGame.java +++ b/src/main/java/server/maps/MapleMiniGame.java @@ -24,7 +24,7 @@ package server.maps; import client.MapleCharacter; import client.MapleClient; import net.server.Server; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.ArrayList; import java.util.Collections; @@ -107,21 +107,21 @@ public class MapleMiniGame extends AbstractMapleMapObject { MapleCharacter owner = this.getOwner(); if (GameType == MiniGameType.OMOK) { - owner.announce(MaplePacketCreator.getMiniGameNewVisitor(this, challenger, 1)); - owner.getMap().broadcastMessage(MaplePacketCreator.addOmokBox(owner, 2, 0)); + owner.announce(PacketCreator.getMiniGameNewVisitor(this, challenger, 1)); + owner.getMap().broadcastMessage(PacketCreator.addOmokBox(owner, 2, 0)); } else if (GameType == MiniGameType.MATCH_CARD) { - owner.announce(MaplePacketCreator.getMatchCardNewVisitor(this, challenger, 1)); - owner.getMap().broadcastMessage(MaplePacketCreator.addMatchCardBox(owner, 2, 0)); + owner.announce(PacketCreator.getMatchCardNewVisitor(this, challenger, 1)); + owner.getMap().broadcastMessage(PacketCreator.addMatchCardBox(owner, 2, 0)); } } public void closeRoom(boolean forceClose) { - owner.getMap().broadcastMessage(MaplePacketCreator.removeMinigameBox(owner)); + owner.getMap().broadcastMessage(PacketCreator.removeMinigameBox(owner)); if (forceClose) { - this.broadcastToOwner(MaplePacketCreator.getMiniGameClose(false, 4)); + this.broadcastToOwner(PacketCreator.getMiniGameClose(false, 4)); } - this.broadcastToVisitor(MaplePacketCreator.getMiniGameClose(true, 3)); + this.broadcastToVisitor(PacketCreator.getMiniGameClose(true, 3)); if (visitor != null) { visitor.setMiniGame(null); @@ -135,17 +135,17 @@ public class MapleMiniGame extends AbstractMapleMapObject { public void removeVisitor(boolean forceClose, MapleCharacter challenger) { if (visitor == challenger) { if (forceClose) { - visitor.announce(MaplePacketCreator.getMiniGameClose(true, 4)); + visitor.announce(PacketCreator.getMiniGameClose(true, 4)); } challenger.setMiniGame(null); visitor = null; - this.getOwner().getClient().announce(MaplePacketCreator.getMiniGameRemoveVisitor()); + this.getOwner().getClient().announce(PacketCreator.getMiniGameRemoveVisitor()); if (GameType == MiniGameType.OMOK) { - this.getOwner().getMap().broadcastMessage(MaplePacketCreator.addOmokBox(owner, 1, 0)); + this.getOwner().getMap().broadcastMessage(PacketCreator.addOmokBox(owner, 1, 0)); } else if (GameType == MiniGameType.MATCH_CARD) { - this.getOwner().getMap().broadcastMessage(MaplePacketCreator.addMatchCardBox(owner, 1, 0)); + this.getOwner().getMap().broadcastMessage(PacketCreator.addMatchCardBox(owner, 1, 0)); } } } @@ -176,7 +176,7 @@ public class MapleMiniGame extends AbstractMapleMapObject { } private void updateMiniGameBox() { - this.getOwner().getMap().broadcastMessage(MaplePacketCreator.addOmokBox(owner, visitor != null ? 2 : 1, inprogress)); + this.getOwner().getMap().broadcastMessage(PacketCreator.addOmokBox(owner, visitor != null ? 2 : 1, inprogress)); } private synchronized boolean minigameMatchFinish() { @@ -241,7 +241,7 @@ public class MapleMiniGame extends AbstractMapleMapObject { visitorscore += (15 * (forfeit ? -1 : 1)); if (forfeit) visitorforfeits++; - this.broadcast(MaplePacketCreator.getMiniGameOwnerWin(this, forfeit)); + this.broadcast(PacketCreator.getMiniGameOwnerWin(this, forfeit)); minigameMatchFinished(); } @@ -255,7 +255,7 @@ public class MapleMiniGame extends AbstractMapleMapObject { ownerscore += (15 * (forfeit ? -1 : 1)); if (forfeit) ownerforfeits++; - this.broadcast(MaplePacketCreator.getMiniGameVisitorWin(this, forfeit)); + this.broadcast(PacketCreator.getMiniGameVisitorWin(this, forfeit)); minigameMatchFinished(); } @@ -273,7 +273,7 @@ public class MapleMiniGame extends AbstractMapleMapObject { nextavailabletie = timeNow + 5 * 60 * 1000; } - this.broadcast(MaplePacketCreator.getMiniGameTie(this)); + this.broadcast(PacketCreator.getMiniGameTie(this)); minigameMatchFinished(); } @@ -390,15 +390,15 @@ public class MapleMiniGame extends AbstractMapleMapObject { } public void chat(MapleClient c, String chat) { - broadcast(MaplePacketCreator.getPlayerShopChat(c.getPlayer(), chat, isOwner(c.getPlayer()))); + broadcast(PacketCreator.getPlayerShopChat(c.getPlayer(), chat, isOwner(c.getPlayer()))); } public void sendOmok(MapleClient c, int type) { - c.announce(MaplePacketCreator.getMiniGame(c, this, isOwner(c.getPlayer()), type)); + c.announce(PacketCreator.getMiniGame(c, this, isOwner(c.getPlayer()), type)); } public void sendMatchCard(MapleClient c, int type) { - c.announce(MaplePacketCreator.getMatchCard(c, this, isOwner(c.getPlayer()), type)); + c.announce(PacketCreator.getMatchCard(c, this, isOwner(c.getPlayer()), type)); } public MapleCharacter getOwner() { @@ -413,7 +413,7 @@ public class MapleMiniGame extends AbstractMapleMapObject { int slot = move2 * 15 + move1 + 1; if (piece[slot] == 0) { piece[slot] = type; - this.broadcast(MaplePacketCreator.getMiniGameMoveOmok(this, move1, move2, type)); + this.broadcast(PacketCreator.getMiniGameMoveOmok(this, move1, move2, type)); for (int y = 0; y < 15; y++) { for (int x = 0; x < 11; x++) { if (searchCombo(x, y, type)) { diff --git a/src/main/java/server/maps/MapleMist.java b/src/main/java/server/maps/MapleMist.java index 51704ccaee..941175e16e 100644 --- a/src/main/java/server/maps/MapleMist.java +++ b/src/main/java/server/maps/MapleMist.java @@ -25,19 +25,13 @@ import client.MapleCharacter; import client.MapleClient; import client.Skill; import client.SkillFactory; - -import java.awt.Point; -import java.awt.Rectangle; - -import constants.skills.BlazeWizard; -import constants.skills.Evan; -import constants.skills.FPMage; -import constants.skills.NightWalker; -import constants.skills.Shadower; +import constants.skills.*; import server.MapleStatEffect; import server.life.MapleMonster; import server.life.MobSkill; -import tools.MaplePacketCreator; +import tools.PacketCreator; + +import java.awt.*; /** * @@ -135,21 +129,21 @@ public class MapleMist extends AbstractMapleMapObject { } public final byte[] makeDestroyData() { - return MaplePacketCreator.removeMist(getObjectId()); + return PacketCreator.removeMist(getObjectId()); } public final byte[] makeSpawnData() { if (owner != null) { - return MaplePacketCreator.spawnMist(getObjectId(), owner.getId(), getSourceSkill().getId(), owner.getSkillLevel(SkillFactory.getSkill(source.getSourceId())), this); + return PacketCreator.spawnMist(getObjectId(), owner.getId(), getSourceSkill().getId(), owner.getSkillLevel(SkillFactory.getSkill(source.getSourceId())), this); } - return MaplePacketCreator.spawnMist(getObjectId(), mob.getId(), skill.getSkillId(), skill.getSkillLevel(), this); + return PacketCreator.spawnMist(getObjectId(), mob.getId(), skill.getSkillId(), skill.getSkillLevel(), this); } public final byte[] makeFakeSpawnData(int level) { if (owner != null) { - return MaplePacketCreator.spawnMist(getObjectId(), owner.getId(), getSourceSkill().getId(), level, this); + return PacketCreator.spawnMist(getObjectId(), owner.getId(), getSourceSkill().getId(), level, this); } - return MaplePacketCreator.spawnMist(getObjectId(), mob.getId(), skill.getSkillId(), skill.getSkillLevel(), this); + return PacketCreator.spawnMist(getObjectId(), mob.getId(), skill.getSkillId(), skill.getSkillLevel(), this); } @Override diff --git a/src/main/java/server/maps/MaplePlayerShop.java b/src/main/java/server/maps/MaplePlayerShop.java index b2648d9854..81d912857e 100644 --- a/src/main/java/server/maps/MaplePlayerShop.java +++ b/src/main/java/server/maps/MaplePlayerShop.java @@ -32,7 +32,7 @@ import net.opcodes.SendOpcode; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import server.MapleTrade; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.data.output.MaplePacketLittleEndianWriter; @@ -126,8 +126,8 @@ public class MaplePlayerShop extends AbstractMapleMapObject { visitors[i] = visitor; visitor.setSlot(i); - this.broadcast(MaplePacketCreator.getPlayerShopNewVisitor(visitor, i + 1)); - owner.getMap().broadcastMessage(MaplePacketCreator.updatePlayerShopBox(this)); + this.broadcast(PacketCreator.getPlayerShopNewVisitor(visitor, i + 1)); + owner.getMap().broadcastMessage(PacketCreator.updatePlayerShopBox(this)); break; } } @@ -147,8 +147,8 @@ public class MaplePlayerShop extends AbstractMapleMapObject { visitors[i] = null; visitor.setSlot(-1); - this.broadcast(MaplePacketCreator.getPlayerShopRemoveVisitor(i + 1)); - owner.getMap().broadcastMessage(MaplePacketCreator.updatePlayerShopBox(this)); + this.broadcast(PacketCreator.getPlayerShopRemoveVisitor(i + 1)); + owner.getMap().broadcastMessage(PacketCreator.updatePlayerShopBox(this)); return; } } @@ -169,17 +169,17 @@ public class MaplePlayerShop extends AbstractMapleMapObject { visitor.setSlot(-1); //absolutely cant remove player slot for late players without dc'ing them... heh for(int j = i; j < 2; j++) { - if(visitors[j] != null) owner.announce(MaplePacketCreator.getPlayerShopRemoveVisitor(j + 1)); + if(visitors[j] != null) owner.announce(PacketCreator.getPlayerShopRemoveVisitor(j + 1)); visitors[j] = visitors[j + 1]; if(visitors[j] != null) visitors[j].setSlot(j); } visitors[2] = null; for(int j = i; j < 2; j++) { - if(visitors[j] != null) owner.announce(MaplePacketCreator.getPlayerShopNewVisitor(visitors[j], j + 1)); + if(visitors[j] != null) owner.announce(PacketCreator.getPlayerShopNewVisitor(visitors[j], j + 1)); } this.broadcastRestoreToVisitors(); - owner.getMap().broadcastMessage(MaplePacketCreator.updatePlayerShopBox(this)); + owner.getMap().broadcastMessage(PacketCreator.updatePlayerShopBox(this)); return; } } @@ -187,7 +187,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { visitorLock.unlock(); } - owner.getMap().broadcastMessage(MaplePacketCreator.updatePlayerShopBox(this)); + owner.getMap().broadcastMessage(PacketCreator.updatePlayerShopBox(this)); } } @@ -226,8 +226,8 @@ public class MaplePlayerShop extends AbstractMapleMapObject { iitem.setQuantity((short) (shopItem.getItem().getQuantity() * shopItem.getBundles())); if (!MapleInventory.checkSpot(chr, iitem)) { - chr.announce(MaplePacketCreator.serverNotice(1, "Have a slot available on your inventory to claim back the item.")); - chr.announce(MaplePacketCreator.enableActions()); + chr.announce(PacketCreator.serverNotice(1, "Have a slot available on your inventory to claim back the item.")); + chr.announce(PacketCreator.enableActions()); return; } @@ -235,7 +235,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } removeFromSlot(slot); - chr.announce(MaplePacketCreator.getPlayerShopItemUpdate(this)); + chr.announce(PacketCreator.getPlayerShopItemUpdate(this)); } } } @@ -254,10 +254,10 @@ public class MaplePlayerShop extends AbstractMapleMapObject { newItem.setQuantity((short) ((pItem.getItem().getQuantity() * quantity))); if (quantity < 1 || !pItem.isExist() || pItem.getBundles() < quantity) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } else if (newItem.getInventoryType().equals(MapleInventoryType.EQUIP) && newItem.getQuantity() > 1) { - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } @@ -270,7 +270,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { if (c.getPlayer().getMeso() >= price) { if (!owner.canHoldMeso(price)) { // thanks Rohenn for noticing owner hold check misplaced c.getPlayer().dropMessage(1, "Transaction failed since the shop owner can't hold any more mesos."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } @@ -280,7 +280,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { owner.gainMeso(price, true); SoldItem soldItem = new SoldItem(c.getPlayer().getName(), pItem.getItem().getItemId(), quantity, price); - owner.announce(MaplePacketCreator.getPlayerShopOwnerUpdate(soldItem, item)); + owner.announce(PacketCreator.getPlayerShopOwnerUpdate(soldItem, item)); synchronized (sold) { sold.add(soldItem); @@ -298,12 +298,12 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } } else { c.getPlayer().dropMessage(1, "Your inventory is full. Please clear a slot before buying this item."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } } else { c.getPlayer().dropMessage(1, "You don't have enough mesos to purchase this item."); - c.announce(MaplePacketCreator.enableActions()); + c.announce(PacketCreator.enableActions()); return false; } @@ -335,13 +335,13 @@ public class MaplePlayerShop extends AbstractMapleMapObject { try { for (int i = 0; i < 3; i++) { if (visitors[i] != null) { - visitors[i].getClient().announce(MaplePacketCreator.getPlayerShopRemoveVisitor(i + 1)); + visitors[i].getClient().announce(PacketCreator.getPlayerShopRemoveVisitor(i + 1)); } } for (int i = 0; i < 3; i++) { if (visitors[i] != null) { - visitors[i].getClient().announce(MaplePacketCreator.getPlayerShop(this, false)); + visitors[i].getClient().announce(PacketCreator.getPlayerShop(this, false)); } } @@ -359,7 +359,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { try { for (int i = 0; i < 3; i++) { if (visitors[i] != null) { - visitors[i].getClient().announce(MaplePacketCreator.shopErrorMessage(10, 1)); + visitors[i].getClient().announce(PacketCreator.shopErrorMessage(10, 1)); visitorList.add(visitors[i]); } } @@ -418,7 +418,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { chatSlot.put(c.getPlayer().getId(), s); } - broadcast(MaplePacketCreator.getPlayerShopChat(c.getPlayer(), chat, s)); + broadcast(PacketCreator.getPlayerShopChat(c.getPlayer(), chat, s)); } private void recoverChatLog() { @@ -427,7 +427,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { MapleCharacter chr = it.getLeft(); Byte pos = chatSlot.get(chr.getId()); - broadcastToVisitors(MaplePacketCreator.getPlayerShopChat(chr, it.getRight(), pos)); + broadcastToVisitors(PacketCreator.getPlayerShopChat(chr, it.getRight(), pos)); } } } @@ -441,13 +441,13 @@ public class MaplePlayerShop extends AbstractMapleMapObject { public void closeShop() { clearChatLog(); removeVisitors(); - owner.getMap().broadcastMessage(MaplePacketCreator.removePlayerShopBox(this)); + owner.getMap().broadcastMessage(PacketCreator.removePlayerShopBox(this)); } public void sendShop(MapleClient c) { visitorLock.lock(); try { - c.announce(MaplePacketCreator.getPlayerShop(this, isOwner(c.getPlayer()))); + c.announce(PacketCreator.getPlayerShop(this, isOwner(c.getPlayer()))); } finally { visitorLock.unlock(); } @@ -512,7 +512,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } if(target != null) { - target.getClient().announce(MaplePacketCreator.shopErrorMessage(5, 1)); + target.getClient().announce(PacketCreator.shopErrorMessage(5, 1)); removeVisitor(target); } } @@ -572,12 +572,12 @@ public class MaplePlayerShop extends AbstractMapleMapObject { @Override public void sendDestroyData(MapleClient client) { - client.announce(MaplePacketCreator.removePlayerShopBox(this)); + client.announce(PacketCreator.removePlayerShopBox(this)); } @Override public void sendSpawnData(MapleClient client) { - client.announce(MaplePacketCreator.updatePlayerShopBox(this)); + client.announce(PacketCreator.updatePlayerShopBox(this)); } @Override diff --git a/src/main/java/server/maps/MapleReactor.java b/src/main/java/server/maps/MapleReactor.java index a8e127e8c1..d821ded0f8 100644 --- a/src/main/java/server/maps/MapleReactor.java +++ b/src/main/java/server/maps/MapleReactor.java @@ -30,7 +30,7 @@ import net.server.services.type.ChannelServices; import scripting.reactor.ReactorScriptManager; import server.TimerManager; import server.partyquest.GuardianSpawnPoint; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import java.awt.*; @@ -170,7 +170,7 @@ public class MapleReactor extends AbstractMapleMapObject { } public final byte[] makeDestroyData() { - return MaplePacketCreator.destroyReactor(this); + return PacketCreator.destroyReactor(this); } @Override @@ -181,7 +181,7 @@ public class MapleReactor extends AbstractMapleMapObject { } public final byte[] makeSpawnData() { - return MaplePacketCreator.spawnReactor(this); + return PacketCreator.spawnReactor(this); } public void resetReactorActions(int newState) { @@ -199,7 +199,7 @@ public class MapleReactor extends AbstractMapleMapObject { this.lockReactor(); try { this.resetReactorActions(newState); - map.broadcastMessage(MaplePacketCreator.triggerReactor(this, (short) 0)); + map.broadcastMessage(PacketCreator.triggerReactor(this, (short) 0)); } finally { this.unlockReactor(); } @@ -212,7 +212,7 @@ public class MapleReactor extends AbstractMapleMapObject { try { this.resetReactorActions(newState); - map.broadcastMessage(MaplePacketCreator.triggerReactor(this, (short) 0)); + map.broadcastMessage(PacketCreator.triggerReactor(this, (short) 0)); } finally { reactorLock.unlock(); } @@ -278,15 +278,15 @@ public class MapleReactor extends AbstractMapleMapObject { if (delay > 0) { map.destroyReactor(getObjectId()); } else {//trigger as normal - map.broadcastMessage(MaplePacketCreator.triggerReactor(this, stance)); + map.broadcastMessage(PacketCreator.triggerReactor(this, stance)); } } else {//item-triggered on final step - map.broadcastMessage(MaplePacketCreator.triggerReactor(this, stance)); + map.broadcastMessage(PacketCreator.triggerReactor(this, stance)); } ReactorScriptManager.getInstance().act(c, this); } else { //reactor not broken yet - map.broadcastMessage(MaplePacketCreator.triggerReactor(this, stance)); + map.broadcastMessage(PacketCreator.triggerReactor(this, stance)); if (state == stats.getNextState(state, b)) {//current state = next state, looping reactor ReactorScriptManager.getInstance().act(c, this); } @@ -302,7 +302,7 @@ public class MapleReactor extends AbstractMapleMapObject { } } else { state++; - map.broadcastMessage(MaplePacketCreator.triggerReactor(this, stance)); + map.broadcastMessage(PacketCreator.triggerReactor(this, stance)); if (this.getId() != 9980000 && this.getId() != 9980001) { ReactorScriptManager.getInstance().act(c, this); } @@ -344,7 +344,7 @@ public class MapleReactor extends AbstractMapleMapObject { } } - map.broadcastMessage(MaplePacketCreator.destroyReactor(this)); + map.broadcastMessage(PacketCreator.destroyReactor(this)); return false; } diff --git a/src/main/java/server/maps/MapleSummon.java b/src/main/java/server/maps/MapleSummon.java index 5a1a677c25..714235f838 100644 --- a/src/main/java/server/maps/MapleSummon.java +++ b/src/main/java/server/maps/MapleSummon.java @@ -21,11 +21,12 @@ */ package server.maps; -import java.awt.Point; import client.MapleCharacter; import client.MapleClient; import client.SkillFactory; -import tools.MaplePacketCreator; +import tools.PacketCreator; + +import java.awt.*; /** * @@ -49,12 +50,12 @@ public class MapleSummon extends AbstractAnimatedMapleMapObject { @Override public void sendSpawnData(MapleClient client) { - client.announce(MaplePacketCreator.spawnSummon(this, false)); + client.announce(PacketCreator.spawnSummon(this, false)); } @Override public void sendDestroyData(MapleClient client) { - client.announce(MaplePacketCreator.removeSummon(this, true)); + client.announce(PacketCreator.removeSummon(this, true)); } public MapleCharacter getOwner() { diff --git a/src/main/java/server/maps/MapleTVEffect.java b/src/main/java/server/maps/MapleTVEffect.java index 00f250b85c..4576cb6ef2 100644 --- a/src/main/java/server/maps/MapleTVEffect.java +++ b/src/main/java/server/maps/MapleTVEffect.java @@ -24,7 +24,7 @@ package server.maps; import client.MapleCharacter; import net.server.Server; import server.TimerManager; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.List; @@ -51,8 +51,8 @@ public class MapleTVEffect { Server server = Server.getInstance(); ACTIVE[userWorld] = activity; if (activity) { - server.broadcastMessage(userWorld, MaplePacketCreator.enableTV()); - server.broadcastMessage(userWorld, MaplePacketCreator.sendTV(user, message, type <= 2 ? type : type - 3, partner)); + server.broadcastMessage(userWorld, PacketCreator.enableTV()); + server.broadcastMessage(userWorld, PacketCreator.sendTV(user, message, type <= 2 ? type : type - 3, partner)); int delay = 15000; if (type == 4) { delay = 30000; @@ -61,7 +61,7 @@ public class MapleTVEffect { } TimerManager.getInstance().schedule(() -> broadcastTV(false, userWorld, null, null, -1, null), delay); } else { - server.broadcastMessage(userWorld, MaplePacketCreator.removeTV()); + server.broadcastMessage(userWorld, PacketCreator.removeTV()); } } } diff --git a/src/main/java/server/minigame/MapleRockPaperScissor.java b/src/main/java/server/minigame/MapleRockPaperScissor.java index 16832abcc0..86b5b183b4 100644 --- a/src/main/java/server/minigame/MapleRockPaperScissor.java +++ b/src/main/java/server/minigame/MapleRockPaperScissor.java @@ -3,7 +3,7 @@ package server.minigame; import client.MapleClient; import client.inventory.Item; import client.inventory.manipulator.MapleInventoryManipulator; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; /** @@ -18,7 +18,7 @@ public class MapleRockPaperScissor{ private boolean win = false; public MapleRockPaperScissor(final MapleClient c, final byte mode){ - c.announce(MaplePacketCreator.rpsMode((byte) (9 + mode))); + c.announce(PacketCreator.rpsMode((byte) (9 + mode))); if(mode == 0){ c.getPlayer().gainMeso(-1000, true, true, true); } @@ -28,14 +28,14 @@ public class MapleRockPaperScissor{ if(ableAnswer && !win && answer >= 0 && answer <= 2){ final int response = Randomizer.nextInt(3); if(response == answer){ - c.announce(MaplePacketCreator.rpsSelection((byte) response, (byte) round)); + c.announce(PacketCreator.rpsSelection((byte) response, (byte) round)); // dont do anything. they can still answer once a draw }else if((answer == 0 && response == 2) || (answer == 1 && response == 0) || (answer == 2 && response == 1)){ // they win - c.announce(MaplePacketCreator.rpsSelection((byte) response, (byte) (round + 1))); + c.announce(PacketCreator.rpsSelection((byte) response, (byte) (round + 1))); ableAnswer = false; win = true; }else{ // they lose - c.announce(MaplePacketCreator.rpsSelection((byte) response, (byte) -1)); + c.announce(PacketCreator.rpsSelection((byte) response, (byte) -1)); ableAnswer = false; } return true; @@ -47,7 +47,7 @@ public class MapleRockPaperScissor{ public final boolean timeOut(final MapleClient c){ if(ableAnswer && !win){ ableAnswer = false; - c.announce(MaplePacketCreator.rpsMode((byte) 0x0A)); + c.announce(PacketCreator.rpsMode((byte) 0x0A)); return true; } reward(c); @@ -60,7 +60,7 @@ public class MapleRockPaperScissor{ if(round < 10){ win = false; ableAnswer = true; - c.announce(MaplePacketCreator.rpsMode((byte) 0x0C)); + c.announce(PacketCreator.rpsMode((byte) 0x0C)); return true; } else { round = 10; @@ -79,6 +79,6 @@ public class MapleRockPaperScissor{ public final void dispose(final MapleClient c){ reward(c); - c.announce(MaplePacketCreator.rpsMode((byte) 0x0D)); + c.announce(PacketCreator.rpsMode((byte) 0x0D)); } } diff --git a/src/main/java/server/partyquest/AriantColiseum.java b/src/main/java/server/partyquest/AriantColiseum.java index 0b08f79b3d..735a2d2ad1 100644 --- a/src/main/java/server/partyquest/AriantColiseum.java +++ b/src/main/java/server/partyquest/AriantColiseum.java @@ -25,7 +25,7 @@ import server.TimerManager; import server.expeditions.MapleExpedition; import server.expeditions.MapleExpeditionType; import server.maps.MapleMap; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.ArrayList; import java.util.HashMap; @@ -76,7 +76,7 @@ public class AriantColiseum { } for (MapleCharacter mc : players) { - mc.announce(MaplePacketCreator.updateAriantPQRanking(score)); + mc.announce(PacketCreator.updateAriantPQRanking(score)); } setAriantScoreBoard(TimerManager.getInstance().schedule(() -> showArenaResults(), pqTimerBoard)); @@ -144,7 +144,7 @@ public class AriantColiseum { private void broadcastAriantScoreUpdate() { if (scoreDirty) { for (MapleCharacter chr : score.keySet()) { - chr.announce(MaplePacketCreator.updateAriantPQRanking(score)); + chr.announce(PacketCreator.updateAriantPQRanking(score)); } scoreDirty = false; } @@ -193,7 +193,7 @@ public class AriantColiseum { eventClear = true; if (map != null) { - map.broadcastMessage(MaplePacketCreator.showAriantScoreBoard()); + map.broadcastMessage(PacketCreator.showAriantScoreBoard()); map.killAllMonsters(); distributeAriantPoints(); diff --git a/src/main/java/server/partyquest/MonsterCarnival.java b/src/main/java/server/partyquest/MonsterCarnival.java index ea1064eac6..3151a47d9a 100644 --- a/src/main/java/server/partyquest/MonsterCarnival.java +++ b/src/main/java/server/partyquest/MonsterCarnival.java @@ -10,7 +10,7 @@ import net.server.world.MaplePartyCharacter; import server.TimerManager; import server.maps.MapleMap; import server.maps.MapleReactor; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.concurrent.ScheduledFuture; @@ -346,7 +346,7 @@ public class MonsterCarnival { } startTime = System.currentTimeMillis() + 3 * 60 * 1000; - map.broadcastMessage(MaplePacketCreator.getClock(3 * 60)); + map.broadcastMessage(PacketCreator.getClock(3 * 60)); timer = TimerManager.getInstance().schedule(() -> timeUp(), map.getTimeExpand() * 1000); effectTimer = TimerManager.getInstance().schedule(() -> complete(), map.getTimeExpand() * 1000 - 10 * 1000); // thanks Vcoc for noticing a time set issue here @@ -374,12 +374,12 @@ public class MonsterCarnival { MapleCharacter mc = mpc.getPlayer(); if (mc != null) { if (redWin) { - mc.getClient().announce(MaplePacketCreator.showEffect("quest/carnival/win")); - mc.getClient().announce(MaplePacketCreator.playSound("MobCarnival/Win")); + mc.getClient().announce(PacketCreator.showEffect("quest/carnival/win")); + mc.getClient().announce(PacketCreator.playSound("MobCarnival/Win")); mc.dispelDebuffs(); } else { - mc.getClient().announce(MaplePacketCreator.showEffect("quest/carnival/lose")); - mc.getClient().announce(MaplePacketCreator.playSound("MobCarnival/Lose")); + mc.getClient().announce(PacketCreator.showEffect("quest/carnival/lose")); + mc.getClient().announce(PacketCreator.playSound("MobCarnival/Lose")); mc.dispelDebuffs(); } } @@ -388,12 +388,12 @@ public class MonsterCarnival { MapleCharacter mc = mpc.getPlayer(); if (mc != null) { if (!redWin) { - mc.getClient().announce(MaplePacketCreator.showEffect("quest/carnival/win")); - mc.getClient().announce(MaplePacketCreator.playSound("MobCarnival/Win")); + mc.getClient().announce(PacketCreator.showEffect("quest/carnival/win")); + mc.getClient().announce(PacketCreator.playSound("MobCarnival/Win")); mc.dispelDebuffs(); } else { - mc.getClient().announce(MaplePacketCreator.showEffect("quest/carnival/lose")); - mc.getClient().announce(MaplePacketCreator.playSound("MobCarnival/Lose")); + mc.getClient().announce(PacketCreator.showEffect("quest/carnival/lose")); + mc.getClient().announce(PacketCreator.playSound("MobCarnival/Lose")); mc.dispelDebuffs(); } } diff --git a/src/main/java/server/partyquest/MonsterCarnivalParty.java b/src/main/java/server/partyquest/MonsterCarnivalParty.java index ab57498e25..7058163bc2 100644 --- a/src/main/java/server/partyquest/MonsterCarnivalParty.java +++ b/src/main/java/server/partyquest/MonsterCarnivalParty.java @@ -1,10 +1,11 @@ package server.partyquest; import client.MapleCharacter; +import server.maps.MapleMap; +import tools.PacketCreator; + import java.util.LinkedList; import java.util.List; -import server.maps.MapleMap; -import tools.MaplePacketCreator; /** * @author Rob @@ -111,7 +112,7 @@ public class MonsterCarnivalParty { final String effect = winner ? "quest/carnival/win" : "quest/carnival/lose"; for (final MapleCharacter chr : members) { - chr.announce(MaplePacketCreator.showEffect(effect)); + chr.announce(PacketCreator.showEffect(effect)); } } diff --git a/src/main/java/server/partyquest/Pyramid.java b/src/main/java/server/partyquest/Pyramid.java index 7c9560afc1..ff737cb9d4 100644 --- a/src/main/java/server/partyquest/Pyramid.java +++ b/src/main/java/server/partyquest/Pyramid.java @@ -26,7 +26,7 @@ import client.MapleCharacter; import net.server.world.MapleParty; import server.MapleItemInformationProvider; import server.TimerManager; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.concurrent.ScheduledFuture; @@ -151,8 +151,8 @@ public class Pyramid extends PartyQuest { public void broadcastInfo(String info, int amount) { for (MapleCharacter chr : getParticipants()) { - chr.announce(MaplePacketCreator.getEnergy("massacre_" + info, amount)); - chr.announce(MaplePacketCreator.pyramidGauge(count)); + chr.announce(PacketCreator.getEnergy("massacre_" + info, amount)); + chr.announce(PacketCreator.pyramidGauge(count)); } } @@ -177,7 +177,7 @@ public class Pyramid extends PartyQuest { skill++; MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); for (MapleCharacter chr : getParticipants()) { - chr.announce(MaplePacketCreator.getEnergy("massacre_skill", skill)); + chr.announce(PacketCreator.getEnergy("massacre_skill", skill)); ii.getItemEffect(2022586).applyTo(chr); } } else if (buffcount == 2 && total >= 1000) { @@ -185,7 +185,7 @@ public class Pyramid extends PartyQuest { skill++; MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); for (MapleCharacter chr : getParticipants()) { - chr.announce(MaplePacketCreator.getEnergy("massacre_skill", skill)); + chr.announce(PacketCreator.getEnergy("massacre_skill", skill)); ii.getItemEffect(2022587).applyTo(chr); } } else if (buffcount == 3 && total >= 1500) { @@ -196,7 +196,7 @@ public class Pyramid extends PartyQuest { skill++; MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); for (MapleCharacter chr : getParticipants()) { - chr.announce(MaplePacketCreator.getEnergy("massacre_skill", skill)); + chr.announce(PacketCreator.getEnergy("massacre_skill", skill)); ii.getItemEffect(2022588).applyTo(chr); } } else if (buffcount == 5 && total >= 2500) { @@ -229,7 +229,7 @@ public class Pyramid extends PartyQuest { exp += ((kill * 2) + (cool * 10)); } - chr.announce(MaplePacketCreator.pyramidScore(rank, exp)); + chr.announce(PacketCreator.pyramidScore(rank, exp)); chr.gainExp(exp, true, true); } } diff --git a/src/main/java/server/quest/MapleQuest.java b/src/main/java/server/quest/MapleQuest.java index 5495a51726..6dbacf6e2c 100644 --- a/src/main/java/server/quest/MapleQuest.java +++ b/src/main/java/server/quest/MapleQuest.java @@ -32,7 +32,7 @@ import provider.MapleDataTool; import provider.wz.WZFiles; import server.quest.actions.*; import server.quest.requirements.*; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.StringUtil; import java.util.*; @@ -315,7 +315,7 @@ public class MapleQuest { return false; } if (timeLimit > 0) { - chr.announce(MaplePacketCreator.removeQuestTimeLimit(id)); + chr.announce(PacketCreator.removeQuestTimeLimit(id)); } MapleQuestStatus newStatus = new MapleQuestStatus(this, MapleQuestStatus.Status.NOT_STARTED); newStatus.setForfeited(chr.getQuest(this).getForfeited() + 1); @@ -361,7 +361,7 @@ public class MapleQuest { public boolean forceComplete(MapleCharacter chr, int npc) { if (timeLimit > 0) { - chr.announce(MaplePacketCreator.removeQuestTimeLimit(id)); + chr.announce(PacketCreator.removeQuestTimeLimit(id)); } MapleQuestStatus newStatus = new MapleQuestStatus(this, MapleQuestStatus.Status.COMPLETED, npc); @@ -370,8 +370,8 @@ public class MapleQuest { newStatus.setCompletionTime(System.currentTimeMillis()); chr.updateQuestStatus(newStatus); - chr.announce(MaplePacketCreator.showSpecialEffect(9)); // Quest completion - chr.getMap().broadcastMessage(chr, MaplePacketCreator.showForeignEffect(chr.getId(), 9), false); //use 9 instead of 12 for both + chr.announce(PacketCreator.showSpecialEffect(9)); // Quest completion + chr.getMap().broadcastMessage(chr, PacketCreator.showForeignEffect(chr.getId(), 9), false); //use 9 instead of 12 for both return true; } diff --git a/src/main/java/server/quest/actions/ItemAction.java b/src/main/java/server/quest/actions/ItemAction.java index 25271baa56..3cb5f02afc 100644 --- a/src/main/java/server/quest/actions/ItemAction.java +++ b/src/main/java/server/quest/actions/ItemAction.java @@ -33,7 +33,7 @@ import server.MapleItemInformationProvider; import server.quest.MapleQuest; import server.quest.MapleQuestActionType; import tools.FilePrinter; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.Randomizer; @@ -143,14 +143,14 @@ public class ItemAction extends MapleQuestAction { } MapleInventoryManipulator.removeById(chr.getClient(), type, itemid, quantity, true, false); - chr.announce(MaplePacketCreator.getShowItemGain(itemid, (short) count, true)); + chr.announce(PacketCreator.getShowItemGain(itemid, (short) count, true)); } for(ItemData iEntry: giveItem) { int itemid = iEntry.getId(), count = iEntry.getCount(), period = iEntry.getPeriod(); // thanks Vcoc for noticing quest milestone item not getting removed from inventory after a while MapleInventoryManipulator.addById(chr.getClient(), itemid, (short) count, "", -1, period > 0 ? (System.currentTimeMillis() + period * 60 * 1000) : -1); - chr.announce(MaplePacketCreator.getShowItemGain(itemid, (short) count, true)); + chr.announce(PacketCreator.getShowItemGain(itemid, (short) count, true)); } } diff --git a/src/main/java/server/quest/actions/NextQuestAction.java b/src/main/java/server/quest/actions/NextQuestAction.java index 234bfc95fd..b4598e9c4c 100644 --- a/src/main/java/server/quest/actions/NextQuestAction.java +++ b/src/main/java/server/quest/actions/NextQuestAction.java @@ -27,7 +27,7 @@ import provider.MapleData; import provider.MapleDataTool; import server.quest.MapleQuest; import server.quest.MapleQuestActionType; -import tools.MaplePacketCreator; +import tools.PacketCreator; /** * @@ -50,6 +50,6 @@ public class NextQuestAction extends MapleQuestAction { @Override public void run(MapleCharacter chr, Integer extSelection) { MapleQuestStatus status = chr.getQuest(MapleQuest.getInstance(questID)); - chr.announce(MaplePacketCreator.updateQuestFinish((short) questID, status.getNpc(), (short) nextQuest)); + chr.announce(PacketCreator.updateQuestFinish((short) questID, status.getNpc(), (short) nextQuest)); } } diff --git a/src/main/java/tools/LogHelper.java b/src/main/java/tools/LogHelper.java index 3a7e83ccf6..ceedac0648 100644 --- a/src/main/java/tools/LogHelper.java +++ b/src/main/java/tools/LogHelper.java @@ -35,7 +35,7 @@ public class LogHelper { } public static void logExpedition(MapleExpedition expedition) { - Server.getInstance().broadcastGMMessage(expedition.getLeader().getWorld(), MaplePacketCreator.serverNotice(6, expedition.getType().toString() + " Expedition with leader " + expedition.getLeader().getName() + " finished after " + getTimeString(expedition.getStartTime()))); + Server.getInstance().broadcastGMMessage(expedition.getLeader().getWorld(), PacketCreator.serverNotice(6, expedition.getType().toString() + " Expedition with leader " + expedition.getLeader().getName() + " finished after " + getTimeString(expedition.getStartTime()))); String log = expedition.getType().toString() + " EXPEDITION\r\n"; log += getTimeString(expedition.getStartTime()) + "\r\n"; diff --git a/src/main/java/tools/MaplePacketCreator.java b/src/main/java/tools/PacketCreator.java similarity index 99% rename from src/main/java/tools/MaplePacketCreator.java rename to src/main/java/tools/PacketCreator.java index 1c321610d5..d23bed5ae4 100644 --- a/src/main/java/tools/MaplePacketCreator.java +++ b/src/main/java/tools/PacketCreator.java @@ -81,7 +81,7 @@ import java.util.stream.Collectors; * * @author Frz */ -public class MaplePacketCreator { +public class PacketCreator { public static final List> EMPTY_STATUPDATE = Collections.emptyList(); private final static long FT_UT_OFFSET = 116444736010800000L + (10000L * TimeZone.getDefault().getOffset(System.currentTimeMillis())); // normalize with timezone offset suggested by Ari diff --git a/src/main/java/tools/packets/Fishing.java b/src/main/java/tools/packets/Fishing.java index d2daa766a6..b3a883b3c8 100644 --- a/src/main/java/tools/packets/Fishing.java +++ b/src/main/java/tools/packets/Fishing.java @@ -24,7 +24,7 @@ import config.YamlConfig; import constants.game.GameConstants; import constants.inventory.ItemConstants; import server.MapleItemInformationProvider; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.Calendar; @@ -119,8 +119,8 @@ public class Fishing { chr.getMap().dropMessage(6, chr.getName() + " found " + rewardStr); } - chr.announce(MaplePacketCreator.showInfo(fishingEffect)); - chr.getMap().broadcastMessage(chr, MaplePacketCreator.showForeignInfo(chr.getId(), fishingEffect), false); + chr.announce(PacketCreator.showInfo(fishingEffect)); + chr.getMap().broadcastMessage(chr, PacketCreator.showForeignInfo(chr.getId(), fishingEffect), false); } public static int getRandomItem(){ diff --git a/src/main/java/tools/packets/Wedding.java b/src/main/java/tools/packets/Wedding.java index fdf8231a3b..ab688c0e1c 100644 --- a/src/main/java/tools/packets/Wedding.java +++ b/src/main/java/tools/packets/Wedding.java @@ -6,14 +6,15 @@ package tools.packets; -import client.inventory.Item; import client.MapleCharacter; -import java.util.ArrayList; -import java.util.List; -import tools.MaplePacketCreator; +import client.inventory.Item; +import tools.PacketCreator; import tools.StringUtil; import tools.data.output.MaplePacketLittleEndianWriter; +import java.util.ArrayList; +import java.util.List; + /** * CField_Wedding, CField_WeddingPhoto, CWeddingMan, OnMarriageResult, and all Wedding/Marriage enum/structs. * @@ -21,7 +22,7 @@ import tools.data.output.MaplePacketLittleEndianWriter; * * Wishlists edited by Drago (Dragohe4rt) */ -public class Wedding extends MaplePacketCreator { +public class Wedding extends PacketCreator { private static final short MARRIAGE_REQUEST = 0x48; private static final short MARRIAGE_RESULT = 0x49; private static final short WEDDING_GIFT_RESULT = 0x4A; From e93428f4573e6eeabbbf9a78ff7ecbfb5e905883 Mon Sep 17 00:00:00 2001 From: P0nk Date: Thu, 19 Aug 2021 21:33:56 +0200 Subject: [PATCH 2/7] Reformat entire PacketCreator --- src/main/java/tools/PacketCreator.java | 16087 ++++++++++++----------- 1 file changed, 8051 insertions(+), 8036 deletions(-) diff --git a/src/main/java/tools/PacketCreator.java b/src/main/java/tools/PacketCreator.java index d23bed5ae4..fd539cc985 100644 --- a/src/main/java/tools/PacketCreator.java +++ b/src/main/java/tools/PacketCreator.java @@ -78,157 +78,156 @@ import java.util.Map.Entry; import java.util.stream.Collectors; /** - * * @author Frz */ public class PacketCreator { - public static final List> EMPTY_STATUPDATE = Collections.emptyList(); - private final static long FT_UT_OFFSET = 116444736010800000L + (10000L * TimeZone.getDefault().getOffset(System.currentTimeMillis())); // normalize with timezone offset suggested by Ari - private final static long DEFAULT_TIME = 150842304000000000L;//00 80 05 BB 46 E6 17 02 - public final static long ZERO_TIME = 94354848000000000L;//00 40 E0 FD 3B 37 4F 01 - private final static long PERMANENT = 150841440000000000L; // 00 C0 9B 90 7D E5 17 02 + public static final List> EMPTY_STATUPDATE = Collections.emptyList(); + private final static long FT_UT_OFFSET = 116444736010800000L + (10000L * TimeZone.getDefault().getOffset(System.currentTimeMillis())); // normalize with timezone offset suggested by Ari + private final static long DEFAULT_TIME = 150842304000000000L;//00 80 05 BB 46 E6 17 02 + public final static long ZERO_TIME = 94354848000000000L;//00 40 E0 FD 3B 37 4F 01 + private final static long PERMANENT = 150841440000000000L; // 00 C0 9B 90 7D E5 17 02 - private static long getTime(long utcTimestamp) { - if (utcTimestamp < 0 && utcTimestamp >= -3) { - if (utcTimestamp == -1) { - return DEFAULT_TIME; //high number ll - } else if (utcTimestamp == -2) { - return ZERO_TIME; - } else { - return PERMANENT; - } - } - - return utcTimestamp * 10000 + FT_UT_OFFSET; - } - - public static byte[] showHpHealed(int cid, int amount) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(0x0A); //Type - mplew.write(amount); - return mplew.getPacket(); - } - - private static void addRemainingSkillInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - int[] remainingSp = chr.getRemainingSps(); - int effectiveLength = 0; - for (int j : remainingSp) { - if (j > 0) { - effectiveLength++; - } + private static long getTime(long utcTimestamp) { + if (utcTimestamp < 0 && utcTimestamp >= -3) { + if (utcTimestamp == -1) { + return DEFAULT_TIME; //high number ll + } else if (utcTimestamp == -2) { + return ZERO_TIME; + } else { + return PERMANENT; } - - mplew.write(effectiveLength); - for (int i = 0; i < remainingSp.length; i++) { - if (remainingSp[i] > 0) { - mplew.write(i + 1); - mplew.write(remainingSp[i]); - } - } - } - - private static void addCharStats(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.writeInt(chr.getId()); // character id - mplew.writeAsciiString(StringUtil.getRightPaddedStr(chr.getName(), '\0', 13)); - mplew.write(chr.getGender()); // gender (0 = male, 1 = female) - mplew.write(chr.getSkinColor().getId()); // skin color - mplew.writeInt(chr.getFace()); // face - mplew.writeInt(chr.getHair()); // hair - - for (int i = 0; i < 3; i++) { - MaplePet pet = chr.getPet(i); - if (pet != null) //Checked GMS.. and your pets stay when going into the cash shop. - { - mplew.writeLong(pet.getUniqueId()); - } else { - mplew.writeLong(0); - } - } - - mplew.write(chr.getLevel()); // level - mplew.writeShort(chr.getJob().getId()); // job - mplew.writeShort(chr.getStr()); // str - mplew.writeShort(chr.getDex()); // dex - mplew.writeShort(chr.getInt()); // int - mplew.writeShort(chr.getLuk()); // luk - mplew.writeShort(chr.getHp()); // hp (?) - mplew.writeShort(chr.getClientMaxHp()); // maxhp - mplew.writeShort(chr.getMp()); // mp (?) - mplew.writeShort(chr.getClientMaxMp()); // maxmp - mplew.writeShort(chr.getRemainingAp()); // remaining ap - if (GameConstants.hasSPTable(chr.getJob())) { - addRemainingSkillInfo(mplew, chr); - } else { - mplew.writeShort(chr.getRemainingSp()); // remaining sp - } - mplew.writeInt(chr.getExp()); // current exp - mplew.writeShort(chr.getFame()); // fame - mplew.writeInt(chr.getGachaExp()); //Gacha Exp - mplew.writeInt(chr.getMapId()); // current map id - mplew.write(chr.getInitialSpawnpoint()); // spawnpoint - mplew.writeInt(0); } - protected static void addCharLook(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr, boolean mega) { - mplew.write(chr.getGender()); - mplew.write(chr.getSkinColor().getId()); // skin color - mplew.writeInt(chr.getFace()); // face - mplew.write(mega ? 0 : 1); - mplew.writeInt(chr.getHair()); // hair - addCharEquips(mplew, chr); + return utcTimestamp * 10000 + FT_UT_OFFSET; + } + + public static byte[] showHpHealed(int cid, int amount) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); + mplew.writeInt(cid); + mplew.write(0x0A); //Type + mplew.write(amount); + return mplew.getPacket(); + } + + private static void addRemainingSkillInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + int[] remainingSp = chr.getRemainingSps(); + int effectiveLength = 0; + for (int j : remainingSp) { + if (j > 0) { + effectiveLength++; + } } - private static void addCharacterInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.writeLong(-1); - mplew.write(0); - addCharStats(mplew, chr); - mplew.write(chr.getBuddylist().getCapacity()); + mplew.write(effectiveLength); + for (int i = 0; i < remainingSp.length; i++) { + if (remainingSp[i] > 0) { + mplew.write(i + 1); + mplew.write(remainingSp[i]); + } + } + } - if (chr.getLinkedName() == null) { - mplew.write(0); - } else { - mplew.write(1); - mplew.writeMapleAsciiString(chr.getLinkedName()); - } + private static void addCharStats(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + mplew.writeInt(chr.getId()); // character id + mplew.writeAsciiString(StringUtil.getRightPaddedStr(chr.getName(), '\0', 13)); + mplew.write(chr.getGender()); // gender (0 = male, 1 = female) + mplew.write(chr.getSkinColor().getId()); // skin color + mplew.writeInt(chr.getFace()); // face + mplew.writeInt(chr.getHair()); // hair - mplew.writeInt(chr.getMeso()); - addInventoryInfo(mplew, chr); - addSkillInfo(mplew, chr); - addQuestInfo(mplew, chr); - addMiniGameInfo(mplew, chr); - addRingInfo(mplew, chr); - addTeleportInfo(mplew, chr); - addMonsterBookInfo(mplew, chr); - addNewYearInfo(mplew, chr); - addAreaInfo(mplew, chr);//assuming it stayed here xd - mplew.writeShort(0); + for (int i = 0; i < 3; i++) { + MaplePet pet = chr.getPet(i); + if (pet != null) //Checked GMS.. and your pets stay when going into the cash shop. + { + mplew.writeLong(pet.getUniqueId()); + } else { + mplew.writeLong(0); + } } - private static void addNewYearInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - Set received = chr.getReceivedNewYearRecords(); - - mplew.writeShort(received.size()); - for(NewYearCardRecord nyc : received) { - encodeNewYearCard(nyc, mplew); - } + mplew.write(chr.getLevel()); // level + mplew.writeShort(chr.getJob().getId()); // job + mplew.writeShort(chr.getStr()); // str + mplew.writeShort(chr.getDex()); // dex + mplew.writeShort(chr.getInt()); // int + mplew.writeShort(chr.getLuk()); // luk + mplew.writeShort(chr.getHp()); // hp (?) + mplew.writeShort(chr.getClientMaxHp()); // maxhp + mplew.writeShort(chr.getMp()); // mp (?) + mplew.writeShort(chr.getClientMaxMp()); // maxmp + mplew.writeShort(chr.getRemainingAp()); // remaining ap + if (GameConstants.hasSPTable(chr.getJob())) { + addRemainingSkillInfo(mplew, chr); + } else { + mplew.writeShort(chr.getRemainingSp()); // remaining sp + } + mplew.writeInt(chr.getExp()); // current exp + mplew.writeShort(chr.getFame()); // fame + mplew.writeInt(chr.getGachaExp()); //Gacha Exp + mplew.writeInt(chr.getMapId()); // current map id + mplew.write(chr.getInitialSpawnpoint()); // spawnpoint + mplew.writeInt(0); + } + + protected static void addCharLook(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr, boolean mega) { + mplew.write(chr.getGender()); + mplew.write(chr.getSkinColor().getId()); // skin color + mplew.writeInt(chr.getFace()); // face + mplew.write(mega ? 0 : 1); + mplew.writeInt(chr.getHair()); // hair + addCharEquips(mplew, chr); + } + + private static void addCharacterInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + mplew.writeLong(-1); + mplew.write(0); + addCharStats(mplew, chr); + mplew.write(chr.getBuddylist().getCapacity()); + + if (chr.getLinkedName() == null) { + mplew.write(0); + } else { + mplew.write(1); + mplew.writeMapleAsciiString(chr.getLinkedName()); } - private static void addTeleportInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - final List tele = chr.getTrockMaps(); - final List viptele = chr.getVipTrockMaps(); - for (int i = 0; i < 5; i++) { - mplew.writeInt(tele.get(i)); - } - for (int i = 0; i < 10; i++) { - mplew.writeInt(viptele.get(i)); - } - } + mplew.writeInt(chr.getMeso()); + addInventoryInfo(mplew, chr); + addSkillInfo(mplew, chr); + addQuestInfo(mplew, chr); + addMiniGameInfo(mplew, chr); + addRingInfo(mplew, chr); + addTeleportInfo(mplew, chr); + addMonsterBookInfo(mplew, chr); + addNewYearInfo(mplew, chr); + addAreaInfo(mplew, chr);//assuming it stayed here xd + mplew.writeShort(0); + } - private static void addMiniGameInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.writeShort(0); + private static void addNewYearInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + Set received = chr.getReceivedNewYearRecords(); + + mplew.writeShort(received.size()); + for (NewYearCardRecord nyc : received) { + encodeNewYearCard(nyc, mplew); + } + } + + private static void addTeleportInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + final List tele = chr.getTrockMaps(); + final List viptele = chr.getVipTrockMaps(); + for (int i = 0; i < 5; i++) { + mplew.writeInt(tele.get(i)); + } + for (int i = 0; i < 10; i++) { + mplew.writeInt(viptele.get(i)); + } + } + + private static void addMiniGameInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + mplew.writeShort(0); /*for (int m = size; m > 0; m--) {//nexon does this :P mplew.writeInt(0); mplew.writeInt(0); @@ -236,2138 +235,2144 @@ public class PacketCreator { mplew.writeInt(0); mplew.writeInt(0); }*/ - } + } - private static void addAreaInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - Map areaInfos = chr.getAreaInfos(); - mplew.writeShort(areaInfos.size()); - for (Short area : areaInfos.keySet()) { - mplew.writeShort(area); - mplew.writeMapleAsciiString(areaInfos.get(area)); - } + private static void addAreaInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + Map areaInfos = chr.getAreaInfos(); + mplew.writeShort(areaInfos.size()); + for (Short area : areaInfos.keySet()) { + mplew.writeShort(area); + mplew.writeMapleAsciiString(areaInfos.get(area)); } + } - private static void addCharEquips(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - MapleInventory equip = chr.getInventory(MapleInventoryType.EQUIPPED); - Collection ii = MapleItemInformationProvider.getInstance().canWearEquipment(chr, equip.list()); - Map myEquip = new LinkedHashMap<>(); - Map maskedEquip = new LinkedHashMap<>(); - for (Item item : ii) { - short pos = (byte) (item.getPosition() * -1); - if (pos < 100 && myEquip.get(pos) == null) { - myEquip.put(pos, item.getItemId()); - } else if (pos > 100 && pos != 111) { // don't ask. o.o - pos -= 100; - if (myEquip.get(pos) != null) { - maskedEquip.put(pos, myEquip.get(pos)); - } - myEquip.put(pos, item.getItemId()); - } else if (myEquip.get(pos) != null) { - maskedEquip.put(pos, item.getItemId()); - } - } - for (Entry entry : myEquip.entrySet()) { - mplew.write(entry.getKey()); - mplew.writeInt(entry.getValue()); - } - mplew.write(0xFF); - for (Entry entry : maskedEquip.entrySet()) { - mplew.write(entry.getKey()); - mplew.writeInt(entry.getValue()); - } - mplew.write(0xFF); - Item cWeapon = equip.getItem((short) -111); - mplew.writeInt(cWeapon != null ? cWeapon.getItemId() : 0); - for (int i = 0; i < 3; i++) { - if (chr.getPet(i) != null) { - mplew.writeInt(chr.getPet(i).getItemId()); - } else { - mplew.writeInt(0); - } + private static void addCharEquips(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + MapleInventory equip = chr.getInventory(MapleInventoryType.EQUIPPED); + Collection ii = MapleItemInformationProvider.getInstance().canWearEquipment(chr, equip.list()); + Map myEquip = new LinkedHashMap<>(); + Map maskedEquip = new LinkedHashMap<>(); + for (Item item : ii) { + short pos = (byte) (item.getPosition() * -1); + if (pos < 100 && myEquip.get(pos) == null) { + myEquip.put(pos, item.getItemId()); + } else if (pos > 100 && pos != 111) { // don't ask. o.o + pos -= 100; + if (myEquip.get(pos) != null) { + maskedEquip.put(pos, myEquip.get(pos)); } + myEquip.put(pos, item.getItemId()); + } else if (myEquip.get(pos) != null) { + maskedEquip.put(pos, item.getItemId()); + } } - - public static byte[] setExtraPendantSlot(boolean toggleExtraSlot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_EXTRA_PENDANT_SLOT.getValue()); - mplew.writeBool(toggleExtraSlot); - return mplew.getPacket(); + for (Entry entry : myEquip.entrySet()) { + mplew.write(entry.getKey()); + mplew.writeInt(entry.getValue()); } - - private static void addCharEntry(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr, boolean viewall) { - addCharStats(mplew, chr); - addCharLook(mplew, chr, false); - if (!viewall) { - mplew.write(0); - } - if (chr.isGM() || chr.isGmJob()) { // thanks Daddy Egg (Ubaware), resinate for noticing GM jobs crashing on non-GM players account - mplew.write(0); - return; - } - mplew.write(1); // world rank enabled (next 4 ints are not sent if disabled) Short?? - mplew.writeInt(chr.getRank()); // world rank - mplew.writeInt(chr.getRankMove()); // move (negative is downwards) - mplew.writeInt(chr.getJobRank()); // job rank - mplew.writeInt(chr.getJobRankMove()); // move (negative is downwards) + mplew.write(0xFF); + for (Entry entry : maskedEquip.entrySet()) { + mplew.write(entry.getKey()); + mplew.writeInt(entry.getValue()); } - - private static void addQuestInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - List started = chr.getStartedQuests(); - int startedSize = 0; - for (MapleQuestStatus qs : started) { - if (qs.getInfoNumber() > 0) { - startedSize++; - } - startedSize++; - } - mplew.writeShort(startedSize); - for (MapleQuestStatus qs : started) { - mplew.writeShort(qs.getQuest().getId()); - mplew.writeMapleAsciiString(qs.getProgressData()); - - short infoNumber = qs.getInfoNumber(); - if (infoNumber > 0) { - MapleQuestStatus iqs = chr.getQuest(infoNumber); - mplew.writeShort(infoNumber); - mplew.writeMapleAsciiString(iqs.getProgressData()); - } - } - List completed = chr.getCompletedQuests(); - mplew.writeShort(completed.size()); - for (MapleQuestStatus qs : completed) { - mplew.writeShort(qs.getQuest().getId()); - mplew.writeLong(getTime(qs.getCompletionTime())); - } - } - - private static void addExpirationTime(final MaplePacketLittleEndianWriter mplew, long time) { - mplew.writeLong(getTime(time)); // offset expiration time issue found thanks to Thora - } - - private static void addItemInfo(final MaplePacketLittleEndianWriter mplew, Item item) { - addItemInfo(mplew, item, false); - } - - protected static void addItemInfo(final MaplePacketLittleEndianWriter mplew, Item item, boolean zeroPosition) { - MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); - boolean isCash = ii.isCash(item.getItemId()); - boolean isPet = item.getPetId() > -1; - boolean isRing = false; - Equip equip = null; - short pos = item.getPosition(); - byte itemType = item.getItemType(); - if (itemType == 1) { - equip = (Equip) item; - isRing = equip.getRingId() > -1; - } - if (!zeroPosition) { - if (equip != null) { - if (pos < 0) { - pos *= -1; - } - mplew.writeShort(pos > 100 ? pos - 100 : pos); - } else { - mplew.write(pos); - } - } - mplew.write(itemType); - mplew.writeInt(item.getItemId()); - mplew.writeBool(isCash); - if (isCash) { - mplew.writeLong(isPet ? item.getPetId() : isRing ? equip.getRingId() : item.getCashId()); - } - addExpirationTime(mplew, item.getExpiration()); - if (isPet) { - MaplePet pet = item.getPet(); - mplew.writeAsciiString(StringUtil.getRightPaddedStr(pet.getName(), '\0', 13)); - mplew.write(pet.getLevel()); - mplew.writeShort(pet.getCloseness()); - mplew.write(pet.getFullness()); - addExpirationTime(mplew, item.getExpiration()); - mplew.writeInt(pet.getPetFlag()); /* pet flags noticed by lrenex & Spoon */ - - mplew.write(new byte[]{(byte) 0x50, (byte) 0x46}); //wonder what this is - mplew.writeInt(0); - return; - } - if (equip == null) { - mplew.writeShort(item.getQuantity()); - mplew.writeMapleAsciiString(item.getOwner()); - mplew.writeShort(item.getFlag()); // flag - - if (ItemConstants.isRechargeable(item.getItemId())) { - mplew.writeInt(2); - mplew.write(new byte[]{(byte) 0x54, 0, 0, (byte) 0x34}); - } - return; - } - mplew.write(equip.getUpgradeSlots()); // upgrade slots - mplew.write(equip.getLevel()); // level - mplew.writeShort(equip.getStr()); // str - mplew.writeShort(equip.getDex()); // dex - mplew.writeShort(equip.getInt()); // int - mplew.writeShort(equip.getLuk()); // luk - mplew.writeShort(equip.getHp()); // hp - mplew.writeShort(equip.getMp()); // mp - mplew.writeShort(equip.getWatk()); // watk - mplew.writeShort(equip.getMatk()); // matk - mplew.writeShort(equip.getWdef()); // wdef - mplew.writeShort(equip.getMdef()); // mdef - mplew.writeShort(equip.getAcc()); // accuracy - mplew.writeShort(equip.getAvoid()); // avoid - mplew.writeShort(equip.getHands()); // hands - mplew.writeShort(equip.getSpeed()); // speed - mplew.writeShort(equip.getJump()); // jump - mplew.writeMapleAsciiString(equip.getOwner()); // owner name - mplew.writeShort(equip.getFlag()); //Item Flags - - if (isCash) { - for (int i = 0; i < 10; i++) { - mplew.write(0x40); - } - } else { - int itemLevel = equip.getItemLevel(); - - long expNibble = (ExpTable.getExpNeededForLevel(ii.getEquipLevelReq(item.getItemId())) * equip.getItemExp()); - expNibble /= ExpTable.getEquipExpNeededForLevel(itemLevel); - - mplew.write(0); - mplew.write(itemLevel); //Item Level - mplew.writeInt((int) expNibble); - mplew.writeInt(equip.getVicious()); //WTF NEXON ARE YOU SERIOUS? - mplew.writeLong(0); - } - mplew.writeLong(getTime(-2)); - mplew.writeInt(-1); - - } - - private static void addInventoryInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - for (byte i = 1; i <= 5; i++) { - mplew.write(chr.getInventory(MapleInventoryType.getByType(i)).getSlotLimit()); - } - mplew.writeLong(getTime(-2)); - MapleInventory iv = chr.getInventory(MapleInventoryType.EQUIPPED); - Collection equippedC = iv.list(); - List equipped = new ArrayList<>(equippedC.size()); - List equippedCash = new ArrayList<>(equippedC.size()); - for (Item item : equippedC) { - if (item.getPosition() <= -100) { - equippedCash.add(item); - } else { - equipped.add(item); - } - } - for (Item item : equipped) { // equipped doesn't actually need sorting, thanks Pllsz - addItemInfo(mplew, item); - } - mplew.writeShort(0); // start of equip cash - for (Item item : equippedCash) { - addItemInfo(mplew, item); - } - mplew.writeShort(0); // start of equip inventory - for (Item item : chr.getInventory(MapleInventoryType.EQUIP).list()) { - addItemInfo(mplew, item); - } + mplew.write(0xFF); + Item cWeapon = equip.getItem((short) -111); + mplew.writeInt(cWeapon != null ? cWeapon.getItemId() : 0); + for (int i = 0; i < 3; i++) { + if (chr.getPet(i) != null) { + mplew.writeInt(chr.getPet(i).getItemId()); + } else { mplew.writeInt(0); - for (Item item : chr.getInventory(MapleInventoryType.USE).list()) { - addItemInfo(mplew, item); - } - mplew.write(0); - for (Item item : chr.getInventory(MapleInventoryType.SETUP).list()) { - addItemInfo(mplew, item); - } - mplew.write(0); - for (Item item : chr.getInventory(MapleInventoryType.ETC).list()) { - addItemInfo(mplew, item); - } - mplew.write(0); - for (Item item : chr.getInventory(MapleInventoryType.CASH).list()) { - addItemInfo(mplew, item); + } + } + } + + public static byte[] setExtraPendantSlot(boolean toggleExtraSlot) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SET_EXTRA_PENDANT_SLOT.getValue()); + mplew.writeBool(toggleExtraSlot); + return mplew.getPacket(); + } + + private static void addCharEntry(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr, boolean viewall) { + addCharStats(mplew, chr); + addCharLook(mplew, chr, false); + if (!viewall) { + mplew.write(0); + } + if (chr.isGM() || chr.isGmJob()) { // thanks Daddy Egg (Ubaware), resinate for noticing GM jobs crashing on non-GM players account + mplew.write(0); + return; + } + mplew.write(1); // world rank enabled (next 4 ints are not sent if disabled) Short?? + mplew.writeInt(chr.getRank()); // world rank + mplew.writeInt(chr.getRankMove()); // move (negative is downwards) + mplew.writeInt(chr.getJobRank()); // job rank + mplew.writeInt(chr.getJobRankMove()); // move (negative is downwards) + } + + private static void addQuestInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + List started = chr.getStartedQuests(); + int startedSize = 0; + for (MapleQuestStatus qs : started) { + if (qs.getInfoNumber() > 0) { + startedSize++; + } + startedSize++; + } + mplew.writeShort(startedSize); + for (MapleQuestStatus qs : started) { + mplew.writeShort(qs.getQuest().getId()); + mplew.writeMapleAsciiString(qs.getProgressData()); + + short infoNumber = qs.getInfoNumber(); + if (infoNumber > 0) { + MapleQuestStatus iqs = chr.getQuest(infoNumber); + mplew.writeShort(infoNumber); + mplew.writeMapleAsciiString(iqs.getProgressData()); + } + } + List completed = chr.getCompletedQuests(); + mplew.writeShort(completed.size()); + for (MapleQuestStatus qs : completed) { + mplew.writeShort(qs.getQuest().getId()); + mplew.writeLong(getTime(qs.getCompletionTime())); + } + } + + private static void addExpirationTime(final MaplePacketLittleEndianWriter mplew, long time) { + mplew.writeLong(getTime(time)); // offset expiration time issue found thanks to Thora + } + + private static void addItemInfo(final MaplePacketLittleEndianWriter mplew, Item item) { + addItemInfo(mplew, item, false); + } + + protected static void addItemInfo(final MaplePacketLittleEndianWriter mplew, Item item, boolean zeroPosition) { + MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); + boolean isCash = ii.isCash(item.getItemId()); + boolean isPet = item.getPetId() > -1; + boolean isRing = false; + Equip equip = null; + short pos = item.getPosition(); + byte itemType = item.getItemType(); + if (itemType == 1) { + equip = (Equip) item; + isRing = equip.getRingId() > -1; + } + if (!zeroPosition) { + if (equip != null) { + if (pos < 0) { + pos *= -1; } + mplew.writeShort(pos > 100 ? pos - 100 : pos); + } else { + mplew.write(pos); + } + } + mplew.write(itemType); + mplew.writeInt(item.getItemId()); + mplew.writeBool(isCash); + if (isCash) { + mplew.writeLong(isPet ? item.getPetId() : isRing ? equip.getRingId() : item.getCashId()); + } + addExpirationTime(mplew, item.getExpiration()); + if (isPet) { + MaplePet pet = item.getPet(); + mplew.writeAsciiString(StringUtil.getRightPaddedStr(pet.getName(), '\0', 13)); + mplew.write(pet.getLevel()); + mplew.writeShort(pet.getCloseness()); + mplew.write(pet.getFullness()); + addExpirationTime(mplew, item.getExpiration()); + mplew.writeInt(pet.getPetFlag()); /* pet flags noticed by lrenex & Spoon */ + + mplew.write(new byte[]{(byte) 0x50, (byte) 0x46}); //wonder what this is + mplew.writeInt(0); + return; + } + if (equip == null) { + mplew.writeShort(item.getQuantity()); + mplew.writeMapleAsciiString(item.getOwner()); + mplew.writeShort(item.getFlag()); // flag + + if (ItemConstants.isRechargeable(item.getItemId())) { + mplew.writeInt(2); + mplew.write(new byte[]{(byte) 0x54, 0, 0, (byte) 0x34}); + } + return; + } + mplew.write(equip.getUpgradeSlots()); // upgrade slots + mplew.write(equip.getLevel()); // level + mplew.writeShort(equip.getStr()); // str + mplew.writeShort(equip.getDex()); // dex + mplew.writeShort(equip.getInt()); // int + mplew.writeShort(equip.getLuk()); // luk + mplew.writeShort(equip.getHp()); // hp + mplew.writeShort(equip.getMp()); // mp + mplew.writeShort(equip.getWatk()); // watk + mplew.writeShort(equip.getMatk()); // matk + mplew.writeShort(equip.getWdef()); // wdef + mplew.writeShort(equip.getMdef()); // mdef + mplew.writeShort(equip.getAcc()); // accuracy + mplew.writeShort(equip.getAvoid()); // avoid + mplew.writeShort(equip.getHands()); // hands + mplew.writeShort(equip.getSpeed()); // speed + mplew.writeShort(equip.getJump()); // jump + mplew.writeMapleAsciiString(equip.getOwner()); // owner name + mplew.writeShort(equip.getFlag()); //Item Flags + + if (isCash) { + for (int i = 0; i < 10; i++) { + mplew.write(0x40); + } + } else { + int itemLevel = equip.getItemLevel(); + + long expNibble = (ExpTable.getExpNeededForLevel(ii.getEquipLevelReq(item.getItemId())) * equip.getItemExp()); + expNibble /= ExpTable.getEquipExpNeededForLevel(itemLevel); + + mplew.write(0); + mplew.write(itemLevel); //Item Level + mplew.writeInt((int) expNibble); + mplew.writeInt(equip.getVicious()); //WTF NEXON ARE YOU SERIOUS? + mplew.writeLong(0); + } + mplew.writeLong(getTime(-2)); + mplew.writeInt(-1); + + } + + private static void addInventoryInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + for (byte i = 1; i <= 5; i++) { + mplew.write(chr.getInventory(MapleInventoryType.getByType(i)).getSlotLimit()); + } + mplew.writeLong(getTime(-2)); + MapleInventory iv = chr.getInventory(MapleInventoryType.EQUIPPED); + Collection equippedC = iv.list(); + List equipped = new ArrayList<>(equippedC.size()); + List equippedCash = new ArrayList<>(equippedC.size()); + for (Item item : equippedC) { + if (item.getPosition() <= -100) { + equippedCash.add(item); + } else { + equipped.add(item); + } + } + for (Item item : equipped) { // equipped doesn't actually need sorting, thanks Pllsz + addItemInfo(mplew, item); + } + mplew.writeShort(0); // start of equip cash + for (Item item : equippedCash) { + addItemInfo(mplew, item); + } + mplew.writeShort(0); // start of equip inventory + for (Item item : chr.getInventory(MapleInventoryType.EQUIP).list()) { + addItemInfo(mplew, item); + } + mplew.writeInt(0); + for (Item item : chr.getInventory(MapleInventoryType.USE).list()) { + addItemInfo(mplew, item); + } + mplew.write(0); + for (Item item : chr.getInventory(MapleInventoryType.SETUP).list()) { + addItemInfo(mplew, item); + } + mplew.write(0); + for (Item item : chr.getInventory(MapleInventoryType.ETC).list()) { + addItemInfo(mplew, item); + } + mplew.write(0); + for (Item item : chr.getInventory(MapleInventoryType.CASH).list()) { + addItemInfo(mplew, item); + } + } + + private static void addSkillInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + mplew.write(0); // start of skills + Map skills = chr.getSkills(); + int skillsSize = skills.size(); + // We don't want to include any hidden skill in this, so subtract them from the size list and ignore them. + for (Entry skill : skills.entrySet()) { + if (GameConstants.isHiddenSkills(skill.getKey().getId())) { + skillsSize--; + } + } + mplew.writeShort(skillsSize); + for (Entry skill : skills.entrySet()) { + if (GameConstants.isHiddenSkills(skill.getKey().getId())) { + continue; + } + mplew.writeInt(skill.getKey().getId()); + mplew.writeInt(skill.getValue().skillevel); + addExpirationTime(mplew, skill.getValue().expiration); + if (skill.getKey().isFourthJob()) { + mplew.writeInt(skill.getValue().masterlevel); + } + } + mplew.writeShort(chr.getAllCooldowns().size()); + for (PlayerCoolDownValueHolder cooling : chr.getAllCooldowns()) { + mplew.writeInt(cooling.skillId); + int timeLeft = (int) (cooling.length + cooling.startTime - System.currentTimeMillis()); + mplew.writeShort(timeLeft / 1000); + } + } + + private static void addMonsterBookInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + mplew.writeInt(chr.getMonsterBookCover()); // cover + mplew.write(0); + Map cards = chr.getMonsterBook().getCards(); + mplew.writeShort(cards.size()); + for (Entry all : cards.entrySet()) { + mplew.writeShort(all.getKey() % 10000); // Id + mplew.write(all.getValue()); // Level + } + } + + public static byte[] sendGuestTOS() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUEST_ID_LOGIN.getValue()); + mplew.writeShort(0x100); + mplew.writeInt(Randomizer.nextInt(999999)); + mplew.writeLong(0); + mplew.writeLong(getTime(-2)); + mplew.writeLong(getTime(System.currentTimeMillis())); + mplew.writeInt(0); + mplew.writeMapleAsciiString("http://maplesolaxia.com"); + return mplew.getPacket(); + } + + /** + * Sends a hello packet. + * + * @param mapleVersion The maple client version. + * @param sendIv the IV in use by the server for sending + * @param recvIv the IV in use by the server for receiving + * @return + */ + public static byte[] getHello(short mapleVersion, InitializationVector sendIv, InitializationVector recvIv) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); + mplew.writeShort(0x0E); + mplew.writeShort(mapleVersion); + mplew.writeShort(1); + mplew.write(49); + mplew.write(recvIv.getBytes()); + mplew.write(sendIv.getBytes()); + mplew.write(8); + return mplew.getPacket(); + } + + /** + * Sends a ping packet. + * + * @return The packet. + */ + public static byte[] getPing() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(2); + mplew.writeShort(SendOpcode.PING.getValue()); + return mplew.getPacket(); + } + + /** + * Gets a login failed packet. + *

+ * Possible values for reason:
3: ID deleted or blocked
+ * 4: Incorrect password
5: Not a registered id
6: System error
+ * 7: Already logged in
8: System error
9: System error
10: + * Cannot process so many connections
11: Only users older than 20 can + * use this channel
13: Unable to log on as master at this ip
14: + * Wrong gateway or personal info and weird korean button
15: Processing + * request with that korean button!
16: Please verify your account + * through email...
17: Wrong gateway or personal info
21: Please + * verify your account through email...
23: License agreement
25: + * Maple Europe notice =[ FUCK YOU NEXON
27: Some weird full client + * notice, probably for trial versions
+ * + * @param reason The reason logging in failed. + * @return The login failed packet. + */ + public static byte[] getLoginFailed(int reason) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); + mplew.writeShort(SendOpcode.LOGIN_STATUS.getValue()); + mplew.write(reason); + mplew.write(0); + mplew.writeInt(0); + return mplew.getPacket(); + } + + /** + * Gets a login failed packet. + *

+ * Possible values for reason:
2: ID deleted or blocked
+ * 3: ID deleted or blocked
4: Incorrect password
5: Not a + * registered id
6: Trouble logging into the game?
7: Already logged + * in
8: Trouble logging into the game?
9: Trouble logging into the + * game?
10: Cannot process so many connections
11: Only users older + * than 20 can use this channel
12: Trouble logging into the game?
+ * 13: Unable to log on as master at this ip
14: Wrong gateway or + * personal info and weird korean button
15: Processing request with + * that korean button!
16: Please verify your account through + * email...
17: Wrong gateway or personal info
21: Please verify + * your account through email...
23: Crashes
25: Maple Europe notice + * =[ FUCK YOU NEXON
27: Some weird full client notice, probably for + * trial versions
+ * + * @param reason The reason logging in failed. + * @return The login failed packet. + */ + public static byte[] getAfterLoginError(int reason) {//same as above o.o + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); + mplew.writeShort(SendOpcode.SELECT_CHARACTER_BY_VAC.getValue()); + mplew.writeShort(reason);//using other types than stated above = CRASH + return mplew.getPacket(); + } + + public static byte[] sendPolice() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAKE_GM_NOTICE.getValue()); + mplew.write(0);//doesn't even matter what value + return mplew.getPacket(); + } + + public static byte[] sendPolice(String text) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.DATA_CRC_CHECK_FAILED.getValue()); + mplew.writeMapleAsciiString(text); + return mplew.getPacket(); + } + + public static byte[] getPermBan(byte reason) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.LOGIN_STATUS.getValue()); + mplew.write(2); // Account is banned + mplew.write(0); + mplew.writeInt(0); + mplew.write(0); + mplew.writeLong(getTime(-1)); + + return mplew.getPacket(); + } + + public static byte[] getTempBan(long timestampTill, byte reason) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(17); + mplew.writeShort(SendOpcode.LOGIN_STATUS.getValue()); + mplew.write(2); + mplew.write(0); + mplew.writeInt(0); + mplew.write(reason); + mplew.writeLong(getTime(timestampTill)); // Tempban date is handled as a 64-bit long, number of 100NS intervals since 1/1/1601. Lulz. + + return mplew.getPacket(); + } + + /** + * Gets a successful authentication packet. + * + * @param c + * @return the successful authentication packet + */ + public static byte[] getAuthSuccess(MapleClient c) { + Server.getInstance().loadAccountCharacters(c); // locks the login session until data is recovered from the cache or the DB. + Server.getInstance().loadAccountStorages(c); + + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.LOGIN_STATUS.getValue()); + mplew.writeInt(0); + mplew.writeShort(0); + mplew.writeInt(c.getAccID()); + mplew.write(c.getGender()); + + boolean canFly = Server.getInstance().canFly(c.getAccID()); + mplew.writeBool((YamlConfig.config.server.USE_ENFORCE_ADMIN_ACCOUNT || canFly) && c.getGMLevel() > 1); // thanks Steve(kaito1410) for pointing the GM account boolean here + mplew.write(((YamlConfig.config.server.USE_ENFORCE_ADMIN_ACCOUNT || canFly) && c.getGMLevel() > 1) ? 0x80 : 0); // Admin Byte. 0x80,0x40,0x20.. Rubbish. + mplew.write(0); // Country Code. + + mplew.writeMapleAsciiString(c.getAccountName()); + mplew.write(0); + + mplew.write(0); // IsQuietBan + mplew.writeLong(0);//IsQuietBanTimeStamp + mplew.writeLong(0); //CreationTimeStamp + + mplew.writeInt(1); // 1: Remove the "Select the world you want to play in" + + mplew.write(YamlConfig.config.server.ENABLE_PIN && !c.canBypassPin() ? 0 : 1); // 0 = Pin-System Enabled, 1 = Disabled + mplew.write(YamlConfig.config.server.ENABLE_PIC && !c.canBypassPic() ? (c.getPic() == null || c.getPic().equals("") ? 0 : 1) : 2); // 0 = Register PIC, 1 = Ask for PIC, 2 = Disabled + + return mplew.getPacket(); + } + + /** + * Gets a packet detailing a PIN operation. + *

+ * Possible values for mode:
0 - PIN was accepted
1 - + * Register a new PIN
2 - Invalid pin / Reenter
3 - Connection + * failed due to system error
4 - Enter the pin + * + * @param mode The mode. + * @return + */ + private static byte[] pinOperation(byte mode) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.CHECK_PINCODE.getValue()); + mplew.write(mode); + return mplew.getPacket(); + } + + public static byte[] pinRegistered() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.UPDATE_PINCODE.getValue()); + mplew.write(0); + return mplew.getPacket(); + } + + public static byte[] requestPin() { + return pinOperation((byte) 4); + } + + public static byte[] requestPinAfterFailure() { + return pinOperation((byte) 2); + } + + public static byte[] registerPin() { + return pinOperation((byte) 1); + } + + public static byte[] pinAccepted() { + return pinOperation((byte) 0); + } + + public static byte[] wrongPic() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.CHECK_SPW_RESULT.getValue()); + mplew.write(0); + return mplew.getPacket(); + } + + /** + * Gets a packet detailing a server and its channels. + * + * @param serverId + * @param serverName The name of the server. + * @param flag + * @param eventmsg + * @param channelLoad Load of the channel - 1200 seems to be max. + * @return The server info packet. + */ + public static byte[] getServerList(int serverId, String serverName, int flag, String eventmsg, List channelLoad) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SERVERLIST.getValue()); + mplew.write(serverId); + mplew.writeMapleAsciiString(serverName); + mplew.write(flag); + mplew.writeMapleAsciiString(eventmsg); + mplew.write(100); // rate modifier, don't ask O.O! + mplew.write(0); // event xp * 2.6 O.O! + mplew.write(100); // rate modifier, don't ask O.O! + mplew.write(0); // drop rate * 2.6 + mplew.write(0); + mplew.write(channelLoad.size()); + for (Channel ch : channelLoad) { + mplew.writeMapleAsciiString(serverName + "-" + ch.getId()); + mplew.writeInt(ch.getChannelCapacity()); + + // thanks GabrielSin for this channel packet structure part + mplew.write(1);// nWorldID + mplew.write(ch.getId() - 1);// nChannelID + mplew.writeBool(false);// bAdultChannel + } + mplew.writeShort(0); + return mplew.getPacket(); + } + + /** + * Gets a packet saying that the server list is over. + * + * @return The end of server list packet. + */ + public static byte[] getEndOfServerList() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.SERVERLIST.getValue()); + mplew.write(0xFF); + return mplew.getPacket(); + } + + /** + * Gets a packet detailing a server status message. + *

+ * Possible values for status:
0 - Normal
1 - Highly + * populated
2 - Full + * + * @param status The server status. + * @return The server status packet. + */ + public static byte[] getServerStatus(int status) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); + mplew.writeShort(SendOpcode.SERVERSTATUS.getValue()); + mplew.writeShort(status); + return mplew.getPacket(); + } + + /** + * Gets a packet telling the client the IP of the channel server. + * + * @param inetAddr The InetAddress of the requested channel server. + * @param port The port the channel is on. + * @param clientId The ID of the client. + * @return The server IP packet. + */ + public static byte[] getServerIP(InetAddress inetAddr, int port, int clientId) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SERVER_IP.getValue()); + mplew.writeShort(0); + byte[] addr = inetAddr.getAddress(); + mplew.write(addr); + mplew.writeShort(port); + mplew.writeInt(clientId); + mplew.write(new byte[]{0, 0, 0, 0, 0}); + return mplew.getPacket(); + } + + /** + * Gets a packet telling the client the IP of the new channel. + * + * @param inetAddr The InetAddress of the requested channel server. + * @param port The port the channel is on. + * @return The server IP packet. + */ + public static byte[] getChannelChange(InetAddress inetAddr, int port) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CHANGE_CHANNEL.getValue()); + mplew.write(1); + byte[] addr = inetAddr.getAddress(); + mplew.write(addr); + mplew.writeShort(port); + return mplew.getPacket(); + } + + /** + * Gets a packet with a list of characters. + * + * @param c The MapleClient to load characters of. + * @param serverId The ID of the server requested. + * @param status The charlist request result. + * @return The character list packet. + *

+ * Possible values for status: + *
2: ID deleted or blocked
+ *
3: ID deleted or blocked
+ *
4: Incorrect password
+ *
5: Not an registered ID
+ *
6: Trouble logging in?
+ *
10: Server handling too many connections
+ *
11: Only 20 years or older
+ *
13: Unable to log as master at IP
+ *
14: Wrong gateway or personal info
+ *
15: Still processing request
+ *
16: Verify account via email
+ *
17: Wrong gateway or personal info
+ *
21: Verify account via email
+ */ + public static byte[] getCharList(MapleClient c, int serverId, int status) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CHARLIST.getValue()); + mplew.write(status); + List chars = c.loadCharacters(serverId); + mplew.write((byte) chars.size()); + for (MapleCharacter chr : chars) { + addCharEntry(mplew, chr, false); } - private static void addSkillInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.write(0); // start of skills - Map skills = chr.getSkills(); - int skillsSize = skills.size(); - // We don't want to include any hidden skill in this, so subtract them from the size list and ignore them. - for (Entry skill : skills.entrySet()) { - if (GameConstants.isHiddenSkills(skill.getKey().getId())) { - skillsSize--; + mplew.write(YamlConfig.config.server.ENABLE_PIC && !c.canBypassPic() ? (c.getPic() == null || c.getPic().equals("") ? 0 : 1) : 2); + mplew.writeInt(YamlConfig.config.server.COLLECTIVE_CHARSLOT ? chars.size() + c.getAvailableCharacterSlots() : c.getCharacterSlots()); + return mplew.getPacket(); + } + + public static byte[] enableTV() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); + mplew.writeShort(SendOpcode.ENABLE_TV.getValue()); + mplew.writeInt(0); + mplew.write(0); + return mplew.getPacket(); + } + + /** + * Removes TV + * + * @return The Remove TV Packet + */ + public static byte[] removeTV() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(2); + mplew.writeShort(SendOpcode.REMOVE_TV.getValue()); + return mplew.getPacket(); + } + + /** + * Sends MapleTV + * + * @param chr The character shown in TV + * @param messages The message sent with the TV + * @param type The type of TV + * @param partner The partner shown with chr + * @return the SEND_TV packet + */ + public static byte[] sendTV(MapleCharacter chr, List messages, int type, MapleCharacter partner) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SEND_TV.getValue()); + mplew.write(partner != null ? 3 : 1); + mplew.write(type); //Heart = 2 Star = 1 Normal = 0 + addCharLook(mplew, chr, false); + mplew.writeMapleAsciiString(chr.getName()); + if (partner != null) { + mplew.writeMapleAsciiString(partner.getName()); + } else { + mplew.writeShort(0); + } + for (int i = 0; i < messages.size(); i++) { + if (i == 4 && messages.get(4).length() > 15) { + mplew.writeMapleAsciiString(messages.get(4).substring(0, 15)); + } else { + mplew.writeMapleAsciiString(messages.get(i)); + } + } + mplew.writeInt(1337); // time limit shit lol 'Your thing still start in blah blah seconds' + if (partner != null) { + addCharLook(mplew, partner, false); + } + return mplew.getPacket(); + } + + /** + * Gets character info for a character. + * + * @param chr The character to get info about. + * @return The character info packet. + */ + public static byte[] getCharInfo(MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SET_FIELD.getValue()); + mplew.writeInt(chr.getClient().getChannel() - 1); + mplew.write(1); + mplew.write(1); + mplew.writeShort(0); + for (int i = 0; i < 3; i++) { + mplew.writeInt(Randomizer.nextInt()); + } + addCharacterInfo(mplew, chr); + mplew.writeLong(getTime(System.currentTimeMillis())); + return mplew.getPacket(); + } + + /** + * Gets an empty stat update. + * + * @return The empty stat update packet. + */ + public static byte[] enableActions() { + return updatePlayerStats(EMPTY_STATUPDATE, true, null); + } + + /** + * Gets an update for specified stats. + * + * @param stats The list of stats to update. + * @param enableActions Allows actions after the update. + * @param chr The update target. + * @return The stat update packet. + */ + public static byte[] updatePlayerStats(List> stats, boolean enableActions, MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.STAT_CHANGED.getValue()); + mplew.write(enableActions ? 1 : 0); + int updateMask = 0; + for (Pair statupdate : stats) { + updateMask |= statupdate.getLeft().getValue(); + } + List> mystats = stats; + if (mystats.size() > 1) { + mystats.sort((o1, o2) -> { + int val1 = o1.getLeft().getValue(); + int val2 = o2.getLeft().getValue(); + return (val1 < val2 ? -1 : (val1 == val2 ? 0 : 1)); + }); + } + mplew.writeInt(updateMask); + for (Pair statupdate : mystats) { + if (statupdate.getLeft().getValue() >= 1) { + if (statupdate.getLeft().getValue() == 0x1) { + mplew.write(statupdate.getRight().byteValue()); + } else if (statupdate.getLeft().getValue() <= 0x4) { + mplew.writeInt(statupdate.getRight()); + } else if (statupdate.getLeft().getValue() < 0x20) { + mplew.write(statupdate.getRight().shortValue()); + } else if (statupdate.getLeft().getValue() == 0x8000) { + if (GameConstants.hasSPTable(chr.getJob())) { + addRemainingSkillInfo(mplew, chr); + } else { + mplew.writeShort(statupdate.getRight().shortValue()); + } + } else if (statupdate.getLeft().getValue() < 0xFFFF) { + mplew.writeShort(statupdate.getRight().shortValue()); + } else if (statupdate.getLeft().getValue() == 0x20000) { + mplew.writeShort(statupdate.getRight().shortValue()); + } else { + mplew.writeInt(statupdate.getRight()); } } - mplew.writeShort(skillsSize); - for (Entry skill : skills.entrySet()) { - if (GameConstants.isHiddenSkills(skill.getKey().getId())) { - continue; - } - mplew.writeInt(skill.getKey().getId()); - mplew.writeInt(skill.getValue().skillevel); - addExpirationTime(mplew, skill.getValue().expiration); - if (skill.getKey().isFourthJob()) { - mplew.writeInt(skill.getValue().masterlevel); - } - } - mplew.writeShort(chr.getAllCooldowns().size()); - for (PlayerCoolDownValueHolder cooling : chr.getAllCooldowns()) { - mplew.writeInt(cooling.skillId); - int timeLeft = (int) (cooling.length + cooling.startTime - System.currentTimeMillis()); - mplew.writeShort(timeLeft / 1000); - } } + return mplew.getPacket(); + } - private static void addMonsterBookInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.writeInt(chr.getMonsterBookCover()); // cover + /** + * Gets a packet telling the client to change maps. + * + * @param to The MapleMap to warp to. + * @param spawnPoint The spawn portal number to spawn at. + * @param chr The character warping to to + * @return The map change packet. + */ + public static byte[] getWarpToMap(MapleMap to, int spawnPoint, MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SET_FIELD.getValue()); + mplew.writeInt(chr.getClient().getChannel() - 1); + mplew.writeInt(0);//updated + mplew.write(0);//updated + mplew.writeInt(to.getId()); + mplew.write(spawnPoint); + mplew.writeShort(chr.getHp()); + mplew.writeBool(chr.isChasing()); + if (chr.isChasing()) { + chr.setChasing(false); + mplew.writeInt(chr.getPosition().x); + mplew.writeInt(chr.getPosition().y); + } + mplew.writeLong(getTime(Server.getInstance().getCurrentTime())); + return mplew.getPacket(); + } + + public static byte[] getWarpToMap(MapleMap to, int spawnPoint, Point spawnPosition, MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SET_FIELD.getValue()); + mplew.writeInt(chr.getClient().getChannel() - 1); + mplew.writeInt(0);//updated + mplew.write(0);//updated + mplew.writeInt(to.getId()); + mplew.write(spawnPoint); + mplew.writeShort(chr.getHp()); + mplew.writeBool(true); + mplew.writeInt(spawnPosition.x); // spawn position placement thanks to Arnah (Vertisy) + mplew.writeInt(spawnPosition.y); + mplew.writeLong(getTime(Server.getInstance().getCurrentTime())); + return mplew.getPacket(); + } + + /** + * Gets a packet to spawn a portal. + * + * @param townId The ID of the town the portal goes to. + * @param targetId The ID of the target. + * @param pos Where to put the portal. + * @return The portal spawn packet. + */ + public static byte[] spawnPortal(int townId, int targetId, Point pos) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(14); + mplew.writeShort(SendOpcode.SPAWN_PORTAL.getValue()); + mplew.writeInt(townId); + mplew.writeInt(targetId); + mplew.writePos(pos); + return mplew.getPacket(); + } + + /** + * Gets a packet to spawn a door. + * + * @param ownerid The door's owner ID. + * @param pos The position of the door. + * @param launched Already deployed the door. + * @return The remove door packet. + */ + public static byte[] spawnDoor(int ownerid, Point pos, boolean launched) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); + mplew.writeShort(SendOpcode.SPAWN_DOOR.getValue()); + mplew.writeBool(launched); + mplew.writeInt(ownerid); + mplew.writePos(pos); + return mplew.getPacket(); + } + + /** + * Gets a packet to remove a door. + * + * @param ownerid The door's owner ID. + * @param town + * @return The remove door packet. + */ + public static byte[] removeDoor(int ownerid, boolean town) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(10); + if (town) { + mplew.writeShort(SendOpcode.SPAWN_PORTAL.getValue()); + mplew.writeInt(999999999); + mplew.writeInt(999999999); + } else { + mplew.writeShort(SendOpcode.REMOVE_DOOR.getValue()); + mplew.write(0); + mplew.writeInt(ownerid); + } + return mplew.getPacket(); + } + + /** + * Gets a packet to spawn a special map object. + * + * @param summon + * @param skillLevel The level of the skill used. + * @param animated Animated spawn? + * @return The spawn packet for the map object. + */ + public static byte[] spawnSummon(MapleSummon summon, boolean animated) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(25); + mplew.writeShort(SendOpcode.SPAWN_SPECIAL_MAPOBJECT.getValue()); + mplew.writeInt(summon.getOwner().getId()); + mplew.writeInt(summon.getObjectId()); + mplew.writeInt(summon.getSkill()); + mplew.write(0x0A); //v83 + mplew.write(summon.getSkillLevel()); + mplew.writePos(summon.getPosition()); + mplew.write(summon.getStance()); //bMoveAction & foothold, found thanks to Rien dev team + mplew.writeShort(0); + mplew.write(summon.getMovementType().getValue()); // 0 = don't move, 1 = follow (4th mage summons?), 2/4 = only tele follow, 3 = bird follow + mplew.write(summon.isPuppet() ? 0 : 1); // 0 and the summon can't attack - but puppets don't attack with 1 either ^.- + mplew.write(animated ? 0 : 1); + return mplew.getPacket(); + } + + /** + * Gets a packet to remove a special map object. + * + * @param summon + * @param animated Animated removal? + * @return The packet removing the object. + */ + public static byte[] removeSummon(MapleSummon summon, boolean animated) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); + mplew.writeShort(SendOpcode.REMOVE_SPECIAL_MAPOBJECT.getValue()); + mplew.writeInt(summon.getOwner().getId()); + mplew.writeInt(summon.getObjectId()); + mplew.write(animated ? 4 : 1); // ? + return mplew.getPacket(); + } + + public static byte[] spawnKite(int oid, int itemid, String name, String msg, Point pos, int ft) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SPAWN_KITE.getValue()); + mplew.writeInt(oid); + mplew.writeInt(itemid); + mplew.writeMapleAsciiString(msg); + mplew.writeMapleAsciiString(name); + mplew.writeShort(pos.x); + mplew.writeShort(ft); + return mplew.getPacket(); + } + + public static byte[] removeKite(int objectid, int animationType) { // thanks to Arnah (Vertisy) + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.REMOVE_KITE.getValue()); + mplew.write(animationType); // 0 is 10/10, 1 just vanishes + mplew.writeInt(objectid); + return mplew.getPacket(); + } + + public static byte[] sendCannotSpawnKite() { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CANNOT_SPAWN_KITE.getValue()); + return mplew.getPacket(); + } + + /** + * Gets the response to a relog request. + * + * @return The relog response packet. + */ + public static byte[] getRelogResponse() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.RELOG_RESPONSE.getValue()); + mplew.write(1);//1 O.O Must be more types ): + return mplew.getPacket(); + } + + /** + * Gets a server message packet. + * + * @param message The message to convey. + * @return The server message packet. + */ + public static byte[] serverMessage(String message) { + return serverMessage(4, (byte) 0, message, true, false, 0); + } + + /** + * Gets a server notice packet. + *

+ * Possible values for type:
0: [Notice]
1: Popup
+ * 2: Megaphone
3: Super Megaphone
4: Scrolling message at top
+ * 5: Pink Text
6: Lightblue Text + * + * @param type The type of the notice. + * @param message The message to convey. + * @return The server notice packet. + */ + public static byte[] serverNotice(int type, String message) { + return serverMessage(type, (byte) 0, message, false, false, 0); + } + + /** + * Gets a server notice packet. + *

+ * Possible values for type:
0: [Notice]
1: Popup
+ * 2: Megaphone
3: Super Megaphone
4: Scrolling message at top
+ * 5: Pink Text
6: Lightblue Text + * + * @param type The type of the notice. + * @param channel The channel this notice was sent on. + * @param message The message to convey. + * @return The server notice packet. + */ + public static byte[] serverNotice(int type, String message, int npc) { + return serverMessage(type, 0, message, false, false, npc); + } + + public static byte[] serverNotice(int type, int channel, String message) { + return serverMessage(type, channel, message, false, false, 0); + } + + public static byte[] serverNotice(int type, int channel, String message, boolean smegaEar) { + return serverMessage(type, channel, message, false, smegaEar, 0); + } + + /** + * Gets a server message packet. + *

+ * Possible values for type:
0: [Notice]
1: Popup
+ * 2: Megaphone
3: Super Megaphone
4: Scrolling message at top
+ * 5: Pink Text
6: Lightblue Text
7: BroadCasting NPC + * + * @param type The type of the notice. + * @param channel The channel this notice was sent on. + * @param message The message to convey. + * @param servermessage Is this a scrolling ticker? + * @return The server notice packet. + */ + private static byte[] serverMessage(int type, int channel, String message, boolean servermessage, boolean megaEar, int npc) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SERVERMESSAGE.getValue()); + mplew.write(type); + if (servermessage) { + mplew.write(1); + } + mplew.writeMapleAsciiString(message); + if (type == 3) { + mplew.write(channel - 1); // channel + mplew.writeBool(megaEar); + } else if (type == 6) { + mplew.writeInt(0); + } else if (type == 7) { // npc + mplew.writeInt(npc); + } + return mplew.getPacket(); + } + + /** + * Sends a Avatar Super Megaphone packet. + * + * @param chr The character name. + * @param medal The medal text. + * @param channel Which channel. + * @param itemId Which item used. + * @param message The message sent. + * @param ear Whether or not the ear is shown for whisper. + * @return + */ + public static byte[] getAvatarMega(MapleCharacter chr, String medal, int channel, int itemId, List message, boolean ear) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SET_AVATAR_MEGAPHONE.getValue()); + mplew.writeInt(itemId); + mplew.writeMapleAsciiString(medal + chr.getName()); + for (String s : message) { + mplew.writeMapleAsciiString(s); + } + mplew.writeInt(channel - 1); // channel + mplew.writeBool(ear); + addCharLook(mplew, chr, true); + return mplew.getPacket(); + } + + /* + * Sends a packet to remove the tiger megaphone + * @return + */ + public static byte[] byeAvatarMega() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CLEAR_AVATAR_MEGAPHONE.getValue()); + mplew.write(1); + return mplew.getPacket(); + } + + /** + * Sends the Gachapon green message when a user uses a gachapon ticket. + * + * @param item + * @param town + * @param player + * @return + */ + public static byte[] gachaponMessage(Item item, String town, MapleCharacter player) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SERVERMESSAGE.getValue()); + mplew.write(0x0B); + mplew.writeMapleAsciiString(player.getName() + " : got a(n)"); + mplew.writeInt(0); //random? + mplew.writeMapleAsciiString(town); + addItemInfo(mplew, item, true); + return mplew.getPacket(); + } + + public static byte[] spawnNPC(MapleNPC life) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(24); + mplew.writeShort(SendOpcode.SPAWN_NPC.getValue()); + mplew.writeInt(life.getObjectId()); + mplew.writeInt(life.getId()); + mplew.writeShort(life.getPosition().x); + mplew.writeShort(life.getCy()); + if (life.getF() == 1) { + mplew.write(0); + } else { + mplew.write(1); + } + mplew.writeShort(life.getFh()); + mplew.writeShort(life.getRx0()); + mplew.writeShort(life.getRx1()); + mplew.write(1); + return mplew.getPacket(); + } + + public static byte[] spawnNPCRequestController(MapleNPC life, boolean MiniMap) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(23); + mplew.writeShort(SendOpcode.SPAWN_NPC_REQUEST_CONTROLLER.getValue()); + mplew.write(1); + mplew.writeInt(life.getObjectId()); + mplew.writeInt(life.getId()); + mplew.writeShort(life.getPosition().x); + mplew.writeShort(life.getCy()); + if (life.getF() == 1) { + mplew.write(0); + } else { + mplew.write(1); + } + mplew.writeShort(life.getFh()); + mplew.writeShort(life.getRx0()); + mplew.writeShort(life.getRx1()); + mplew.writeBool(MiniMap); + return mplew.getPacket(); + } + + /** + * Gets a spawn monster packet. + * + * @param life The monster to spawn. + * @param newSpawn Is it a new spawn? + * @return The spawn monster packet. + */ + public static byte[] spawnMonster(MapleMonster life, boolean newSpawn) { + return spawnMonsterInternal(life, false, newSpawn, false, 0, false); + } + + /** + * Gets a spawn monster packet. + * + * @param life The monster to spawn. + * @param newSpawn Is it a new spawn? + * @param effect The spawn effect. + * @return The spawn monster packet. + */ + public static byte[] spawnMonster(MapleMonster life, boolean newSpawn, int effect) { + return spawnMonsterInternal(life, false, newSpawn, false, effect, false); + } + + /** + * Gets a control monster packet. + * + * @param life The monster to give control to. + * @param newSpawn Is it a new spawn? + * @param aggro Aggressive monster? + * @return The monster control packet. + */ + public static byte[] controlMonster(MapleMonster life, boolean newSpawn, boolean aggro) { + return spawnMonsterInternal(life, true, newSpawn, aggro, 0, false); + } + + /** + * Removes a monster invisibility. + * + * @param life + * @return + */ + public static byte[] removeMonsterInvisibility(MapleMonster life) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); + mplew.write(1); + mplew.writeInt(life.getObjectId()); + return mplew.getPacket(); + } + + /** + * Makes a monster invisible for Ariant PQ. + * + * @param life + * @return + */ + public static byte[] makeMonsterInvisible(MapleMonster life) { + return spawnMonsterInternal(life, true, false, false, 0, true); + } + + private static void encodeParentlessMobSpawnEffect(MaplePacketLittleEndianWriter mplew, boolean newSpawn, int effect) { + if (effect > 0) { + mplew.write(effect); + mplew.write(0); + mplew.writeShort(0); + if (effect == 15) { mplew.write(0); - Map cards = chr.getMonsterBook().getCards(); - mplew.writeShort(cards.size()); - for (Entry all : cards.entrySet()) { - mplew.writeShort(all.getKey() % 10000); // Id - mplew.write(all.getValue()); // Level + } + } + mplew.write(newSpawn ? -2 : -1); + } + + private static void encodeTemporary(MaplePacketLittleEndianWriter mplew, Map stati) { + int pCounter = -1, mCounter = -1; + + stati = stati.entrySet() // to patch some status crashing players + .stream() + .filter(e -> !(e.getKey().equals(MonsterStatus.WATK) || e.getKey().equals(MonsterStatus.WDEF))) + .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue())); + + writeLongEncodeTemporaryMask(mplew, stati.keySet()); // packet structure mapped thanks to Eric + + for (Entry s : stati.entrySet()) { + MonsterStatusEffect mse = s.getValue(); + mplew.writeShort(mse.getStati().get(s.getKey())); + + MobSkill mobSkill = mse.getMobSkill(); + if (mobSkill != null) { + mplew.writeShort(mobSkill.getSkillId()); + mplew.writeShort(mobSkill.getSkillLevel()); + + switch (s.getKey()) { + case WEAPON_REFLECT: + pCounter = mobSkill.getX(); + break; + + case MAGIC_REFLECT: + mCounter = mobSkill.getY(); + break; } + } else { + Skill skill = mse.getSkill(); + mplew.writeInt(skill != null ? skill.getId() : 0); + } + + mplew.writeShort(-1); // duration } - public static byte[] sendGuestTOS() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUEST_ID_LOGIN.getValue()); - mplew.writeShort(0x100); - mplew.writeInt(Randomizer.nextInt(999999)); + // reflect packet structure found thanks to Arnah (Vertisy) + if (pCounter != -1) { + mplew.writeInt(pCounter);// wPCounter_ + } + if (mCounter != -1) { + mplew.writeInt(mCounter);// wMCounter_ + } + if (pCounter != -1 || mCounter != -1) { + mplew.writeInt(100);// nCounterProb_ + } + } + + /** + * Internal function to handler monster spawning and controlling. + * + * @param life The mob to perform operations with. + * @param requestController Requesting control of mob? + * @param newSpawn New spawn (fade in?) + * @param aggro Aggressive mob? + * @param effect The spawn effect to use. + * @return The spawn/control packet. + */ + private static byte[] spawnMonsterInternal(MapleMonster life, boolean requestController, boolean newSpawn, boolean aggro, int effect, boolean makeInvis) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + if (makeInvis) { + mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); + mplew.write(0); + mplew.writeInt(life.getObjectId()); + return mplew.getPacket(); + } + if (requestController) { + mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); + mplew.write(aggro ? 2 : 1); + } else { + mplew.writeShort(SendOpcode.SPAWN_MONSTER.getValue()); + } + mplew.writeInt(life.getObjectId()); + mplew.write(life.getController() == null ? 5 : 1); + mplew.writeInt(life.getId()); + + if (requestController) { + encodeTemporary(mplew, life.getStati()); // thanks shot for noticing encode temporary buffs missing + } else { + mplew.skip(16); + } + + mplew.writePos(life.getPosition()); + mplew.write(life.getStance()); + mplew.writeShort(0); //Origin FH //life.getStartFh() + mplew.writeShort(life.getFh()); + + + /** + * -4: Fake -3: Appear after linked mob is dead -2: Fade in 1: Smoke 3: + * King Slime spawn 4: Summoning rock thing, used for 3rd job? 6: + * Magical shit 7: Smoke shit 8: 'The Boss' 9/10: Grim phantom shit? + * 11/12: Nothing? 13: Frankenstein 14: Angry ^ 15: Orb animation thing, + * ?? 16: ?? 19: Mushroom castle boss thing + */ + + if (life.getParentMobOid() != 0) { + MapleMonster parentMob = life.getMap().getMonsterByOid(life.getParentMobOid()); + if (parentMob != null && parentMob.isAlive()) { + mplew.write(effect != 0 ? effect : -3); + mplew.writeInt(life.getParentMobOid()); + } else { + encodeParentlessMobSpawnEffect(mplew, newSpawn, effect); + } + } else { + encodeParentlessMobSpawnEffect(mplew, newSpawn, effect); + } + + mplew.write(life.getTeam()); + mplew.writeInt(0); // getItemEffect + return mplew.getPacket(); + } + + /** + * Handles monsters not being targettable, such as Zakum's first body. + * + * @param life The mob to spawn as non-targettable. + * @param effect The effect to show when spawning. + * @return The packet to spawn the mob as non-targettable. + */ + public static byte[] spawnFakeMonster(MapleMonster life, int effect) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); + mplew.write(1); + mplew.writeInt(life.getObjectId()); + mplew.write(5); + mplew.writeInt(life.getId()); + encodeTemporary(mplew, life.getStati()); + mplew.writePos(life.getPosition()); + mplew.write(life.getStance()); + mplew.writeShort(0);//life.getStartFh() + mplew.writeShort(life.getFh()); + if (effect > 0) { + mplew.write(effect); + mplew.write(0); + mplew.writeShort(0); + } + mplew.writeShort(-2); + mplew.write(life.getTeam()); + mplew.writeInt(0); + return mplew.getPacket(); + } + + /** + * Makes a monster previously spawned as non-targettable, targettable. + * + * @param life The mob to make targettable. + * @return The packet to make the mob targettable. + */ + public static byte[] makeMonsterReal(MapleMonster life) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SPAWN_MONSTER.getValue()); + mplew.writeInt(life.getObjectId()); + mplew.write(5); + mplew.writeInt(life.getId()); + encodeTemporary(mplew, life.getStati()); + mplew.writePos(life.getPosition()); + mplew.write(life.getStance()); + mplew.writeShort(0);//life.getStartFh() + mplew.writeShort(life.getFh()); + mplew.writeShort(-1); + mplew.writeInt(0); + return mplew.getPacket(); + } + + /** + * Gets a stop control monster packet. + * + * @param oid The ObjectID of the monster to stop controlling. + * @return The stop control monster packet. + */ + public static byte[] stopControllingMonster(int oid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); + mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); + mplew.write(0); + mplew.writeInt(oid); + return mplew.getPacket(); + } + + /** + * Gets a response to a move monster packet. + * + * @param objectid The ObjectID of the monster being moved. + * @param moveid The movement ID. + * @param currentMp The current MP of the monster. + * @param useSkills Can the monster use skills? + * @return The move response packet. + */ + public static byte[] moveMonsterResponse(int objectid, short moveid, int currentMp, boolean useSkills) { + return moveMonsterResponse(objectid, moveid, currentMp, useSkills, 0, 0); + } + + /** + * Gets a response to a move monster packet. + * + * @param objectid The ObjectID of the monster being moved. + * @param moveid The movement ID. + * @param currentMp The current MP of the monster. + * @param useSkills Can the monster use skills? + * @param skillId The skill ID for the monster to use. + * @param skillLevel The level of the skill to use. + * @return The move response packet. + */ + + public static byte[] moveMonsterResponse(int objectid, short moveid, int currentMp, boolean useSkills, int skillId, int skillLevel) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(13); + mplew.writeShort(SendOpcode.MOVE_MONSTER_RESPONSE.getValue()); + mplew.writeInt(objectid); + mplew.writeShort(moveid); + mplew.writeBool(useSkills); + mplew.writeShort(currentMp); + mplew.write(skillId); + mplew.write(skillLevel); + return mplew.getPacket(); + } + + /** + * Gets a general chat packet. + * + * @param cidfrom The character ID who sent the chat. + * @param text The text of the chat. + * @param whiteBG + * @param show + * @return The general chat packet. + */ + public static byte[] getChatText(int cidfrom, String text, boolean gm, int show) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CHATTEXT.getValue()); + mplew.writeInt(cidfrom); + mplew.writeBool(gm); + mplew.writeMapleAsciiString(text); + mplew.write(show); + return mplew.getPacket(); + } + + /** + * Gets a packet telling the client to show an EXP increase. + * + * @param gain The amount of EXP gained. + * @param inChat In the chat box? + * @param white White text or yellow? + * @return The exp gained packet. + */ + public static byte[] getShowExpGain(int gain, int equip, int party, boolean inChat, boolean white) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(3); // 3 = exp, 4 = fame, 5 = mesos, 6 = guildpoints + mplew.writeBool(white); + mplew.writeInt(gain); + mplew.writeBool(inChat); + mplew.writeInt(0); // bonus event exp + mplew.write(0); // third monster kill event + mplew.write(0); // RIP byte, this is always a 0 + mplew.writeInt(0); //wedding bonus + if (inChat) { // quest bonus rate stuff + mplew.write(0); + } + + mplew.write(0); //0 = party bonus, 100 = 1x Bonus EXP, 200 = 2x Bonus EXP + mplew.writeInt(party); // party bonus + mplew.writeInt(equip); //equip bonus + mplew.writeInt(0); //Internet Cafe Bonus + mplew.writeInt(0); //Rainbow Week Bonus + return mplew.getPacket(); + } + + /** + * Gets a packet telling the client to show a fame gain. + * + * @param gain How many fame gained. + * @return The meso gain packet. + */ + public static byte[] getShowFameGain(int gain) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(4); + mplew.writeInt(gain); + return mplew.getPacket(); + } + + /** + * Gets a packet telling the client to show a meso gain. + * + * @param gain How many mesos gained. + * @return The meso gain packet. + */ + public static byte[] getShowMesoGain(int gain) { + return getShowMesoGain(gain, false); + } + + /** + * Gets a packet telling the client to show a meso gain. + * + * @param gain How many mesos gained. + * @param inChat Show in the chat window? + * @return The meso gain packet. + */ + public static byte[] getShowMesoGain(int gain, boolean inChat) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + if (!inChat) { + mplew.write(0); + mplew.writeShort(1); //v83 + } else { + mplew.write(5); + } + mplew.writeInt(gain); + mplew.writeShort(0); + return mplew.getPacket(); + } + + /** + * Gets a packet telling the client to show a item gain. + * + * @param itemId The ID of the item gained. + * @param quantity How many items gained. + * @return The item gain packet. + */ + public static byte[] getShowItemGain(int itemId, short quantity) { + return getShowItemGain(itemId, quantity, false); + } + + /** + * Gets a packet telling the client to show an item gain. + * + * @param itemId The ID of the item gained. + * @param quantity The number of items gained. + * @param inChat Show in the chat window? + * @return The item gain packet. + */ + public static byte[] getShowItemGain(int itemId, short quantity, boolean inChat) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + if (inChat) { + mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); + mplew.write(3); + mplew.write(1); + mplew.writeInt(itemId); + mplew.writeInt(quantity); + } else { + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.writeShort(0); + mplew.writeInt(itemId); + mplew.writeInt(quantity); + mplew.writeInt(0); + mplew.writeInt(0); + } + return mplew.getPacket(); + } + + public static byte[] killMonster(int oid, boolean animation) { + return killMonster(oid, animation ? 1 : 0); + } + + /** + * Gets a packet telling the client that a monster was killed. + * + * @param oid The objectID of the killed monster. + * @param animation 0 = dissapear, 1 = fade out, 2+ = special + * @return The kill monster packet. + */ + public static byte[] killMonster(int oid, int animation) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.KILL_MONSTER.getValue()); + mplew.writeInt(oid); + mplew.write(animation); + mplew.write(animation); + return mplew.getPacket(); + } + + public static byte[] updateMapItemObject(MapleMapItem drop, boolean giveOwnership) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.DROP_ITEM_FROM_MAPOBJECT.getValue()); + mplew.write(2); + mplew.writeInt(drop.getObjectId()); + mplew.writeBool(drop.getMeso() > 0); + mplew.writeInt(drop.getItemId()); + mplew.writeInt(giveOwnership ? 0 : -1); + mplew.write(drop.hasExpiredOwnershipTime() ? 2 : drop.getDropType()); + mplew.writePos(drop.getPosition()); + mplew.writeInt(giveOwnership ? 0 : -1); + + if (drop.getMeso() == 0) { + addExpirationTime(mplew, drop.getItem().getExpiration()); + } + mplew.write(drop.isPlayerDrop() ? 0 : 1); + return mplew.getPacket(); + } + + public static byte[] dropItemFromMapObject(MapleCharacter player, MapleMapItem drop, Point dropfrom, Point dropto, byte mod) { + int dropType = drop.getDropType(); + if (drop.hasClientsideOwnership(player) && dropType < 3) { + dropType = 2; + } + + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.DROP_ITEM_FROM_MAPOBJECT.getValue()); + mplew.write(mod); + mplew.writeInt(drop.getObjectId()); + mplew.writeBool(drop.getMeso() > 0); // 1 mesos, 0 item, 2 and above all item meso bag, + mplew.writeInt(drop.getItemId()); // drop object ID + mplew.writeInt(drop.getClientsideOwnerId()); // owner charid/partyid :) + mplew.write(dropType); // 0 = timeout for non-owner, 1 = timeout for non-owner's party, 2 = FFA, 3 = explosive/FFA + mplew.writePos(dropto); + mplew.writeInt(drop.getDropper().getObjectId()); // dropper oid, found thanks to Li Jixue + + if (mod != 2) { + mplew.writePos(dropfrom); + mplew.writeShort(0);//Fh? + } + if (drop.getMeso() == 0) { + addExpirationTime(mplew, drop.getItem().getExpiration()); + } + mplew.write(drop.isPlayerDrop() ? 0 : 1); //pet EQP pickup + return mplew.getPacket(); + } + + /** + * Guild Name & Mark update packet, thanks to Arnah (Vertisy) + * + * @param guildName The Guild name, blank for nothing. + */ + public static byte[] guildNameChanged(int chrid, String guildName) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_NAME_CHANGED.getValue()); + mplew.writeInt(chrid); + mplew.writeMapleAsciiString(guildName); + return mplew.getPacket(); + } + + public static byte[] guildMarkChanged(int chrid, MapleGuild guild) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_MARK_CHANGED.getValue()); + mplew.writeInt(chrid); + mplew.writeShort(guild.getLogoBG()); + mplew.write(guild.getLogoBGColor()); + mplew.writeShort(guild.getLogo()); + mplew.write(guild.getLogoColor()); + return mplew.getPacket(); + } + + private static void writeForeignBuffs(MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + mplew.writeInt(0); + mplew.writeShort(0); //v83 + mplew.write(0xFC); + mplew.write(1); + if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) { + mplew.writeInt(2); + } else { + mplew.writeInt(0); + } + long buffmask = 0; + Integer buffvalue = null; + if ((chr.getBuffedValue(MapleBuffStat.DARKSIGHT) != null || chr.getBuffedValue(MapleBuffStat.WIND_WALK) != null) && !chr.isHidden()) { + buffmask |= MapleBuffStat.DARKSIGHT.getValue(); + } + if (chr.getBuffedValue(MapleBuffStat.COMBO) != null) { + buffmask |= MapleBuffStat.COMBO.getValue(); + buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.COMBO)); + } + if (chr.getBuffedValue(MapleBuffStat.SHADOWPARTNER) != null) { + buffmask |= MapleBuffStat.SHADOWPARTNER.getValue(); + } + if (chr.getBuffedValue(MapleBuffStat.SOULARROW) != null) { + buffmask |= MapleBuffStat.SOULARROW.getValue(); + } + if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) { + buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.MORPH)); + } + mplew.writeInt((int) ((buffmask >> 32) & 0xffffffffL)); + if (buffvalue != null) { + if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) { //TEST + mplew.writeShort(buffvalue); + } else { + mplew.write(buffvalue.byteValue()); + } + } + mplew.writeInt((int) (buffmask & 0xffffffffL)); + + // Energy Charge + mplew.writeInt(chr.getEnergyBar() == 15000 ? 1 : 0); + mplew.writeShort(0); + mplew.skip(4); + + boolean dashBuff = chr.getBuffedValue(MapleBuffStat.DASH) != null; + // Dash Speed + mplew.writeInt(dashBuff ? 1 << 24 : 0); + mplew.skip(11); + mplew.writeShort(0); + // Dash Jump + mplew.skip(9); + mplew.writeInt(dashBuff ? 1 << 24 : 0); + mplew.writeShort(0); + mplew.write(0); + + // Monster Riding + Integer bv = chr.getBuffedValue(MapleBuffStat.MONSTER_RIDING); + if (bv != null) { + MapleMount mount = chr.getMount(); + if (mount != null) { + mplew.writeInt(mount.getItemId()); + mplew.writeInt(mount.getSkillId()); + } else { mplew.writeLong(0); - mplew.writeLong(getTime(-2)); - mplew.writeLong(getTime(System.currentTimeMillis())); - mplew.writeInt(0); - mplew.writeMapleAsciiString("http://maplesolaxia.com"); - return mplew.getPacket(); - } - - /** - * Sends a hello packet. - * - * @param mapleVersion The maple client version. - * @param sendIv the IV in use by the server for sending - * @param recvIv the IV in use by the server for receiving - * @return - */ - public static byte[] getHello(short mapleVersion, InitializationVector sendIv, InitializationVector recvIv) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); - mplew.writeShort(0x0E); - mplew.writeShort(mapleVersion); - mplew.writeShort(1); - mplew.write(49); - mplew.write(recvIv.getBytes()); - mplew.write(sendIv.getBytes()); - mplew.write(8); - return mplew.getPacket(); - } - - /** - * Sends a ping packet. - * - * @return The packet. - */ - public static byte[] getPing() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(2); - mplew.writeShort(SendOpcode.PING.getValue()); - return mplew.getPacket(); - } - - /** - * Gets a login failed packet. - * - * Possible values for reason:
3: ID deleted or blocked
- * 4: Incorrect password
5: Not a registered id
6: System error
- * 7: Already logged in
8: System error
9: System error
10: - * Cannot process so many connections
11: Only users older than 20 can - * use this channel
13: Unable to log on as master at this ip
14: - * Wrong gateway or personal info and weird korean button
15: Processing - * request with that korean button!
16: Please verify your account - * through email...
17: Wrong gateway or personal info
21: Please - * verify your account through email...
23: License agreement
25: - * Maple Europe notice =[ FUCK YOU NEXON
27: Some weird full client - * notice, probably for trial versions
- * - * @param reason The reason logging in failed. - * @return The login failed packet. - */ - public static byte[] getLoginFailed(int reason) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); - mplew.writeShort(SendOpcode.LOGIN_STATUS.getValue()); - mplew.write(reason); - mplew.write(0); - mplew.writeInt(0); - return mplew.getPacket(); - } - - /** - * Gets a login failed packet. - * - * Possible values for reason:
2: ID deleted or blocked
- * 3: ID deleted or blocked
4: Incorrect password
5: Not a - * registered id
6: Trouble logging into the game?
7: Already logged - * in
8: Trouble logging into the game?
9: Trouble logging into the - * game?
10: Cannot process so many connections
11: Only users older - * than 20 can use this channel
12: Trouble logging into the game?
- * 13: Unable to log on as master at this ip
14: Wrong gateway or - * personal info and weird korean button
15: Processing request with - * that korean button!
16: Please verify your account through - * email...
17: Wrong gateway or personal info
21: Please verify - * your account through email...
23: Crashes
25: Maple Europe notice - * =[ FUCK YOU NEXON
27: Some weird full client notice, probably for - * trial versions
- * - * @param reason The reason logging in failed. - * @return The login failed packet. - */ - public static byte[] getAfterLoginError(int reason) {//same as above o.o - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); - mplew.writeShort(SendOpcode.SELECT_CHARACTER_BY_VAC.getValue()); - mplew.writeShort(reason);//using other types than stated above = CRASH - return mplew.getPacket(); - } - - public static byte[] sendPolice() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAKE_GM_NOTICE.getValue()); - mplew.write(0);//doesn't even matter what value - return mplew.getPacket(); - } - - public static byte[] sendPolice(String text) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DATA_CRC_CHECK_FAILED.getValue()); - mplew.writeMapleAsciiString(text); - return mplew.getPacket(); - } - - public static byte[] getPermBan(byte reason) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.LOGIN_STATUS.getValue()); - mplew.write(2); // Account is banned - mplew.write(0); - mplew.writeInt(0); - mplew.write(0); - mplew.writeLong(getTime(-1)); - - return mplew.getPacket(); - } - - public static byte[] getTempBan(long timestampTill, byte reason) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(17); - mplew.writeShort(SendOpcode.LOGIN_STATUS.getValue()); - mplew.write(2); - mplew.write(0); - mplew.writeInt(0); - mplew.write(reason); - mplew.writeLong(getTime(timestampTill)); // Tempban date is handled as a 64-bit long, number of 100NS intervals since 1/1/1601. Lulz. - - return mplew.getPacket(); - } - - /** - * Gets a successful authentication packet. - * - * @param c - * @return the successful authentication packet - */ - public static byte[] getAuthSuccess(MapleClient c) { - Server.getInstance().loadAccountCharacters(c); // locks the login session until data is recovered from the cache or the DB. - Server.getInstance().loadAccountStorages(c); - - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.LOGIN_STATUS.getValue()); - mplew.writeInt(0); - mplew.writeShort(0); - mplew.writeInt(c.getAccID()); - mplew.write(c.getGender()); - - boolean canFly = Server.getInstance().canFly(c.getAccID()); - mplew.writeBool((YamlConfig.config.server.USE_ENFORCE_ADMIN_ACCOUNT || canFly) ? c.getGMLevel() > 1 : false); // thanks Steve(kaito1410) for pointing the GM account boolean here - mplew.write(((YamlConfig.config.server.USE_ENFORCE_ADMIN_ACCOUNT || canFly) && c.getGMLevel() > 1) ? 0x80 : 0); // Admin Byte. 0x80,0x40,0x20.. Rubbish. - mplew.write(0); // Country Code. - - mplew.writeMapleAsciiString(c.getAccountName()); - mplew.write(0); - - mplew.write(0); // IsQuietBan - mplew.writeLong(0);//IsQuietBanTimeStamp - mplew.writeLong(0); //CreationTimeStamp - - mplew.writeInt(1); // 1: Remove the "Select the world you want to play in" - - mplew.write(YamlConfig.config.server.ENABLE_PIN && !c.canBypassPin() ? 0 : 1); // 0 = Pin-System Enabled, 1 = Disabled - mplew.write(YamlConfig.config.server.ENABLE_PIC && !c.canBypassPic() ? (c.getPic() == null || c.getPic().equals("") ? 0 : 1) : 2); // 0 = Register PIC, 1 = Ask for PIC, 2 = Disabled - - return mplew.getPacket(); - } - - /** - * Gets a packet detailing a PIN operation. - * - * Possible values for mode:
0 - PIN was accepted
1 - - * Register a new PIN
2 - Invalid pin / Reenter
3 - Connection - * failed due to system error
4 - Enter the pin - * - * @param mode The mode. - * @return - */ - private static byte[] pinOperation(byte mode) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.CHECK_PINCODE.getValue()); - mplew.write(mode); - return mplew.getPacket(); - } - - public static byte[] pinRegistered() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.UPDATE_PINCODE.getValue()); - mplew.write(0); - return mplew.getPacket(); - } - - public static byte[] requestPin() { - return pinOperation((byte) 4); - } - - public static byte[] requestPinAfterFailure() { - return pinOperation((byte) 2); - } - - public static byte[] registerPin() { - return pinOperation((byte) 1); - } - - public static byte[] pinAccepted() { - return pinOperation((byte) 0); - } - - public static byte[] wrongPic() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.CHECK_SPW_RESULT.getValue()); - mplew.write(0); - return mplew.getPacket(); - } - - /** - * Gets a packet detailing a server and its channels. - * - * @param serverId - * @param serverName The name of the server. - * @param flag - * @param eventmsg - * @param channelLoad Load of the channel - 1200 seems to be max. - * @return The server info packet. - */ - public static byte[] getServerList(int serverId, String serverName, int flag, String eventmsg, List channelLoad) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SERVERLIST.getValue()); - mplew.write(serverId); - mplew.writeMapleAsciiString(serverName); - mplew.write(flag); - mplew.writeMapleAsciiString(eventmsg); - mplew.write(100); // rate modifier, don't ask O.O! - mplew.write(0); // event xp * 2.6 O.O! - mplew.write(100); // rate modifier, don't ask O.O! - mplew.write(0); // drop rate * 2.6 - mplew.write(0); - mplew.write(channelLoad.size()); - for (Channel ch : channelLoad) { - mplew.writeMapleAsciiString(serverName + "-" + ch.getId()); - mplew.writeInt(ch.getChannelCapacity()); - - // thanks GabrielSin for this channel packet structure part - mplew.write(1);// nWorldID - mplew.write(ch.getId() - 1);// nChannelID - mplew.writeBool(false);// bAdultChannel - } - mplew.writeShort(0); - return mplew.getPacket(); - } - - /** - * Gets a packet saying that the server list is over. - * - * @return The end of server list packet. - */ - public static byte[] getEndOfServerList() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.SERVERLIST.getValue()); - mplew.write(0xFF); - return mplew.getPacket(); - } - - /** - * Gets a packet detailing a server status message. - * - * Possible values for status:
0 - Normal
1 - Highly - * populated
2 - Full - * - * @param status The server status. - * @return The server status packet. - */ - public static byte[] getServerStatus(int status) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.SERVERSTATUS.getValue()); - mplew.writeShort(status); - return mplew.getPacket(); - } - - /** - * Gets a packet telling the client the IP of the channel server. - * - * @param inetAddr The InetAddress of the requested channel server. - * @param port The port the channel is on. - * @param clientId The ID of the client. - * @return The server IP packet. - */ - public static byte[] getServerIP(InetAddress inetAddr, int port, int clientId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SERVER_IP.getValue()); - mplew.writeShort(0); - byte[] addr = inetAddr.getAddress(); - mplew.write(addr); - mplew.writeShort(port); - mplew.writeInt(clientId); - mplew.write(new byte[]{0, 0, 0, 0, 0}); - return mplew.getPacket(); - } - - /** - * Gets a packet telling the client the IP of the new channel. - * - * @param inetAddr The InetAddress of the requested channel server. - * @param port The port the channel is on. - * @return The server IP packet. - */ - public static byte[] getChannelChange(InetAddress inetAddr, int port) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CHANGE_CHANNEL.getValue()); - mplew.write(1); - byte[] addr = inetAddr.getAddress(); - mplew.write(addr); - mplew.writeShort(port); - return mplew.getPacket(); - } - - /** - * Gets a packet with a list of characters. - * - * @param c The MapleClient to load characters of. - * @param serverId The ID of the server requested. - * @param status The charlist request result. - * @return The character list packet. - * - * Possible values for status: - *
2: ID deleted or blocked
- *
3: ID deleted or blocked
- *
4: Incorrect password
- *
5: Not an registered ID
- *
6: Trouble logging in?
- *
10: Server handling too many connections
- *
11: Only 20 years or older
- *
13: Unable to log as master at IP
- *
14: Wrong gateway or personal info
- *
15: Still processing request
- *
16: Verify account via email
- *
17: Wrong gateway or personal info
- *
21: Verify account via email
- */ - public static byte[] getCharList(MapleClient c, int serverId, int status) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CHARLIST.getValue()); - mplew.write(status); - List chars = c.loadCharacters(serverId); - mplew.write((byte) chars.size()); - for (MapleCharacter chr : chars) { - addCharEntry(mplew, chr, false); - } + } + } else { + mplew.writeLong(0); + } + + int CHAR_MAGIC_SPAWN = Randomizer.nextInt(); // skill references found thanks to Rien dev team + mplew.writeInt(CHAR_MAGIC_SPAWN); + // Speed Infusion + mplew.skip(8); + mplew.writeInt(CHAR_MAGIC_SPAWN); + mplew.write(0); + mplew.writeInt(CHAR_MAGIC_SPAWN); + mplew.writeShort(0); + // Homing Beacon + mplew.skip(9); + mplew.writeInt(CHAR_MAGIC_SPAWN); + mplew.writeInt(0); + // Zombify + mplew.skip(9); + mplew.writeInt(CHAR_MAGIC_SPAWN); + mplew.writeShort(0); + mplew.writeShort(0); + } + + /** + * Gets a packet spawning a player as a mapobject to other clients. + * + * @param target The client receiving this packet. + * @param chr The character to spawn to other clients. + * @param enteringField Whether the character to spawn is not yet present in the map or already is. + * @return The spawn player packet. + */ + public static byte[] spawnPlayerMapObject(MapleClient target, MapleCharacter chr, boolean enteringField) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SPAWN_PLAYER.getValue()); + mplew.writeInt(chr.getId()); + mplew.write(chr.getLevel()); //v83 + mplew.writeMapleAsciiString(chr.getName()); + if (chr.getGuildId() < 1) { + mplew.writeMapleAsciiString(""); + mplew.write(new byte[6]); + } else { + MapleGuildSummary gs = chr.getClient().getWorldServer().getGuildSummary(chr.getGuildId(), chr.getWorld()); + if (gs != null) { + mplew.writeMapleAsciiString(gs.getName()); + mplew.writeShort(gs.getLogoBG()); + mplew.write(gs.getLogoBGColor()); + mplew.writeShort(gs.getLogo()); + mplew.write(gs.getLogoColor()); + } else { + mplew.writeMapleAsciiString(""); + mplew.write(new byte[6]); + } + } + + writeForeignBuffs(mplew, chr); + + mplew.writeShort(chr.getJob().getId()); - mplew.write(YamlConfig.config.server.ENABLE_PIC && !c.canBypassPic() ? (c.getPic() == null || c.getPic().equals("") ? 0 : 1) : 2); - mplew.writeInt(YamlConfig.config.server.COLLECTIVE_CHARSLOT ? chars.size() + c.getAvailableCharacterSlots() : c.getCharacterSlots()); - return mplew.getPacket(); - } - - public static byte[] enableTV() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.ENABLE_TV.getValue()); - mplew.writeInt(0); - mplew.write(0); - return mplew.getPacket(); - } - - /** - * Removes TV - * - * @return The Remove TV Packet - */ - public static byte[] removeTV() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(2); - mplew.writeShort(SendOpcode.REMOVE_TV.getValue()); - return mplew.getPacket(); - } - - /** - * Sends MapleTV - * - * @param chr The character shown in TV - * @param messages The message sent with the TV - * @param type The type of TV - * @param partner The partner shown with chr - * @return the SEND_TV packet - */ - public static byte[] sendTV(MapleCharacter chr, List messages, int type, MapleCharacter partner) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SEND_TV.getValue()); - mplew.write(partner != null ? 3 : 1); - mplew.write(type); //Heart = 2 Star = 1 Normal = 0 - addCharLook(mplew, chr, false); - mplew.writeMapleAsciiString(chr.getName()); - if (partner != null) { - mplew.writeMapleAsciiString(partner.getName()); - } else { - mplew.writeShort(0); - } - for (int i = 0; i < messages.size(); i++) { - if (i == 4 && messages.get(4).length() > 15) { - mplew.writeMapleAsciiString(messages.get(4).substring(0, 15)); - } else { - mplew.writeMapleAsciiString(messages.get(i)); - } - } - mplew.writeInt(1337); // time limit shit lol 'Your thing still start in blah blah seconds' - if (partner != null) { - addCharLook(mplew, partner, false); - } - return mplew.getPacket(); - } - - /** - * Gets character info for a character. - * - * @param chr The character to get info about. - * @return The character info packet. - */ - public static byte[] getCharInfo(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_FIELD.getValue()); - mplew.writeInt(chr.getClient().getChannel() - 1); - mplew.write(1); - mplew.write(1); - mplew.writeShort(0); - for (int i = 0; i < 3; i++) { - mplew.writeInt(Randomizer.nextInt()); - } - addCharacterInfo(mplew, chr); - mplew.writeLong(getTime(System.currentTimeMillis())); - return mplew.getPacket(); - } - - /** - * Gets an empty stat update. - * - * @return The empty stat update packet. - */ - public static byte[] enableActions() { - return updatePlayerStats(EMPTY_STATUPDATE, true, null); - } - - /** - * Gets an update for specified stats. - * - * @param stats The list of stats to update. - * @param enableActions Allows actions after the update. - * @param chr The update target. - * @return The stat update packet. - */ - public static byte[] updatePlayerStats(List> stats, boolean enableActions, MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STAT_CHANGED.getValue()); - mplew.write(enableActions ? 1 : 0); - int updateMask = 0; - for (Pair statupdate : stats) { - updateMask |= statupdate.getLeft().getValue(); - } - List> mystats = stats; - if (mystats.size() > 1) { - mystats.sort((o1, o2) -> { - int val1 = o1.getLeft().getValue(); - int val2 = o2.getLeft().getValue(); - return (val1 < val2 ? -1 : (val1 == val2 ? 0 : 1)); - }); - } - mplew.writeInt(updateMask); - for (Pair statupdate : mystats) { - if (statupdate.getLeft().getValue() >= 1) { - if (statupdate.getLeft().getValue() == 0x1) { - mplew.write(statupdate.getRight().byteValue()); - } else if (statupdate.getLeft().getValue() <= 0x4) { - mplew.writeInt(statupdate.getRight()); - } else if (statupdate.getLeft().getValue() < 0x20) { - mplew.write(statupdate.getRight().shortValue()); - } else if (statupdate.getLeft().getValue() == 0x8000) { - if (GameConstants.hasSPTable(chr.getJob())) { - addRemainingSkillInfo(mplew, chr); - } else { - mplew.writeShort(statupdate.getRight().shortValue()); - } - } else if (statupdate.getLeft().getValue() < 0xFFFF) { - mplew.writeShort(statupdate.getRight().shortValue()); - } else if (statupdate.getLeft().getValue() == 0x20000) { - mplew.writeShort(statupdate.getRight().shortValue()); - } else { - mplew.writeInt(statupdate.getRight()); - } - } - } - return mplew.getPacket(); - } - - /** - * Gets a packet telling the client to change maps. - * - * @param to The MapleMap to warp to. - * @param spawnPoint The spawn portal number to spawn at. - * @param chr The character warping to to - * @return The map change packet. - */ - public static byte[] getWarpToMap(MapleMap to, int spawnPoint, MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_FIELD.getValue()); - mplew.writeInt(chr.getClient().getChannel() - 1); - mplew.writeInt(0);//updated - mplew.write(0);//updated - mplew.writeInt(to.getId()); - mplew.write(spawnPoint); - mplew.writeShort(chr.getHp()); - mplew.writeBool(chr.isChasing()); - if (chr.isChasing()) { - chr.setChasing(false); - mplew.writeInt(chr.getPosition().x); - mplew.writeInt(chr.getPosition().y); - } - mplew.writeLong(getTime(Server.getInstance().getCurrentTime())); - return mplew.getPacket(); - } - - public static byte[] getWarpToMap(MapleMap to, int spawnPoint, Point spawnPosition, MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_FIELD.getValue()); - mplew.writeInt(chr.getClient().getChannel() - 1); - mplew.writeInt(0);//updated - mplew.write(0);//updated - mplew.writeInt(to.getId()); - mplew.write(spawnPoint); - mplew.writeShort(chr.getHp()); - mplew.writeBool(true); - mplew.writeInt(spawnPosition.x); // spawn position placement thanks to Arnah (Vertisy) - mplew.writeInt(spawnPosition.y); - mplew.writeLong(getTime(Server.getInstance().getCurrentTime())); - return mplew.getPacket(); - } - - /** - * Gets a packet to spawn a portal. - * - * @param townId The ID of the town the portal goes to. - * @param targetId The ID of the target. - * @param pos Where to put the portal. - * @return The portal spawn packet. - */ - public static byte[] spawnPortal(int townId, int targetId, Point pos) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(14); - mplew.writeShort(SendOpcode.SPAWN_PORTAL.getValue()); - mplew.writeInt(townId); - mplew.writeInt(targetId); - mplew.writePos(pos); - return mplew.getPacket(); - } - - /** - * Gets a packet to spawn a door. - * - * @param ownerid The door's owner ID. - * @param pos The position of the door. - * @param launched Already deployed the door. - * @return The remove door packet. - */ - public static byte[] spawnDoor(int ownerid, Point pos, boolean launched) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); - mplew.writeShort(SendOpcode.SPAWN_DOOR.getValue()); - mplew.writeBool(launched); - mplew.writeInt(ownerid); - mplew.writePos(pos); - return mplew.getPacket(); - } - - /** - * Gets a packet to remove a door. - * - * @param ownerid The door's owner ID. - * @param town - * @return The remove door packet. - */ - public static byte[] removeDoor(int ownerid, boolean town) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(10); - if (town) { - mplew.writeShort(SendOpcode.SPAWN_PORTAL.getValue()); - mplew.writeInt(999999999); - mplew.writeInt(999999999); - } else { - mplew.writeShort(SendOpcode.REMOVE_DOOR.getValue()); - mplew.write(0); - mplew.writeInt(ownerid); - } - return mplew.getPacket(); - } - - /** - * Gets a packet to spawn a special map object. - * - * @param summon - * @param skillLevel The level of the skill used. - * @param animated Animated spawn? - * @return The spawn packet for the map object. - */ - public static byte[] spawnSummon(MapleSummon summon, boolean animated) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(25); - mplew.writeShort(SendOpcode.SPAWN_SPECIAL_MAPOBJECT.getValue()); - mplew.writeInt(summon.getOwner().getId()); - mplew.writeInt(summon.getObjectId()); - mplew.writeInt(summon.getSkill()); - mplew.write(0x0A); //v83 - mplew.write(summon.getSkillLevel()); - mplew.writePos(summon.getPosition()); - mplew.write(summon.getStance()); //bMoveAction & foothold, found thanks to Rien dev team - mplew.writeShort(0); - mplew.write(summon.getMovementType().getValue()); // 0 = don't move, 1 = follow (4th mage summons?), 2/4 = only tele follow, 3 = bird follow - mplew.write(summon.isPuppet() ? 0 : 1); // 0 and the summon can't attack - but puppets don't attack with 1 either ^.- - mplew.write(animated ? 0 : 1); - return mplew.getPacket(); - } - - /** - * Gets a packet to remove a special map object. - * - * @param summon - * @param animated Animated removal? - * @return The packet removing the object. - */ - public static byte[] removeSummon(MapleSummon summon, boolean animated) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); - mplew.writeShort(SendOpcode.REMOVE_SPECIAL_MAPOBJECT.getValue()); - mplew.writeInt(summon.getOwner().getId()); - mplew.writeInt(summon.getObjectId()); - mplew.write(animated ? 4 : 1); // ? - return mplew.getPacket(); - } - - public static byte[] spawnKite(int oid, int itemid, String name, String msg, Point pos, int ft) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_KITE.getValue()); - mplew.writeInt(oid); - mplew.writeInt(itemid); - mplew.writeMapleAsciiString(msg); - mplew.writeMapleAsciiString(name); - mplew.writeShort(pos.x); - mplew.writeShort(ft); - return mplew.getPacket(); - } - - public static byte[] removeKite(int objectid, int animationType) { // thanks to Arnah (Vertisy) - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.REMOVE_KITE.getValue()); - mplew.write(animationType); // 0 is 10/10, 1 just vanishes - mplew.writeInt(objectid); - return mplew.getPacket(); - } - - public static byte[] sendCannotSpawnKite() { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANNOT_SPAWN_KITE.getValue()); - return mplew.getPacket(); - } - - /** - * Gets the response to a relog request. - * - * @return The relog response packet. - */ - public static byte[] getRelogResponse() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.RELOG_RESPONSE.getValue()); - mplew.write(1);//1 O.O Must be more types ): - return mplew.getPacket(); - } - - /** - * Gets a server message packet. - * - * @param message The message to convey. - * @return The server message packet. - */ - public static byte[] serverMessage(String message) { - return serverMessage(4, (byte) 0, message, true, false, 0); - } - - /** - * Gets a server notice packet. - * - * Possible values for type:
0: [Notice]
1: Popup
- * 2: Megaphone
3: Super Megaphone
4: Scrolling message at top
- * 5: Pink Text
6: Lightblue Text - * - * @param type The type of the notice. - * @param message The message to convey. - * @return The server notice packet. - */ - public static byte[] serverNotice(int type, String message) { - return serverMessage(type, (byte) 0, message, false, false, 0); - } - - /** - * Gets a server notice packet. - * - * Possible values for type:
0: [Notice]
1: Popup
- * 2: Megaphone
3: Super Megaphone
4: Scrolling message at top
- * 5: Pink Text
6: Lightblue Text - * - * @param type The type of the notice. - * @param channel The channel this notice was sent on. - * @param message The message to convey. - * @return The server notice packet. - */ - public static byte[] serverNotice(int type, String message, int npc) { - return serverMessage(type, 0, message, false, false, npc); - } - - public static byte[] serverNotice(int type, int channel, String message) { - return serverMessage(type, channel, message, false, false, 0); - } - - public static byte[] serverNotice(int type, int channel, String message, boolean smegaEar) { - return serverMessage(type, channel, message, false, smegaEar, 0); - } - - /** - * Gets a server message packet. - * - * Possible values for type:
0: [Notice]
1: Popup
- * 2: Megaphone
3: Super Megaphone
4: Scrolling message at top
- * 5: Pink Text
6: Lightblue Text
7: BroadCasting NPC - * - * @param type The type of the notice. - * @param channel The channel this notice was sent on. - * @param message The message to convey. - * @param servermessage Is this a scrolling ticker? - * @return The server notice packet. - */ - private static byte[] serverMessage(int type, int channel, String message, boolean servermessage, boolean megaEar, int npc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SERVERMESSAGE.getValue()); - mplew.write(type); - if (servermessage) { - mplew.write(1); - } - mplew.writeMapleAsciiString(message); - if (type == 3) { - mplew.write(channel - 1); // channel - mplew.writeBool(megaEar); - } else if (type == 6) { - mplew.writeInt(0); - } else if (type == 7) { // npc - mplew.writeInt(npc); - } - return mplew.getPacket(); - } - - /** - * Sends a Avatar Super Megaphone packet. - * - * @param chr The character name. - * @param medal The medal text. - * @param channel Which channel. - * @param itemId Which item used. - * @param message The message sent. - * @param ear Whether or not the ear is shown for whisper. - * @return - */ - public static byte[] getAvatarMega(MapleCharacter chr, String medal, int channel, int itemId, List message, boolean ear) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_AVATAR_MEGAPHONE.getValue()); - mplew.writeInt(itemId); - mplew.writeMapleAsciiString(medal + chr.getName()); - for (String s : message) { - mplew.writeMapleAsciiString(s); - } - mplew.writeInt(channel - 1); // channel - mplew.writeBool(ear); - addCharLook(mplew, chr, true); - return mplew.getPacket(); - } - - /* - * Sends a packet to remove the tiger megaphone - * @return - */ - public static byte[] byeAvatarMega() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CLEAR_AVATAR_MEGAPHONE.getValue()); - mplew.write(1); - return mplew.getPacket(); - } - - /** - * Sends the Gachapon green message when a user uses a gachapon ticket. - * - * @param item - * @param town - * @param player - * @return - */ - public static byte[] gachaponMessage(Item item, String town, MapleCharacter player) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SERVERMESSAGE.getValue()); - mplew.write(0x0B); - mplew.writeMapleAsciiString(player.getName() + " : got a(n)"); - mplew.writeInt(0); //random? - mplew.writeMapleAsciiString(town); - addItemInfo(mplew, item, true); - return mplew.getPacket(); - } - - public static byte[] spawnNPC(MapleNPC life) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(24); - mplew.writeShort(SendOpcode.SPAWN_NPC.getValue()); - mplew.writeInt(life.getObjectId()); - mplew.writeInt(life.getId()); - mplew.writeShort(life.getPosition().x); - mplew.writeShort(life.getCy()); - if (life.getF() == 1) { - mplew.write(0); - } else { - mplew.write(1); - } - mplew.writeShort(life.getFh()); - mplew.writeShort(life.getRx0()); - mplew.writeShort(life.getRx1()); - mplew.write(1); - return mplew.getPacket(); - } - - public static byte[] spawnNPCRequestController(MapleNPC life, boolean MiniMap) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(23); - mplew.writeShort(SendOpcode.SPAWN_NPC_REQUEST_CONTROLLER.getValue()); - mplew.write(1); - mplew.writeInt(life.getObjectId()); - mplew.writeInt(life.getId()); - mplew.writeShort(life.getPosition().x); - mplew.writeShort(life.getCy()); - if (life.getF() == 1) { - mplew.write(0); - } else { - mplew.write(1); - } - mplew.writeShort(life.getFh()); - mplew.writeShort(life.getRx0()); - mplew.writeShort(life.getRx1()); - mplew.writeBool(MiniMap); - return mplew.getPacket(); - } - - /** - * Gets a spawn monster packet. - * - * @param life The monster to spawn. - * @param newSpawn Is it a new spawn? - * @return The spawn monster packet. - */ - public static byte[] spawnMonster(MapleMonster life, boolean newSpawn) { - return spawnMonsterInternal(life, false, newSpawn, false, 0, false); - } - - /** - * Gets a spawn monster packet. - * - * @param life The monster to spawn. - * @param newSpawn Is it a new spawn? - * @param effect The spawn effect. - * @return The spawn monster packet. - */ - public static byte[] spawnMonster(MapleMonster life, boolean newSpawn, int effect) { - return spawnMonsterInternal(life, false, newSpawn, false, effect, false); - } - - /** - * Gets a control monster packet. - * - * @param life The monster to give control to. - * @param newSpawn Is it a new spawn? - * @param aggro Aggressive monster? - * @return The monster control packet. - */ - public static byte[] controlMonster(MapleMonster life, boolean newSpawn, boolean aggro) { - return spawnMonsterInternal(life, true, newSpawn, aggro, 0, false); - } - - /** - * Removes a monster invisibility. - * - * @param life - * @return - */ - public static byte[] removeMonsterInvisibility(MapleMonster life) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); - mplew.write(1); - mplew.writeInt(life.getObjectId()); - return mplew.getPacket(); - } - - /** - * Makes a monster invisible for Ariant PQ. - * - * @param life - * @return - */ - public static byte[] makeMonsterInvisible(MapleMonster life) { - return spawnMonsterInternal(life, true, false, false, 0, true); - } - - private static void encodeParentlessMobSpawnEffect(MaplePacketLittleEndianWriter mplew, boolean newSpawn, int effect) { - if (effect > 0) { - mplew.write(effect); - mplew.write(0); - mplew.writeShort(0); - if (effect == 15) { - mplew.write(0); - } - } - mplew.write(newSpawn ? -2 : -1); - } - - private static void encodeTemporary(MaplePacketLittleEndianWriter mplew, Map stati) { - int pCounter = -1, mCounter = -1; - - stati = stati.entrySet() // to patch some status crashing players - .stream() - .filter(e -> !(e.getKey().equals(MonsterStatus.WATK) || e.getKey().equals(MonsterStatus.WDEF))) - .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue())); - - writeLongEncodeTemporaryMask(mplew, stati.keySet()); // packet structure mapped thanks to Eric - - for (Entry s : stati.entrySet()) { - MonsterStatusEffect mse = s.getValue(); - mplew.writeShort(mse.getStati().get(s.getKey())); - - MobSkill mobSkill = mse.getMobSkill(); - if (mobSkill != null) { - mplew.writeShort(mobSkill.getSkillId()); - mplew.writeShort(mobSkill.getSkillLevel()); - - switch(s.getKey()) { - case WEAPON_REFLECT: - pCounter = mobSkill.getX(); - break; - - case MAGIC_REFLECT: - mCounter = mobSkill.getY(); - break; - } - } else { - Skill skill = mse.getSkill(); - mplew.writeInt(skill != null ? skill.getId() : 0); - } - - mplew.writeShort(-1); // duration - } - - // reflect packet structure found thanks to Arnah (Vertisy) - if(pCounter != -1) mplew.writeInt(pCounter);// wPCounter_ - if(mCounter != -1) mplew.writeInt(mCounter);// wMCounter_ - if(pCounter != -1 || mCounter != -1) mplew.writeInt(100);// nCounterProb_ - } - - /** - * Internal function to handler monster spawning and controlling. - * - * @param life The mob to perform operations with. - * @param requestController Requesting control of mob? - * @param newSpawn New spawn (fade in?) - * @param aggro Aggressive mob? - * @param effect The spawn effect to use. - * @return The spawn/control packet. - */ - private static byte[] spawnMonsterInternal(MapleMonster life, boolean requestController, boolean newSpawn, boolean aggro, int effect, boolean makeInvis) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - if (makeInvis) { - mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); - mplew.write(0); - mplew.writeInt(life.getObjectId()); - return mplew.getPacket(); - } - if (requestController) { - mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); - mplew.write(aggro ? 2 : 1); - } else { - mplew.writeShort(SendOpcode.SPAWN_MONSTER.getValue()); - } - mplew.writeInt(life.getObjectId()); - mplew.write(life.getController() == null ? 5 : 1); - mplew.writeInt(life.getId()); - - if (requestController) { - encodeTemporary(mplew, life.getStati()); // thanks shot for noticing encode temporary buffs missing - } else { - mplew.skip(16); - } - - mplew.writePos(life.getPosition()); - mplew.write(life.getStance()); - mplew.writeShort(0); //Origin FH //life.getStartFh() - mplew.writeShort(life.getFh()); - - - /** - * -4: Fake -3: Appear after linked mob is dead -2: Fade in 1: Smoke 3: - * King Slime spawn 4: Summoning rock thing, used for 3rd job? 6: - * Magical shit 7: Smoke shit 8: 'The Boss' 9/10: Grim phantom shit? - * 11/12: Nothing? 13: Frankenstein 14: Angry ^ 15: Orb animation thing, - * ?? 16: ?? 19: Mushroom castle boss thing - */ - - if (life.getParentMobOid() != 0) { - MapleMonster parentMob = life.getMap().getMonsterByOid(life.getParentMobOid()); - if(parentMob != null && parentMob.isAlive()) { - mplew.write(effect != 0 ? effect : -3); - mplew.writeInt(life.getParentMobOid()); - } else { - encodeParentlessMobSpawnEffect(mplew, newSpawn, effect); - } - } else { - encodeParentlessMobSpawnEffect(mplew, newSpawn, effect); - } - - mplew.write(life.getTeam()); - mplew.writeInt(0); // getItemEffect - return mplew.getPacket(); - } - - /** - * Handles monsters not being targettable, such as Zakum's first body. - * - * @param life The mob to spawn as non-targettable. - * @param effect The effect to show when spawning. - * @return The packet to spawn the mob as non-targettable. - */ - public static byte[] spawnFakeMonster(MapleMonster life, int effect) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); - mplew.write(1); - mplew.writeInt(life.getObjectId()); - mplew.write(5); - mplew.writeInt(life.getId()); - encodeTemporary(mplew, life.getStati()); - mplew.writePos(life.getPosition()); - mplew.write(life.getStance()); - mplew.writeShort(0);//life.getStartFh() - mplew.writeShort(life.getFh()); - if (effect > 0) { - mplew.write(effect); - mplew.write(0); - mplew.writeShort(0); - } - mplew.writeShort(-2); - mplew.write(life.getTeam()); - mplew.writeInt(0); - return mplew.getPacket(); - } - - /** - * Makes a monster previously spawned as non-targettable, targettable. - * - * @param life The mob to make targettable. - * @return The packet to make the mob targettable. - */ - public static byte[] makeMonsterReal(MapleMonster life) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_MONSTER.getValue()); - mplew.writeInt(life.getObjectId()); - mplew.write(5); - mplew.writeInt(life.getId()); - encodeTemporary(mplew, life.getStati()); - mplew.writePos(life.getPosition()); - mplew.write(life.getStance()); - mplew.writeShort(0);//life.getStartFh() - mplew.writeShort(life.getFh()); - mplew.writeShort(-1); - mplew.writeInt(0); - return mplew.getPacket(); - } - - /** - * Gets a stop control monster packet. - * - * @param oid The ObjectID of the monster to stop controlling. - * @return The stop control monster packet. - */ - public static byte[] stopControllingMonster(int oid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); - mplew.write(0); - mplew.writeInt(oid); - return mplew.getPacket(); - } - - /** - * Gets a response to a move monster packet. - * - * @param objectid The ObjectID of the monster being moved. - * @param moveid The movement ID. - * @param currentMp The current MP of the monster. - * @param useSkills Can the monster use skills? - * @return The move response packet. - */ - public static byte[] moveMonsterResponse(int objectid, short moveid, int currentMp, boolean useSkills) { - return moveMonsterResponse(objectid, moveid, currentMp, useSkills, 0, 0); - } - - /** - * Gets a response to a move monster packet. - * - * @param objectid The ObjectID of the monster being moved. - * @param moveid The movement ID. - * @param currentMp The current MP of the monster. - * @param useSkills Can the monster use skills? - * @param skillId The skill ID for the monster to use. - * @param skillLevel The level of the skill to use. - * @return The move response packet. - */ - - public static byte[] moveMonsterResponse(int objectid, short moveid, int currentMp, boolean useSkills, int skillId, int skillLevel) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(13); - mplew.writeShort(SendOpcode.MOVE_MONSTER_RESPONSE.getValue()); - mplew.writeInt(objectid); - mplew.writeShort(moveid); - mplew.writeBool(useSkills); - mplew.writeShort(currentMp); - mplew.write(skillId); - mplew.write(skillLevel); - return mplew.getPacket(); - } - - /** - * Gets a general chat packet. - * - * @param cidfrom The character ID who sent the chat. - * @param text The text of the chat. - * @param whiteBG - * @param show - * @return The general chat packet. - */ - public static byte[] getChatText(int cidfrom, String text, boolean gm, int show) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CHATTEXT.getValue()); - mplew.writeInt(cidfrom); - mplew.writeBool(gm); - mplew.writeMapleAsciiString(text); - mplew.write(show); - return mplew.getPacket(); - } - - /** - * Gets a packet telling the client to show an EXP increase. - * - * @param gain The amount of EXP gained. - * @param inChat In the chat box? - * @param white White text or yellow? - * @return The exp gained packet. - */ - public static byte[] getShowExpGain(int gain, int equip, int party, boolean inChat, boolean white) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(3); // 3 = exp, 4 = fame, 5 = mesos, 6 = guildpoints - mplew.writeBool(white); - mplew.writeInt(gain); - mplew.writeBool(inChat); - mplew.writeInt(0); // bonus event exp - mplew.write(0); // third monster kill event - mplew.write(0); // RIP byte, this is always a 0 - mplew.writeInt(0); //wedding bonus - if (inChat) { // quest bonus rate stuff - mplew.write(0); - } - - mplew.write(0); //0 = party bonus, 100 = 1x Bonus EXP, 200 = 2x Bonus EXP - mplew.writeInt(party); // party bonus - mplew.writeInt(equip); //equip bonus - mplew.writeInt(0); //Internet Cafe Bonus - mplew.writeInt(0); //Rainbow Week Bonus - return mplew.getPacket(); - } - - /** - * Gets a packet telling the client to show a fame gain. - * - * @param gain How many fame gained. - * @return The meso gain packet. - */ - public static byte[] getShowFameGain(int gain) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(4); - mplew.writeInt(gain); - return mplew.getPacket(); - } - - /** - * Gets a packet telling the client to show a meso gain. - * - * @param gain How many mesos gained. - * @return The meso gain packet. - */ - public static byte[] getShowMesoGain(int gain) { - return getShowMesoGain(gain, false); - } - - /** - * Gets a packet telling the client to show a meso gain. - * - * @param gain How many mesos gained. - * @param inChat Show in the chat window? - * @return The meso gain packet. - */ - public static byte[] getShowMesoGain(int gain, boolean inChat) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - if (!inChat) { - mplew.write(0); - mplew.writeShort(1); //v83 - } else { - mplew.write(5); - } - mplew.writeInt(gain); - mplew.writeShort(0); - return mplew.getPacket(); - } - - /** - * Gets a packet telling the client to show a item gain. - * - * @param itemId The ID of the item gained. - * @param quantity How many items gained. - * @return The item gain packet. - */ - public static byte[] getShowItemGain(int itemId, short quantity) { - return getShowItemGain(itemId, quantity, false); - } - - /** - * Gets a packet telling the client to show an item gain. - * - * @param itemId The ID of the item gained. - * @param quantity The number of items gained. - * @param inChat Show in the chat window? - * @return The item gain packet. - */ - public static byte[] getShowItemGain(int itemId, short quantity, boolean inChat) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - if (inChat) { - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(3); - mplew.write(1); - mplew.writeInt(itemId); - mplew.writeInt(quantity); - } else { - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.writeShort(0); - mplew.writeInt(itemId); - mplew.writeInt(quantity); - mplew.writeInt(0); - mplew.writeInt(0); - } - return mplew.getPacket(); - } - - public static byte[] killMonster(int oid, boolean animation) { - return killMonster(oid, animation ? 1 : 0); - } - - /** - * Gets a packet telling the client that a monster was killed. - * - * @param oid The objectID of the killed monster. - * @param animation 0 = dissapear, 1 = fade out, 2+ = special - * @return The kill monster packet. - */ - public static byte[] killMonster(int oid, int animation) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.KILL_MONSTER.getValue()); - mplew.writeInt(oid); - mplew.write(animation); - mplew.write(animation); - return mplew.getPacket(); - } - - public static byte[] updateMapItemObject(MapleMapItem drop, boolean giveOwnership) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DROP_ITEM_FROM_MAPOBJECT.getValue()); - mplew.write(2); - mplew.writeInt(drop.getObjectId()); - mplew.writeBool(drop.getMeso() > 0); - mplew.writeInt(drop.getItemId()); - mplew.writeInt(giveOwnership ? 0 : -1); - mplew.write(drop.hasExpiredOwnershipTime() ? 2 : drop.getDropType()); - mplew.writePos(drop.getPosition()); - mplew.writeInt(giveOwnership ? 0 : -1); - - if (drop.getMeso() == 0) { - addExpirationTime(mplew, drop.getItem().getExpiration()); - } - mplew.write(drop.isPlayerDrop() ? 0 : 1); - return mplew.getPacket(); - } - - public static byte[] dropItemFromMapObject(MapleCharacter player, MapleMapItem drop, Point dropfrom, Point dropto, byte mod) { - int dropType = drop.getDropType(); - if (drop.hasClientsideOwnership(player) && dropType < 3) { - dropType = 2; - } - - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DROP_ITEM_FROM_MAPOBJECT.getValue()); - mplew.write(mod); - mplew.writeInt(drop.getObjectId()); - mplew.writeBool(drop.getMeso() > 0); // 1 mesos, 0 item, 2 and above all item meso bag, - mplew.writeInt(drop.getItemId()); // drop object ID - mplew.writeInt(drop.getClientsideOwnerId()); // owner charid/partyid :) - mplew.write(dropType); // 0 = timeout for non-owner, 1 = timeout for non-owner's party, 2 = FFA, 3 = explosive/FFA - mplew.writePos(dropto); - mplew.writeInt(drop.getDropper().getObjectId()); // dropper oid, found thanks to Li Jixue - - if (mod != 2) { - mplew.writePos(dropfrom); - mplew.writeShort(0);//Fh? - } - if (drop.getMeso() == 0) { - addExpirationTime(mplew, drop.getItem().getExpiration()); - } - mplew.write(drop.isPlayerDrop() ? 0 : 1); //pet EQP pickup - return mplew.getPacket(); - } - - /** - * Guild Name & Mark update packet, thanks to Arnah (Vertisy) - * - * @param guildName The Guild name, blank for nothing. - */ - public static byte[] guildNameChanged(int chrid, String guildName){ - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_NAME_CHANGED.getValue()); - mplew.writeInt(chrid); - mplew.writeMapleAsciiString(guildName); - return mplew.getPacket(); - } - - public static byte[] guildMarkChanged(int chrid, MapleGuild guild){ - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_MARK_CHANGED.getValue()); - mplew.writeInt(chrid); - mplew.writeShort(guild.getLogoBG()); - mplew.write(guild.getLogoBGColor()); - mplew.writeShort(guild.getLogo()); - mplew.write(guild.getLogoColor()); - return mplew.getPacket(); - } - - private static void writeForeignBuffs(MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.writeInt(0); - mplew.writeShort(0); //v83 - mplew.write(0xFC); - mplew.write(1); - if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) { - mplew.writeInt(2); - } else { - mplew.writeInt(0); - } - long buffmask = 0; - Integer buffvalue = null; - if ((chr.getBuffedValue(MapleBuffStat.DARKSIGHT) != null || chr.getBuffedValue(MapleBuffStat.WIND_WALK) != null) && !chr.isHidden()) { - buffmask |= MapleBuffStat.DARKSIGHT.getValue(); - } - if (chr.getBuffedValue(MapleBuffStat.COMBO) != null) { - buffmask |= MapleBuffStat.COMBO.getValue(); - buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.COMBO)); - } - if (chr.getBuffedValue(MapleBuffStat.SHADOWPARTNER) != null) { - buffmask |= MapleBuffStat.SHADOWPARTNER.getValue(); - } - if (chr.getBuffedValue(MapleBuffStat.SOULARROW) != null) { - buffmask |= MapleBuffStat.SOULARROW.getValue(); - } - if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) { - buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.MORPH)); - } - mplew.writeInt((int) ((buffmask >> 32) & 0xffffffffL)); - if (buffvalue != null) { - if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) { //TEST - mplew.writeShort(buffvalue); - } else { - mplew.write(buffvalue.byteValue()); - } - } - mplew.writeInt((int) (buffmask & 0xffffffffL)); - - // Energy Charge - mplew.writeInt(chr.getEnergyBar() == 15000 ? 1 : 0); - mplew.writeShort(0); - mplew.skip(4); - - boolean dashBuff = chr.getBuffedValue(MapleBuffStat.DASH) != null; - // Dash Speed - mplew.writeInt(dashBuff ? 1 << 24 : 0); - mplew.skip(11); - mplew.writeShort(0); - // Dash Jump - mplew.skip(9); - mplew.writeInt(dashBuff ? 1 << 24 : 0); - mplew.writeShort(0); - mplew.write(0); - - // Monster Riding - Integer bv = chr.getBuffedValue(MapleBuffStat.MONSTER_RIDING); - if (bv != null) { - MapleMount mount = chr.getMount(); - if (mount != null) { - mplew.writeInt(mount.getItemId()); - mplew.writeInt(mount.getSkillId()); - } else { - mplew.writeLong(0); - } - } else { - mplew.writeLong(0); - } - - int CHAR_MAGIC_SPAWN = Randomizer.nextInt(); // skill references found thanks to Rien dev team - mplew.writeInt(CHAR_MAGIC_SPAWN); - // Speed Infusion - mplew.skip(8); - mplew.writeInt(CHAR_MAGIC_SPAWN); - mplew.write(0); - mplew.writeInt(CHAR_MAGIC_SPAWN); - mplew.writeShort(0); - // Homing Beacon - mplew.skip(9); - mplew.writeInt(CHAR_MAGIC_SPAWN); - mplew.writeInt(0); - // Zombify - mplew.skip(9); - mplew.writeInt(CHAR_MAGIC_SPAWN); - mplew.writeShort(0); - mplew.writeShort(0); - } - - /** - * Gets a packet spawning a player as a mapobject to other clients. - * - * @param target The client receiving this packet. - * @param chr The character to spawn to other clients. - * @param enteringField Whether the character to spawn is not yet present in the map or already is. - * @return The spawn player packet. - */ - public static byte[] spawnPlayerMapObject(MapleClient target, MapleCharacter chr, boolean enteringField) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_PLAYER.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(chr.getLevel()); //v83 - mplew.writeMapleAsciiString(chr.getName()); - if (chr.getGuildId() < 1) { - mplew.writeMapleAsciiString(""); - mplew.write(new byte[6]); - } else { - MapleGuildSummary gs = chr.getClient().getWorldServer().getGuildSummary(chr.getGuildId(), chr.getWorld()); - if (gs != null) { - mplew.writeMapleAsciiString(gs.getName()); - mplew.writeShort(gs.getLogoBG()); - mplew.write(gs.getLogoBGColor()); - mplew.writeShort(gs.getLogo()); - mplew.write(gs.getLogoColor()); - } else { - mplew.writeMapleAsciiString(""); - mplew.write(new byte[6]); - } - } - - writeForeignBuffs(mplew, chr); - - mplew.writeShort(chr.getJob().getId()); - /* replace "mplew.writeShort(chr.getJob().getId())" with this snippet for 3rd person FJ animation on all classes if (chr.getJob().isA(MapleJob.HERMIT) || chr.getJob().isA(MapleJob.DAWNWARRIOR2) || chr.getJob().isA(MapleJob.NIGHTWALKER2)) { mplew.writeShort(chr.getJob().getId()); } else { mplew.writeShort(412); }*/ - - addCharLook(mplew, chr, false); - mplew.writeInt(chr.getInventory(MapleInventoryType.CASH).countById(5110000)); - mplew.writeInt(chr.getItemEffect()); - mplew.writeInt(ItemConstants.getInventoryType(chr.getChair()) == MapleInventoryType.SETUP ? chr.getChair() : 0); - - if(enteringField) { - Point spawnPos = new Point(chr.getPosition()); - spawnPos.y -= 42; - mplew.writePos(spawnPos); - mplew.write(6); - } else { - mplew.writePos(chr.getPosition()); - mplew.write(chr.getStance()); - } - - mplew.writeShort(0);//chr.getFh() - mplew.write(0); - MaplePet[] pet = chr.getPets(); - for (int i = 0; i < 3; i++) { - if (pet[i] != null) { - addPetInfo(mplew, pet[i], false); - } - } - mplew.write(0); //end of pets - if (chr.getMount() == null) { - mplew.writeInt(1); // mob level - mplew.writeLong(0); // mob exp + tiredness - } else { - mplew.writeInt(chr.getMount().getLevel()); - mplew.writeInt(chr.getMount().getExp()); - mplew.writeInt(chr.getMount().getTiredness()); - } - - MaplePlayerShop mps = chr.getPlayerShop(); - if (mps != null && mps.isOwner(chr)) { - if (mps.hasFreeSlot()) { - addAnnounceBox(mplew, mps, mps.getVisitors().length); - } else { - addAnnounceBox(mplew, mps, 1); - } - } else { - MapleMiniGame miniGame = chr.getMiniGame(); - if (miniGame != null && miniGame.isOwner(chr)) { - if (miniGame.hasFreeSlot()) { - addAnnounceBox(mplew, miniGame, 1, 0); - } else { - addAnnounceBox(mplew, miniGame, 2, miniGame.isMatchInProgress() ? 1 : 0); - } - } else { - mplew.write(0); - } - } - - if (chr.getChalkboard() != null) { - mplew.write(1); - mplew.writeMapleAsciiString(chr.getChalkboard()); - } else { - mplew.write(0); - } - addRingLook(mplew, chr, true); // crush - addRingLook(mplew, chr, false); // friendship - addMarriageRingLook(target, mplew, chr); - encodeNewYearCardInfo(mplew, chr); // new year seems to crash sometimes... - mplew.write(0); - mplew.write(0); - mplew.write(chr.getTeam());//only needed in specific fields - return mplew.getPacket(); + + addCharLook(mplew, chr, false); + mplew.writeInt(chr.getInventory(MapleInventoryType.CASH).countById(5110000)); + mplew.writeInt(chr.getItemEffect()); + mplew.writeInt(ItemConstants.getInventoryType(chr.getChair()) == MapleInventoryType.SETUP ? chr.getChair() : 0); + + if (enteringField) { + Point spawnPos = new Point(chr.getPosition()); + spawnPos.y -= 42; + mplew.writePos(spawnPos); + mplew.write(6); + } else { + mplew.writePos(chr.getPosition()); + mplew.write(chr.getStance()); } - private static void encodeNewYearCardInfo(MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - Set newyears = chr.getReceivedNewYearRecords(); - if(!newyears.isEmpty()) { - mplew.write(1); + mplew.writeShort(0);//chr.getFh() + mplew.write(0); + MaplePet[] pet = chr.getPets(); + for (int i = 0; i < 3; i++) { + if (pet[i] != null) { + addPetInfo(mplew, pet[i], false); + } + } + mplew.write(0); //end of pets + if (chr.getMount() == null) { + mplew.writeInt(1); // mob level + mplew.writeLong(0); // mob exp + tiredness + } else { + mplew.writeInt(chr.getMount().getLevel()); + mplew.writeInt(chr.getMount().getExp()); + mplew.writeInt(chr.getMount().getTiredness()); + } - mplew.writeInt(newyears.size()); - for(NewYearCardRecord nyc : newyears) { - mplew.writeInt(nyc.getId()); - } + MaplePlayerShop mps = chr.getPlayerShop(); + if (mps != null && mps.isOwner(chr)) { + if (mps.hasFreeSlot()) { + addAnnounceBox(mplew, mps, mps.getVisitors().length); + } else { + addAnnounceBox(mplew, mps, 1); + } + } else { + MapleMiniGame miniGame = chr.getMiniGame(); + if (miniGame != null && miniGame.isOwner(chr)) { + if (miniGame.hasFreeSlot()) { + addAnnounceBox(mplew, miniGame, 1, 0); } else { - mplew.write(0); + addAnnounceBox(mplew, miniGame, 2, miniGame.isMatchInProgress() ? 1 : 0); } + } else { + mplew.write(0); + } } - - public static byte[] onNewYearCardRes(MapleCharacter user, int cardId, int mode, int msg) { - NewYearCardRecord newyear = user.getNewYearRecord(cardId); - return onNewYearCardRes(user, newyear, mode, msg); + + if (chr.getChalkboard() != null) { + mplew.write(1); + mplew.writeMapleAsciiString(chr.getChalkboard()); + } else { + mplew.write(0); } - - public static byte[] onNewYearCardRes(MapleCharacter user, NewYearCardRecord newyear, int mode, int msg) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NEW_YEAR_CARD_RES.getValue()); - mplew.write(mode); - switch (mode) { - case 4: // Successfully sent a New Year Card\r\n to %s. - case 6: // Successfully received a New Year Card. - encodeNewYearCard(newyear, mplew); - break; - - case 8: // Successfully deleted a New Year Card. - mplew.writeInt(newyear.getId()); - break; - - case 5: // Nexon's stupid and makes 4 modes do the same operation.. - case 7: - case 9: - case 0xB: - // 0x10: You have no free slot to store card.\r\ntry later on please. - // 0x11: You have no card to send. - // 0x12: Wrong inventory information ! - // 0x13: Cannot find such character ! - // 0x14: Incoherent Data ! - // 0x15: An error occured during DB operation. - // 0x16: An unknown error occured ! - // 0xF: You cannot send a card to yourself ! - mplew.write(msg); - break; - - case 0xA: // GetUnreceivedList_Done - int nSN = 1; - mplew.writeInt(nSN); - if ((nSN - 1) <= 98 && nSN > 0) {//lol nexon are you kidding - for (int i = 0; i < nSN; i++) { - mplew.writeInt(newyear.getId()); - mplew.writeInt(newyear.getSenderId()); - mplew.writeMapleAsciiString(newyear.getSenderName()); - } - } - break; - - case 0xC: // NotiArrived - mplew.writeInt(newyear.getId()); - mplew.writeMapleAsciiString(newyear.getSenderName()); - break; - - case 0xD: // BroadCast_AddCardInfo - mplew.writeInt(newyear.getId()); - mplew.writeInt(user.getId()); - break; - - case 0xE: // BroadCast_RemoveCardInfo - mplew.writeInt(newyear.getId()); - break; - } - return mplew.getPacket(); - } - - private static void encodeNewYearCard(NewYearCardRecord newyear, MaplePacketLittleEndianWriter mplew) { + addRingLook(mplew, chr, true); // crush + addRingLook(mplew, chr, false); // friendship + addMarriageRingLook(target, mplew, chr); + encodeNewYearCardInfo(mplew, chr); // new year seems to crash sometimes... + mplew.write(0); + mplew.write(0); + mplew.write(chr.getTeam());//only needed in specific fields + return mplew.getPacket(); + } + + private static void encodeNewYearCardInfo(MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + Set newyears = chr.getReceivedNewYearRecords(); + if (!newyears.isEmpty()) { + mplew.write(1); + + mplew.writeInt(newyears.size()); + for (NewYearCardRecord nyc : newyears) { + mplew.writeInt(nyc.getId()); + } + } else { + mplew.write(0); + } + } + + public static byte[] onNewYearCardRes(MapleCharacter user, int cardId, int mode, int msg) { + NewYearCardRecord newyear = user.getNewYearRecord(cardId); + return onNewYearCardRes(user, newyear, mode, msg); + } + + public static byte[] onNewYearCardRes(MapleCharacter user, NewYearCardRecord newyear, int mode, int msg) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.NEW_YEAR_CARD_RES.getValue()); + mplew.write(mode); + switch (mode) { + case 4: // Successfully sent a New Year Card\r\n to %s. + case 6: // Successfully received a New Year Card. + encodeNewYearCard(newyear, mplew); + break; + + case 8: // Successfully deleted a New Year Card. mplew.writeInt(newyear.getId()); - mplew.writeInt(newyear.getSenderId()); - mplew.writeMapleAsciiString(newyear.getSenderName()); - mplew.writeBool(newyear.isSenderCardDiscarded()); - mplew.writeLong(newyear.getDateSent()); - mplew.writeInt(newyear.getReceiverId()); - mplew.writeMapleAsciiString(newyear.getReceiverName()); - mplew.writeBool(newyear.isReceiverCardDiscarded()); - mplew.writeBool(newyear.isReceiverCardReceived()); - mplew.writeLong(newyear.getDateReceived()); - mplew.writeMapleAsciiString(newyear.getMessage()); - } - - private static void addRingLook(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr, boolean crush) { - List rings; - if (crush) { - rings = chr.getCrushRings(); - } else { - rings = chr.getFriendshipRings(); - } - boolean yes = false; - for (MapleRing ring : rings) { - if (ring.equipped()) { - if (yes == false) { - yes = true; - mplew.write(1); - } - mplew.writeInt(ring.getRingId()); - mplew.writeInt(0); - mplew.writeInt(ring.getPartnerRingId()); - mplew.writeInt(0); - mplew.writeInt(ring.getItemId()); - } + break; + + case 5: // Nexon's stupid and makes 4 modes do the same operation.. + case 7: + case 9: + case 0xB: + // 0x10: You have no free slot to store card.\r\ntry later on please. + // 0x11: You have no card to send. + // 0x12: Wrong inventory information ! + // 0x13: Cannot find such character ! + // 0x14: Incoherent Data ! + // 0x15: An error occured during DB operation. + // 0x16: An unknown error occured ! + // 0xF: You cannot send a card to yourself ! + mplew.write(msg); + break; + + case 0xA: // GetUnreceivedList_Done + int nSN = 1; + mplew.writeInt(nSN); + if ((nSN - 1) <= 98 && nSN > 0) {//lol nexon are you kidding + for (int i = 0; i < nSN; i++) { + mplew.writeInt(newyear.getId()); + mplew.writeInt(newyear.getSenderId()); + mplew.writeMapleAsciiString(newyear.getSenderName()); + } } + break; + + case 0xC: // NotiArrived + mplew.writeInt(newyear.getId()); + mplew.writeMapleAsciiString(newyear.getSenderName()); + break; + + case 0xD: // BroadCast_AddCardInfo + mplew.writeInt(newyear.getId()); + mplew.writeInt(user.getId()); + break; + + case 0xE: // BroadCast_RemoveCardInfo + mplew.writeInt(newyear.getId()); + break; + } + return mplew.getPacket(); + } + + private static void encodeNewYearCard(NewYearCardRecord newyear, MaplePacketLittleEndianWriter mplew) { + mplew.writeInt(newyear.getId()); + mplew.writeInt(newyear.getSenderId()); + mplew.writeMapleAsciiString(newyear.getSenderName()); + mplew.writeBool(newyear.isSenderCardDiscarded()); + mplew.writeLong(newyear.getDateSent()); + mplew.writeInt(newyear.getReceiverId()); + mplew.writeMapleAsciiString(newyear.getReceiverName()); + mplew.writeBool(newyear.isReceiverCardDiscarded()); + mplew.writeBool(newyear.isReceiverCardReceived()); + mplew.writeLong(newyear.getDateReceived()); + mplew.writeMapleAsciiString(newyear.getMessage()); + } + + private static void addRingLook(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr, boolean crush) { + List rings; + if (crush) { + rings = chr.getCrushRings(); + } else { + rings = chr.getFriendshipRings(); + } + boolean yes = false; + for (MapleRing ring : rings) { + if (ring.equipped()) { if (yes == false) { - mplew.write(0); + yes = true; + mplew.write(1); } - } - - private static void addMarriageRingLook(MapleClient target, final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - MapleRing ring = chr.getMarriageRing(); - - if (ring == null || !ring.equipped()) { - mplew.write(0); - } else { - mplew.write(1); - - MapleCharacter targetChr = target.getPlayer(); - if (targetChr != null && targetChr.getPartnerId() == chr.getId()) { - mplew.writeInt(0); - mplew.writeInt(0); - } else { - mplew.writeInt(chr.getId()); - mplew.writeInt(ring.getPartnerChrId()); - } - - mplew.writeInt(ring.getItemId()); - } - } - - /** - * Adds a announcement box to an existing MaplePacketLittleEndianWriter. - * - * @param mplew The MaplePacketLittleEndianWriter to add an announcement box - * to. - * @param shop The shop to announce. - */ - private static void addAnnounceBox(final MaplePacketLittleEndianWriter mplew, MaplePlayerShop shop, int availability) { - mplew.write(4); - mplew.writeInt(shop.getObjectId()); - mplew.writeMapleAsciiString(shop.getDescription()); - mplew.write(0); - mplew.write(0); - mplew.write(1); - mplew.write(availability); - mplew.write(0); - } - - private static void addAnnounceBox(final MaplePacketLittleEndianWriter mplew, MapleMiniGame game, int ammount, int joinable) { - mplew.write(game.getGameType().getValue()); - mplew.writeInt(game.getObjectId()); // gameid/shopid - mplew.writeMapleAsciiString(game.getDescription()); // desc - mplew.writeBool(!game.getPassword().isEmpty()); // password here, thanks GabrielSin - mplew.write(game.getPieceType()); - mplew.write(ammount); - mplew.write(2); //player capacity - mplew.write(joinable); - } - - private static void updateHiredMerchantBoxInfo(MaplePacketLittleEndianWriter mplew, MapleHiredMerchant hm) { - byte[] roomInfo = hm.getShopRoomInfo(); - - mplew.write(5); - mplew.writeInt(hm.getObjectId()); - mplew.writeMapleAsciiString(hm.getDescription()); - mplew.write(hm.getItemId() % 100); - mplew.write(roomInfo); // visitor capacity here, thanks GabrielSin - } - - public static byte[] updateHiredMerchantBox(MapleHiredMerchant hm) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_HIRED_MERCHANT.getValue()); - mplew.writeInt(hm.getOwnerId()); - - updateHiredMerchantBoxInfo(mplew, hm); - return mplew.getPacket(); - } - - private static void updatePlayerShopBoxInfo(final MaplePacketLittleEndianWriter mplew, MaplePlayerShop shop) { - byte[] roomInfo = shop.getShopRoomInfo(); - - mplew.write(4); - mplew.writeInt(shop.getObjectId()); - mplew.writeMapleAsciiString(shop.getDescription()); - mplew.write(0); // pw - mplew.write(shop.getItemId() % 100); - mplew.write(roomInfo[0]); // curPlayers - mplew.write(roomInfo[1]); // maxPlayers - mplew.write(0); - } - - public static byte[] updatePlayerShopBox(MaplePlayerShop shop) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); - mplew.writeInt(shop.getOwner().getId()); - - updatePlayerShopBoxInfo(mplew, shop); - return mplew.getPacket(); - } - - public static byte[] removePlayerShopBox(MaplePlayerShop shop) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); - mplew.writeInt(shop.getOwner().getId()); - mplew.write(0); - return mplew.getPacket(); - } - - public static byte[] facialExpression(MapleCharacter from, int expression) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(10); - mplew.writeShort(SendOpcode.FACIAL_EXPRESSION.getValue()); - mplew.writeInt(from.getId()); - mplew.writeInt(expression); - return mplew.getPacket(); - } - - private static void rebroadcastMovementList(LittleEndianWriter lew, SeekableLittleEndianAccessor slea, long movementDataLength) { - //movement command length is sent by client, probably not a big issue? (could be calculated on server) - //if multiple write/reads are slow, could use (and cache?) a byte[] buffer - for(long i = 0; i < movementDataLength; i++) { - lew.write(slea.readByte()); - } - } - - private static void serializeMovementList(LittleEndianWriter lew, List moves) { - lew.write(moves.size()); - for(LifeMovementFragment move : moves) { - move.serialize(lew); - } - } - - public static byte[] movePlayer(int cid, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MOVE_PLAYER.getValue()); - mplew.writeInt(cid); + mplew.writeInt(ring.getRingId()); mplew.writeInt(0); - rebroadcastMovementList(mplew, movementSlea, movementDataLength); - return mplew.getPacket(); + mplew.writeInt(ring.getPartnerRingId()); + mplew.writeInt(0); + mplew.writeInt(ring.getItemId()); + } + } + if (yes == false) { + mplew.write(0); + } + } + + private static void addMarriageRingLook(MapleClient target, final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + MapleRing ring = chr.getMarriageRing(); + + if (ring == null || !ring.equipped()) { + mplew.write(0); + } else { + mplew.write(1); + + MapleCharacter targetChr = target.getPlayer(); + if (targetChr != null && targetChr.getPartnerId() == chr.getId()) { + mplew.writeInt(0); + mplew.writeInt(0); + } else { + mplew.writeInt(chr.getId()); + mplew.writeInt(ring.getPartnerChrId()); + } + + mplew.writeInt(ring.getItemId()); + } + } + + /** + * Adds a announcement box to an existing MaplePacketLittleEndianWriter. + * + * @param mplew The MaplePacketLittleEndianWriter to add an announcement box + * to. + * @param shop The shop to announce. + */ + private static void addAnnounceBox(final MaplePacketLittleEndianWriter mplew, MaplePlayerShop shop, int availability) { + mplew.write(4); + mplew.writeInt(shop.getObjectId()); + mplew.writeMapleAsciiString(shop.getDescription()); + mplew.write(0); + mplew.write(0); + mplew.write(1); + mplew.write(availability); + mplew.write(0); + } + + private static void addAnnounceBox(final MaplePacketLittleEndianWriter mplew, MapleMiniGame game, int ammount, int joinable) { + mplew.write(game.getGameType().getValue()); + mplew.writeInt(game.getObjectId()); // gameid/shopid + mplew.writeMapleAsciiString(game.getDescription()); // desc + mplew.writeBool(!game.getPassword().isEmpty()); // password here, thanks GabrielSin + mplew.write(game.getPieceType()); + mplew.write(ammount); + mplew.write(2); //player capacity + mplew.write(joinable); + } + + private static void updateHiredMerchantBoxInfo(MaplePacketLittleEndianWriter mplew, MapleHiredMerchant hm) { + byte[] roomInfo = hm.getShopRoomInfo(); + + mplew.write(5); + mplew.writeInt(hm.getObjectId()); + mplew.writeMapleAsciiString(hm.getDescription()); + mplew.write(hm.getItemId() % 100); + mplew.write(roomInfo); // visitor capacity here, thanks GabrielSin + } + + public static byte[] updateHiredMerchantBox(MapleHiredMerchant hm) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_HIRED_MERCHANT.getValue()); + mplew.writeInt(hm.getOwnerId()); + + updateHiredMerchantBoxInfo(mplew, hm); + return mplew.getPacket(); + } + + private static void updatePlayerShopBoxInfo(final MaplePacketLittleEndianWriter mplew, MaplePlayerShop shop) { + byte[] roomInfo = shop.getShopRoomInfo(); + + mplew.write(4); + mplew.writeInt(shop.getObjectId()); + mplew.writeMapleAsciiString(shop.getDescription()); + mplew.write(0); // pw + mplew.write(shop.getItemId() % 100); + mplew.write(roomInfo[0]); // curPlayers + mplew.write(roomInfo[1]); // maxPlayers + mplew.write(0); + } + + public static byte[] updatePlayerShopBox(MaplePlayerShop shop) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); + mplew.writeInt(shop.getOwner().getId()); + + updatePlayerShopBoxInfo(mplew, shop); + return mplew.getPacket(); + } + + public static byte[] removePlayerShopBox(MaplePlayerShop shop) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); + mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); + mplew.writeInt(shop.getOwner().getId()); + mplew.write(0); + return mplew.getPacket(); + } + + public static byte[] facialExpression(MapleCharacter from, int expression) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(10); + mplew.writeShort(SendOpcode.FACIAL_EXPRESSION.getValue()); + mplew.writeInt(from.getId()); + mplew.writeInt(expression); + return mplew.getPacket(); + } + + private static void rebroadcastMovementList(LittleEndianWriter lew, SeekableLittleEndianAccessor slea, long movementDataLength) { + //movement command length is sent by client, probably not a big issue? (could be calculated on server) + //if multiple write/reads are slow, could use (and cache?) a byte[] buffer + for (long i = 0; i < movementDataLength; i++) { + lew.write(slea.readByte()); + } + } + + private static void serializeMovementList(LittleEndianWriter lew, List moves) { + lew.write(moves.size()); + for (LifeMovementFragment move : moves) { + move.serialize(lew); + } + } + + public static byte[] movePlayer(int cid, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MOVE_PLAYER.getValue()); + mplew.writeInt(cid); + mplew.writeInt(0); + rebroadcastMovementList(mplew, movementSlea, movementDataLength); + return mplew.getPacket(); + } + + public static byte[] moveSummon(int cid, int oid, Point startPos, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MOVE_SUMMON.getValue()); + mplew.writeInt(cid); + mplew.writeInt(oid); + mplew.writePos(startPos); + rebroadcastMovementList(mplew, movementSlea, movementDataLength); + return mplew.getPacket(); + } + + public static byte[] moveMonster(int oid, boolean skillPossible, int skill, int skillId, int skillLevel, int pOption, Point startPos, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MOVE_MONSTER.getValue()); + mplew.writeInt(oid); + mplew.write(0); + mplew.writeBool(skillPossible); + mplew.write(skill); + mplew.write(skillId); + mplew.write(skillLevel); + mplew.writeShort(pOption); + mplew.writePos(startPos); + rebroadcastMovementList(mplew, movementSlea, movementDataLength); + return mplew.getPacket(); + } + + public static byte[] summonAttack(int cid, int summonOid, byte direction, List allDamage) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + //b2 00 29 f7 00 00 9a a3 04 00 c8 04 01 94 a3 04 00 06 ff 2b 00 + mplew.writeShort(SendOpcode.SUMMON_ATTACK.getValue()); + mplew.writeInt(cid); + mplew.writeInt(summonOid); + mplew.write(0); // char level + mplew.write(direction); + mplew.write(allDamage.size()); + for (SummonAttackEntry attackEntry : allDamage) { + mplew.writeInt(attackEntry.getMonsterOid()); // oid + mplew.write(6); // who knows + mplew.writeInt(attackEntry.getDamage()); // damage } - public static byte[] moveSummon(int cid, int oid, Point startPos, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MOVE_SUMMON.getValue()); - mplew.writeInt(cid); - mplew.writeInt(oid); - mplew.writePos(startPos); - rebroadcastMovementList(mplew, movementSlea, movementDataLength); - return mplew.getPacket(); - } - - public static byte[] moveMonster(int oid, boolean skillPossible, int skill, int skillId, int skillLevel, int pOption, Point startPos, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MOVE_MONSTER.getValue()); - mplew.writeInt(oid); - mplew.write(0); - mplew.writeBool(skillPossible); - mplew.write(skill); - mplew.write(skillId); - mplew.write(skillLevel); - mplew.writeShort(pOption); - mplew.writePos(startPos); - rebroadcastMovementList(mplew, movementSlea, movementDataLength); - return mplew.getPacket(); - } - - public static byte[] summonAttack(int cid, int summonOid, byte direction, List allDamage) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - //b2 00 29 f7 00 00 9a a3 04 00 c8 04 01 94 a3 04 00 06 ff 2b 00 - mplew.writeShort(SendOpcode.SUMMON_ATTACK.getValue()); - mplew.writeInt(cid); - mplew.writeInt(summonOid); - mplew.write(0); // char level - mplew.write(direction); - mplew.write(allDamage.size()); - for (SummonAttackEntry attackEntry : allDamage) { - mplew.writeInt(attackEntry.getMonsterOid()); // oid - mplew.write(6); // who knows - mplew.writeInt(attackEntry.getDamage()); // damage - } - - return mplew.getPacket(); - } - + return mplew.getPacket(); + } + /* public static byte[] summonAttack(int cid, int summonSkillId, byte direction, List allDamage) { final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); @@ -2387,551 +2392,551 @@ public class PacketCreator { } */ - public static byte[] closeRangeAttack(MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, Map> damage, int speed, int direction, int display) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CLOSE_RANGE_ATTACK.getValue()); - addAttackBody(mplew, chr, skill, skilllevel, stance, numAttackedAndDamage, 0, damage, speed, direction, display); - return mplew.getPacket(); - } + public static byte[] closeRangeAttack(MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, Map> damage, int speed, int direction, int display) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CLOSE_RANGE_ATTACK.getValue()); + addAttackBody(mplew, chr, skill, skilllevel, stance, numAttackedAndDamage, 0, damage, speed, direction, display); + return mplew.getPacket(); + } - public static byte[] rangedAttack(MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, int projectile, Map> damage, int speed, int direction, int display) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.RANGED_ATTACK.getValue()); - addAttackBody(mplew, chr, skill, skilllevel, stance, numAttackedAndDamage, projectile, damage, speed, direction, display); - mplew.writeInt(0); - return mplew.getPacket(); - } + public static byte[] rangedAttack(MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, int projectile, Map> damage, int speed, int direction, int display) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.RANGED_ATTACK.getValue()); + addAttackBody(mplew, chr, skill, skilllevel, stance, numAttackedAndDamage, projectile, damage, speed, direction, display); + mplew.writeInt(0); + return mplew.getPacket(); + } - public static byte[] magicAttack(MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, Map> damage, int charge, int speed, int direction, int display) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAGIC_ATTACK.getValue()); - addAttackBody(mplew, chr, skill, skilllevel, stance, numAttackedAndDamage, 0, damage, speed, direction, display); - if (charge != -1) { - mplew.writeInt(charge); + public static byte[] magicAttack(MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, Map> damage, int charge, int speed, int direction, int display) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MAGIC_ATTACK.getValue()); + addAttackBody(mplew, chr, skill, skilllevel, stance, numAttackedAndDamage, 0, damage, speed, direction, display); + if (charge != -1) { + mplew.writeInt(charge); + } + return mplew.getPacket(); + } + + private static void addAttackBody(LittleEndianWriter lew, MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, int projectile, Map> damage, int speed, int direction, int display) { + lew.writeInt(chr.getId()); + lew.write(numAttackedAndDamage); + lew.write(0x5B);//? + lew.write(skilllevel); + if (skilllevel > 0) { + lew.writeInt(skill); + } + lew.write(display); + lew.write(direction); + lew.write(stance); + lew.write(speed); + lew.write(0x0A); + lew.writeInt(projectile); + for (Integer oned : damage.keySet()) { + List onedList = damage.get(oned); + if (onedList != null) { + lew.writeInt(oned); + lew.write(0x0); + if (skill == 4211006) { + lew.write(onedList.size()); } - return mplew.getPacket(); - } - - private static void addAttackBody(LittleEndianWriter lew, MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, int projectile, Map> damage, int speed, int direction, int display) { - lew.writeInt(chr.getId()); - lew.write(numAttackedAndDamage); - lew.write(0x5B);//? - lew.write(skilllevel); - if (skilllevel > 0) { - lew.writeInt(skill); + for (Integer eachd : onedList) { + lew.writeInt(eachd); } - lew.write(display); - lew.write(direction); - lew.write(stance); - lew.write(speed); - lew.write(0x0A); - lew.writeInt(projectile); - for (Integer oned : damage.keySet()) { - List onedList = damage.get(oned); - if (onedList != null) { - lew.writeInt(oned); - lew.write(0x0); - if (skill == 4211006) { - lew.write(onedList.size()); - } - for (Integer eachd : onedList) { - lew.writeInt(eachd); - } - } - } - } - - public static byte[] throwGrenade(int cid, Point p, int keyDown, int skillId, int skillLevel) { // packets found thanks to GabrielSin - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.THROW_GRENADE.getValue()); - mplew.writeInt(cid); - mplew.writeInt(p.x); - mplew.writeInt(p.y); - mplew.writeInt(keyDown); - mplew.writeInt(skillId); - mplew.writeInt(skillLevel); - return mplew.getPacket(); - } - - // someone thought it was a good idea to handle floating point representation through packets ROFL - private static int doubleToShortBits(double d) { - return (int) (Double.doubleToLongBits(d) >> 48); - } - - public static byte[] getNPCShop(MapleClient c, int sid, List items) { - MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.OPEN_NPC_SHOP.getValue()); - mplew.writeInt(sid); - mplew.writeShort(items.size()); // item count - for (MapleShopItem item : items) { - mplew.writeInt(item.getItemId()); - mplew.writeInt(item.getPrice()); - mplew.writeInt(item.getPrice() == 0 ? item.getPitch() : 0); //Perfect Pitch - mplew.writeInt(0); //Can be used x minutes after purchase - mplew.writeInt(0); //Hmm - if (!ItemConstants.isRechargeable(item.getItemId())) { - mplew.writeShort(1); // stacksize o.o - mplew.writeShort(item.getBuyable()); - } else { - mplew.writeShort(0); - mplew.writeInt(0); - mplew.writeShort(doubleToShortBits(ii.getUnitPrice(item.getItemId()))); - mplew.writeShort(ii.getSlotMax(c, item.getItemId())); - } - } - return mplew.getPacket(); - } - - /* 00 = / - * 01 = You don't have enough in stock - * 02 = You do not have enough mesos - * 03 = Please check if your inventory is full or not - * 05 = You don't have enough in stock - * 06 = Due to an error, the trade did not happen - * 07 = Due to an error, the trade did not happen - * 08 = / - * 0D = You need more items - * 0E = CRASH; LENGTH NEEDS TO BE LONGER :O - */ - public static byte[] shopTransaction(byte code) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.CONFIRM_SHOP_TRANSACTION.getValue()); - mplew.write(code); - return mplew.getPacket(); - } - - public static byte[] updateInventorySlotLimit(int type, int newLimit) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.INVENTORY_GROW.getValue()); - mplew.write(type); - mplew.write(newLimit); - return mplew.getPacket(); - } - - public static byte[] modifyInventory(boolean updateTick, final List mods) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.INVENTORY_OPERATION.getValue()); - mplew.writeBool(updateTick); - mplew.write(mods.size()); - //mplew.write(0); v104 :) - int addMovement = -1; - for (ModifyInventory mod : mods) { - mplew.write(mod.getMode()); - mplew.write(mod.getInventoryType()); - mplew.writeShort(mod.getMode() == 2 ? mod.getOldPosition() : mod.getPosition()); - switch (mod.getMode()) { - case 0: {//add item - addItemInfo(mplew, mod.getItem(), true); - break; - } - case 1: {//update quantity - mplew.writeShort(mod.getQuantity()); - break; - } - case 2: {//move - mplew.writeShort(mod.getPosition()); - if (mod.getPosition() < 0 || mod.getOldPosition() < 0) { - addMovement = mod.getOldPosition() < 0 ? 1 : 2; - } - break; - } - case 3: {//remove - if (mod.getPosition() < 0) { - addMovement = 2; - } - break; - } - } - mod.clear(); - } - if (addMovement > -1) { - mplew.write(addMovement); - } - return mplew.getPacket(); - } - - public static byte[] getScrollEffect(int chr, ScrollResult scrollSuccess, boolean legendarySpirit, boolean whiteScroll) { // thanks to Rien dev team - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_SCROLL_EFFECT.getValue()); - mplew.writeInt(chr); - mplew.writeBool(scrollSuccess == ScrollResult.SUCCESS); - mplew.writeBool(scrollSuccess == ScrollResult.CURSE); - mplew.writeBool(legendarySpirit); - mplew.writeBool(whiteScroll); - return mplew.getPacket(); - } - - public static byte[] removePlayerFromMap(int cid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.REMOVE_PLAYER_FROM_MAP.getValue()); - mplew.writeInt(cid); - return mplew.getPacket(); - } - - public static byte[] catchMessage(int message) { // not done, I guess - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BRIDLE_MOB_CATCH_FAIL.getValue()); - mplew.write(message); // 1 = too strong, 2 = Elemental Rock - mplew.writeInt(0);//Maybe itemid? - mplew.writeInt(0); - return mplew.getPacket(); - } - - public static byte[] showAllCharacter(int chars, int unk) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); - mplew.writeShort(SendOpcode.VIEW_ALL_CHAR.getValue()); - mplew.write(chars > 0 ? 1 : 5); // 2: already connected to server, 3 : unk error (view-all-characters), 5 : cannot find any - mplew.writeInt(chars); - mplew.writeInt(unk); - return mplew.getPacket(); - } - - public static byte[] showAriantScoreBoard() { // thanks lrenex for pointing match's end scoreboard packet - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ARIANT_ARENA_SHOW_RESULT.getValue()); - return mplew.getPacket(); - } - - public static byte[] updateAriantPQRanking(final MapleCharacter chr, final int score) { - return updateAriantPQRanking(new LinkedHashMap(){{put(chr, score);}}); - } - - public static byte[] updateAriantPQRanking(Map playerScore) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ARIANT_ARENA_USER_SCORE.getValue()); - mplew.write(playerScore.size()); - for (Entry e : playerScore.entrySet()) { - mplew.writeMapleAsciiString(e.getKey().getName()); - mplew.writeInt(e.getValue()); - } - return mplew.getPacket(); - } - - public static byte[] updateWitchTowerScore(int score) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.WITCH_TOWER_SCORE_UPDATE.getValue()); - mplew.write(score); - return mplew.getPacket(); - } - - public static byte[] silentRemoveItemFromMap(int oid) { - return removeItemFromMap(oid, 1, 0); - } - - /** - * animation: 0 - expire
1 - without animation
2 - pickup
4 - - * explode
cid is ignored for 0 and 1 - * - * @param oid - * @param animation - * @param cid - * @return - */ - public static byte[] removeItemFromMap(int oid, int animation, int cid) { - return removeItemFromMap(oid, animation, cid, false, 0); - } - - /** - * animation: 0 - expire
1 - without animation
2 - pickup
4 - - * explode
cid is ignored for 0 and 1.

Flagging pet as true - * will make a pet pick up the item. - * - * @param oid - * @param animation - * @param cid - * @param pet - * @param slot - * @return - */ - public static byte[] removeItemFromMap(int oid, int animation, int cid, boolean pet, int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.REMOVE_ITEM_FROM_MAP.getValue()); - mplew.write(animation); // expire - mplew.writeInt(oid); - if (animation >= 2) { - mplew.writeInt(cid); - if (pet) { - mplew.write(slot); - } - } - return mplew.getPacket(); - } - - public static byte[] updateCharLook(MapleClient target, MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_CHAR_LOOK.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(1); - addCharLook(mplew, chr, false); - addRingLook(mplew, chr, true); - addRingLook(mplew, chr, false); - addMarriageRingLook(target, mplew, chr); - mplew.writeInt(0); - return mplew.getPacket(); - } - - public static byte[] damagePlayer(int skill, int monsteridfrom, int cid, int damage, int fake, int direction, boolean pgmr, int pgmr_1, boolean is_pg, int oid, int pos_x, int pos_y) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DAMAGE_PLAYER.getValue()); - mplew.writeInt(cid); - mplew.write(skill); - if (skill == -3) { - mplew.writeInt(0); - } - mplew.writeInt(damage); - if(skill != -4) { - mplew.writeInt(monsteridfrom); - mplew.write(direction); - if (pgmr) { - mplew.write(pgmr_1); - mplew.write(is_pg ? 1 : 0); - mplew.writeInt(oid); - mplew.write(6); - mplew.writeShort(pos_x); - mplew.writeShort(pos_y); - mplew.write(0); - } else { - mplew.writeShort(0); - } - mplew.writeInt(damage); - if (fake > 0) { - mplew.writeInt(fake); - } - } else { - mplew.writeInt(damage); - } - - return mplew.getPacket(); - } - - public static byte[] sendMapleLifeCharacterInfo() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAPLELIFE_RESULT.getValue()); - mplew.writeInt(0); - return mplew.getPacket(); - } - - public static byte[] sendMapleLifeNameError() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAPLELIFE_RESULT.getValue()); - mplew.writeInt(2); - mplew.writeInt(3); - mplew.write(0); - return mplew.getPacket(); - } - - public static byte[] sendMapleLifeError(int code) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAPLELIFE_ERROR.getValue()); - mplew.write(0); - mplew.writeInt(code); - return mplew.getPacket(); - } - - public static byte[] charNameResponse(String charname, boolean nameUsed) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CHAR_NAME_RESPONSE.getValue()); - mplew.writeMapleAsciiString(charname); - mplew.write(nameUsed ? 1 : 0); - return mplew.getPacket(); - } - - public static byte[] addNewCharEntry(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ADD_NEW_CHAR_ENTRY.getValue()); - mplew.write(0); - addCharEntry(mplew, chr, false); - return mplew.getPacket(); - } - - /** - * State : - * 0x00 = success - * 0x06 = Trouble logging into the game? - * 0x09 = Unknown error - * 0x0A = Could not be processed due to too many connection requests to the server. - * 0x12 = invalid bday - * 0x14 = incorrect pic - * 0x16 = Cannot delete a guild master. - * 0x18 = Cannot delete a character with a pending wedding. - * 0x1A = Cannot delete a character with a pending world transfer. - * 0x1D = Cannot delete a character that has a family. - * - * @param cid - * @param state - * @return - */ - public static byte[] deleteCharResponse(int cid, int state) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DELETE_CHAR_RESPONSE.getValue()); - mplew.writeInt(cid); - mplew.write(state); - return mplew.getPacket(); - } - - public static byte[] selectWorld(int world) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.LAST_CONNECTED_WORLD.getValue()); - mplew.writeInt(world);//According to GMS, it should be the world that contains the most characters (most active) - return mplew.getPacket(); - } - - public static byte[] sendRecommended(List> worlds) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.RECOMMENDED_WORLD_MESSAGE.getValue()); - mplew.write(worlds.size());//size - for (Pair world : worlds) { - mplew.writeInt(world.getLeft()); - mplew.writeMapleAsciiString(world.getRight()); } - return mplew.getPacket(); } + } - /** - * - * @param chr - * @param isSelf - * @return - */ - public static byte[] charInfo(MapleCharacter chr) { - //3D 00 0A 43 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CHAR_INFO.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(chr.getLevel()); - mplew.writeShort(chr.getJob().getId()); - mplew.writeShort(chr.getFame()); - mplew.write(chr.getMarriageRing() != null ? 1 : 0); - String guildName = ""; - String allianceName = ""; - if (chr.getGuildId() > 0) { - MapleGuild mg = Server.getInstance().getGuild(chr.getGuildId()); - guildName = mg.getName(); - - MapleAlliance alliance = Server.getInstance().getAlliance(chr.getGuild().getAllianceId()); - if (alliance != null) { - allianceName = alliance.getName(); - } - } - mplew.writeMapleAsciiString(guildName); - mplew.writeMapleAsciiString(allianceName); // does not seem to work - mplew.write(0); // pMedalInfo, thanks to Arnah (Vertisy) - - MaplePet[] pets = chr.getPets(); - Item inv = chr.getInventory(MapleInventoryType.EQUIPPED).getItem((short) -114); - for (int i = 0; i < 3; i++) { - if (pets[i] != null) { - mplew.write(pets[i].getUniqueId()); - mplew.writeInt(pets[i].getItemId()); // petid - mplew.writeMapleAsciiString(pets[i].getName()); - mplew.write(pets[i].getLevel()); // pet level - mplew.writeShort(pets[i].getCloseness()); // pet closeness - mplew.write(pets[i].getFullness()); // pet fullness - mplew.writeShort(0); - mplew.writeInt(inv != null ? inv.getItemId() : 0); - } - } - mplew.write(0); //end of pets - - Item mount; //mounts can potentially crash the client if the player's level is not properly checked - if (chr.getMount() != null && (mount = chr.getInventory(MapleInventoryType.EQUIPPED).getItem((short) -18)) != null && MapleItemInformationProvider.getInstance().getEquipLevelReq(mount.getItemId()) <= chr.getLevel()) { - MapleMount mmount = chr.getMount(); - mplew.write(mmount.getId()); //mount - mplew.writeInt(mmount.getLevel()); //level - mplew.writeInt(mmount.getExp()); //exp - mplew.writeInt(mmount.getTiredness()); //tiredness - } else { - mplew.write(0); - } - mplew.write(chr.getCashShop().getWishList().size()); - for (int sn : chr.getCashShop().getWishList()) { - mplew.writeInt(sn); - } - - MonsterBook book = chr.getMonsterBook(); - mplew.writeInt(book.getBookLevel()); - mplew.writeInt(book.getNormalCard()); - mplew.writeInt(book.getSpecialCard()); - mplew.writeInt(book.getTotalCards()); - mplew.writeInt(chr.getMonsterBookCover() > 0 ? MapleItemInformationProvider.getInstance().getCardMobId(chr.getMonsterBookCover()) : 0); - Item medal = chr.getInventory(MapleInventoryType.EQUIPPED).getItem((short) -49); - if (medal != null) { - mplew.writeInt(medal.getItemId()); - } else { - mplew.writeInt(0); - } - ArrayList medalQuests = new ArrayList<>(); - List completed = chr.getCompletedQuests(); - for (MapleQuestStatus qs : completed) { - if (qs.getQuest().getId() >= 29000) { // && q.getQuest().getId() <= 29923 - medalQuests.add(qs.getQuest().getId()); - } - } + public static byte[] throwGrenade(int cid, Point p, int keyDown, int skillId, int skillLevel) { // packets found thanks to GabrielSin + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.THROW_GRENADE.getValue()); + mplew.writeInt(cid); + mplew.writeInt(p.x); + mplew.writeInt(p.y); + mplew.writeInt(keyDown); + mplew.writeInt(skillId); + mplew.writeInt(skillLevel); + return mplew.getPacket(); + } - Collections.sort(medalQuests); - mplew.writeShort(medalQuests.size()); - for (Short s : medalQuests) { - mplew.writeShort(s); - } - return mplew.getPacket(); - } + // someone thought it was a good idea to handle floating point representation through packets ROFL + private static int doubleToShortBits(double d) { + return (int) (Double.doubleToLongBits(d) >> 48); + } - /** - * It is important that statups is in the correct order (see declaration - * order in MapleBuffStat) since this method doesn't do automagical - * reordering. - * - * @param buffid - * @param bufflength - * @param statups - * @return - */ - //1F 00 00 00 00 00 03 00 00 40 00 00 00 E0 00 00 00 00 00 00 00 00 E0 01 8E AA 4F 00 00 C2 EB 0B E0 01 8E AA 4F 00 00 C2 EB 0B 0C 00 8E AA 4F 00 00 C2 EB 0B 44 02 8E AA 4F 00 00 C2 EB 0B 44 02 8E AA 4F 00 00 C2 EB 0B 00 00 E0 7A 1D 00 8E AA 4F 00 00 00 00 00 00 00 00 03 - public static byte[] giveBuff(int buffid, int bufflength, List> statups) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_BUFF.getValue()); - boolean special = false; - writeLongMask(mplew, statups); - for (Pair statup : statups) { - if (statup.getLeft().equals(MapleBuffStat.MONSTER_RIDING) || statup.getLeft().equals(MapleBuffStat.HOMING_BEACON)) { - special = true; - } - mplew.writeShort(statup.getRight().shortValue()); - mplew.writeInt(buffid); - mplew.writeInt(bufflength); - } + public static byte[] getNPCShop(MapleClient c, int sid, List items) { + MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.OPEN_NPC_SHOP.getValue()); + mplew.writeInt(sid); + mplew.writeShort(items.size()); // item count + for (MapleShopItem item : items) { + mplew.writeInt(item.getItemId()); + mplew.writeInt(item.getPrice()); + mplew.writeInt(item.getPrice() == 0 ? item.getPitch() : 0); //Perfect Pitch + mplew.writeInt(0); //Can be used x minutes after purchase + mplew.writeInt(0); //Hmm + if (!ItemConstants.isRechargeable(item.getItemId())) { + mplew.writeShort(1); // stacksize o.o + mplew.writeShort(item.getBuyable()); + } else { + mplew.writeShort(0); mplew.writeInt(0); - mplew.write(0); - mplew.writeInt(statups.get(0).getRight()); //Homing beacon ... + mplew.writeShort(doubleToShortBits(ii.getUnitPrice(item.getItemId()))); + mplew.writeShort(ii.getSlotMax(c, item.getItemId())); + } + } + return mplew.getPacket(); + } - if (special) { - mplew.skip(3); + /* 00 = / + * 01 = You don't have enough in stock + * 02 = You do not have enough mesos + * 03 = Please check if your inventory is full or not + * 05 = You don't have enough in stock + * 06 = Due to an error, the trade did not happen + * 07 = Due to an error, the trade did not happen + * 08 = / + * 0D = You need more items + * 0E = CRASH; LENGTH NEEDS TO BE LONGER :O + */ + public static byte[] shopTransaction(byte code) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.CONFIRM_SHOP_TRANSACTION.getValue()); + mplew.write(code); + return mplew.getPacket(); + } + + public static byte[] updateInventorySlotLimit(int type, int newLimit) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.INVENTORY_GROW.getValue()); + mplew.write(type); + mplew.write(newLimit); + return mplew.getPacket(); + } + + public static byte[] modifyInventory(boolean updateTick, final List mods) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.INVENTORY_OPERATION.getValue()); + mplew.writeBool(updateTick); + mplew.write(mods.size()); + //mplew.write(0); v104 :) + int addMovement = -1; + for (ModifyInventory mod : mods) { + mplew.write(mod.getMode()); + mplew.write(mod.getInventoryType()); + mplew.writeShort(mod.getMode() == 2 ? mod.getOldPosition() : mod.getPosition()); + switch (mod.getMode()) { + case 0: {//add item + addItemInfo(mplew, mod.getItem(), true); + break; } - return mplew.getPacket(); + case 1: {//update quantity + mplew.writeShort(mod.getQuantity()); + break; + } + case 2: {//move + mplew.writeShort(mod.getPosition()); + if (mod.getPosition() < 0 || mod.getOldPosition() < 0) { + addMovement = mod.getOldPosition() < 0 ? 1 : 2; + } + break; + } + case 3: {//remove + if (mod.getPosition() < 0) { + addMovement = 2; + } + break; + } + } + mod.clear(); + } + if (addMovement > -1) { + mplew.write(addMovement); + } + return mplew.getPacket(); + } + + public static byte[] getScrollEffect(int chr, ScrollResult scrollSuccess, boolean legendarySpirit, boolean whiteScroll) { // thanks to Rien dev team + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_SCROLL_EFFECT.getValue()); + mplew.writeInt(chr); + mplew.writeBool(scrollSuccess == ScrollResult.SUCCESS); + mplew.writeBool(scrollSuccess == ScrollResult.CURSE); + mplew.writeBool(legendarySpirit); + mplew.writeBool(whiteScroll); + return mplew.getPacket(); + } + + public static byte[] removePlayerFromMap(int cid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.REMOVE_PLAYER_FROM_MAP.getValue()); + mplew.writeInt(cid); + return mplew.getPacket(); + } + + public static byte[] catchMessage(int message) { // not done, I guess + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.BRIDLE_MOB_CATCH_FAIL.getValue()); + mplew.write(message); // 1 = too strong, 2 = Elemental Rock + mplew.writeInt(0);//Maybe itemid? + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] showAllCharacter(int chars, int unk) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); + mplew.writeShort(SendOpcode.VIEW_ALL_CHAR.getValue()); + mplew.write(chars > 0 ? 1 : 5); // 2: already connected to server, 3 : unk error (view-all-characters), 5 : cannot find any + mplew.writeInt(chars); + mplew.writeInt(unk); + return mplew.getPacket(); + } + + public static byte[] showAriantScoreBoard() { // thanks lrenex for pointing match's end scoreboard packet + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ARIANT_ARENA_SHOW_RESULT.getValue()); + return mplew.getPacket(); + } + + public static byte[] updateAriantPQRanking(final MapleCharacter chr, final int score) { + return updateAriantPQRanking(new LinkedHashMap() {{ + put(chr, score); + }}); + } + + public static byte[] updateAriantPQRanking(Map playerScore) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ARIANT_ARENA_USER_SCORE.getValue()); + mplew.write(playerScore.size()); + for (Entry e : playerScore.entrySet()) { + mplew.writeMapleAsciiString(e.getKey().getName()); + mplew.writeInt(e.getValue()); + } + return mplew.getPacket(); + } + + public static byte[] updateWitchTowerScore(int score) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.WITCH_TOWER_SCORE_UPDATE.getValue()); + mplew.write(score); + return mplew.getPacket(); + } + + public static byte[] silentRemoveItemFromMap(int oid) { + return removeItemFromMap(oid, 1, 0); + } + + /** + * animation: 0 - expire
1 - without animation
2 - pickup
4 - + * explode
cid is ignored for 0 and 1 + * + * @param oid + * @param animation + * @param cid + * @return + */ + public static byte[] removeItemFromMap(int oid, int animation, int cid) { + return removeItemFromMap(oid, animation, cid, false, 0); + } + + /** + * animation: 0 - expire
1 - without animation
2 - pickup
4 - + * explode
cid is ignored for 0 and 1.

Flagging pet as true + * will make a pet pick up the item. + * + * @param oid + * @param animation + * @param cid + * @param pet + * @param slot + * @return + */ + public static byte[] removeItemFromMap(int oid, int animation, int cid, boolean pet, int slot) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.REMOVE_ITEM_FROM_MAP.getValue()); + mplew.write(animation); // expire + mplew.writeInt(oid); + if (animation >= 2) { + mplew.writeInt(cid); + if (pet) { + mplew.write(slot); + } + } + return mplew.getPacket(); + } + + public static byte[] updateCharLook(MapleClient target, MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_CHAR_LOOK.getValue()); + mplew.writeInt(chr.getId()); + mplew.write(1); + addCharLook(mplew, chr, false); + addRingLook(mplew, chr, true); + addRingLook(mplew, chr, false); + addMarriageRingLook(target, mplew, chr); + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] damagePlayer(int skill, int monsteridfrom, int cid, int damage, int fake, int direction, boolean pgmr, int pgmr_1, boolean is_pg, int oid, int pos_x, int pos_y) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.DAMAGE_PLAYER.getValue()); + mplew.writeInt(cid); + mplew.write(skill); + if (skill == -3) { + mplew.writeInt(0); + } + mplew.writeInt(damage); + if (skill != -4) { + mplew.writeInt(monsteridfrom); + mplew.write(direction); + if (pgmr) { + mplew.write(pgmr_1); + mplew.write(is_pg ? 1 : 0); + mplew.writeInt(oid); + mplew.write(6); + mplew.writeShort(pos_x); + mplew.writeShort(pos_y); + mplew.write(0); + } else { + mplew.writeShort(0); + } + mplew.writeInt(damage); + if (fake > 0) { + mplew.writeInt(fake); + } + } else { + mplew.writeInt(damage); } - /** - * - * @param cid - * @param statups - * @param mount - * @return - */ - public static byte[] showMonsterRiding(int cid, MapleMount mount) { //Gtfo with this, this is just giveForeignBuff - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - mplew.writeLong(MapleBuffStat.MONSTER_RIDING.getValue()); - mplew.writeLong(0); - mplew.writeShort(0); - mplew.writeInt(mount.getItemId()); - mplew.writeInt(mount.getSkillId()); - mplew.writeInt(0); //Server Tick value. - mplew.writeShort(0); - mplew.write(0); //Times you have been buffed - return mplew.getPacket(); + return mplew.getPacket(); + } + + public static byte[] sendMapleLifeCharacterInfo() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MAPLELIFE_RESULT.getValue()); + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] sendMapleLifeNameError() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MAPLELIFE_RESULT.getValue()); + mplew.writeInt(2); + mplew.writeInt(3); + mplew.write(0); + return mplew.getPacket(); + } + + public static byte[] sendMapleLifeError(int code) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MAPLELIFE_ERROR.getValue()); + mplew.write(0); + mplew.writeInt(code); + return mplew.getPacket(); + } + + public static byte[] charNameResponse(String charname, boolean nameUsed) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CHAR_NAME_RESPONSE.getValue()); + mplew.writeMapleAsciiString(charname); + mplew.write(nameUsed ? 1 : 0); + return mplew.getPacket(); + } + + public static byte[] addNewCharEntry(MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ADD_NEW_CHAR_ENTRY.getValue()); + mplew.write(0); + addCharEntry(mplew, chr, false); + return mplew.getPacket(); + } + + /** + * State : + * 0x00 = success + * 0x06 = Trouble logging into the game? + * 0x09 = Unknown error + * 0x0A = Could not be processed due to too many connection requests to the server. + * 0x12 = invalid bday + * 0x14 = incorrect pic + * 0x16 = Cannot delete a guild master. + * 0x18 = Cannot delete a character with a pending wedding. + * 0x1A = Cannot delete a character with a pending world transfer. + * 0x1D = Cannot delete a character that has a family. + * + * @param cid + * @param state + * @return + */ + public static byte[] deleteCharResponse(int cid, int state) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.DELETE_CHAR_RESPONSE.getValue()); + mplew.writeInt(cid); + mplew.write(state); + return mplew.getPacket(); + } + + public static byte[] selectWorld(int world) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.LAST_CONNECTED_WORLD.getValue()); + mplew.writeInt(world);//According to GMS, it should be the world that contains the most characters (most active) + return mplew.getPacket(); + } + + public static byte[] sendRecommended(List> worlds) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.RECOMMENDED_WORLD_MESSAGE.getValue()); + mplew.write(worlds.size());//size + for (Pair world : worlds) { + mplew.writeInt(world.getLeft()); + mplew.writeMapleAsciiString(world.getRight()); } + return mplew.getPacket(); + } + + /** + * @param chr + * @param isSelf + * @return + */ + public static byte[] charInfo(MapleCharacter chr) { + //3D 00 0A 43 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CHAR_INFO.getValue()); + mplew.writeInt(chr.getId()); + mplew.write(chr.getLevel()); + mplew.writeShort(chr.getJob().getId()); + mplew.writeShort(chr.getFame()); + mplew.write(chr.getMarriageRing() != null ? 1 : 0); + String guildName = ""; + String allianceName = ""; + if (chr.getGuildId() > 0) { + MapleGuild mg = Server.getInstance().getGuild(chr.getGuildId()); + guildName = mg.getName(); + + MapleAlliance alliance = Server.getInstance().getAlliance(chr.getGuild().getAllianceId()); + if (alliance != null) { + allianceName = alliance.getName(); + } + } + mplew.writeMapleAsciiString(guildName); + mplew.writeMapleAsciiString(allianceName); // does not seem to work + mplew.write(0); // pMedalInfo, thanks to Arnah (Vertisy) + + MaplePet[] pets = chr.getPets(); + Item inv = chr.getInventory(MapleInventoryType.EQUIPPED).getItem((short) -114); + for (int i = 0; i < 3; i++) { + if (pets[i] != null) { + mplew.write(pets[i].getUniqueId()); + mplew.writeInt(pets[i].getItemId()); // petid + mplew.writeMapleAsciiString(pets[i].getName()); + mplew.write(pets[i].getLevel()); // pet level + mplew.writeShort(pets[i].getCloseness()); // pet closeness + mplew.write(pets[i].getFullness()); // pet fullness + mplew.writeShort(0); + mplew.writeInt(inv != null ? inv.getItemId() : 0); + } + } + mplew.write(0); //end of pets + + Item mount; //mounts can potentially crash the client if the player's level is not properly checked + if (chr.getMount() != null && (mount = chr.getInventory(MapleInventoryType.EQUIPPED).getItem((short) -18)) != null && MapleItemInformationProvider.getInstance().getEquipLevelReq(mount.getItemId()) <= chr.getLevel()) { + MapleMount mmount = chr.getMount(); + mplew.write(mmount.getId()); //mount + mplew.writeInt(mmount.getLevel()); //level + mplew.writeInt(mmount.getExp()); //exp + mplew.writeInt(mmount.getTiredness()); //tiredness + } else { + mplew.write(0); + } + mplew.write(chr.getCashShop().getWishList().size()); + for (int sn : chr.getCashShop().getWishList()) { + mplew.writeInt(sn); + } + + MonsterBook book = chr.getMonsterBook(); + mplew.writeInt(book.getBookLevel()); + mplew.writeInt(book.getNormalCard()); + mplew.writeInt(book.getSpecialCard()); + mplew.writeInt(book.getTotalCards()); + mplew.writeInt(chr.getMonsterBookCover() > 0 ? MapleItemInformationProvider.getInstance().getCardMobId(chr.getMonsterBookCover()) : 0); + Item medal = chr.getInventory(MapleInventoryType.EQUIPPED).getItem((short) -49); + if (medal != null) { + mplew.writeInt(medal.getItemId()); + } else { + mplew.writeInt(0); + } + ArrayList medalQuests = new ArrayList<>(); + List completed = chr.getCompletedQuests(); + for (MapleQuestStatus qs : completed) { + if (qs.getQuest().getId() >= 29000) { // && q.getQuest().getId() <= 29923 + medalQuests.add(qs.getQuest().getId()); + } + } + + Collections.sort(medalQuests); + mplew.writeShort(medalQuests.size()); + for (Short s : medalQuests) { + mplew.writeShort(s); + } + return mplew.getPacket(); + } + + /** + * It is important that statups is in the correct order (see declaration + * order in MapleBuffStat) since this method doesn't do automagical + * reordering. + * + * @param buffid + * @param bufflength + * @param statups + * @return + */ + //1F 00 00 00 00 00 03 00 00 40 00 00 00 E0 00 00 00 00 00 00 00 00 E0 01 8E AA 4F 00 00 C2 EB 0B E0 01 8E AA 4F 00 00 C2 EB 0B 0C 00 8E AA 4F 00 00 C2 EB 0B 44 02 8E AA 4F 00 00 C2 EB 0B 44 02 8E AA 4F 00 00 C2 EB 0B 00 00 E0 7A 1D 00 8E AA 4F 00 00 00 00 00 00 00 00 03 + public static byte[] giveBuff(int buffid, int bufflength, List> statups) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GIVE_BUFF.getValue()); + boolean special = false; + writeLongMask(mplew, statups); + for (Pair statup : statups) { + if (statup.getLeft().equals(MapleBuffStat.MONSTER_RIDING) || statup.getLeft().equals(MapleBuffStat.HOMING_BEACON)) { + special = true; + } + mplew.writeShort(statup.getRight().shortValue()); + mplew.writeInt(buffid); + mplew.writeInt(bufflength); + } + mplew.writeInt(0); + mplew.write(0); + mplew.writeInt(statups.get(0).getRight()); //Homing beacon ... + + if (special) { + mplew.skip(3); + } + return mplew.getPacket(); + } + + /** + * @param cid + * @param statups + * @param mount + * @return + */ + public static byte[] showMonsterRiding(int cid, MapleMount mount) { //Gtfo with this, this is just giveForeignBuff + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); + mplew.writeInt(cid); + mplew.writeLong(MapleBuffStat.MONSTER_RIDING.getValue()); + mplew.writeLong(0); + mplew.writeShort(0); + mplew.writeInt(mount.getItemId()); + mplew.writeInt(mount.getSkillId()); + mplew.writeInt(0); //Server Tick value. + mplew.writeShort(0); + mplew.write(0); //Times you have been buffed + return mplew.getPacket(); + } /* mplew.writeInt(cid); writeLongMask(mplew, statups); for (Pair statup : statups) { @@ -2944,1941 +2949,1934 @@ public class PacketCreator { mplew.writeShort(0); mplew.write(0);*/ - /** - * - * @param c - * @param quest - * @return - */ - public static byte[] forfeitQuest(short quest) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(1); - mplew.writeShort(quest); - mplew.write(0); - return mplew.getPacket(); - } + /** + * @param c + * @param quest + * @return + */ + public static byte[] forfeitQuest(short quest) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(1); + mplew.writeShort(quest); + mplew.write(0); + return mplew.getPacket(); + } - /** - * - * @param c - * @param quest - * @return - */ - public static byte[] completeQuest(short quest, long time) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(1); - mplew.writeShort(quest); - mplew.write(2); - mplew.writeLong(getTime(time)); - return mplew.getPacket(); - } + /** + * @param c + * @param quest + * @return + */ + public static byte[] completeQuest(short quest, long time) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(1); + mplew.writeShort(quest); + mplew.write(2); + mplew.writeLong(getTime(time)); + return mplew.getPacket(); + } - /** - * - * @param c - * @param quest - * @param npc - * @param progress - * @return - */ - - public static byte[] updateQuestInfo(short quest, int npc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); - mplew.write(8); //0x0A in v95 - mplew.writeShort(quest); - mplew.writeInt(npc); - mplew.writeInt(0); - return mplew.getPacket(); - } + /** + * @param c + * @param quest + * @param npc + * @param progress + * @return + */ - public static byte[] addQuestTimeLimit(final short quest, final int time) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); - mplew.write(6); - mplew.writeShort(1);//Size but meh, when will there be 2 at the same time? And it won't even replace the old one :) - mplew.writeShort(quest); - mplew.writeInt(time); - return mplew.getPacket(); - } + public static byte[] updateQuestInfo(short quest, int npc) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); + mplew.write(8); //0x0A in v95 + mplew.writeShort(quest); + mplew.writeInt(npc); + mplew.writeInt(0); + return mplew.getPacket(); + } - public static byte[] removeQuestTimeLimit(final short quest) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); - mplew.write(7); - mplew.writeShort(1);//Position - mplew.writeShort(quest); - return mplew.getPacket(); - } + public static byte[] addQuestTimeLimit(final short quest, final int time) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); + mplew.write(6); + mplew.writeShort(1);//Size but meh, when will there be 2 at the same time? And it won't even replace the old one :) + mplew.writeShort(quest); + mplew.writeInt(time); + return mplew.getPacket(); + } - public static byte[] updateQuest(MapleCharacter chr, MapleQuestStatus qs, boolean infoUpdate) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(1); - if (infoUpdate) { - MapleQuestStatus iqs = chr.getQuest(qs.getInfoNumber()); - mplew.writeShort(iqs.getQuestID()); - mplew.write(1); - mplew.writeMapleAsciiString(iqs.getProgressData()); - } else { - mplew.writeShort(qs.getQuest().getId()); - mplew.write(qs.getStatus().getId()); - mplew.writeMapleAsciiString(qs.getProgressData()); - } - mplew.skip(5); - return mplew.getPacket(); - } + public static byte[] removeQuestTimeLimit(final short quest) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); + mplew.write(7); + mplew.writeShort(1);//Position + mplew.writeShort(quest); + return mplew.getPacket(); + } - private static void writeLongMaskD(final MaplePacketLittleEndianWriter mplew, List> statups) { - long firstmask = 0; - long secondmask = 0; - for (Pair statup : statups) { - if (statup.getLeft().isFirst()) { - firstmask |= statup.getLeft().getValue(); - } else { - secondmask |= statup.getLeft().getValue(); - } - } - mplew.writeLong(firstmask); - mplew.writeLong(secondmask); - } - - public static byte[] giveDebuff(List> statups, MobSkill skill) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_BUFF.getValue()); - writeLongMaskD(mplew, statups); - for (Pair statup : statups) { - mplew.writeShort(statup.getRight().shortValue()); - mplew.writeShort(skill.getSkillId()); - mplew.writeShort(skill.getSkillLevel()); - mplew.writeInt((int) skill.getDuration()); - } - mplew.writeShort(0); // ??? wk charges have 600 here o.o - mplew.writeShort(900);//Delay - mplew.write(1); - return mplew.getPacket(); - } - - public static byte[] giveForeignDebuff(int cid, List> statups, MobSkill skill) { - // Poison damage visibility and missing diseases status visibility, extended through map transitions thanks to Ronan - - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMaskD(mplew, statups); - for (Pair statup : statups) { - if (statup.getLeft() == MapleDisease.POISON) { - mplew.writeShort(statup.getRight().shortValue()); - } - mplew.writeShort(skill.getSkillId()); - mplew.writeShort(skill.getSkillLevel()); - } - mplew.writeShort(0); // same as give_buff - mplew.writeShort(900);//Delay - return mplew.getPacket(); + public static byte[] updateQuest(MapleCharacter chr, MapleQuestStatus qs, boolean infoUpdate) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(1); + if (infoUpdate) { + MapleQuestStatus iqs = chr.getQuest(qs.getInfoNumber()); + mplew.writeShort(iqs.getQuestID()); + mplew.write(1); + mplew.writeMapleAsciiString(iqs.getProgressData()); + } else { + mplew.writeShort(qs.getQuest().getId()); + mplew.write(qs.getStatus().getId()); + mplew.writeMapleAsciiString(qs.getProgressData()); } + mplew.skip(5); + return mplew.getPacket(); + } - public static byte[] cancelForeignFirstDebuff(int cid, long mask) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - mplew.writeLong(mask); - mplew.writeLong(0); - return mplew.getPacket(); - } - - public static byte[] cancelForeignDebuff(int cid, long mask) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - mplew.writeLong(0); - mplew.writeLong(mask); - return mplew.getPacket(); + private static void writeLongMaskD(final MaplePacketLittleEndianWriter mplew, List> statups) { + long firstmask = 0; + long secondmask = 0; + for (Pair statup : statups) { + if (statup.getLeft().isFirst()) { + firstmask |= statup.getLeft().getValue(); + } else { + secondmask |= statup.getLeft().getValue(); + } } + mplew.writeLong(firstmask); + mplew.writeLong(secondmask); + } - public static byte[] giveForeignBuff(int cid, List> statups) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMask(mplew, statups); - for (Pair statup : statups) { - mplew.writeShort(statup.getRight().shortValue()); - } - mplew.writeInt(0); - mplew.writeShort(0); - return mplew.getPacket(); + public static byte[] giveDebuff(List> statups, MobSkill skill) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GIVE_BUFF.getValue()); + writeLongMaskD(mplew, statups); + for (Pair statup : statups) { + mplew.writeShort(statup.getRight().shortValue()); + mplew.writeShort(skill.getSkillId()); + mplew.writeShort(skill.getSkillLevel()); + mplew.writeInt((int) skill.getDuration()); } + mplew.writeShort(0); // ??? wk charges have 600 here o.o + mplew.writeShort(900);//Delay + mplew.write(1); + return mplew.getPacket(); + } - public static byte[] cancelForeignBuff(int cid, List statups) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMaskFromList(mplew, statups); - return mplew.getPacket(); + public static byte[] giveForeignDebuff(int cid, List> statups, MobSkill skill) { + // Poison damage visibility and missing diseases status visibility, extended through map transitions thanks to Ronan + + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); + mplew.writeInt(cid); + writeLongMaskD(mplew, statups); + for (Pair statup : statups) { + if (statup.getLeft() == MapleDisease.POISON) { + mplew.writeShort(statup.getRight().shortValue()); + } + mplew.writeShort(skill.getSkillId()); + mplew.writeShort(skill.getSkillLevel()); } + mplew.writeShort(0); // same as give_buff + mplew.writeShort(900);//Delay + return mplew.getPacket(); + } - public static byte[] cancelBuff(List statups) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_BUFF.getValue()); - writeLongMaskFromList(mplew, statups); - mplew.write(1);//? - return mplew.getPacket(); + public static byte[] cancelForeignFirstDebuff(int cid, long mask) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); + mplew.writeInt(cid); + mplew.writeLong(mask); + mplew.writeLong(0); + return mplew.getPacket(); + } + + public static byte[] cancelForeignDebuff(int cid, long mask) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); + mplew.writeInt(cid); + mplew.writeLong(0); + mplew.writeLong(mask); + return mplew.getPacket(); + } + + public static byte[] giveForeignBuff(int cid, List> statups) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); + mplew.writeInt(cid); + writeLongMask(mplew, statups); + for (Pair statup : statups) { + mplew.writeShort(statup.getRight().shortValue()); } + mplew.writeInt(0); + mplew.writeShort(0); + return mplew.getPacket(); + } - private static void writeLongMask(final MaplePacketLittleEndianWriter mplew, List> statups) { - long firstmask = 0; - long secondmask = 0; - for (Pair statup : statups) { - if (statup.getLeft().isFirst()) { - firstmask |= statup.getLeft().getValue(); - } else { - secondmask |= statup.getLeft().getValue(); - } - } - mplew.writeLong(firstmask); - mplew.writeLong(secondmask); + public static byte[] cancelForeignBuff(int cid, List statups) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); + mplew.writeInt(cid); + writeLongMaskFromList(mplew, statups); + return mplew.getPacket(); + } + + public static byte[] cancelBuff(List statups) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CANCEL_BUFF.getValue()); + writeLongMaskFromList(mplew, statups); + mplew.write(1);//? + return mplew.getPacket(); + } + + private static void writeLongMask(final MaplePacketLittleEndianWriter mplew, List> statups) { + long firstmask = 0; + long secondmask = 0; + for (Pair statup : statups) { + if (statup.getLeft().isFirst()) { + firstmask |= statup.getLeft().getValue(); + } else { + secondmask |= statup.getLeft().getValue(); + } } + mplew.writeLong(firstmask); + mplew.writeLong(secondmask); + } - private static void writeLongMaskFromList(final MaplePacketLittleEndianWriter mplew, List statups) { - long firstmask = 0; - long secondmask = 0; - for (MapleBuffStat statup : statups) { - if (statup.isFirst()) { - firstmask |= statup.getValue(); - } else { - secondmask |= statup.getValue(); - } - } - mplew.writeLong(firstmask); - mplew.writeLong(secondmask); + private static void writeLongMaskFromList(final MaplePacketLittleEndianWriter mplew, List statups) { + long firstmask = 0; + long secondmask = 0; + for (MapleBuffStat statup : statups) { + if (statup.isFirst()) { + firstmask |= statup.getValue(); + } else { + secondmask |= statup.getValue(); + } } - - private static void writeLongEncodeTemporaryMask(final MaplePacketLittleEndianWriter mplew, Collection stati) { - int[] masks = new int[4]; - - for (MonsterStatus statup : stati) { - int pos = statup.isFirst() ? 0 : 2; - for (int i = 0; i < 2; i++) { - masks[pos + i] |= statup.getValue() >> 32 * i; - } - } + mplew.writeLong(firstmask); + mplew.writeLong(secondmask); + } - for (int mask : masks) { - mplew.writeInt(mask); + private static void writeLongEncodeTemporaryMask(final MaplePacketLittleEndianWriter mplew, Collection stati) { + int[] masks = new int[4]; + + for (MonsterStatus statup : stati) { + int pos = statup.isFirst() ? 0 : 2; + for (int i = 0; i < 2; i++) { + masks[pos + i] |= statup.getValue() >> 32 * i; } } - public static byte[] cancelDebuff(long mask) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(19); - mplew.writeShort(SendOpcode.CANCEL_BUFF.getValue()); - mplew.writeLong(0); - mplew.writeLong(mask); - mplew.write(0); - return mplew.getPacket(); + for (int mask : masks) { + mplew.writeInt(mask); } + } - private static void writeLongMaskSlowD(final MaplePacketLittleEndianWriter mplew) { - mplew.writeInt(0); - mplew.writeInt(2048); - mplew.writeLong(0); - } - - public static byte[] giveForeignSlowDebuff(int cid, List> statups, MobSkill skill) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMaskSlowD(mplew); - for (Pair statup : statups) { - if (statup.getLeft() == MapleDisease.POISON) { - mplew.writeShort(statup.getRight().shortValue()); - } - mplew.writeShort(skill.getSkillId()); - mplew.writeShort(skill.getSkillLevel()); - } - mplew.writeShort(0); // same as give_buff - mplew.writeShort(900);//Delay - return mplew.getPacket(); - } - - public static byte[] cancelForeignSlowDebuff(int cid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMaskSlowD(mplew); - return mplew.getPacket(); - } - - private static void writeLongMaskChair(final MaplePacketLittleEndianWriter mplew) { - mplew.writeInt(0); - mplew.writeInt(262144); - mplew.writeLong(0); - } - - public static byte[] giveForeignChairSkillEffect(int cid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMaskChair(mplew); - - mplew.writeShort(0); - mplew.writeShort(0); - mplew.writeShort(100); - mplew.writeShort(1); - - mplew.writeShort(0); - mplew.writeShort(900); - - mplew.skip(7); - - return mplew.getPacket(); - } - - // packet found thanks to Ronan - public static byte[] giveForeignWKChargeEffect(int cid, int buffid, List> statups) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(19); - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMask(mplew, statups); - mplew.writeInt(buffid); - mplew.writeShort(600); - mplew.writeShort(1000);//Delay - mplew.write(1); - - return mplew.getPacket(); - } - - public static byte[] cancelForeignChairSkillEffect(int cid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(19); - mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMaskChair(mplew); - - return mplew.getPacket(); - } - - public static byte[] getPlayerShopChat(MapleCharacter chr, String chat, boolean owner) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.CHAT.getCode()); - mplew.write(PlayerInteractionHandler.Action.CHAT_THING.getCode()); - mplew.write(owner ? 0 : 1); - mplew.writeMapleAsciiString(chr.getName() + " : " + chat); - return mplew.getPacket(); - } + public static byte[] cancelDebuff(long mask) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(19); + mplew.writeShort(SendOpcode.CANCEL_BUFF.getValue()); + mplew.writeLong(0); + mplew.writeLong(mask); + mplew.write(0); + return mplew.getPacket(); + } - public static byte[] getPlayerShopNewVisitor(MapleCharacter chr, int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); - mplew.write(slot); - addCharLook(mplew, chr, false); - mplew.writeMapleAsciiString(chr.getName()); - return mplew.getPacket(); - } + private static void writeLongMaskSlowD(final MaplePacketLittleEndianWriter mplew) { + mplew.writeInt(0); + mplew.writeInt(2048); + mplew.writeLong(0); + } - public static byte[] getPlayerShopRemoveVisitor(int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); - if (slot != 0) { - mplew.writeShort(slot); - } - return mplew.getPacket(); - } - - public static byte[] getTradePartnerAdd(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); - mplew.write(1); - addCharLook(mplew, chr, false); - mplew.writeMapleAsciiString(chr.getName()); - return mplew.getPacket(); - } - - public static byte[] tradeInvite(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.INVITE.getCode()); - mplew.write(3); - mplew.writeMapleAsciiString(chr.getName()); - mplew.write(new byte[]{(byte) 0xB7, (byte) 0x50, 0, 0}); - return mplew.getPacket(); - } - - public static byte[] getTradeMesoSet(byte number, int meso) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.SET_MESO.getCode()); - mplew.write(number); - mplew.writeInt(meso); - return mplew.getPacket(); - } - - public static byte[] getTradeItemAdd(byte number, Item item) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.SET_ITEMS.getCode()); - mplew.write(number); - mplew.write(item.getPosition()); - addItemInfo(mplew, item, true); - return mplew.getPacket(); - } - - public static byte[] getPlayerShopItemUpdate(MaplePlayerShop shop) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.UPDATE_MERCHANT.getCode()); - mplew.write(shop.getItems().size()); - for (MaplePlayerShopItem item : shop.getItems()) { - mplew.writeShort(item.getBundles()); - mplew.writeShort(item.getItem().getQuantity()); - mplew.writeInt(item.getPrice()); - addItemInfo(mplew, item.getItem(), true); - } - return mplew.getPacket(); - } - - public static byte[] getPlayerShopOwnerUpdate(MaplePlayerShop.SoldItem item, int position) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.UPDATE_PLAYERSHOP.getCode()); - mplew.write(position); - mplew.writeShort(item.getQuantity()); - mplew.writeMapleAsciiString(item.getBuyer()); - - return mplew.getPacket(); - } - - /** - * - * @param c - * @param shop - * @param owner - * @return - */ - public static byte[] getPlayerShop(MaplePlayerShop shop, boolean owner) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(4); - mplew.write(4); - mplew.write(owner ? 0 : 1); - - if (owner) { - List sold = shop.getSold(); - mplew.write(sold.size()); - for (MaplePlayerShop.SoldItem s : sold) { - mplew.writeInt(s.getItemId()); - mplew.writeShort(s.getQuantity()); - mplew.writeInt(s.getMesos()); - mplew.writeMapleAsciiString(s.getBuyer()); - } - } else { - mplew.write(0); - } - - addCharLook(mplew, shop.getOwner(), false); - mplew.writeMapleAsciiString(shop.getOwner().getName()); - - MapleCharacter[] visitors = shop.getVisitors(); - for(int i = 0; i < 3; i++) { - if(visitors[i] != null) { - mplew.write(i + 1); - addCharLook(mplew, visitors[i], false); - mplew.writeMapleAsciiString(visitors[i].getName()); - } - } - - mplew.write(0xFF); - mplew.writeMapleAsciiString(shop.getDescription()); - List items = shop.getItems(); - mplew.write(0x10); //TODO SLOTS, which is 16 for most stores...slotMax - mplew.write(items.size()); - for (MaplePlayerShopItem item : items) { - mplew.writeShort(item.getBundles()); - mplew.writeShort(item.getItem().getQuantity()); - mplew.writeInt(item.getPrice()); - addItemInfo(mplew, item.getItem(), true); - } - return mplew.getPacket(); - } - - public static byte[] getTradeStart(MapleClient c, MapleTrade trade, byte number) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(3); - mplew.write(2); - mplew.write(number); - if (number == 1) { - mplew.write(0); - addCharLook(mplew, trade.getPartner().getChr(), false); - mplew.writeMapleAsciiString(trade.getPartner().getChr().getName()); - } - mplew.write(number); - addCharLook(mplew, c.getPlayer(), false); - mplew.writeMapleAsciiString(c.getPlayer().getName()); - mplew.write(0xFF); - return mplew.getPacket(); - } - - public static byte[] getTradeConfirmation() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.CONFIRM.getCode()); - return mplew.getPacket(); - } - - /** - * Possible values for operation:
2: Trade cancelled, by the - * other character
7: Trade successful
8: Trade unsuccessful
- * 9: Cannot carry more one-of-a-kind items
12: Cannot trade on different maps
- * 13: Cannot trade, game files damaged
- * - * @param number - * @param operation - * @return - */ - public static byte[] getTradeResult(byte number, byte operation) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); - mplew.write(number); - mplew.write(operation); - return mplew.getPacket(); - } - - /** - * Possible values for speaker:
0: Npc talking (left)
- * 1: Npc talking (right)
2: Player talking (left)
3: Player talking - * (left)
- * - * @param npc Npcid - * @param msgType - * @param talk - * @param endBytes - * @param speaker - * @return - */ - public static byte[] getNPCTalk(int npc, byte msgType, String talk, String endBytes, byte speaker) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(4); // ? - mplew.writeInt(npc); - mplew.write(msgType); - mplew.write(speaker); - mplew.writeMapleAsciiString(talk); - mplew.write(HexTool.getByteArrayFromHexString(endBytes)); - return mplew.getPacket(); - } - - public static byte[] getDimensionalMirror(String talk) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(4); // ? - mplew.writeInt(9010022); - mplew.write(0x0E); - mplew.write(0); - mplew.writeInt(0); - mplew.writeMapleAsciiString(talk); - return mplew.getPacket(); - } - - public static byte[] getNPCTalkStyle(int npc, String talk, int[] styles) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(4); // ? - mplew.writeInt(npc); - mplew.write(7); - mplew.write(0); //speaker - mplew.writeMapleAsciiString(talk); - mplew.write(styles.length); - for (int style : styles) { - mplew.writeInt(style); + public static byte[] giveForeignSlowDebuff(int cid, List> statups, MobSkill skill) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); + mplew.writeInt(cid); + writeLongMaskSlowD(mplew); + for (Pair statup : statups) { + if (statup.getLeft() == MapleDisease.POISON) { + mplew.writeShort(statup.getRight().shortValue()); } - return mplew.getPacket(); + mplew.writeShort(skill.getSkillId()); + mplew.writeShort(skill.getSkillLevel()); + } + mplew.writeShort(0); // same as give_buff + mplew.writeShort(900);//Delay + return mplew.getPacket(); + } + + public static byte[] cancelForeignSlowDebuff(int cid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); + mplew.writeInt(cid); + writeLongMaskSlowD(mplew); + return mplew.getPacket(); + } + + private static void writeLongMaskChair(final MaplePacketLittleEndianWriter mplew) { + mplew.writeInt(0); + mplew.writeInt(262144); + mplew.writeLong(0); + } + + public static byte[] giveForeignChairSkillEffect(int cid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); + mplew.writeInt(cid); + writeLongMaskChair(mplew); + + mplew.writeShort(0); + mplew.writeShort(0); + mplew.writeShort(100); + mplew.writeShort(1); + + mplew.writeShort(0); + mplew.writeShort(900); + + mplew.skip(7); + + return mplew.getPacket(); + } + + // packet found thanks to Ronan + public static byte[] giveForeignWKChargeEffect(int cid, int buffid, List> statups) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(19); + mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); + mplew.writeInt(cid); + writeLongMask(mplew, statups); + mplew.writeInt(buffid); + mplew.writeShort(600); + mplew.writeShort(1000);//Delay + mplew.write(1); + + return mplew.getPacket(); + } + + public static byte[] cancelForeignChairSkillEffect(int cid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(19); + mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); + mplew.writeInt(cid); + writeLongMaskChair(mplew); + + return mplew.getPacket(); + } + + public static byte[] getPlayerShopChat(MapleCharacter chr, String chat, boolean owner) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.CHAT.getCode()); + mplew.write(PlayerInteractionHandler.Action.CHAT_THING.getCode()); + mplew.write(owner ? 0 : 1); + mplew.writeMapleAsciiString(chr.getName() + " : " + chat); + return mplew.getPacket(); + } + + public static byte[] getPlayerShopNewVisitor(MapleCharacter chr, int slot) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); + mplew.write(slot); + addCharLook(mplew, chr, false); + mplew.writeMapleAsciiString(chr.getName()); + return mplew.getPacket(); + } + + public static byte[] getPlayerShopRemoveVisitor(int slot) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); + if (slot != 0) { + mplew.writeShort(slot); + } + return mplew.getPacket(); + } + + public static byte[] getTradePartnerAdd(MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); + mplew.write(1); + addCharLook(mplew, chr, false); + mplew.writeMapleAsciiString(chr.getName()); + return mplew.getPacket(); + } + + public static byte[] tradeInvite(MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.INVITE.getCode()); + mplew.write(3); + mplew.writeMapleAsciiString(chr.getName()); + mplew.write(new byte[]{(byte) 0xB7, (byte) 0x50, 0, 0}); + return mplew.getPacket(); + } + + public static byte[] getTradeMesoSet(byte number, int meso) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.SET_MESO.getCode()); + mplew.write(number); + mplew.writeInt(meso); + return mplew.getPacket(); + } + + public static byte[] getTradeItemAdd(byte number, Item item) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.SET_ITEMS.getCode()); + mplew.write(number); + mplew.write(item.getPosition()); + addItemInfo(mplew, item, true); + return mplew.getPacket(); + } + + public static byte[] getPlayerShopItemUpdate(MaplePlayerShop shop) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.UPDATE_MERCHANT.getCode()); + mplew.write(shop.getItems().size()); + for (MaplePlayerShopItem item : shop.getItems()) { + mplew.writeShort(item.getBundles()); + mplew.writeShort(item.getItem().getQuantity()); + mplew.writeInt(item.getPrice()); + addItemInfo(mplew, item.getItem(), true); + } + return mplew.getPacket(); + } + + public static byte[] getPlayerShopOwnerUpdate(MaplePlayerShop.SoldItem item, int position) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.UPDATE_PLAYERSHOP.getCode()); + mplew.write(position); + mplew.writeShort(item.getQuantity()); + mplew.writeMapleAsciiString(item.getBuyer()); + + return mplew.getPacket(); + } + + /** + * @param c + * @param shop + * @param owner + * @return + */ + public static byte[] getPlayerShop(MaplePlayerShop shop, boolean owner) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); + mplew.write(4); + mplew.write(4); + mplew.write(owner ? 0 : 1); + + if (owner) { + List sold = shop.getSold(); + mplew.write(sold.size()); + for (MaplePlayerShop.SoldItem s : sold) { + mplew.writeInt(s.getItemId()); + mplew.writeShort(s.getQuantity()); + mplew.writeInt(s.getMesos()); + mplew.writeMapleAsciiString(s.getBuyer()); + } + } else { + mplew.write(0); } - public static byte[] getNPCTalkNum(int npc, String talk, int def, int min, int max) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(4); // ? - mplew.writeInt(npc); - mplew.write(3); - mplew.write(0); //speaker - mplew.writeMapleAsciiString(talk); - mplew.writeInt(def); - mplew.writeInt(min); - mplew.writeInt(max); - mplew.writeInt(0); - return mplew.getPacket(); + addCharLook(mplew, shop.getOwner(), false); + mplew.writeMapleAsciiString(shop.getOwner().getName()); + + MapleCharacter[] visitors = shop.getVisitors(); + for (int i = 0; i < 3; i++) { + if (visitors[i] != null) { + mplew.write(i + 1); + addCharLook(mplew, visitors[i], false); + mplew.writeMapleAsciiString(visitors[i].getName()); + } } - public static byte[] getNPCTalkText(int npc, String talk, String def) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(4); // Doesn't matter - mplew.writeInt(npc); - mplew.write(2); - mplew.write(0); //speaker - mplew.writeMapleAsciiString(talk); - mplew.writeMapleAsciiString(def);//:D - mplew.writeInt(0); - return mplew.getPacket(); + mplew.write(0xFF); + mplew.writeMapleAsciiString(shop.getDescription()); + List items = shop.getItems(); + mplew.write(0x10); //TODO SLOTS, which is 16 for most stores...slotMax + mplew.write(items.size()); + for (MaplePlayerShopItem item : items) { + mplew.writeShort(item.getBundles()); + mplew.writeShort(item.getItem().getQuantity()); + mplew.writeInt(item.getPrice()); + addItemInfo(mplew, item.getItem(), true); } - - // NPC Quiz packets thanks to Eric - public static byte[] OnAskQuiz(int nSpeakerTypeID, int nSpeakerTemplateID, int nResCode, String sTitle, String sProblemText, String sHintText, int nMinInput, int nMaxInput, int tRemainInitialQuiz) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(nSpeakerTypeID); - mplew.writeInt(nSpeakerTemplateID); - mplew.write(0x6); - mplew.write(0); - mplew.write(nResCode); - if (nResCode == 0x0) {//fail has no bytes <3 - mplew.writeMapleAsciiString(sTitle); - mplew.writeMapleAsciiString(sProblemText); - mplew.writeMapleAsciiString(sHintText); - mplew.writeShort(nMinInput); - mplew.writeShort(nMaxInput); - mplew.writeInt(tRemainInitialQuiz); - } - return mplew.getPacket(); - } + return mplew.getPacket(); + } - public static byte[] OnAskSpeedQuiz(int nSpeakerTypeID, int nSpeakerTemplateID, int nResCode, int nType, int dwAnswer, int nCorrect, int nRemain, int tRemainInitialQuiz) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(nSpeakerTypeID); - mplew.writeInt(nSpeakerTemplateID); - mplew.write(0x7); - mplew.write(0); - mplew.write(nResCode); - if (nResCode == 0x0) {//fail has no bytes <3 - mplew.writeInt(nType); - mplew.writeInt(dwAnswer); - mplew.writeInt(nCorrect); - mplew.writeInt(nRemain); - mplew.writeInt(tRemainInitialQuiz); - } - return mplew.getPacket(); + public static byte[] getTradeStart(MapleClient c, MapleTrade trade, byte number) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); + mplew.write(3); + mplew.write(2); + mplew.write(number); + if (number == 1) { + mplew.write(0); + addCharLook(mplew, trade.getPartner().getChr(), false); + mplew.writeMapleAsciiString(trade.getPartner().getChr().getName()); } + mplew.write(number); + addCharLook(mplew, c.getPlayer(), false); + mplew.writeMapleAsciiString(c.getPlayer().getName()); + mplew.write(0xFF); + return mplew.getPacket(); + } - public static byte[] showBuffeffect(int cid, int skillid, int effectid) { - return showBuffeffect(cid, skillid, effectid, (byte) 3); + public static byte[] getTradeConfirmation() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.CONFIRM.getCode()); + return mplew.getPacket(); + } + + /** + * Possible values for operation:
2: Trade cancelled, by the + * other character
7: Trade successful
8: Trade unsuccessful
+ * 9: Cannot carry more one-of-a-kind items
12: Cannot trade on different maps
+ * 13: Cannot trade, game files damaged
+ * + * @param number + * @param operation + * @return + */ + public static byte[] getTradeResult(byte number, byte operation) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); + mplew.write(number); + mplew.write(operation); + return mplew.getPacket(); + } + + /** + * Possible values for speaker:
0: Npc talking (left)
+ * 1: Npc talking (right)
2: Player talking (left)
3: Player talking + * (left)
+ * + * @param npc Npcid + * @param msgType + * @param talk + * @param endBytes + * @param speaker + * @return + */ + public static byte[] getNPCTalk(int npc, byte msgType, String talk, String endBytes, byte speaker) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.NPC_TALK.getValue()); + mplew.write(4); // ? + mplew.writeInt(npc); + mplew.write(msgType); + mplew.write(speaker); + mplew.writeMapleAsciiString(talk); + mplew.write(HexTool.getByteArrayFromHexString(endBytes)); + return mplew.getPacket(); + } + + public static byte[] getDimensionalMirror(String talk) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.NPC_TALK.getValue()); + mplew.write(4); // ? + mplew.writeInt(9010022); + mplew.write(0x0E); + mplew.write(0); + mplew.writeInt(0); + mplew.writeMapleAsciiString(talk); + return mplew.getPacket(); + } + + public static byte[] getNPCTalkStyle(int npc, String talk, int[] styles) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.NPC_TALK.getValue()); + mplew.write(4); // ? + mplew.writeInt(npc); + mplew.write(7); + mplew.write(0); //speaker + mplew.writeMapleAsciiString(talk); + mplew.write(styles.length); + for (int style : styles) { + mplew.writeInt(style); } - - public static byte[] showBuffeffect(int cid, int skillid, int effectid, byte direction) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(effectid); //buff level - mplew.writeInt(skillid); - mplew.write(direction); - mplew.write(1); - mplew.writeLong(0); - return mplew.getPacket(); + return mplew.getPacket(); + } + + public static byte[] getNPCTalkNum(int npc, String talk, int def, int min, int max) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.NPC_TALK.getValue()); + mplew.write(4); // ? + mplew.writeInt(npc); + mplew.write(3); + mplew.write(0); //speaker + mplew.writeMapleAsciiString(talk); + mplew.writeInt(def); + mplew.writeInt(min); + mplew.writeInt(max); + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] getNPCTalkText(int npc, String talk, String def) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.NPC_TALK.getValue()); + mplew.write(4); // Doesn't matter + mplew.writeInt(npc); + mplew.write(2); + mplew.write(0); //speaker + mplew.writeMapleAsciiString(talk); + mplew.writeMapleAsciiString(def);//:D + mplew.writeInt(0); + return mplew.getPacket(); + } + + // NPC Quiz packets thanks to Eric + public static byte[] OnAskQuiz(int nSpeakerTypeID, int nSpeakerTemplateID, int nResCode, String sTitle, String sProblemText, String sHintText, int nMinInput, int nMaxInput, int tRemainInitialQuiz) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.NPC_TALK.getValue()); + mplew.write(nSpeakerTypeID); + mplew.writeInt(nSpeakerTemplateID); + mplew.write(0x6); + mplew.write(0); + mplew.write(nResCode); + if (nResCode == 0x0) {//fail has no bytes <3 + mplew.writeMapleAsciiString(sTitle); + mplew.writeMapleAsciiString(sProblemText); + mplew.writeMapleAsciiString(sHintText); + mplew.writeShort(nMinInput); + mplew.writeShort(nMaxInput); + mplew.writeInt(tRemainInitialQuiz); } - - public static byte[] showBuffeffect(int cid, int skillid, int skilllv, int effectid, byte direction) { // updated packet structure found thanks to Rien dev team - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(effectid); - mplew.writeInt(skillid); + return mplew.getPacket(); + } + + public static byte[] OnAskSpeedQuiz(int nSpeakerTypeID, int nSpeakerTemplateID, int nResCode, int nType, int dwAnswer, int nCorrect, int nRemain, int tRemainInitialQuiz) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.NPC_TALK.getValue()); + mplew.write(nSpeakerTypeID); + mplew.writeInt(nSpeakerTemplateID); + mplew.write(0x7); + mplew.write(0); + mplew.write(nResCode); + if (nResCode == 0x0) {//fail has no bytes <3 + mplew.writeInt(nType); + mplew.writeInt(dwAnswer); + mplew.writeInt(nCorrect); + mplew.writeInt(nRemain); + mplew.writeInt(tRemainInitialQuiz); + } + return mplew.getPacket(); + } + + public static byte[] showBuffeffect(int cid, int skillid, int effectid) { + return showBuffeffect(cid, skillid, effectid, (byte) 3); + } + + public static byte[] showBuffeffect(int cid, int skillid, int effectid, byte direction) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); + mplew.writeInt(cid); + mplew.write(effectid); //buff level + mplew.writeInt(skillid); + mplew.write(direction); + mplew.write(1); + mplew.writeLong(0); + return mplew.getPacket(); + } + + public static byte[] showBuffeffect(int cid, int skillid, int skilllv, int effectid, byte direction) { // updated packet structure found thanks to Rien dev team + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); + mplew.writeInt(cid); + mplew.write(effectid); + mplew.writeInt(skillid); + mplew.write(0); + mplew.write(skilllv); + mplew.write(direction); + + return mplew.getPacket(); + } + + public static byte[] showOwnBuffEffect(int skillid, int effectid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); + mplew.write(effectid); + mplew.writeInt(skillid); + mplew.write(0xA9); + mplew.write(1); + return mplew.getPacket(); + } + + public static byte[] showOwnBerserk(int skilllevel, boolean Berserk) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); + mplew.write(1); + mplew.writeInt(1320006); + mplew.write(0xA9); + mplew.write(skilllevel); + mplew.write(Berserk ? 1 : 0); + return mplew.getPacket(); + } + + public static byte[] showBerserk(int cid, int skilllevel, boolean Berserk) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); + mplew.writeInt(cid); + mplew.write(1); + mplew.writeInt(1320006); + mplew.write(0xA9); + mplew.write(skilllevel); + mplew.write(Berserk ? 1 : 0); + return mplew.getPacket(); + } + + public static byte[] updateSkill(int skillid, int level, int masterlevel, long expiration) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_SKILLS.getValue()); + mplew.write(1); + mplew.writeShort(1); + mplew.writeInt(skillid); + mplew.writeInt(level); + mplew.writeInt(masterlevel); + addExpirationTime(mplew, expiration); + mplew.write(4); + return mplew.getPacket(); + } + + public static byte[] getShowQuestCompletion(int id) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.QUEST_CLEAR.getValue()); + mplew.writeShort(id); + return mplew.getPacket(); + } + + public static byte[] getKeymap(Map keybindings) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.KEYMAP.getValue()); + mplew.write(0); + for (int x = 0; x < 90; x++) { + MapleKeyBinding binding = keybindings.get(x); + if (binding != null) { + mplew.write(binding.getType()); + mplew.writeInt(binding.getAction()); + } else { mplew.write(0); - mplew.write(skilllv); - mplew.write(direction); - - return mplew.getPacket(); + mplew.writeInt(0); + } + } + return mplew.getPacket(); + } + + public static byte[] QuickslotMappedInit(MapleQuickslotBinding pQuickslot) { + final MaplePacketLittleEndianWriter pOutPacket = new MaplePacketLittleEndianWriter(); + + pOutPacket.writeShort(SendOpcode.QUICKSLOT_INIT.getValue()); + pQuickslot.Encode(pOutPacket); + + return pOutPacket.getPacket(); + } + + public static byte[] getInventoryFull() { + return modifyInventory(true, Collections.emptyList()); + } + + public static byte[] getShowInventoryFull() { + return getShowInventoryStatus(0xff); + } + + public static byte[] showItemUnavailable() { + return getShowInventoryStatus(0xfe); + } + + public static byte[] getShowInventoryStatus(int mode) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(0); + mplew.write(mode); + mplew.writeInt(0); + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] getStorage(int npcId, byte slots, Collection items, int meso) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.STORAGE.getValue()); + mplew.write(0x16); + mplew.writeInt(npcId); + mplew.write(slots); + mplew.writeShort(0x7E); + mplew.writeShort(0); + mplew.writeInt(0); + mplew.writeInt(meso); + mplew.writeShort(0); + mplew.write((byte) items.size()); + for (Item item : items) { + addItemInfo(mplew, item, true); + } + mplew.writeShort(0); + mplew.write(0); + return mplew.getPacket(); + } + + /* + * 0x0A = Inv full + * 0x0B = You do not have enough mesos + * 0x0C = One-Of-A-Kind error + */ + public static byte[] getStorageError(byte i) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.STORAGE.getValue()); + mplew.write(i); + return mplew.getPacket(); + } + + public static byte[] mesoStorage(byte slots, int meso) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.STORAGE.getValue()); + mplew.write(0x13); + mplew.write(slots); + mplew.writeShort(2); + mplew.writeShort(0); + mplew.writeInt(0); + mplew.writeInt(meso); + return mplew.getPacket(); + } + + public static byte[] storeStorage(byte slots, MapleInventoryType type, Collection items) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.STORAGE.getValue()); + mplew.write(0xD); + mplew.write(slots); + mplew.writeShort(type.getBitfieldEncoding()); + mplew.writeShort(0); + mplew.writeInt(0); + mplew.write(items.size()); + for (Item item : items) { + addItemInfo(mplew, item, true); + } + return mplew.getPacket(); + } + + public static byte[] takeOutStorage(byte slots, MapleInventoryType type, Collection items) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.STORAGE.getValue()); + mplew.write(0x9); + mplew.write(slots); + mplew.writeShort(type.getBitfieldEncoding()); + mplew.writeShort(0); + mplew.writeInt(0); + mplew.write(items.size()); + for (Item item : items) { + addItemInfo(mplew, item, true); + } + return mplew.getPacket(); + } + + public static byte[] arrangeStorage(byte slots, Collection items) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + + mplew.writeShort(SendOpcode.STORAGE.getValue()); + mplew.write(0xF); + mplew.write(slots); + mplew.write(124); + mplew.skip(10); + mplew.write(items.size()); + for (Item item : items) { + addItemInfo(mplew, item, true); + } + mplew.write(0); + return mplew.getPacket(); + } + + /** + * @param oid + * @param remhppercentage + * @return + */ + public static byte[] showMonsterHP(int oid, int remhppercentage) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_MONSTER_HP.getValue()); + mplew.writeInt(oid); + mplew.write(remhppercentage); + return mplew.getPacket(); + } + + public static byte[] showBossHP(int oid, int currHP, int maxHP, byte tagColor, byte tagBgColor) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); + mplew.write(5); + mplew.writeInt(oid); + mplew.writeInt(currHP); + mplew.writeInt(maxHP); + mplew.write(tagColor); + mplew.write(tagBgColor); + return mplew.getPacket(); + } + + private static Pair normalizedCustomMaxHP(long currHP, long maxHP) { + int sendHP, sendMaxHP; + + if (maxHP <= Integer.MAX_VALUE) { + sendHP = (int) currHP; + sendMaxHP = (int) maxHP; + } else { + float f = ((float) currHP) / maxHP; + + sendHP = (int) (Integer.MAX_VALUE * f); + sendMaxHP = Integer.MAX_VALUE; } - public static byte[] showOwnBuffEffect(int skillid, int effectid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(effectid); - mplew.writeInt(skillid); - mplew.write(0xA9); - mplew.write(1); - return mplew.getPacket(); - } + return new Pair<>(sendHP, sendMaxHP); + } - public static byte[] showOwnBerserk(int skilllevel, boolean Berserk) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(1); - mplew.writeInt(1320006); - mplew.write(0xA9); - mplew.write(skilllevel); - mplew.write(Berserk ? 1 : 0); - return mplew.getPacket(); - } + public static byte[] customShowBossHP(byte call, int oid, long currHP, long maxHP, byte tagColor, byte tagBgColor) { + Pair customHP = normalizedCustomMaxHP(currHP, maxHP); - public static byte[] showBerserk(int cid, int skilllevel, boolean Berserk) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(1); - mplew.writeInt(1320006); - mplew.write(0xA9); - mplew.write(skilllevel); - mplew.write(Berserk ? 1 : 0); - return mplew.getPacket(); - } + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); + mplew.write(call); + mplew.writeInt(oid); + mplew.writeInt(customHP.left); + mplew.writeInt(customHP.right); + mplew.write(tagColor); + mplew.write(tagBgColor); + return mplew.getPacket(); + } - public static byte[] updateSkill(int skillid, int level, int masterlevel, long expiration) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_SKILLS.getValue()); - mplew.write(1); - mplew.writeShort(1); - mplew.writeInt(skillid); - mplew.writeInt(level); - mplew.writeInt(masterlevel); - addExpirationTime(mplew, expiration); - mplew.write(4); - return mplew.getPacket(); - } + public static byte[] giveFameResponse(int mode, String charname, int newfame) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAME_RESPONSE.getValue()); + mplew.write(0); + mplew.writeMapleAsciiString(charname); + mplew.write(mode); + mplew.writeShort(newfame); + mplew.writeShort(0); + return mplew.getPacket(); + } - public static byte[] getShowQuestCompletion(int id) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.QUEST_CLEAR.getValue()); - mplew.writeShort(id); - return mplew.getPacket(); - } + /** + * status can be:
0: ok, use giveFameResponse
1: the username is + * incorrectly entered
2: users under level 15 are unable to toggle with + * fame.
3: can't raise or drop fame anymore today.
4: can't raise + * or drop fame for this character for this month anymore.
5: received + * fame, use receiveFame()
6: level of fame neither has been raised nor + * dropped due to an unexpected error + * + * @param status + * @return + */ + public static byte[] giveFameErrorResponse(int status) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAME_RESPONSE.getValue()); + mplew.write(status); + return mplew.getPacket(); + } - public static byte[] getKeymap(Map keybindings) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.KEYMAP.getValue()); - mplew.write(0); - for (int x = 0; x < 90; x++) { - MapleKeyBinding binding = keybindings.get(x); - if (binding != null) { - mplew.write(binding.getType()); - mplew.writeInt(binding.getAction()); - } else { - mplew.write(0); - mplew.writeInt(0); - } - } - return mplew.getPacket(); - } - - public static byte[] QuickslotMappedInit(MapleQuickslotBinding pQuickslot) - { - final MaplePacketLittleEndianWriter pOutPacket = new MaplePacketLittleEndianWriter(); + public static byte[] receiveFame(int mode, String charnameFrom) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAME_RESPONSE.getValue()); + mplew.write(5); + mplew.writeMapleAsciiString(charnameFrom); + mplew.write(mode); + return mplew.getPacket(); + } - pOutPacket.writeShort(SendOpcode.QUICKSLOT_INIT.getValue()); - pQuickslot.Encode(pOutPacket); + public static byte[] partyCreated(MapleParty party, int partycharid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); + mplew.write(8); + mplew.writeInt(party.getId()); - return pOutPacket.getPacket(); - } + Map partyDoors = party.getDoors(); + if (partyDoors.size() > 0) { + MapleDoor door = partyDoors.get(partycharid); - public static byte[] getInventoryFull() { - return modifyInventory(true, Collections.emptyList()); - } - - public static byte[] getShowInventoryFull() { - return getShowInventoryStatus(0xff); - } - - public static byte[] showItemUnavailable() { - return getShowInventoryStatus(0xfe); - } - - public static byte[] getShowInventoryStatus(int mode) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(0); - mplew.write(mode); + if (door != null) { + MapleDoorObject mdo = door.getAreaDoor(); + mplew.writeInt(mdo.getTo().getId()); + mplew.writeInt(mdo.getFrom().getId()); + mplew.writeInt(mdo.getPosition().x); + mplew.writeInt(mdo.getPosition().y); + } else { + mplew.writeInt(999999999); + mplew.writeInt(999999999); mplew.writeInt(0); mplew.writeInt(0); - return mplew.getPacket(); + } + } else { + mplew.writeInt(999999999); + mplew.writeInt(999999999); + mplew.writeInt(0); + mplew.writeInt(0); + } + return mplew.getPacket(); + } + + public static byte[] partyInvite(MapleCharacter from) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); + mplew.write(4); + mplew.writeInt(from.getParty().getId()); + mplew.writeMapleAsciiString(from.getName()); + mplew.write(0); + return mplew.getPacket(); + } + + public static byte[] partySearchInvite(MapleCharacter from) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); + mplew.write(4); + mplew.writeInt(from.getParty().getId()); + mplew.writeMapleAsciiString("PS: " + from.getName()); + mplew.write(0); + return mplew.getPacket(); + } + + /** + * 10: A beginner can't create a party. 1/5/6/11/14/19: Your request for a + * party didn't work due to an unexpected error. 12: Quit as leader of the + * party. 13: You have yet to join a party. + * 16: Already have joined a party. 17: The party you're trying to join is + * already in full capacity. 19: Unable to find the requested character in + * this channel. 25: Cannot kick another user in this map. 28/29: Leadership + * can only be given to a party member in the vicinity. 30: Change leadership + * only on same channel. + * + * @param message + * @return + */ + public static byte[] partyStatusMessage(int message) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); + mplew.write(message); + return mplew.getPacket(); + } + + /** + * 21: Player is blocking any party invitations, 22: Player is taking care of + * another invitation, 23: Player have denied request to the party. + * + * @param message + * @param charname + * @return + */ + public static byte[] partyStatusMessage(int message, String charname) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); + mplew.write(message); + mplew.writeMapleAsciiString(charname); + return mplew.getPacket(); + } + + private static void addPartyStatus(int forchannel, MapleParty party, LittleEndianWriter lew, boolean leaving) { + List partymembers = new ArrayList<>(party.getMembers()); + while (partymembers.size() < 6) { + partymembers.add(new MaplePartyCharacter()); + } + for (MaplePartyCharacter partychar : partymembers) { + lew.writeInt(partychar.getId()); + } + for (MaplePartyCharacter partychar : partymembers) { + lew.writeAsciiString(getRightPaddedStr(partychar.getName(), '\0', 13)); + } + for (MaplePartyCharacter partychar : partymembers) { + lew.writeInt(partychar.getJobId()); + } + for (MaplePartyCharacter partychar : partymembers) { + lew.writeInt(partychar.getLevel()); + } + for (MaplePartyCharacter partychar : partymembers) { + if (partychar.isOnline()) { + lew.writeInt(partychar.getChannel() - 1); + } else { + lew.writeInt(-2); + } + } + lew.writeInt(party.getLeader().getId()); + for (MaplePartyCharacter partychar : partymembers) { + if (partychar.getChannel() == forchannel) { + lew.writeInt(partychar.getMapId()); + } else { + lew.writeInt(0); + } } - public static byte[] getStorage(int npcId, byte slots, Collection items, int meso) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STORAGE.getValue()); - mplew.write(0x16); - mplew.writeInt(npcId); - mplew.write(slots); - mplew.writeShort(0x7E); - mplew.writeShort(0); - mplew.writeInt(0); - mplew.writeInt(meso); - mplew.writeShort(0); - mplew.write((byte) items.size()); - for (Item item : items) { - addItemInfo(mplew, item, true); - } - mplew.writeShort(0); - mplew.write(0); - return mplew.getPacket(); - } - - /* - * 0x0A = Inv full - * 0x0B = You do not have enough mesos - * 0x0C = One-Of-A-Kind error - */ - public static byte[] getStorageError(byte i) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STORAGE.getValue()); - mplew.write(i); - return mplew.getPacket(); - } - - public static byte[] mesoStorage(byte slots, int meso) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STORAGE.getValue()); - mplew.write(0x13); - mplew.write(slots); - mplew.writeShort(2); - mplew.writeShort(0); - mplew.writeInt(0); - mplew.writeInt(meso); - return mplew.getPacket(); - } - - public static byte[] storeStorage(byte slots, MapleInventoryType type, Collection items) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STORAGE.getValue()); - mplew.write(0xD); - mplew.write(slots); - mplew.writeShort(type.getBitfieldEncoding()); - mplew.writeShort(0); - mplew.writeInt(0); - mplew.write(items.size()); - for (Item item : items) { - addItemInfo(mplew, item, true); - } - return mplew.getPacket(); - } - - public static byte[] takeOutStorage(byte slots, MapleInventoryType type, Collection items) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STORAGE.getValue()); - mplew.write(0x9); - mplew.write(slots); - mplew.writeShort(type.getBitfieldEncoding()); - mplew.writeShort(0); - mplew.writeInt(0); - mplew.write(items.size()); - for (Item item : items) { - addItemInfo(mplew, item, true); - } - return mplew.getPacket(); - } - - public static byte[] arrangeStorage(byte slots, Collection items) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - - mplew.writeShort(SendOpcode.STORAGE.getValue()); - mplew.write(0xF); - mplew.write(slots); - mplew.write(124); - mplew.skip(10); - mplew.write(items.size()); - for (Item item : items) { - addItemInfo(mplew, item, true); - } - mplew.write(0); - return mplew.getPacket(); - } - - /** - * - * @param oid - * @param remhppercentage - * @return - */ - public static byte[] showMonsterHP(int oid, int remhppercentage) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_MONSTER_HP.getValue()); - mplew.writeInt(oid); - mplew.write(remhppercentage); - return mplew.getPacket(); - } - - public static byte[] showBossHP(int oid, int currHP, int maxHP, byte tagColor, byte tagBgColor) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(5); - mplew.writeInt(oid); - mplew.writeInt(currHP); - mplew.writeInt(maxHP); - mplew.write(tagColor); - mplew.write(tagBgColor); - return mplew.getPacket(); - } - - private static Pair normalizedCustomMaxHP(long currHP, long maxHP) { - int sendHP, sendMaxHP; - - if(maxHP <= Integer.MAX_VALUE) { - sendHP = (int) currHP; - sendMaxHP = (int) maxHP; - } else { - float f = ((float) currHP) / maxHP; - - sendHP = (int) (Integer.MAX_VALUE * f); - sendMaxHP = Integer.MAX_VALUE; - } - - return new Pair<>(sendHP, sendMaxHP); - } - - public static byte[] customShowBossHP(byte call, int oid, long currHP, long maxHP, byte tagColor, byte tagBgColor) { - Pair customHP = normalizedCustomMaxHP(currHP, maxHP); - - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(call); - mplew.writeInt(oid); - mplew.writeInt(customHP.left); - mplew.writeInt(customHP.right); - mplew.write(tagColor); - mplew.write(tagBgColor); - return mplew.getPacket(); - } - - public static byte[] giveFameResponse(int mode, String charname, int newfame) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAME_RESPONSE.getValue()); - mplew.write(0); - mplew.writeMapleAsciiString(charname); - mplew.write(mode); - mplew.writeShort(newfame); - mplew.writeShort(0); - return mplew.getPacket(); - } - - /** - * status can be:
0: ok, use giveFameResponse
1: the username is - * incorrectly entered
2: users under level 15 are unable to toggle with - * fame.
3: can't raise or drop fame anymore today.
4: can't raise - * or drop fame for this character for this month anymore.
5: received - * fame, use receiveFame()
6: level of fame neither has been raised nor - * dropped due to an unexpected error - * - * @param status - * @return - */ - public static byte[] giveFameErrorResponse(int status) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAME_RESPONSE.getValue()); - mplew.write(status); - return mplew.getPacket(); - } - - public static byte[] receiveFame(int mode, String charnameFrom) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAME_RESPONSE.getValue()); - mplew.write(5); - mplew.writeMapleAsciiString(charnameFrom); - mplew.write(mode); - return mplew.getPacket(); - } - - public static byte[] partyCreated(MapleParty party, int partycharid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); - mplew.write(8); - mplew.writeInt(party.getId()); - - Map partyDoors = party.getDoors(); + Map partyDoors = party.getDoors(); + for (MaplePartyCharacter partychar : partymembers) { + if (partychar.getChannel() == forchannel && !leaving) { if (partyDoors.size() > 0) { - MapleDoor door = partyDoors.get(partycharid); - - if(door != null) { - MapleDoorObject mdo = door.getAreaDoor(); - mplew.writeInt(mdo.getTo().getId()); - mplew.writeInt(mdo.getFrom().getId()); - mplew.writeInt(mdo.getPosition().x); - mplew.writeInt(mdo.getPosition().y); - } else { - mplew.writeInt(999999999); - mplew.writeInt(999999999); - mplew.writeInt(0); - mplew.writeInt(0); - } + MapleDoor door = partyDoors.get(partychar.getId()); + if (door != null) { + MapleDoorObject mdo = door.getTownDoor(); + lew.writeInt(mdo.getTown().getId()); + lew.writeInt(mdo.getArea().getId()); + lew.writeInt(mdo.getPosition().x); + lew.writeInt(mdo.getPosition().y); + } else { + lew.writeInt(999999999); + lew.writeInt(999999999); + lew.writeInt(0); + lew.writeInt(0); + } } else { - mplew.writeInt(999999999); - mplew.writeInt(999999999); - mplew.writeInt(0); - mplew.writeInt(0); + lew.writeInt(999999999); + lew.writeInt(999999999); + lew.writeInt(0); + lew.writeInt(0); } - return mplew.getPacket(); + } else { + lew.writeInt(999999999); + lew.writeInt(999999999); + lew.writeInt(0); + lew.writeInt(0); + } } + } - public static byte[] partyInvite(MapleCharacter from) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); - mplew.write(4); - mplew.writeInt(from.getParty().getId()); - mplew.writeMapleAsciiString(from.getName()); - mplew.write(0); - return mplew.getPacket(); - } - - public static byte[] partySearchInvite(MapleCharacter from) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); - mplew.write(4); - mplew.writeInt(from.getParty().getId()); - mplew.writeMapleAsciiString("PS: " + from.getName()); - mplew.write(0); - return mplew.getPacket(); - } - - /** - * 10: A beginner can't create a party. 1/5/6/11/14/19: Your request for a - * party didn't work due to an unexpected error. 12: Quit as leader of the - * party. 13: You have yet to join a party. - * 16: Already have joined a party. 17: The party you're trying to join is - * already in full capacity. 19: Unable to find the requested character in - * this channel. 25: Cannot kick another user in this map. 28/29: Leadership - * can only be given to a party member in the vicinity. 30: Change leadership - * only on same channel. - * - * @param message - * @return - */ - public static byte[] partyStatusMessage(int message) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); - mplew.write(message); - return mplew.getPacket(); - } - - /** - * 21: Player is blocking any party invitations, 22: Player is taking care of - * another invitation, 23: Player have denied request to the party. - * - * @param message - * @param charname - * @return - */ - public static byte[] partyStatusMessage(int message, String charname) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); - mplew.write(message); - mplew.writeMapleAsciiString(charname); - return mplew.getPacket(); - } - - private static void addPartyStatus(int forchannel, MapleParty party, LittleEndianWriter lew, boolean leaving) { - List partymembers = new ArrayList<>(party.getMembers()); - while (partymembers.size() < 6) { - partymembers.add(new MaplePartyCharacter()); - } - for (MaplePartyCharacter partychar : partymembers) { - lew.writeInt(partychar.getId()); - } - for (MaplePartyCharacter partychar : partymembers) { - lew.writeAsciiString(getRightPaddedStr(partychar.getName(), '\0', 13)); - } - for (MaplePartyCharacter partychar : partymembers) { - lew.writeInt(partychar.getJobId()); - } - for (MaplePartyCharacter partychar : partymembers) { - lew.writeInt(partychar.getLevel()); - } - for (MaplePartyCharacter partychar : partymembers) { - if (partychar.isOnline()) { - lew.writeInt(partychar.getChannel() - 1); - } else { - lew.writeInt(-2); - } - } - lew.writeInt(party.getLeader().getId()); - for (MaplePartyCharacter partychar : partymembers) { - if (partychar.getChannel() == forchannel) { - lew.writeInt(partychar.getMapId()); - } else { - lew.writeInt(0); - } - } - - Map partyDoors = party.getDoors(); - for (MaplePartyCharacter partychar : partymembers) { - if (partychar.getChannel() == forchannel && !leaving) { - if (partyDoors.size() > 0) { - MapleDoor door = partyDoors.get(partychar.getId()); - if(door != null) { - MapleDoorObject mdo = door.getTownDoor(); - lew.writeInt(mdo.getTown().getId()); - lew.writeInt(mdo.getArea().getId()); - lew.writeInt(mdo.getPosition().x); - lew.writeInt(mdo.getPosition().y); - } else { - lew.writeInt(999999999); - lew.writeInt(999999999); - lew.writeInt(0); - lew.writeInt(0); - } - } else { - lew.writeInt(999999999); - lew.writeInt(999999999); - lew.writeInt(0); - lew.writeInt(0); - } - } else { - lew.writeInt(999999999); - lew.writeInt(999999999); - lew.writeInt(0); - lew.writeInt(0); - } - } - } - - public static byte[] updateParty(int forChannel, MapleParty party, PartyOperation op, MaplePartyCharacter target) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); - switch (op) { - case DISBAND: - case EXPEL: - case LEAVE: - mplew.write(0x0C); - mplew.writeInt(party.getId()); - mplew.writeInt(target.getId()); - if (op == PartyOperation.DISBAND) { - mplew.write(0); - mplew.writeInt(party.getId()); - } else { - mplew.write(1); - if (op == PartyOperation.EXPEL) { - mplew.write(1); - } else { - mplew.write(0); - } - mplew.writeMapleAsciiString(target.getName()); - addPartyStatus(forChannel, party, mplew, false); - } - break; - case JOIN: - mplew.write(0xF); - mplew.writeInt(party.getId()); - mplew.writeMapleAsciiString(target.getName()); - addPartyStatus(forChannel, party, mplew, false); - break; - case SILENT_UPDATE: - case LOG_ONOFF: - mplew.write(0x7); - mplew.writeInt(party.getId()); - addPartyStatus(forChannel, party, mplew, false); - break; - case CHANGE_LEADER: - mplew.write(0x1B); - mplew.writeInt(target.getId()); - mplew.write(0); - break; - } - return mplew.getPacket(); - } - - public static byte[] partyPortal(int townId, int targetId, Point position) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); - mplew.writeShort(0x23); - mplew.writeInt(townId); - mplew.writeInt(targetId); - mplew.writePos(position); - return mplew.getPacket(); - } - - public static byte[] updatePartyMemberHP(int cid, int curhp, int maxhp) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_PARTYMEMBER_HP.getValue()); - mplew.writeInt(cid); - mplew.writeInt(curhp); - mplew.writeInt(maxhp); - return mplew.getPacket(); - } - - /** - * mode: 0 buddychat; 1 partychat; 2 guildchat - * - * @param name - * @param chattext - * @param mode - * @return - */ - public static byte[] multiChat(String name, String chattext, int mode) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MULTICHAT.getValue()); - mplew.write(mode); - mplew.writeMapleAsciiString(name); - mplew.writeMapleAsciiString(chattext); - return mplew.getPacket(); - } - - private static void writeIntMask(final MaplePacketLittleEndianWriter mplew, Map stats) { - int firstmask = 0; - int secondmask = 0; - for (MonsterStatus stat : stats.keySet()) { - if (stat.isFirst()) { - firstmask |= stat.getValue(); - } else { - secondmask |= stat.getValue(); - } - } - mplew.writeInt(firstmask); - mplew.writeInt(secondmask); - } - - public static byte[] applyMonsterStatus(final int oid, final MonsterStatusEffect mse, final List reflection) { - Map stati = mse.getStati(); - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.APPLY_MONSTER_STATUS.getValue()); - mplew.writeInt(oid); - mplew.writeLong(0); - writeIntMask(mplew, stati); - for (Map.Entry stat : stati.entrySet()) { - mplew.writeShort(stat.getValue()); - if (mse.isMonsterSkill()) { - mplew.writeShort(mse.getMobSkill().getSkillId()); - mplew.writeShort(mse.getMobSkill().getSkillLevel()); - } else { - mplew.writeInt(mse.getSkill().getId()); - } - mplew.writeShort(-1); // might actually be the buffTime but it's not displayed anywhere - } - int size = stati.size(); // size - if (reflection != null) { - for (Integer ref : reflection) { - mplew.writeInt(ref); - } - if (reflection.size() > 0) { - size /= 2; // This gives 2 buffs per reflection but it's really one buff - } - } - mplew.write(size); // size - mplew.writeInt(0); - return mplew.getPacket(); - } - - public static byte[] cancelMonsterStatus(int oid, Map stats) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_MONSTER_STATUS.getValue()); - mplew.writeInt(oid); - mplew.writeLong(0); - writeIntMask(mplew, stats); - mplew.writeInt(0); - return mplew.getPacket(); - } - - public static byte[] getClock(int time) { // time in seconds - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CLOCK.getValue()); - mplew.write(2); // clock type. if you send 3 here you have to send another byte (which does not matter at all) before the timestamp - mplew.writeInt(time); - return mplew.getPacket(); - } - - public static byte[] getClockTime(int hour, int min, int sec) { // Current Time - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CLOCK.getValue()); - mplew.write(1); //Clock-Type - mplew.write(hour); - mplew.write(min); - mplew.write(sec); - return mplew.getPacket(); - } - - public static byte[] removeClock() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STOP_CLOCK.getValue()); - mplew.write(0); - return mplew.getPacket(); - } - - public static byte[] spawnMist(int oid, int ownerCid, int skill, int level, MapleMist mist) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_MIST.getValue()); - mplew.writeInt(oid); - mplew.writeInt(mist.isMobMist() ? 0 : mist.isPoisonMist() ? 1 : mist.isRecoveryMist() ? 4 : 2); // mob mist = 0, player poison = 1, smokescreen = 2, unknown = 3, recovery = 4 - mplew.writeInt(ownerCid); - mplew.writeInt(skill); - mplew.write(level); - mplew.writeShort(mist.getSkillDelay()); // Skill delay - mplew.writeInt(mist.getBox().x); - mplew.writeInt(mist.getBox().y); - mplew.writeInt(mist.getBox().x + mist.getBox().width); - mplew.writeInt(mist.getBox().y + mist.getBox().height); - mplew.writeInt(0); - return mplew.getPacket(); - } - - public static byte[] removeMist(int oid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.REMOVE_MIST.getValue()); - mplew.writeInt(oid); - return mplew.getPacket(); - } - - public static byte[] damageSummon(int cid, int oid, int damage, int monsterIdFrom) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DAMAGE_SUMMON.getValue()); - mplew.writeInt(cid); - mplew.writeInt(oid); - mplew.write(12); - mplew.writeInt(damage); // damage display doesn't seem to work... - mplew.writeInt(monsterIdFrom); - mplew.write(0); - return mplew.getPacket(); - } - - public static byte[] damageMonster(int oid, int damage) { - return damageMonster(oid, damage, 0, 0); - } - - public static byte[] healMonster(int oid, int heal, int curhp, int maxhp) { - return damageMonster(oid, -heal, curhp, maxhp); - } - - private static byte[] damageMonster(int oid, int damage, int curhp, int maxhp) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DAMAGE_MONSTER.getValue()); - mplew.writeInt(oid); - mplew.write(0); - mplew.writeInt(damage); - mplew.writeInt(curhp); - mplew.writeInt(maxhp); - return mplew.getPacket(); - } - - public static byte[] updateBuddylist(Collection buddylist) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); - mplew.write(7); - mplew.write(buddylist.size()); - for (BuddylistEntry buddy : buddylist) { - if (buddy.isVisible()) { - mplew.writeInt(buddy.getCharacterId()); // cid - mplew.writeAsciiString(getRightPaddedStr(buddy.getName(), '\0', 13)); - mplew.write(0); // opposite status - mplew.writeInt(buddy.getChannel() - 1); - mplew.writeAsciiString(getRightPaddedStr(buddy.getGroup(), '\0', 13)); - mplew.writeInt(0);//mapid? - } - } - for (int x = 0; x < buddylist.size(); x++) { - mplew.writeInt(0);//mapid? - } - return mplew.getPacket(); - } - - public static byte[] buddylistMessage(byte message) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); - mplew.write(message); - return mplew.getPacket(); - } - - public static byte[] requestBuddylistAdd(int cidFrom, int cid, String nameFrom) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); - mplew.write(9); - mplew.writeInt(cidFrom); - mplew.writeMapleAsciiString(nameFrom); - mplew.writeInt(cidFrom); - mplew.writeAsciiString(getRightPaddedStr(nameFrom, '\0', 11)); - mplew.write(0x09); - mplew.write(0xf0); - mplew.write(0x01); - mplew.writeInt(0x0f); - mplew.writeNullTerminatedAsciiString("Default Group"); - mplew.writeInt(cid); - return mplew.getPacket(); - } - - public static byte[] updateBuddyChannel(int characterid, int channel) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); - mplew.write(0x14); - mplew.writeInt(characterid); - mplew.write(0); - mplew.writeInt(channel); - return mplew.getPacket(); - } - - public static byte[] itemEffect(int characterid, int itemid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_EFFECT.getValue()); - mplew.writeInt(characterid); - mplew.writeInt(itemid); - return mplew.getPacket(); - } - - public static byte[] updateBuddyCapacity(int capacity) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); - mplew.write(0x15); - mplew.write(capacity); - return mplew.getPacket(); - } - - public static byte[] showChair(int characterid, int itemid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_CHAIR.getValue()); - mplew.writeInt(characterid); - mplew.writeInt(itemid); - return mplew.getPacket(); - } - - public static byte[] cancelChair(int id) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_CHAIR.getValue()); - if (id < 0) { - mplew.write(0); + public static byte[] updateParty(int forChannel, MapleParty party, PartyOperation op, MaplePartyCharacter target) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); + switch (op) { + case DISBAND: + case EXPEL: + case LEAVE: + mplew.write(0x0C); + mplew.writeInt(party.getId()); + mplew.writeInt(target.getId()); + if (op == PartyOperation.DISBAND) { + mplew.write(0); + mplew.writeInt(party.getId()); } else { + mplew.write(1); + if (op == PartyOperation.EXPEL) { mplew.write(1); - mplew.writeShort(id); - } - return mplew.getPacket(); - } - - // is there a way to spawn reactors non-animated? - public static byte[] spawnReactor(MapleReactor reactor) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - Point pos = reactor.getPosition(); - mplew.writeShort(SendOpcode.REACTOR_SPAWN.getValue()); - mplew.writeInt(reactor.getObjectId()); - mplew.writeInt(reactor.getId()); - mplew.write(reactor.getState()); - mplew.writePos(pos); - mplew.write(0); - mplew.writeShort(0); - return mplew.getPacket(); - } - - // is there a way to trigger reactors without performing the hit animation? - public static byte[] triggerReactor(MapleReactor reactor, int stance) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - Point pos = reactor.getPosition(); - mplew.writeShort(SendOpcode.REACTOR_HIT.getValue()); - mplew.writeInt(reactor.getObjectId()); - mplew.write(reactor.getState()); - mplew.writePos(pos); - mplew.write(stance); - mplew.writeShort(0); - mplew.write(5); // frame delay, set to 5 since there doesn't appear to be a fixed formula for it - return mplew.getPacket(); - } - - public static byte[] destroyReactor(MapleReactor reactor) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - Point pos = reactor.getPosition(); - mplew.writeShort(SendOpcode.REACTOR_DESTROY.getValue()); - mplew.writeInt(reactor.getObjectId()); - mplew.write(reactor.getState()); - mplew.writePos(pos); - return mplew.getPacket(); - } - - public static byte[] musicChange(String song) { - return environmentChange(song, 6); - } - - public static byte[] showEffect(String effect) { - return environmentChange(effect, 3); - } - - public static byte[] playSound(String sound) { - return environmentChange(sound, 4); - } - - public static byte[] environmentChange(String env, int mode) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(mode); - mplew.writeMapleAsciiString(env); - return mplew.getPacket(); - } - - public static byte[] environmentMove(String env, int mode) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - - mplew.writeShort(SendOpcode.FIELD_OBSTACLE_ONOFF.getValue()); - mplew.writeMapleAsciiString(env); - mplew.writeInt(mode); // 0: stop and back to start, 1: move - - return mplew.getPacket(); - } - - public static byte[] environmentMoveList(Set> envList) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_OBSTACLE_ONOFF_LIST.getValue()); - mplew.writeInt(envList.size()); - - for(Entry envMove : envList) { - mplew.writeMapleAsciiString(envMove.getKey()); - mplew.writeInt(envMove.getValue()); - } - - return mplew.getPacket(); - } - - public static byte[] environmentMoveReset() { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_OBSTACLE_ALL_RESET.getValue()); - return mplew.getPacket(); - } - - public static byte[] startMapEffect(String msg, int itemid, boolean active) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BLOW_WEATHER.getValue()); - mplew.write(active ? 0 : 1); - mplew.writeInt(itemid); - if (active) { - mplew.writeMapleAsciiString(msg); - } - return mplew.getPacket(); - } - - public static byte[] removeMapEffect() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BLOW_WEATHER.getValue()); - mplew.write(0); - mplew.writeInt(0); - return mplew.getPacket(); - } - - public static byte[] mapEffect(String path) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(3); - mplew.writeMapleAsciiString(path); - return mplew.getPacket(); - } - - public static byte[] mapSound(String path) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(4); - mplew.writeMapleAsciiString(path); - return mplew.getPacket(); - } - - public static byte[] showGuildInfo(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x1A); //signature for showing guild info - if (chr == null) { //show empty guild (used for leaving, expelled) + } else { mplew.write(0); - return mplew.getPacket(); + } + mplew.writeMapleAsciiString(target.getName()); + addPartyStatus(forChannel, party, mplew, false); } - MapleGuild g = chr.getClient().getWorldServer().getGuild(chr.getMGC()); - if (g == null) { //failed to read from DB - don't show a guild - mplew.write(0); - return mplew.getPacket(); - } - mplew.write(1); //bInGuild - mplew.writeInt(g.getId()); - mplew.writeMapleAsciiString(g.getName()); - for (int i = 1; i <= 5; i++) { - mplew.writeMapleAsciiString(g.getRankTitle(i)); - } - Collection members = g.getMembers(); - mplew.write(members.size()); //then it is the size of all the members - for (MapleGuildCharacter mgc : members) {//and each of their character ids o_O - mplew.writeInt(mgc.getId()); - } - for (MapleGuildCharacter mgc : members) { - mplew.writeAsciiString(getRightPaddedStr(mgc.getName(), '\0', 13)); - mplew.writeInt(mgc.getJobId()); - mplew.writeInt(mgc.getLevel()); - mplew.writeInt(mgc.getGuildRank()); - mplew.writeInt(mgc.isOnline() ? 1 : 0); - mplew.writeInt(g.getSignature()); - mplew.writeInt(mgc.getAllianceRank()); - } - mplew.writeInt(g.getCapacity()); - mplew.writeShort(g.getLogoBG()); - mplew.write(g.getLogoBGColor()); - mplew.writeShort(g.getLogo()); - mplew.write(g.getLogoColor()); - mplew.writeMapleAsciiString(g.getNotice()); - mplew.writeInt(g.getGP()); - mplew.writeInt(g.getAllianceId()); - return mplew.getPacket(); - } - - public static byte[] guildMemberOnline(int gid, int cid, boolean bOnline) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x3d); - mplew.writeInt(gid); - mplew.writeInt(cid); - mplew.write(bOnline ? 1 : 0); - return mplew.getPacket(); - } - - public static byte[] guildInvite(int gid, String charName) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x05); - mplew.writeInt(gid); - mplew.writeMapleAsciiString(charName); - return mplew.getPacket(); - } - - public static byte[] createGuildMessage(String masterName, String guildName) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x3); - mplew.writeInt(0); - mplew.writeMapleAsciiString(masterName); - mplew.writeMapleAsciiString(guildName); - return mplew.getPacket(); - } - - /** - * Gets a Heracle/guild message packet. - * - * Possible values for code:
28: guild name already in use
- * 31: problem in locating players during agreement
33/40: already joined a guild
- * 35: Cannot make guild
36: problem in player agreement
38: problem during forming guild
- * 41: max number of players in joining guild
42: character can't be found this channel
- * 45/48: character not in guild
52: problem in disbanding guild
56: admin cannot make guild
- * 57: problem in increasing guild size
- * - * - * @param code The response code. - * @return The guild message packet. - */ - public static byte[] genericGuildMessage(byte code) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(code); - return mplew.getPacket(); - } - - /** - * Gets a guild message packet appended with target name. - * - * 53: player not accepting guild invites
- * 54: player already managing an invite
55: player denied an invite
- * - * @param code The response code. - * @param targetName The initial player target of the invitation. - * @return The guild message packet. - */ - public static byte[] responseGuildMessage(byte code, String targetName) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(code); - mplew.writeMapleAsciiString(targetName); - return mplew.getPacket(); - } - - public static byte[] newGuildMember(MapleGuildCharacter mgc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x27); - mplew.writeInt(mgc.getGuildId()); - mplew.writeInt(mgc.getId()); - mplew.writeAsciiString(getRightPaddedStr(mgc.getName(), '\0', 13)); - mplew.writeInt(mgc.getJobId()); - mplew.writeInt(mgc.getLevel()); - mplew.writeInt(mgc.getGuildRank()); //should be always 5 but whatevs - mplew.writeInt(mgc.isOnline() ? 1 : 0); //should always be 1 too - mplew.writeInt(1); //? could be guild signature, but doesn't seem to matter - mplew.writeInt(3); - return mplew.getPacket(); - } - - //someone leaving, mode == 0x2c for leaving, 0x2f for expelled - public static byte[] memberLeft(MapleGuildCharacter mgc, boolean bExpelled) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(bExpelled ? 0x2f : 0x2c); - mplew.writeInt(mgc.getGuildId()); - mplew.writeInt(mgc.getId()); - mplew.writeMapleAsciiString(mgc.getName()); - return mplew.getPacket(); - } - - //rank change - public static byte[] changeRank(MapleGuildCharacter mgc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x40); - mplew.writeInt(mgc.getGuildId()); - mplew.writeInt(mgc.getId()); - mplew.write(mgc.getGuildRank()); - return mplew.getPacket(); - } - - public static byte[] guildNotice(int gid, String notice) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x44); - mplew.writeInt(gid); - mplew.writeMapleAsciiString(notice); - return mplew.getPacket(); - } - - public static byte[] guildMemberLevelJobUpdate(MapleGuildCharacter mgc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x3C); - mplew.writeInt(mgc.getGuildId()); - mplew.writeInt(mgc.getId()); - mplew.writeInt(mgc.getLevel()); - mplew.writeInt(mgc.getJobId()); - return mplew.getPacket(); - } - - public static byte[] rankTitleChange(int gid, String[] ranks) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x3E); - mplew.writeInt(gid); - for (int i = 0; i < 5; i++) { - mplew.writeMapleAsciiString(ranks[i]); - } - return mplew.getPacket(); - } - - public static byte[] guildDisband(int gid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x32); - mplew.writeInt(gid); - mplew.write(1); - return mplew.getPacket(); - } - - public static byte[] guildQuestWaitingNotice(byte channel, int waitingPos) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x4C); - mplew.write(channel - 1); - mplew.write(waitingPos); - return mplew.getPacket(); - } - - public static byte[] guildEmblemChange(int gid, short bg, byte bgcolor, short logo, byte logocolor) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x42); - mplew.writeInt(gid); - mplew.writeShort(bg); - mplew.write(bgcolor); - mplew.writeShort(logo); - mplew.write(logocolor); - return mplew.getPacket(); - } - - public static byte[] guildCapacityChange(int gid, int capacity) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x3A); - mplew.writeInt(gid); - mplew.write(capacity); - return mplew.getPacket(); - } - - public static void addThread(final MaplePacketLittleEndianWriter mplew, ResultSet rs) throws SQLException { - mplew.writeInt(rs.getInt("localthreadid")); - mplew.writeInt(rs.getInt("postercid")); - mplew.writeMapleAsciiString(rs.getString("name")); - mplew.writeLong(getTime(rs.getLong("timestamp"))); - mplew.writeInt(rs.getInt("icon")); - mplew.writeInt(rs.getInt("replycount")); - } - - public static byte[] BBSThreadList(ResultSet rs, int start) throws SQLException { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_BBS_PACKET.getValue()); - mplew.write(0x06); - if (!rs.last()) { - mplew.write(0); - mplew.writeInt(0); - mplew.writeInt(0); - return mplew.getPacket(); - } - int threadCount = rs.getRow(); - if (rs.getInt("localthreadid") == 0) { //has a notice - mplew.write(1); - addThread(mplew, rs); - threadCount--; //one thread didn't count (because it's a notice) - } else { - mplew.write(0); - } - if (!rs.absolute(start + 1)) { //seek to the thread before where we start - rs.first(); //uh, we're trying to start at a place past possible - start = 0; - } - mplew.writeInt(threadCount); - mplew.writeInt(Math.min(10, threadCount - start)); - for (int i = 0; i < Math.min(10, threadCount - start); i++) { - addThread(mplew, rs); - rs.next(); - } - return mplew.getPacket(); - } - - public static byte[] showThread(int localthreadid, ResultSet threadRS, ResultSet repliesRS) throws SQLException, RuntimeException { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_BBS_PACKET.getValue()); - mplew.write(0x07); - mplew.writeInt(localthreadid); - mplew.writeInt(threadRS.getInt("postercid")); - mplew.writeLong(getTime(threadRS.getLong("timestamp"))); - mplew.writeMapleAsciiString(threadRS.getString("name")); - mplew.writeMapleAsciiString(threadRS.getString("startpost")); - mplew.writeInt(threadRS.getInt("icon")); - if (repliesRS != null) { - int replyCount = threadRS.getInt("replycount"); - mplew.writeInt(replyCount); - int i; - for (i = 0; i < replyCount && repliesRS.next(); i++) { - mplew.writeInt(repliesRS.getInt("replyid")); - mplew.writeInt(repliesRS.getInt("postercid")); - mplew.writeLong(getTime(repliesRS.getLong("timestamp"))); - mplew.writeMapleAsciiString(repliesRS.getString("content")); - } - if (i != replyCount || repliesRS.next()) { - throw new RuntimeException(String.valueOf(threadRS.getInt("threadid"))); - } - } else { - mplew.writeInt(0); - } - return mplew.getPacket(); - } - - public static byte[] showGuildRanks(int npcid, ResultSet rs) throws SQLException { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x49); - mplew.writeInt(npcid); - if (!rs.last()) { //no guilds o.o - mplew.writeInt(0); - return mplew.getPacket(); - } - mplew.writeInt(rs.getRow()); //number of entries - rs.beforeFirst(); - while (rs.next()) { - mplew.writeMapleAsciiString(rs.getString("name")); - mplew.writeInt(rs.getInt("GP")); - mplew.writeInt(rs.getInt("logo")); - mplew.writeInt(rs.getInt("logoColor")); - mplew.writeInt(rs.getInt("logoBG")); - mplew.writeInt(rs.getInt("logoBGColor")); - } - return mplew.getPacket(); - } - - public static byte[] showPlayerRanks(int npcid, List> worldRanking) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x49); - mplew.writeInt(npcid); - if (worldRanking.isEmpty()) { - mplew.writeInt(0); - return mplew.getPacket(); - } - mplew.writeInt(worldRanking.size()); - for (Pair wr : worldRanking) { - mplew.writeMapleAsciiString(wr.getLeft()); - mplew.writeInt(wr.getRight()); - mplew.writeInt(0); - mplew.writeInt(0); - mplew.writeInt(0); - mplew.writeInt(0); - } - return mplew.getPacket(); - } - - public static byte[] updateGP(int gid, int GP) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x48); - mplew.writeInt(gid); - mplew.writeInt(GP); - return mplew.getPacket(); - } - - public static byte[] skillEffect(MapleCharacter from, int skillId, int level, byte flags, int speed, byte direction) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SKILL_EFFECT.getValue()); - mplew.writeInt(from.getId()); - mplew.writeInt(skillId); - mplew.write(level); - mplew.write(flags); - mplew.write(speed); - mplew.write(direction); //Mmmk - return mplew.getPacket(); - } - - public static byte[] skillCancel(MapleCharacter from, int skillId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_SKILL_EFFECT.getValue()); - mplew.writeInt(from.getId()); - mplew.writeInt(skillId); - return mplew.getPacket(); - } - - public static byte[] catchMonster(int mobOid, byte success) { // updated packet structure found thanks to Rien dev team - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CATCH_MONSTER.getValue()); - mplew.writeInt(mobOid); - mplew.write(success); - return mplew.getPacket(); - } - - public static byte[] catchMonster(int mobOid, int itemid, byte success) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CATCH_MONSTER_WITH_ITEM.getValue()); - mplew.writeInt(mobOid); - mplew.writeInt(itemid); - mplew.write(success); - return mplew.getPacket(); - } - - /** - * Sends a player hint. - * - * @param hint The hint it's going to send. - * @param width How tall the box is going to be. - * @param height How long the box is going to be. - * @return The player hint packet. - */ - public static byte[] sendHint(String hint, int width, int height) { - if (width < 1) { - width = hint.length() * 10; - if (width < 40) { - width = 40; - } - } - if (height < 5) { - height = 5; - } - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_HINT.getValue()); - mplew.writeMapleAsciiString(hint); - mplew.writeShort(width); - mplew.writeShort(height); - mplew.write(1); - return mplew.getPacket(); - } - - public static byte[] messengerInvite(String from, int messengerid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(0x03); - mplew.writeMapleAsciiString(from); + break; + case JOIN: + mplew.write(0xF); + mplew.writeInt(party.getId()); + mplew.writeMapleAsciiString(target.getName()); + addPartyStatus(forChannel, party, mplew, false); + break; + case SILENT_UPDATE: + case LOG_ONOFF: + mplew.write(0x7); + mplew.writeInt(party.getId()); + addPartyStatus(forChannel, party, mplew, false); + break; + case CHANGE_LEADER: + mplew.write(0x1B); + mplew.writeInt(target.getId()); mplew.write(0); - mplew.writeInt(messengerid); - mplew.write(0); - return mplew.getPacket(); + break; } + return mplew.getPacket(); + } + + public static byte[] partyPortal(int townId, int targetId, Point position) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); + mplew.writeShort(0x23); + mplew.writeInt(townId); + mplew.writeInt(targetId); + mplew.writePos(position); + return mplew.getPacket(); + } + + public static byte[] updatePartyMemberHP(int cid, int curhp, int maxhp) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_PARTYMEMBER_HP.getValue()); + mplew.writeInt(cid); + mplew.writeInt(curhp); + mplew.writeInt(maxhp); + return mplew.getPacket(); + } + + /** + * mode: 0 buddychat; 1 partychat; 2 guildchat + * + * @param name + * @param chattext + * @param mode + * @return + */ + public static byte[] multiChat(String name, String chattext, int mode) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MULTICHAT.getValue()); + mplew.write(mode); + mplew.writeMapleAsciiString(name); + mplew.writeMapleAsciiString(chattext); + return mplew.getPacket(); + } + + private static void writeIntMask(final MaplePacketLittleEndianWriter mplew, Map stats) { + int firstmask = 0; + int secondmask = 0; + for (MonsterStatus stat : stats.keySet()) { + if (stat.isFirst()) { + firstmask |= stat.getValue(); + } else { + secondmask |= stat.getValue(); + } + } + mplew.writeInt(firstmask); + mplew.writeInt(secondmask); + } + + public static byte[] applyMonsterStatus(final int oid, final MonsterStatusEffect mse, final List reflection) { + Map stati = mse.getStati(); + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.APPLY_MONSTER_STATUS.getValue()); + mplew.writeInt(oid); + mplew.writeLong(0); + writeIntMask(mplew, stati); + for (Map.Entry stat : stati.entrySet()) { + mplew.writeShort(stat.getValue()); + if (mse.isMonsterSkill()) { + mplew.writeShort(mse.getMobSkill().getSkillId()); + mplew.writeShort(mse.getMobSkill().getSkillLevel()); + } else { + mplew.writeInt(mse.getSkill().getId()); + } + mplew.writeShort(-1); // might actually be the buffTime but it's not displayed anywhere + } + int size = stati.size(); // size + if (reflection != null) { + for (Integer ref : reflection) { + mplew.writeInt(ref); + } + if (reflection.size() > 0) { + size /= 2; // This gives 2 buffs per reflection but it's really one buff + } + } + mplew.write(size); // size + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] cancelMonsterStatus(int oid, Map stats) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CANCEL_MONSTER_STATUS.getValue()); + mplew.writeInt(oid); + mplew.writeLong(0); + writeIntMask(mplew, stats); + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] getClock(int time) { // time in seconds + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CLOCK.getValue()); + mplew.write(2); // clock type. if you send 3 here you have to send another byte (which does not matter at all) before the timestamp + mplew.writeInt(time); + return mplew.getPacket(); + } + + public static byte[] getClockTime(int hour, int min, int sec) { // Current Time + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CLOCK.getValue()); + mplew.write(1); //Clock-Type + mplew.write(hour); + mplew.write(min); + mplew.write(sec); + return mplew.getPacket(); + } + + public static byte[] removeClock() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.STOP_CLOCK.getValue()); + mplew.write(0); + return mplew.getPacket(); + } + + public static byte[] spawnMist(int oid, int ownerCid, int skill, int level, MapleMist mist) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SPAWN_MIST.getValue()); + mplew.writeInt(oid); + mplew.writeInt(mist.isMobMist() ? 0 : mist.isPoisonMist() ? 1 : mist.isRecoveryMist() ? 4 : 2); // mob mist = 0, player poison = 1, smokescreen = 2, unknown = 3, recovery = 4 + mplew.writeInt(ownerCid); + mplew.writeInt(skill); + mplew.write(level); + mplew.writeShort(mist.getSkillDelay()); // Skill delay + mplew.writeInt(mist.getBox().x); + mplew.writeInt(mist.getBox().y); + mplew.writeInt(mist.getBox().x + mist.getBox().width); + mplew.writeInt(mist.getBox().y + mist.getBox().height); + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] removeMist(int oid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.REMOVE_MIST.getValue()); + mplew.writeInt(oid); + return mplew.getPacket(); + } + + public static byte[] damageSummon(int cid, int oid, int damage, int monsterIdFrom) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.DAMAGE_SUMMON.getValue()); + mplew.writeInt(cid); + mplew.writeInt(oid); + mplew.write(12); + mplew.writeInt(damage); // damage display doesn't seem to work... + mplew.writeInt(monsterIdFrom); + mplew.write(0); + return mplew.getPacket(); + } + + public static byte[] damageMonster(int oid, int damage) { + return damageMonster(oid, damage, 0, 0); + } + + public static byte[] healMonster(int oid, int heal, int curhp, int maxhp) { + return damageMonster(oid, -heal, curhp, maxhp); + } + + private static byte[] damageMonster(int oid, int damage, int curhp, int maxhp) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.DAMAGE_MONSTER.getValue()); + mplew.writeInt(oid); + mplew.write(0); + mplew.writeInt(damage); + mplew.writeInt(curhp); + mplew.writeInt(maxhp); + return mplew.getPacket(); + } + + public static byte[] updateBuddylist(Collection buddylist) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); + mplew.write(7); + mplew.write(buddylist.size()); + for (BuddylistEntry buddy : buddylist) { + if (buddy.isVisible()) { + mplew.writeInt(buddy.getCharacterId()); // cid + mplew.writeAsciiString(getRightPaddedStr(buddy.getName(), '\0', 13)); + mplew.write(0); // opposite status + mplew.writeInt(buddy.getChannel() - 1); + mplew.writeAsciiString(getRightPaddedStr(buddy.getGroup(), '\0', 13)); + mplew.writeInt(0);//mapid? + } + } + for (int x = 0; x < buddylist.size(); x++) { + mplew.writeInt(0);//mapid? + } + return mplew.getPacket(); + } + + public static byte[] buddylistMessage(byte message) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); + mplew.write(message); + return mplew.getPacket(); + } + + public static byte[] requestBuddylistAdd(int cidFrom, int cid, String nameFrom) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); + mplew.write(9); + mplew.writeInt(cidFrom); + mplew.writeMapleAsciiString(nameFrom); + mplew.writeInt(cidFrom); + mplew.writeAsciiString(getRightPaddedStr(nameFrom, '\0', 11)); + mplew.write(0x09); + mplew.write(0xf0); + mplew.write(0x01); + mplew.writeInt(0x0f); + mplew.writeNullTerminatedAsciiString("Default Group"); + mplew.writeInt(cid); + return mplew.getPacket(); + } + + public static byte[] updateBuddyChannel(int characterid, int channel) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); + mplew.write(0x14); + mplew.writeInt(characterid); + mplew.write(0); + mplew.writeInt(channel); + return mplew.getPacket(); + } + + public static byte[] itemEffect(int characterid, int itemid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_ITEM_EFFECT.getValue()); + mplew.writeInt(characterid); + mplew.writeInt(itemid); + return mplew.getPacket(); + } + + public static byte[] updateBuddyCapacity(int capacity) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); + mplew.write(0x15); + mplew.write(capacity); + return mplew.getPacket(); + } + + public static byte[] showChair(int characterid, int itemid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_CHAIR.getValue()); + mplew.writeInt(characterid); + mplew.writeInt(itemid); + return mplew.getPacket(); + } + + public static byte[] cancelChair(int id) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CANCEL_CHAIR.getValue()); + if (id < 0) { + mplew.write(0); + } else { + mplew.write(1); + mplew.writeShort(id); + } + return mplew.getPacket(); + } + + // is there a way to spawn reactors non-animated? + public static byte[] spawnReactor(MapleReactor reactor) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + Point pos = reactor.getPosition(); + mplew.writeShort(SendOpcode.REACTOR_SPAWN.getValue()); + mplew.writeInt(reactor.getObjectId()); + mplew.writeInt(reactor.getId()); + mplew.write(reactor.getState()); + mplew.writePos(pos); + mplew.write(0); + mplew.writeShort(0); + return mplew.getPacket(); + } + + // is there a way to trigger reactors without performing the hit animation? + public static byte[] triggerReactor(MapleReactor reactor, int stance) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + Point pos = reactor.getPosition(); + mplew.writeShort(SendOpcode.REACTOR_HIT.getValue()); + mplew.writeInt(reactor.getObjectId()); + mplew.write(reactor.getState()); + mplew.writePos(pos); + mplew.write(stance); + mplew.writeShort(0); + mplew.write(5); // frame delay, set to 5 since there doesn't appear to be a fixed formula for it + return mplew.getPacket(); + } + + public static byte[] destroyReactor(MapleReactor reactor) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + Point pos = reactor.getPosition(); + mplew.writeShort(SendOpcode.REACTOR_DESTROY.getValue()); + mplew.writeInt(reactor.getObjectId()); + mplew.write(reactor.getState()); + mplew.writePos(pos); + return mplew.getPacket(); + } + + public static byte[] musicChange(String song) { + return environmentChange(song, 6); + } + + public static byte[] showEffect(String effect) { + return environmentChange(effect, 3); + } + + public static byte[] playSound(String sound) { + return environmentChange(sound, 4); + } + + public static byte[] environmentChange(String env, int mode) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); + mplew.write(mode); + mplew.writeMapleAsciiString(env); + return mplew.getPacket(); + } + + public static byte[] environmentMove(String env, int mode) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + + mplew.writeShort(SendOpcode.FIELD_OBSTACLE_ONOFF.getValue()); + mplew.writeMapleAsciiString(env); + mplew.writeInt(mode); // 0: stop and back to start, 1: move + + return mplew.getPacket(); + } + + public static byte[] environmentMoveList(Set> envList) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FIELD_OBSTACLE_ONOFF_LIST.getValue()); + mplew.writeInt(envList.size()); + + for (Entry envMove : envList) { + mplew.writeMapleAsciiString(envMove.getKey()); + mplew.writeInt(envMove.getValue()); + } + + return mplew.getPacket(); + } + + public static byte[] environmentMoveReset() { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FIELD_OBSTACLE_ALL_RESET.getValue()); + return mplew.getPacket(); + } + + public static byte[] startMapEffect(String msg, int itemid, boolean active) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.BLOW_WEATHER.getValue()); + mplew.write(active ? 0 : 1); + mplew.writeInt(itemid); + if (active) { + mplew.writeMapleAsciiString(msg); + } + return mplew.getPacket(); + } + + public static byte[] removeMapEffect() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.BLOW_WEATHER.getValue()); + mplew.write(0); + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] mapEffect(String path) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); + mplew.write(3); + mplew.writeMapleAsciiString(path); + return mplew.getPacket(); + } + + public static byte[] mapSound(String path) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); + mplew.write(4); + mplew.writeMapleAsciiString(path); + return mplew.getPacket(); + } + + public static byte[] showGuildInfo(MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x1A); //signature for showing guild info + if (chr == null) { //show empty guild (used for leaving, expelled) + mplew.write(0); + return mplew.getPacket(); + } + MapleGuild g = chr.getClient().getWorldServer().getGuild(chr.getMGC()); + if (g == null) { //failed to read from DB - don't show a guild + mplew.write(0); + return mplew.getPacket(); + } + mplew.write(1); //bInGuild + mplew.writeInt(g.getId()); + mplew.writeMapleAsciiString(g.getName()); + for (int i = 1; i <= 5; i++) { + mplew.writeMapleAsciiString(g.getRankTitle(i)); + } + Collection members = g.getMembers(); + mplew.write(members.size()); //then it is the size of all the members + for (MapleGuildCharacter mgc : members) {//and each of their character ids o_O + mplew.writeInt(mgc.getId()); + } + for (MapleGuildCharacter mgc : members) { + mplew.writeAsciiString(getRightPaddedStr(mgc.getName(), '\0', 13)); + mplew.writeInt(mgc.getJobId()); + mplew.writeInt(mgc.getLevel()); + mplew.writeInt(mgc.getGuildRank()); + mplew.writeInt(mgc.isOnline() ? 1 : 0); + mplew.writeInt(g.getSignature()); + mplew.writeInt(mgc.getAllianceRank()); + } + mplew.writeInt(g.getCapacity()); + mplew.writeShort(g.getLogoBG()); + mplew.write(g.getLogoBGColor()); + mplew.writeShort(g.getLogo()); + mplew.write(g.getLogoColor()); + mplew.writeMapleAsciiString(g.getNotice()); + mplew.writeInt(g.getGP()); + mplew.writeInt(g.getAllianceId()); + return mplew.getPacket(); + } + + public static byte[] guildMemberOnline(int gid, int cid, boolean bOnline) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x3d); + mplew.writeInt(gid); + mplew.writeInt(cid); + mplew.write(bOnline ? 1 : 0); + return mplew.getPacket(); + } + + public static byte[] guildInvite(int gid, String charName) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x05); + mplew.writeInt(gid); + mplew.writeMapleAsciiString(charName); + return mplew.getPacket(); + } + + public static byte[] createGuildMessage(String masterName, String guildName) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x3); + mplew.writeInt(0); + mplew.writeMapleAsciiString(masterName); + mplew.writeMapleAsciiString(guildName); + return mplew.getPacket(); + } + + /** + * Gets a Heracle/guild message packet. + *

+ * Possible values for code:
28: guild name already in use
+ * 31: problem in locating players during agreement
33/40: already joined a guild
+ * 35: Cannot make guild
36: problem in player agreement
38: problem during forming guild
+ * 41: max number of players in joining guild
42: character can't be found this channel
+ * 45/48: character not in guild
52: problem in disbanding guild
56: admin cannot make guild
+ * 57: problem in increasing guild size
+ * + * @param code The response code. + * @return The guild message packet. + */ + public static byte[] genericGuildMessage(byte code) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(code); + return mplew.getPacket(); + } + + /** + * Gets a guild message packet appended with target name. + *

+ * 53: player not accepting guild invites
+ * 54: player already managing an invite
55: player denied an invite
+ * + * @param code The response code. + * @param targetName The initial player target of the invitation. + * @return The guild message packet. + */ + public static byte[] responseGuildMessage(byte code, String targetName) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(code); + mplew.writeMapleAsciiString(targetName); + return mplew.getPacket(); + } + + public static byte[] newGuildMember(MapleGuildCharacter mgc) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x27); + mplew.writeInt(mgc.getGuildId()); + mplew.writeInt(mgc.getId()); + mplew.writeAsciiString(getRightPaddedStr(mgc.getName(), '\0', 13)); + mplew.writeInt(mgc.getJobId()); + mplew.writeInt(mgc.getLevel()); + mplew.writeInt(mgc.getGuildRank()); //should be always 5 but whatevs + mplew.writeInt(mgc.isOnline() ? 1 : 0); //should always be 1 too + mplew.writeInt(1); //? could be guild signature, but doesn't seem to matter + mplew.writeInt(3); + return mplew.getPacket(); + } + + //someone leaving, mode == 0x2c for leaving, 0x2f for expelled + public static byte[] memberLeft(MapleGuildCharacter mgc, boolean bExpelled) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(bExpelled ? 0x2f : 0x2c); + mplew.writeInt(mgc.getGuildId()); + mplew.writeInt(mgc.getId()); + mplew.writeMapleAsciiString(mgc.getName()); + return mplew.getPacket(); + } + + //rank change + public static byte[] changeRank(MapleGuildCharacter mgc) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x40); + mplew.writeInt(mgc.getGuildId()); + mplew.writeInt(mgc.getId()); + mplew.write(mgc.getGuildRank()); + return mplew.getPacket(); + } + + public static byte[] guildNotice(int gid, String notice) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x44); + mplew.writeInt(gid); + mplew.writeMapleAsciiString(notice); + return mplew.getPacket(); + } + + public static byte[] guildMemberLevelJobUpdate(MapleGuildCharacter mgc) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x3C); + mplew.writeInt(mgc.getGuildId()); + mplew.writeInt(mgc.getId()); + mplew.writeInt(mgc.getLevel()); + mplew.writeInt(mgc.getJobId()); + return mplew.getPacket(); + } + + public static byte[] rankTitleChange(int gid, String[] ranks) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x3E); + mplew.writeInt(gid); + for (int i = 0; i < 5; i++) { + mplew.writeMapleAsciiString(ranks[i]); + } + return mplew.getPacket(); + } + + public static byte[] guildDisband(int gid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x32); + mplew.writeInt(gid); + mplew.write(1); + return mplew.getPacket(); + } + + public static byte[] guildQuestWaitingNotice(byte channel, int waitingPos) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x4C); + mplew.write(channel - 1); + mplew.write(waitingPos); + return mplew.getPacket(); + } + + public static byte[] guildEmblemChange(int gid, short bg, byte bgcolor, short logo, byte logocolor) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x42); + mplew.writeInt(gid); + mplew.writeShort(bg); + mplew.write(bgcolor); + mplew.writeShort(logo); + mplew.write(logocolor); + return mplew.getPacket(); + } + + public static byte[] guildCapacityChange(int gid, int capacity) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x3A); + mplew.writeInt(gid); + mplew.write(capacity); + return mplew.getPacket(); + } + + public static void addThread(final MaplePacketLittleEndianWriter mplew, ResultSet rs) throws SQLException { + mplew.writeInt(rs.getInt("localthreadid")); + mplew.writeInt(rs.getInt("postercid")); + mplew.writeMapleAsciiString(rs.getString("name")); + mplew.writeLong(getTime(rs.getLong("timestamp"))); + mplew.writeInt(rs.getInt("icon")); + mplew.writeInt(rs.getInt("replycount")); + } + + public static byte[] BBSThreadList(ResultSet rs, int start) throws SQLException { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_BBS_PACKET.getValue()); + mplew.write(0x06); + if (!rs.last()) { + mplew.write(0); + mplew.writeInt(0); + mplew.writeInt(0); + return mplew.getPacket(); + } + int threadCount = rs.getRow(); + if (rs.getInt("localthreadid") == 0) { //has a notice + mplew.write(1); + addThread(mplew, rs); + threadCount--; //one thread didn't count (because it's a notice) + } else { + mplew.write(0); + } + if (!rs.absolute(start + 1)) { //seek to the thread before where we start + rs.first(); //uh, we're trying to start at a place past possible + start = 0; + } + mplew.writeInt(threadCount); + mplew.writeInt(Math.min(10, threadCount - start)); + for (int i = 0; i < Math.min(10, threadCount - start); i++) { + addThread(mplew, rs); + rs.next(); + } + return mplew.getPacket(); + } + + public static byte[] showThread(int localthreadid, ResultSet threadRS, ResultSet repliesRS) throws SQLException, RuntimeException { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_BBS_PACKET.getValue()); + mplew.write(0x07); + mplew.writeInt(localthreadid); + mplew.writeInt(threadRS.getInt("postercid")); + mplew.writeLong(getTime(threadRS.getLong("timestamp"))); + mplew.writeMapleAsciiString(threadRS.getString("name")); + mplew.writeMapleAsciiString(threadRS.getString("startpost")); + mplew.writeInt(threadRS.getInt("icon")); + if (repliesRS != null) { + int replyCount = threadRS.getInt("replycount"); + mplew.writeInt(replyCount); + int i; + for (i = 0; i < replyCount && repliesRS.next(); i++) { + mplew.writeInt(repliesRS.getInt("replyid")); + mplew.writeInt(repliesRS.getInt("postercid")); + mplew.writeLong(getTime(repliesRS.getLong("timestamp"))); + mplew.writeMapleAsciiString(repliesRS.getString("content")); + } + if (i != replyCount || repliesRS.next()) { + throw new RuntimeException(String.valueOf(threadRS.getInt("threadid"))); + } + } else { + mplew.writeInt(0); + } + return mplew.getPacket(); + } + + public static byte[] showGuildRanks(int npcid, ResultSet rs) throws SQLException { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x49); + mplew.writeInt(npcid); + if (!rs.last()) { //no guilds o.o + mplew.writeInt(0); + return mplew.getPacket(); + } + mplew.writeInt(rs.getRow()); //number of entries + rs.beforeFirst(); + while (rs.next()) { + mplew.writeMapleAsciiString(rs.getString("name")); + mplew.writeInt(rs.getInt("GP")); + mplew.writeInt(rs.getInt("logo")); + mplew.writeInt(rs.getInt("logoColor")); + mplew.writeInt(rs.getInt("logoBG")); + mplew.writeInt(rs.getInt("logoBGColor")); + } + return mplew.getPacket(); + } + + public static byte[] showPlayerRanks(int npcid, List> worldRanking) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x49); + mplew.writeInt(npcid); + if (worldRanking.isEmpty()) { + mplew.writeInt(0); + return mplew.getPacket(); + } + mplew.writeInt(worldRanking.size()); + for (Pair wr : worldRanking) { + mplew.writeMapleAsciiString(wr.getLeft()); + mplew.writeInt(wr.getRight()); + mplew.writeInt(0); + mplew.writeInt(0); + mplew.writeInt(0); + mplew.writeInt(0); + } + return mplew.getPacket(); + } + + public static byte[] updateGP(int gid, int GP) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); + mplew.write(0x48); + mplew.writeInt(gid); + mplew.writeInt(GP); + return mplew.getPacket(); + } + + public static byte[] skillEffect(MapleCharacter from, int skillId, int level, byte flags, int speed, byte direction) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SKILL_EFFECT.getValue()); + mplew.writeInt(from.getId()); + mplew.writeInt(skillId); + mplew.write(level); + mplew.write(flags); + mplew.write(speed); + mplew.write(direction); //Mmmk + return mplew.getPacket(); + } + + public static byte[] skillCancel(MapleCharacter from, int skillId) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CANCEL_SKILL_EFFECT.getValue()); + mplew.writeInt(from.getId()); + mplew.writeInt(skillId); + return mplew.getPacket(); + } + + public static byte[] catchMonster(int mobOid, byte success) { // updated packet structure found thanks to Rien dev team + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CATCH_MONSTER.getValue()); + mplew.writeInt(mobOid); + mplew.write(success); + return mplew.getPacket(); + } + + public static byte[] catchMonster(int mobOid, int itemid, byte success) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CATCH_MONSTER_WITH_ITEM.getValue()); + mplew.writeInt(mobOid); + mplew.writeInt(itemid); + mplew.write(success); + return mplew.getPacket(); + } + + /** + * Sends a player hint. + * + * @param hint The hint it's going to send. + * @param width How tall the box is going to be. + * @param height How long the box is going to be. + * @return The player hint packet. + */ + public static byte[] sendHint(String hint, int width, int height) { + if (width < 1) { + width = hint.length() * 10; + if (width < 40) { + width = 40; + } + } + if (height < 5) { + height = 5; + } + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_HINT.getValue()); + mplew.writeMapleAsciiString(hint); + mplew.writeShort(width); + mplew.writeShort(height); + mplew.write(1); + return mplew.getPacket(); + } + + public static byte[] messengerInvite(String from, int messengerid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MESSENGER.getValue()); + mplew.write(0x03); + mplew.writeMapleAsciiString(from); + mplew.write(0); + mplew.writeInt(messengerid); + mplew.write(0); + return mplew.getPacket(); + } /* public static byte[] sendSpouseChat(MapleCharacter partner, String msg) { @@ -4889,1234 +4887,1234 @@ public class PacketCreator { return mplew.getPacket(); } */ - - public static byte[] OnCoupleMessage(String fiance, String text, boolean spouse) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPOUSE_CHAT.getValue()); - mplew.write(spouse ? 5 : 4); // v2 = CInPacket::Decode1(a1) - 4; - if (spouse) { // if ( v2 ) { - mplew.writeMapleAsciiString(fiance); + + public static byte[] OnCoupleMessage(String fiance, String text, boolean spouse) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SPOUSE_CHAT.getValue()); + mplew.write(spouse ? 5 : 4); // v2 = CInPacket::Decode1(a1) - 4; + if (spouse) { // if ( v2 ) { + mplew.writeMapleAsciiString(fiance); + } + mplew.write(spouse ? 5 : 1); + mplew.writeMapleAsciiString(text); + return mplew.getPacket(); + } + + public static byte[] addMessengerPlayer(String from, MapleCharacter chr, int position, int channel) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MESSENGER.getValue()); + mplew.write(0x00); + mplew.write(position); + addCharLook(mplew, chr, true); + mplew.writeMapleAsciiString(from); + mplew.write(channel); + mplew.write(0x00); + return mplew.getPacket(); + } + + public static byte[] removeMessengerPlayer(int position) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MESSENGER.getValue()); + mplew.write(0x02); + mplew.write(position); + return mplew.getPacket(); + } + + public static byte[] updateMessengerPlayer(String from, MapleCharacter chr, int position, int channel) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MESSENGER.getValue()); + mplew.write(0x07); + mplew.write(position); + addCharLook(mplew, chr, true); + mplew.writeMapleAsciiString(from); + mplew.write(channel); + mplew.write(0x00); + return mplew.getPacket(); + } + + public static byte[] joinMessenger(int position) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MESSENGER.getValue()); + mplew.write(0x01); + mplew.write(position); + return mplew.getPacket(); + } + + public static byte[] messengerChat(String text) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MESSENGER.getValue()); + mplew.write(0x06); + mplew.writeMapleAsciiString(text); + return mplew.getPacket(); + } + + public static byte[] messengerNote(String text, int mode, int mode2) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MESSENGER.getValue()); + mplew.write(mode); + mplew.writeMapleAsciiString(text); + mplew.write(mode2); + return mplew.getPacket(); + } + + private static void addPetInfo(final MaplePacketLittleEndianWriter mplew, MaplePet pet, boolean showpet) { + mplew.write(1); + if (showpet) { + mplew.write(0); + } + + mplew.writeInt(pet.getItemId()); + mplew.writeMapleAsciiString(pet.getName()); + mplew.writeLong(pet.getUniqueId()); + mplew.writePos(pet.getPos()); + mplew.write(pet.getStance()); + mplew.writeInt(pet.getFh()); + } + + public static byte[] showPet(MapleCharacter chr, MaplePet pet, boolean remove, boolean hunger) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SPAWN_PET.getValue()); + mplew.writeInt(chr.getId()); + mplew.write(chr.getPetIndex(pet)); + if (remove) { + mplew.write(0); + mplew.write(hunger ? 1 : 0); + } else { + addPetInfo(mplew, pet, true); + } + return mplew.getPacket(); + } + + public static byte[] movePet(int cid, int pid, byte slot, List moves) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MOVE_PET.getValue()); + mplew.writeInt(cid); + mplew.write(slot); + mplew.writeInt(pid); + serializeMovementList(mplew, moves); + return mplew.getPacket(); + } + + public static byte[] petChat(int cid, byte index, int act, String text) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PET_CHAT.getValue()); + mplew.writeInt(cid); + mplew.write(index); + mplew.write(0); + mplew.write(act); + mplew.writeMapleAsciiString(text); + mplew.write(0); + return mplew.getPacket(); + } + + public static byte[] petFoodResponse(int cid, byte index, boolean success, boolean balloonType) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PET_COMMAND.getValue()); + mplew.writeInt(cid); + mplew.write(index); + mplew.write(1); + mplew.writeBool(success); + mplew.writeBool(balloonType); + return mplew.getPacket(); + } + + public static byte[] commandResponse(int cid, byte index, boolean talk, int animation, boolean balloonType) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PET_COMMAND.getValue()); + mplew.writeInt(cid); + mplew.write(index); + mplew.write(0); + mplew.write(animation); + mplew.writeBool(!talk); + mplew.writeBool(balloonType); + return mplew.getPacket(); + } + + public static byte[] showOwnPetLevelUp(byte index) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); + mplew.write(4); + mplew.write(0); + mplew.write(index); // Pet Index + return mplew.getPacket(); + } + + public static byte[] showPetLevelUp(MapleCharacter chr, byte index) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); + mplew.writeInt(chr.getId()); + mplew.write(4); + mplew.write(0); + mplew.write(index); + return mplew.getPacket(); + } + + public static byte[] changePetName(MapleCharacter chr, String newname, int slot) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PET_NAMECHANGE.getValue()); + mplew.writeInt(chr.getId()); + mplew.write(0); + mplew.writeMapleAsciiString(newname); + mplew.write(0); + return mplew.getPacket(); + } + + public static final byte[] loadExceptionList(final int cid, final int petId, final byte petIdx, final List data) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PET_EXCEPTION_LIST.getValue()); + mplew.writeInt(cid); + mplew.write(petIdx); + mplew.writeLong(petId); + mplew.write(data.size()); + for (final Integer ids : data) { + mplew.writeInt(ids); + } + return mplew.getPacket(); + } + + public static byte[] petStatUpdate(MapleCharacter chr) { + // this actually does nothing... packet structure and stats needs to be uncovered + + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.STAT_CHANGED.getValue()); + int mask = 0; + mask |= MapleStat.PET.getValue(); + mplew.write(0); + mplew.writeInt(mask); + MaplePet[] pets = chr.getPets(); + for (int i = 0; i < 3; i++) { + if (pets[i] != null) { + mplew.writeLong(pets[i].getUniqueId()); + } else { + mplew.writeLong(0); } - mplew.write(spouse ? 5 : 1); - mplew.writeMapleAsciiString(text); - return mplew.getPacket(); - } + } + mplew.write(0); + return mplew.getPacket(); + } - public static byte[] addMessengerPlayer(String from, MapleCharacter chr, int position, int channel) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(0x00); - mplew.write(position); - addCharLook(mplew, chr, true); - mplew.writeMapleAsciiString(from); - mplew.write(channel); - mplew.write(0x00); - return mplew.getPacket(); + public static byte[] showForcedEquip(int team) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FORCED_MAP_EQUIP.getValue()); + if (team > -1) { + mplew.write(team); // 00 = red, 01 = blue + } + return mplew.getPacket(); + } + + public static byte[] summonSkill(int cid, int summonSkillId, int newStance) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SUMMON_SKILL.getValue()); + mplew.writeInt(cid); + mplew.writeInt(summonSkillId); + mplew.write(newStance); + return mplew.getPacket(); + } + + public static byte[] skillCooldown(int sid, int time) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.COOLDOWN.getValue()); + mplew.writeInt(sid); + mplew.writeShort(time);//Int in v97 + return mplew.getPacket(); + } + + public static byte[] skillBookResult(MapleCharacter chr, int skillid, int maxlevel, boolean canuse, boolean success) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SKILL_LEARN_ITEM_RESULT.getValue()); + mplew.writeInt(chr.getId()); + mplew.write(1); + mplew.writeInt(skillid); + mplew.writeInt(maxlevel); + mplew.write(canuse ? 1 : 0); + mplew.write(success ? 1 : 0); + return mplew.getPacket(); + } + + public static byte[] getMacros(SkillMacro[] macros) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MACRO_SYS_DATA_INIT.getValue()); + int count = 0; + for (int i = 0; i < 5; i++) { + if (macros[i] != null) { + count++; + } + } + mplew.write(count); + for (int i = 0; i < 5; i++) { + SkillMacro macro = macros[i]; + if (macro != null) { + mplew.writeMapleAsciiString(macro.getName()); + mplew.write(macro.getShout()); + mplew.writeInt(macro.getSkill1()); + mplew.writeInt(macro.getSkill2()); + mplew.writeInt(macro.getSkill3()); + } + } + return mplew.getPacket(); + } + + public static byte[] showAllCharacterInfo(int worldid, List chars, boolean usePic) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.VIEW_ALL_CHAR.getValue()); + mplew.write(0); + mplew.write(worldid); + mplew.write(chars.size()); + for (MapleCharacter chr : chars) { + addCharEntry(mplew, chr, true); + } + mplew.write(usePic ? 1 : 2); + return mplew.getPacket(); + } + + public static byte[] updateMount(int charid, MapleMount mount, boolean levelup) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SET_TAMING_MOB_INFO.getValue()); + mplew.writeInt(charid); + mplew.writeInt(mount.getLevel()); + mplew.writeInt(mount.getExp()); + mplew.writeInt(mount.getTiredness()); + mplew.write(levelup ? (byte) 1 : (byte) 0); + return mplew.getPacket(); + } + + public static byte[] crogBoatPacket(boolean type) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CONTI_MOVE.getValue()); + mplew.write(10); + mplew.write(type ? 4 : 5); + return mplew.getPacket(); + } + + public static byte[] boatPacket(boolean type) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CONTI_STATE.getValue()); + mplew.write(type ? 1 : 2); + mplew.write(0); + return mplew.getPacket(); + } + + public static byte[] getMiniGame(MapleClient c, MapleMiniGame minigame, boolean owner, int piece) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); + mplew.write(1); + mplew.write(0); + mplew.write(owner ? 0 : 1); + mplew.write(0); + addCharLook(mplew, minigame.getOwner(), false); + mplew.writeMapleAsciiString(minigame.getOwner().getName()); + if (minigame.getVisitor() != null) { + MapleCharacter visitor = minigame.getVisitor(); + mplew.write(1); + addCharLook(mplew, visitor, false); + mplew.writeMapleAsciiString(visitor.getName()); + } + mplew.write(0xFF); + mplew.write(0); + mplew.writeInt(1); + mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.WIN, true)); + mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.TIE, true)); + mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.LOSS, true)); + mplew.writeInt(minigame.getOwnerScore()); + if (minigame.getVisitor() != null) { + MapleCharacter visitor = minigame.getVisitor(); + mplew.write(1); + mplew.writeInt(1); + mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.WIN, true)); + mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.TIE, true)); + mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.LOSS, true)); + mplew.writeInt(minigame.getVisitorScore()); + } + mplew.write(0xFF); + mplew.writeMapleAsciiString(minigame.getDescription()); + mplew.write(piece); + mplew.write(0); + return mplew.getPacket(); + } + + public static byte[] getMiniGameReady(MapleMiniGame game) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.READY.getCode()); + return mplew.getPacket(); + } + + public static byte[] getMiniGameUnReady(MapleMiniGame game) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.UN_READY.getCode()); + return mplew.getPacket(); + } + + public static byte[] getMiniGameStart(MapleMiniGame game, int loser) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.START.getCode()); + mplew.write(loser); + return mplew.getPacket(); + } + + public static byte[] getMiniGameSkipOwner(MapleMiniGame game) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.SKIP.getCode()); + mplew.write(0x01); + return mplew.getPacket(); + } + + public static byte[] getMiniGameRequestTie(MapleMiniGame game) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.REQUEST_TIE.getCode()); + return mplew.getPacket(); + } + + public static byte[] getMiniGameDenyTie(MapleMiniGame game) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.ANSWER_TIE.getCode()); + return mplew.getPacket(); + } + + /** + * 1 = Room already closed 2 = Can't enter due full cappacity 3 = Other requests at this minute + * 4 = Can't do while dead 5 = Can't do while middle event 6 = This character unable to do it + * 7, 20 = Not allowed to trade anymore 9 = Can only trade on same map 10 = May not open store near portal + * 11, 14 = Can't start game here 12 = Can't open store at this channel 13 = Can't estabilish miniroom + * 15 = Stores only an the free market 16 = Lists the rooms at FM (?) 17 = You may not enter this store + * 18 = Owner undergoing store maintenance 19 = Unable to enter tournament room 21 = Not enough mesos to enter + * 22 = Incorrect password + * + * @param status + * @return + */ + public static byte[] getMiniRoomError(int status) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); + mplew.write(0); + mplew.write(status); + return mplew.getPacket(); + } + + public static byte[] getMiniGameSkipVisitor(MapleMiniGame game) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.writeShort(PlayerInteractionHandler.Action.SKIP.getCode()); + return mplew.getPacket(); + } + + public static byte[] getMiniGameMoveOmok(MapleMiniGame game, int move1, int move2, int move3) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(12); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.MOVE_OMOK.getCode()); + mplew.writeInt(move1); + mplew.writeInt(move2); + mplew.write(move3); + return mplew.getPacket(); + } + + public static byte[] getMiniGameNewVisitor(MapleMiniGame minigame, MapleCharacter chr, int slot) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); + mplew.write(slot); + addCharLook(mplew, chr, false); + mplew.writeMapleAsciiString(chr.getName()); + mplew.writeInt(1); + mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.WIN, true)); + mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.TIE, true)); + mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.LOSS, true)); + mplew.writeInt(minigame.getVisitorScore()); + return mplew.getPacket(); + } + + public static byte[] getMiniGameRemoveVisitor() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); + mplew.write(1); + return mplew.getPacket(); + } + + private static byte[] getMiniGameResult(MapleMiniGame game, int tie, int result, int forfeit) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.GET_RESULT.getCode()); + + int matchResultType; + if (tie == 0 && forfeit != 1) { + matchResultType = 0; + } else if (tie != 0) { + matchResultType = 1; + } else { + matchResultType = 2; } - public static byte[] removeMessengerPlayer(int position) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(0x02); - mplew.write(position); - return mplew.getPacket(); + mplew.write(matchResultType); + mplew.writeBool(result == 2); // host/visitor wins + + boolean omok = game.isOmok(); + if (matchResultType == 1) { + mplew.write(0); + mplew.writeShort(0); + mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins + mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties + mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses + mplew.writeInt(game.getOwnerScore()); // points + + mplew.writeInt(0); // unknown + mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins + mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties + mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses + mplew.writeInt(game.getVisitorScore()); // points + mplew.write(0); + } else { + mplew.writeInt(0); + mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins + mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties + mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses + mplew.writeInt(game.getOwnerScore()); // points + mplew.writeInt(0); + mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins + mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties + mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses + mplew.writeInt(game.getVisitorScore()); // points } - public static byte[] updateMessengerPlayer(String from, MapleCharacter chr, int position, int channel) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(0x07); - mplew.write(position); - addCharLook(mplew, chr, true); - mplew.writeMapleAsciiString(from); - mplew.write(channel); - mplew.write(0x00); - return mplew.getPacket(); + return mplew.getPacket(); + } + + public static byte[] getMiniGameOwnerWin(MapleMiniGame game, boolean forfeit) { + return getMiniGameResult(game, 0, 1, forfeit ? 1 : 0); + } + + public static byte[] getMiniGameVisitorWin(MapleMiniGame game, boolean forfeit) { + return getMiniGameResult(game, 0, 2, forfeit ? 1 : 0); + } + + public static byte[] getMiniGameTie(MapleMiniGame game) { + return getMiniGameResult(game, 1, 3, 0); + } + + public static byte[] getMiniGameClose(boolean visitor, int type) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); + mplew.writeBool(visitor); + mplew.write(type); /* 2 : CRASH 3 : The room has been closed 4 : You have left the room 5 : You have been expelled */ + return mplew.getPacket(); + } + + public static byte[] getMatchCard(MapleClient c, MapleMiniGame minigame, boolean owner, int piece) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); + mplew.write(2); + mplew.write(2); + mplew.write(owner ? 0 : 1); + mplew.write(0); + addCharLook(mplew, minigame.getOwner(), false); + mplew.writeMapleAsciiString(minigame.getOwner().getName()); + if (minigame.getVisitor() != null) { + MapleCharacter visitor = minigame.getVisitor(); + mplew.write(1); + addCharLook(mplew, visitor, false); + mplew.writeMapleAsciiString(visitor.getName()); + } + mplew.write(0xFF); + mplew.write(0); + mplew.writeInt(2); + mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.WIN, false)); + mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.TIE, false)); + mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.LOSS, false)); + + //set vs + mplew.writeInt(minigame.getOwnerScore()); + if (minigame.getVisitor() != null) { + MapleCharacter visitor = minigame.getVisitor(); + mplew.write(1); + mplew.writeInt(2); + mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.WIN, false)); + mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.TIE, false)); + mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.LOSS, false)); + mplew.writeInt(minigame.getVisitorScore()); + } + mplew.write(0xFF); + mplew.writeMapleAsciiString(minigame.getDescription()); + mplew.write(piece); + mplew.write(0); + return mplew.getPacket(); + } + + public static byte[] getMatchCardStart(MapleMiniGame game, int loser) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.START.getCode()); + mplew.write(loser); + + int last; + if (game.getMatchesToWin() > 10) { + last = 30; + } else if (game.getMatchesToWin() > 6) { + last = 20; + } else { + last = 12; } - public static byte[] joinMessenger(int position) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(0x01); - mplew.write(position); - return mplew.getPacket(); + mplew.write(last); + for (int i = 0; i < last; i++) { + mplew.writeInt(game.getCardId(i)); } + return mplew.getPacket(); + } - public static byte[] messengerChat(String text) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(0x06); - mplew.writeMapleAsciiString(text); - return mplew.getPacket(); + public static byte[] getMatchCardNewVisitor(MapleMiniGame minigame, MapleCharacter chr, int slot) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); + mplew.write(slot); + addCharLook(mplew, chr, false); + mplew.writeMapleAsciiString(chr.getName()); + mplew.writeInt(1); + mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.WIN, false)); + mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.TIE, false)); + mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.LOSS, false)); + mplew.writeInt(minigame.getVisitorScore()); + return mplew.getPacket(); + } + + public static byte[] getMatchCardSelect(MapleMiniGame game, int turn, int slot, int firstslot, int type) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.SELECT_CARD.getCode()); + mplew.write(turn); + if (turn == 1) { + mplew.write(slot); + } else if (turn == 0) { + mplew.write(slot); + mplew.write(firstslot); + mplew.write(type); } + return mplew.getPacket(); + } - public static byte[] messengerNote(String text, int mode, int mode2) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(mode); - mplew.writeMapleAsciiString(text); - mplew.write(mode2); - return mplew.getPacket(); + // RPS_GAME packets thanks to Arnah (Vertisy) + public static byte[] openRPSNPC() { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.RPS_GAME.getValue()); + mplew.write(8);// open npc + mplew.writeInt(9000019); + return mplew.getPacket(); + } + + public static byte[] rpsMesoError(int mesos) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.RPS_GAME.getValue()); + mplew.write(0x06); + if (mesos != -1) { + mplew.writeInt(mesos); } + return mplew.getPacket(); + } - private static void addPetInfo(final MaplePacketLittleEndianWriter mplew, MaplePet pet, boolean showpet) { - mplew.write(1); - if (showpet) { - mplew.write(0); - } + public static byte[] rpsSelection(byte selection, byte answer) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.RPS_GAME.getValue()); + mplew.write(0x0B);// 11l + mplew.write(selection); + mplew.write(answer); + return mplew.getPacket(); + } - mplew.writeInt(pet.getItemId()); - mplew.writeMapleAsciiString(pet.getName()); - mplew.writeLong(pet.getUniqueId()); - mplew.writePos(pet.getPos()); - mplew.write(pet.getStance()); - mplew.writeInt(pet.getFh()); - } + public static byte[] rpsMode(byte mode) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.RPS_GAME.getValue()); + mplew.write(mode); + return mplew.getPacket(); + } - public static byte[] showPet(MapleCharacter chr, MaplePet pet, boolean remove, boolean hunger) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_PET.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(chr.getPetIndex(pet)); - if (remove) { - mplew.write(0); - mplew.write(hunger ? 1 : 0); - } else { - addPetInfo(mplew, pet, true); - } - return mplew.getPacket(); - } + public static byte[] fredrickMessage(byte operation) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FREDRICK_MESSAGE.getValue()); + mplew.write(operation); + return mplew.getPacket(); + } - public static byte[] movePet(int cid, int pid, byte slot, List moves) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MOVE_PET.getValue()); - mplew.writeInt(cid); - mplew.write(slot); - mplew.writeInt(pid); - serializeMovementList(mplew, moves); - return mplew.getPacket(); - } + public static byte[] getFredrick(byte op) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FREDRICK.getValue()); + mplew.write(op); - public static byte[] petChat(int cid, byte index, int act, String text) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PET_CHAT.getValue()); - mplew.writeInt(cid); - mplew.write(index); + switch (op) { + case 0x24: + mplew.skip(8); + break; + default: mplew.write(0); - mplew.write(act); - mplew.writeMapleAsciiString(text); - mplew.write(0); - return mplew.getPacket(); + break; } - public static byte[] petFoodResponse(int cid, byte index, boolean success, boolean balloonType) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PET_COMMAND.getValue()); - mplew.writeInt(cid); - mplew.write(index); - mplew.write(1); - mplew.writeBool(success); - mplew.writeBool(balloonType); - return mplew.getPacket(); - } - - public static byte[] commandResponse(int cid, byte index, boolean talk, int animation, boolean balloonType) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PET_COMMAND.getValue()); - mplew.writeInt(cid); - mplew.write(index); - mplew.write(0); - mplew.write(animation); - mplew.writeBool(!talk); - mplew.writeBool(balloonType); - return mplew.getPacket(); - } + return mplew.getPacket(); + } - public static byte[] showOwnPetLevelUp(byte index) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(4); - mplew.write(0); - mplew.write(index); // Pet Index - return mplew.getPacket(); - } + public static byte[] getFredrick(MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FREDRICK.getValue()); + mplew.write(0x23); + mplew.writeInt(9030000); // Fredrick + mplew.writeInt(32272); //id + mplew.skip(5); + mplew.writeInt(chr.getMerchantNetMeso()); + mplew.write(0); + try { + List> items = ItemFactory.MERCHANT.loadItems(chr.getId(), false); + mplew.write(items.size()); - public static byte[] showPetLevelUp(MapleCharacter chr, byte index) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(4); - mplew.write(0); - mplew.write(index); - return mplew.getPacket(); + for (Pair item : items) { + addItemInfo(mplew, item.getLeft(), true); + } + } catch (SQLException e) { + e.printStackTrace(); } + mplew.skip(3); + return mplew.getPacket(); + } - public static byte[] changePetName(MapleCharacter chr, String newname, int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PET_NAMECHANGE.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(0); - mplew.writeMapleAsciiString(newname); - mplew.write(0); - return mplew.getPacket(); - } - - public static final byte[] loadExceptionList(final int cid, final int petId, final byte petIdx, final List data) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PET_EXCEPTION_LIST.getValue()); - mplew.writeInt(cid); - mplew.write(petIdx); - mplew.writeLong(petId); - mplew.write(data.size()); - for (final Integer ids : data) { - mplew.writeInt(ids); - } - return mplew.getPacket(); - } + public static byte[] addOmokBox(MapleCharacter chr, int ammount, int type) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); + mplew.writeInt(chr.getId()); + addAnnounceBox(mplew, chr.getMiniGame(), ammount, type); + return mplew.getPacket(); + } - public static byte[] petStatUpdate(MapleCharacter chr) { - // this actually does nothing... packet structure and stats needs to be uncovered - - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STAT_CHANGED.getValue()); - int mask = 0; - mask |= MapleStat.PET.getValue(); - mplew.write(0); - mplew.writeInt(mask); - MaplePet[] pets = chr.getPets(); - for (int i = 0; i < 3; i++) { - if (pets[i] != null) { - mplew.writeLong(pets[i].getUniqueId()); - } else { - mplew.writeLong(0); - } - } - mplew.write(0); - return mplew.getPacket(); - } + public static byte[] addMatchCardBox(MapleCharacter chr, int ammount, int type) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); + mplew.writeInt(chr.getId()); + addAnnounceBox(mplew, chr.getMiniGame(), ammount, type); + return mplew.getPacket(); + } - public static byte[] showForcedEquip(int team) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FORCED_MAP_EQUIP.getValue()); - if (team > -1) { - mplew.write(team); // 00 = red, 01 = blue - } - return mplew.getPacket(); - } + public static byte[] removeMinigameBox(MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); + mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); + mplew.writeInt(chr.getId()); + mplew.write(0); + return mplew.getPacket(); + } - public static byte[] summonSkill(int cid, int summonSkillId, int newStance) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SUMMON_SKILL.getValue()); - mplew.writeInt(cid); - mplew.writeInt(summonSkillId); - mplew.write(newStance); - return mplew.getPacket(); - } + public static byte[] getPlayerShopChat(MapleCharacter chr, String chat, byte slot) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.CHAT.getCode()); + mplew.write(PlayerInteractionHandler.Action.CHAT_THING.getCode()); + mplew.write(slot); + mplew.writeMapleAsciiString(chr.getName() + " : " + chat); + return mplew.getPacket(); + } - public static byte[] skillCooldown(int sid, int time) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.COOLDOWN.getValue()); - mplew.writeInt(sid); - mplew.writeShort(time);//Int in v97 - return mplew.getPacket(); - } + public static byte[] getTradeChat(MapleCharacter chr, String chat, boolean owner) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.CHAT.getCode()); + mplew.write(PlayerInteractionHandler.Action.CHAT_THING.getCode()); + mplew.write(owner ? 0 : 1); + mplew.writeMapleAsciiString(chr.getName() + " : " + chat); + return mplew.getPacket(); + } - public static byte[] skillBookResult(MapleCharacter chr, int skillid, int maxlevel, boolean canuse, boolean success) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SKILL_LEARN_ITEM_RESULT.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(1); - mplew.writeInt(skillid); - mplew.writeInt(maxlevel); - mplew.write(canuse ? 1 : 0); - mplew.write(success ? 1 : 0); - return mplew.getPacket(); - } + public static byte[] hiredMerchantBox() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT.getValue()); // header. + mplew.write(0x07); + return mplew.getPacket(); + } - public static byte[] getMacros(SkillMacro[] macros) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MACRO_SYS_DATA_INIT.getValue()); - int count = 0; - for (int i = 0; i < 5; i++) { - if (macros[i] != null) { - count++; - } - } - mplew.write(count); - for (int i = 0; i < 5; i++) { - SkillMacro macro = macros[i]; - if (macro != null) { - mplew.writeMapleAsciiString(macro.getName()); - mplew.write(macro.getShout()); - mplew.writeInt(macro.getSkill1()); - mplew.writeInt(macro.getSkill2()); - mplew.writeInt(macro.getSkill3()); - } - } - return mplew.getPacket(); - } + // 0: Success + // 1: The room is already closed. + // 2: You can't enter the room due to full capacity. + // 3: Other requests are being fulfilled this minute. + // 4: You can't do it while you're dead. + // 7: You are not allowed to trade other items at this point. + // 17: You may not enter this store. + // 18: The owner of the store is currently undergoing store maintenance. Please try again in a bit. + // 23: This can only be used inside the Free Market. + // default: This character is unable to do it. + public static byte[] getOwlMessage(int msg) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - public static byte[] showAllCharacterInfo(int worldid, List chars, boolean usePic) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.VIEW_ALL_CHAR.getValue()); - mplew.write(0); - mplew.write(worldid); - mplew.write(chars.size()); - for (MapleCharacter chr : chars) { - addCharEntry(mplew, chr, true); - } - mplew.write(usePic ? 1 : 2); - return mplew.getPacket(); - } + mplew.writeShort(SendOpcode.SHOP_LINK_RESULT.getValue()); + mplew.write(msg); // depending on the byte sent, a different message is sent. - public static byte[] updateMount(int charid, MapleMount mount, boolean levelup) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_TAMING_MOB_INFO.getValue()); - mplew.writeInt(charid); - mplew.writeInt(mount.getLevel()); - mplew.writeInt(mount.getExp()); - mplew.writeInt(mount.getTiredness()); - mplew.write(levelup ? (byte) 1 : (byte) 0); - return mplew.getPacket(); - } + return mplew.getPacket(); + } - public static byte[] crogBoatPacket(boolean type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CONTI_MOVE.getValue()); - mplew.write(10); - mplew.write(type ? 4 : 5); - return mplew.getPacket(); - } + public static byte[] owlOfMinerva(MapleClient c, int itemid, List> hmsAvailable) { + byte itemType = ItemConstants.getInventoryType(itemid).getType(); - public static byte[] boatPacket(boolean type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CONTI_STATE.getValue()); - mplew.write(type ? 1 : 2); - mplew.write(0); - return mplew.getPacket(); - } - - public static byte[] getMiniGame(MapleClient c, MapleMiniGame minigame, boolean owner, int piece) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(1); - mplew.write(0); - mplew.write(owner ? 0 : 1); - mplew.write(0); - addCharLook(mplew, minigame.getOwner(), false); - mplew.writeMapleAsciiString(minigame.getOwner().getName()); - if (minigame.getVisitor() != null) { - MapleCharacter visitor = minigame.getVisitor(); - mplew.write(1); - addCharLook(mplew, visitor, false); - mplew.writeMapleAsciiString(visitor.getName()); - } - mplew.write(0xFF); - mplew.write(0); - mplew.writeInt(1); - mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.WIN, true)); - mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.TIE, true)); - mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.LOSS, true)); - mplew.writeInt(minigame.getOwnerScore()); - if (minigame.getVisitor() != null) { - MapleCharacter visitor = minigame.getVisitor(); - mplew.write(1); - mplew.writeInt(1); - mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.WIN, true)); - mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.TIE, true)); - mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.LOSS, true)); - mplew.writeInt(minigame.getVisitorScore()); - } - mplew.write(0xFF); - mplew.writeMapleAsciiString(minigame.getDescription()); - mplew.write(piece); - mplew.write(0); - return mplew.getPacket(); - } + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOP_SCANNER_RESULT.getValue()); // header. + mplew.write(6); + mplew.writeInt(0); + mplew.writeInt(itemid); + mplew.writeInt(hmsAvailable.size()); + for (Pair hme : hmsAvailable) { + MaplePlayerShopItem item = hme.getLeft(); + AbstractMapleMapObject mo = hme.getRight(); - public static byte[] getMiniGameReady(MapleMiniGame game) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.READY.getCode()); - return mplew.getPacket(); - } + if (mo instanceof MaplePlayerShop) { + MaplePlayerShop ps = (MaplePlayerShop) mo; + MapleCharacter owner = ps.getOwner(); - public static byte[] getMiniGameUnReady(MapleMiniGame game) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.UN_READY.getCode()); - return mplew.getPacket(); - } + mplew.writeMapleAsciiString(owner.getName()); + mplew.writeInt(owner.getMapId()); + mplew.writeMapleAsciiString(ps.getDescription()); + mplew.writeInt(item.getBundles()); + mplew.writeInt(item.getItem().getQuantity()); + mplew.writeInt(item.getPrice()); + mplew.writeInt(owner.getId()); + mplew.write(owner.getClient().getChannel() - 1); + } else { + MapleHiredMerchant hm = (MapleHiredMerchant) mo; - public static byte[] getMiniGameStart(MapleMiniGame game, int loser) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.START.getCode()); - mplew.write(loser); - return mplew.getPacket(); - } - - public static byte[] getMiniGameSkipOwner(MapleMiniGame game) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.SKIP.getCode()); - mplew.write(0x01); - return mplew.getPacket(); - } - - public static byte[] getMiniGameRequestTie(MapleMiniGame game) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.REQUEST_TIE.getCode()); - return mplew.getPacket(); - } - - public static byte[] getMiniGameDenyTie(MapleMiniGame game) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ANSWER_TIE.getCode()); - return mplew.getPacket(); - } - - /** - * 1 = Room already closed 2 = Can't enter due full cappacity 3 = Other requests at this minute - * 4 = Can't do while dead 5 = Can't do while middle event 6 = This character unable to do it - * 7, 20 = Not allowed to trade anymore 9 = Can only trade on same map 10 = May not open store near portal - * 11, 14 = Can't start game here 12 = Can't open store at this channel 13 = Can't estabilish miniroom - * 15 = Stores only an the free market 16 = Lists the rooms at FM (?) 17 = You may not enter this store - * 18 = Owner undergoing store maintenance 19 = Unable to enter tournament room 21 = Not enough mesos to enter - * 22 = Incorrect password - * - * @param status - * @return - */ - public static byte[] getMiniRoomError(int status) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(0); - mplew.write(status); - return mplew.getPacket(); - } - - public static byte[] getMiniGameSkipVisitor(MapleMiniGame game) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.writeShort(PlayerInteractionHandler.Action.SKIP.getCode()); - return mplew.getPacket(); - } - - public static byte[] getMiniGameMoveOmok(MapleMiniGame game, int move1, int move2, int move3) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(12); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.MOVE_OMOK.getCode()); - mplew.writeInt(move1); - mplew.writeInt(move2); - mplew.write(move3); - return mplew.getPacket(); - } - - public static byte[] getMiniGameNewVisitor(MapleMiniGame minigame, MapleCharacter chr, int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); - mplew.write(slot); - addCharLook(mplew, chr, false); - mplew.writeMapleAsciiString(chr.getName()); - mplew.writeInt(1); - mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.WIN, true)); - mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.TIE, true)); - mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.LOSS, true)); - mplew.writeInt(minigame.getVisitorScore()); - return mplew.getPacket(); - } - - public static byte[] getMiniGameRemoveVisitor() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); - mplew.write(1); - return mplew.getPacket(); - } - - private static byte[] getMiniGameResult(MapleMiniGame game, int tie, int result, int forfeit) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.GET_RESULT.getCode()); - - int matchResultType; - if (tie == 0 && forfeit != 1) { - matchResultType = 0; - } else if (tie != 0) { - matchResultType = 1; - } else { - matchResultType = 2; - } - - mplew.write(matchResultType); - mplew.writeBool(result == 2); // host/visitor wins - - boolean omok = game.isOmok(); - if (matchResultType == 1) { - mplew.write(0); - mplew.writeShort(0); - mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins - mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties - mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses - mplew.writeInt(game.getOwnerScore()); // points - - mplew.writeInt(0); // unknown - mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins - mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties - mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses - mplew.writeInt(game.getVisitorScore()); // points - mplew.write(0); - } else { - mplew.writeInt(0); - mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins - mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties - mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses - mplew.writeInt(game.getOwnerScore()); // points - mplew.writeInt(0); - mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins - mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties - mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses - mplew.writeInt(game.getVisitorScore()); // points - } - - return mplew.getPacket(); - } - - public static byte[] getMiniGameOwnerWin(MapleMiniGame game, boolean forfeit) { - return getMiniGameResult(game, 0, 1, forfeit ? 1 : 0); - } - - public static byte[] getMiniGameVisitorWin(MapleMiniGame game, boolean forfeit) { - return getMiniGameResult(game, 0, 2, forfeit ? 1 : 0); - } - - public static byte[] getMiniGameTie(MapleMiniGame game) { - return getMiniGameResult(game, 1, 3, 0); - } - - public static byte[] getMiniGameClose(boolean visitor, int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); - mplew.writeBool(visitor); - mplew.write(type); /* 2 : CRASH 3 : The room has been closed 4 : You have left the room 5 : You have been expelled */ - return mplew.getPacket(); - } - - public static byte[] getMatchCard(MapleClient c, MapleMiniGame minigame, boolean owner, int piece) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(2); - mplew.write(2); - mplew.write(owner ? 0 : 1); - mplew.write(0); - addCharLook(mplew, minigame.getOwner(), false); - mplew.writeMapleAsciiString(minigame.getOwner().getName()); - if (minigame.getVisitor() != null) { - MapleCharacter visitor = minigame.getVisitor(); - mplew.write(1); - addCharLook(mplew, visitor, false); - mplew.writeMapleAsciiString(visitor.getName()); - } - mplew.write(0xFF); - mplew.write(0); - mplew.writeInt(2); - mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.WIN, false)); - mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.TIE, false)); - mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.LOSS, false)); - - //set vs - mplew.writeInt(minigame.getOwnerScore()); - if (minigame.getVisitor() != null) { - MapleCharacter visitor = minigame.getVisitor(); - mplew.write(1); - mplew.writeInt(2); - mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.WIN, false)); - mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.TIE, false)); - mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.LOSS, false)); - mplew.writeInt(minigame.getVisitorScore()); - } - mplew.write(0xFF); - mplew.writeMapleAsciiString(minigame.getDescription()); - mplew.write(piece); - mplew.write(0); - return mplew.getPacket(); - } - - public static byte[] getMatchCardStart(MapleMiniGame game, int loser) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.START.getCode()); - mplew.write(loser); - - int last; - if (game.getMatchesToWin() > 10) { - last = 30; - } else if (game.getMatchesToWin() > 6) { - last = 20; - } else { - last = 12; - } - - mplew.write(last); - for (int i = 0; i < last; i++) { - mplew.writeInt(game.getCardId(i)); - } - return mplew.getPacket(); - } - - public static byte[] getMatchCardNewVisitor(MapleMiniGame minigame, MapleCharacter chr, int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); - mplew.write(slot); - addCharLook(mplew, chr, false); - mplew.writeMapleAsciiString(chr.getName()); - mplew.writeInt(1); - mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.WIN, false)); - mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.TIE, false)); - mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.LOSS, false)); - mplew.writeInt(minigame.getVisitorScore()); - return mplew.getPacket(); - } - - public static byte[] getMatchCardSelect(MapleMiniGame game, int turn, int slot, int firstslot, int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.SELECT_CARD.getCode()); - mplew.write(turn); - if (turn == 1) { - mplew.write(slot); - } else if (turn == 0) { - mplew.write(slot); - mplew.write(firstslot); - mplew.write(type); - } - return mplew.getPacket(); - } - - // RPS_GAME packets thanks to Arnah (Vertisy) - public static byte[] openRPSNPC() { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.RPS_GAME.getValue()); - mplew.write(8);// open npc - mplew.writeInt(9000019); - return mplew.getPacket(); - } - - public static byte[] rpsMesoError(int mesos) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.RPS_GAME.getValue()); - mplew.write(0x06); - if (mesos != -1) { - mplew.writeInt(mesos); - } - return mplew.getPacket(); - } - - public static byte[] rpsSelection(byte selection, byte answer) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.RPS_GAME.getValue()); - mplew.write(0x0B);// 11l - mplew.write(selection); - mplew.write(answer); - return mplew.getPacket(); - } - - public static byte[] rpsMode(byte mode) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.RPS_GAME.getValue()); - mplew.write(mode); - return mplew.getPacket(); - } - - public static byte[] fredrickMessage(byte operation) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FREDRICK_MESSAGE.getValue()); - mplew.write(operation); - return mplew.getPacket(); - } - - public static byte[] getFredrick(byte op) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FREDRICK.getValue()); - mplew.write(op); - - switch (op) { - case 0x24: - mplew.skip(8); - break; - default: - mplew.write(0); - break; - } - - return mplew.getPacket(); - } - - public static byte[] getFredrick(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FREDRICK.getValue()); - mplew.write(0x23); - mplew.writeInt(9030000); // Fredrick - mplew.writeInt(32272); //id - mplew.skip(5); - mplew.writeInt(chr.getMerchantNetMeso()); - mplew.write(0); - try { - List> items = ItemFactory.MERCHANT.loadItems(chr.getId(), false); - mplew.write(items.size()); - - for (Pair item : items) { - addItemInfo(mplew, item.getLeft(), true); - } - } catch (SQLException e) { - e.printStackTrace(); - } - mplew.skip(3); - return mplew.getPacket(); - } - - public static byte[] addOmokBox(MapleCharacter chr, int ammount, int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); - mplew.writeInt(chr.getId()); - addAnnounceBox(mplew, chr.getMiniGame(), ammount, type); - return mplew.getPacket(); - } - - public static byte[] addMatchCardBox(MapleCharacter chr, int ammount, int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); - mplew.writeInt(chr.getId()); - addAnnounceBox(mplew, chr.getMiniGame(), ammount, type); - return mplew.getPacket(); - } - - public static byte[] removeMinigameBox(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(0); - return mplew.getPacket(); - } - - public static byte[] getPlayerShopChat(MapleCharacter chr, String chat, byte slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.CHAT.getCode()); - mplew.write(PlayerInteractionHandler.Action.CHAT_THING.getCode()); - mplew.write(slot); - mplew.writeMapleAsciiString(chr.getName() + " : " + chat); - return mplew.getPacket(); - } - - public static byte[] getTradeChat(MapleCharacter chr, String chat, boolean owner) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.CHAT.getCode()); - mplew.write(PlayerInteractionHandler.Action.CHAT_THING.getCode()); - mplew.write(owner ? 0 : 1); - mplew.writeMapleAsciiString(chr.getName() + " : " + chat); - return mplew.getPacket(); - } - - public static byte[] hiredMerchantBox() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT.getValue()); // header. - mplew.write(0x07); - return mplew.getPacket(); - } - - // 0: Success - // 1: The room is already closed. - // 2: You can't enter the room due to full capacity. - // 3: Other requests are being fulfilled this minute. - // 4: You can't do it while you're dead. - // 7: You are not allowed to trade other items at this point. - // 17: You may not enter this store. - // 18: The owner of the store is currently undergoing store maintenance. Please try again in a bit. - // 23: This can only be used inside the Free Market. - // default: This character is unable to do it. - public static byte[] getOwlMessage(int msg) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - - mplew.writeShort(SendOpcode.SHOP_LINK_RESULT.getValue()); - mplew.write(msg); // depending on the byte sent, a different message is sent. - - return mplew.getPacket(); - } - - public static byte[] owlOfMinerva(MapleClient c, int itemid, List> hmsAvailable) { - byte itemType = ItemConstants.getInventoryType(itemid).getType(); - - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOP_SCANNER_RESULT.getValue()); // header. - mplew.write(6); - mplew.writeInt(0); - mplew.writeInt(itemid); - mplew.writeInt(hmsAvailable.size()); - for (Pair hme : hmsAvailable) { - MaplePlayerShopItem item = hme.getLeft(); - AbstractMapleMapObject mo = hme.getRight(); - - if(mo instanceof MaplePlayerShop) { - MaplePlayerShop ps = (MaplePlayerShop) mo; - MapleCharacter owner = ps.getOwner(); - - mplew.writeMapleAsciiString(owner.getName()); - mplew.writeInt(owner.getMapId()); - mplew.writeMapleAsciiString(ps.getDescription()); - mplew.writeInt(item.getBundles()); - mplew.writeInt(item.getItem().getQuantity()); - mplew.writeInt(item.getPrice()); - mplew.writeInt(owner.getId()); - mplew.write(owner.getClient().getChannel() - 1); - } else { - MapleHiredMerchant hm = (MapleHiredMerchant) mo; - - mplew.writeMapleAsciiString(hm.getOwner()); - mplew.writeInt(hm.getMapId()); - mplew.writeMapleAsciiString(hm.getDescription()); - mplew.writeInt(item.getBundles()); - mplew.writeInt(item.getItem().getQuantity()); - mplew.writeInt(item.getPrice()); - mplew.writeInt(hm.getOwnerId()); - mplew.write(hm.getChannel() - 1); - } - - mplew.write(itemType); - if (itemType == MapleInventoryType.EQUIP.getType()) { - addItemInfo(mplew, item.getItem(), true); - } - } - return mplew.getPacket(); - } - - public static byte[] getOwlOpen(List owlLeaderboards) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - - mplew.writeShort(SendOpcode.SHOP_SCANNER_RESULT.getValue()); - mplew.write(7); - mplew.write(owlLeaderboards.size()); - for (Integer i : owlLeaderboards) { - mplew.writeInt(i); - } - - return mplew.getPacket(); - } - - public static byte[] retrieveFirstMessage() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT.getValue()); // header. - mplew.write(0x09); - return mplew.getPacket(); - } - - public static byte[] remoteChannelChange(byte ch) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT.getValue()); // header. - mplew.write(0x10); - mplew.writeInt(0);//No idea yet - mplew.write(ch); - return mplew.getPacket(); - } - /* - * Possible things for ENTRUSTED_SHOP_CHECK_RESULT - * 0x0E = 00 = Renaming Failed - Can't find the merchant, 01 = Renaming successful - * 0x10 = Changes channel to the store (Store is open at Channel 1, do you want to change channels?) - * 0x11 = You cannot sell any items when managing.. blabla - * 0x12 = FKING POPUP LOL - */ - - public static byte[] getHiredMerchant(MapleCharacter chr, MapleHiredMerchant hm, boolean firstTime) {//Thanks Dustin - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(0x05); - mplew.write(0x04); - mplew.writeShort(hm.getVisitorSlotThreadsafe(chr) + 1); - mplew.writeInt(hm.getItemId()); - mplew.writeMapleAsciiString("Hired Merchant"); - - MapleCharacter[] visitors = hm.getVisitors(); - for (int i = 0; i < 3; i++) { - if (visitors[i] != null) { - mplew.write(i + 1); - addCharLook(mplew, visitors[i], false); - mplew.writeMapleAsciiString(visitors[i].getName()); - } - } - mplew.write(-1); - if (hm.isOwner(chr)) { - List> msgList = hm.getMessages(); - - mplew.writeShort(msgList.size()); - for (Pair stringBytePair : msgList) { - mplew.writeMapleAsciiString(stringBytePair.getLeft()); - mplew.write(stringBytePair.getRight()); - } - } else { - mplew.writeShort(0); - } mplew.writeMapleAsciiString(hm.getOwner()); - if (hm.isOwner(chr)) { - mplew.writeShort(0); - mplew.writeShort(hm.getTimeOpen()); - mplew.write(firstTime ? 1 : 0); - List sold = hm.getSold(); - mplew.write(sold.size()); - for (MapleHiredMerchant.SoldItem s : sold) { - mplew.writeInt(s.getItemId()); - mplew.writeShort(s.getQuantity()); - mplew.writeInt(s.getMesos()); - mplew.writeMapleAsciiString(s.getBuyer()); - } - mplew.writeInt(chr.getMerchantMeso());//:D? - } + mplew.writeInt(hm.getMapId()); mplew.writeMapleAsciiString(hm.getDescription()); - mplew.write(0x10); //TODO SLOTS, which is 16 for most stores...slotMax - mplew.writeInt(hm.isOwner(chr) ? chr.getMerchantMeso() : chr.getMeso()); - mplew.write(hm.getItems().size()); - if (hm.getItems().isEmpty()) { - mplew.write(0);//Hmm?? - } else { - for (MaplePlayerShopItem item : hm.getItems()) { - mplew.writeShort(item.getBundles()); - mplew.writeShort(item.getItem().getQuantity()); - mplew.writeInt(item.getPrice()); - addItemInfo(mplew, item.getItem(), true); - } - } - return mplew.getPacket(); - } - - public static byte[] updateHiredMerchant(MapleHiredMerchant hm, MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.UPDATE_MERCHANT.getCode()); - mplew.writeInt(hm.isOwner(chr) ? chr.getMerchantMeso() : chr.getMeso()); - mplew.write(hm.getItems().size()); - for (MaplePlayerShopItem item : hm.getItems()) { - mplew.writeShort(item.getBundles()); - mplew.writeShort(item.getItem().getQuantity()); - mplew.writeInt(item.getPrice()); - addItemInfo(mplew, item.getItem(), true); - } - return mplew.getPacket(); - } - - public static byte[] hiredMerchantChat(String message, byte slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.CHAT.getCode()); - mplew.write(PlayerInteractionHandler.Action.CHAT_THING.getCode()); - mplew.write(slot); - mplew.writeMapleAsciiString(message); - return mplew.getPacket(); - } - - public static byte[] hiredMerchantVisitorLeave(int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); - if (slot != 0) { - mplew.write(slot); - } - return mplew.getPacket(); - } - - public static byte[] hiredMerchantOwnerLeave() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.REAL_CLOSE_MERCHANT.getCode()); - mplew.write(0); - return mplew.getPacket(); - } - - public static byte[] hiredMerchantOwnerMaintenanceLeave() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.REAL_CLOSE_MERCHANT.getCode()); - mplew.write(5); - return mplew.getPacket(); - } - - public static byte[] hiredMerchantMaintenanceMessage() { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(0x00); - mplew.write(0x12); - return mplew.getPacket(); - } - - public static byte[] leaveHiredMerchant(int slot, int status2) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); - mplew.write(slot); - mplew.write(status2); - return mplew.getPacket(); - } - - public static byte[] hiredMerchantVisitorAdd(MapleCharacter chr, int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); - mplew.write(slot); - addCharLook(mplew, chr, false); - mplew.writeMapleAsciiString(chr.getName()); - return mplew.getPacket(); - } - - public static byte[] spawnHiredMerchantBox(MapleHiredMerchant hm) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_HIRED_MERCHANT.getValue()); + mplew.writeInt(item.getBundles()); + mplew.writeInt(item.getItem().getQuantity()); + mplew.writeInt(item.getPrice()); mplew.writeInt(hm.getOwnerId()); - mplew.writeInt(hm.getItemId()); - mplew.writeShort((short) hm.getPosition().getX()); - mplew.writeShort((short) hm.getPosition().getY()); - mplew.writeShort(0); - mplew.writeMapleAsciiString(hm.getOwner()); - mplew.write(0x05); - mplew.writeInt(hm.getObjectId()); - mplew.writeMapleAsciiString(hm.getDescription()); - mplew.write(hm.getItemId() % 100); - mplew.write(new byte[]{1, 4}); - return mplew.getPacket(); - } - - public static byte[] removeHiredMerchantBox(int id) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DESTROY_HIRED_MERCHANT.getValue()); - mplew.writeInt(id); - return mplew.getPacket(); - } - - public static byte[] spawnPlayerNPC(MaplePlayerNPC npc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_NPC_REQUEST_CONTROLLER.getValue()); - mplew.write(1); - mplew.writeInt(npc.getObjectId()); - mplew.writeInt(npc.getScriptId()); - mplew.writeShort(npc.getPosition().x); - mplew.writeShort(npc.getCY()); - mplew.write(npc.getDirection()); - mplew.writeShort(npc.getFH()); - mplew.writeShort(npc.getRX0()); - mplew.writeShort(npc.getRX1()); - mplew.write(1); - return mplew.getPacket(); - } - - public static byte[] getPlayerNPC(MaplePlayerNPC npc) { // thanks to Arnah - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.IMITATED_NPC_DATA.getValue()); - mplew.write(0x01); - mplew.writeInt(npc.getScriptId()); - mplew.writeMapleAsciiString(npc.getName()); - mplew.write(npc.getGender()); - mplew.write(npc.getSkin()); - mplew.writeInt(npc.getFace()); - mplew.write(0); - mplew.writeInt(npc.getHair()); - Map equip = npc.getEquips(); - Map myEquip = new LinkedHashMap<>(); - Map maskedEquip = new LinkedHashMap<>(); - for(short position : equip.keySet()) { - short pos = (byte) (position * -1); - if(pos < 100 && myEquip.get(pos) == null) { - myEquip.put(pos, equip.get(position)); - } else if((pos > 100 && pos != 111) || pos == -128) { // don't ask. o.o - pos -= 100; - if(myEquip.get(pos) != null) { - maskedEquip.put(pos, myEquip.get(pos)); - } - myEquip.put(pos, equip.get(position)); - } else if(myEquip.get(pos) != null) { - maskedEquip.put(pos, equip.get(position)); - } - } - for(Entry entry : myEquip.entrySet()) { - mplew.write(entry.getKey()); - mplew.writeInt(entry.getValue()); - } - mplew.write(0xFF); - for(Entry entry : maskedEquip.entrySet()) { - mplew.write(entry.getKey()); - mplew.writeInt(entry.getValue()); - } - mplew.write(0xFF); - Integer cWeapon = equip.get((byte) -111); - if(cWeapon != null) { - mplew.writeInt(cWeapon); - } else { - mplew.writeInt(0); - } - for(int i = 0; i < 3; i++) { - mplew.writeInt(0); - } - return mplew.getPacket(); - } - - public static byte[] removePlayerNPC(int oid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.IMITATED_NPC_DATA.getValue()); - mplew.write(0x00); - mplew.writeInt(oid); - - return mplew.getPacket(); - } - - public static byte[] sendYellowTip(String tip) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_WEEK_EVENT_MESSAGE.getValue()); - mplew.write(0xFF); - mplew.writeMapleAsciiString(tip); - mplew.writeShort(0); - return mplew.getPacket(); - } - - public static byte[] givePirateBuff(List> statups, int buffid, int duration) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - boolean infusion = buffid == Buccaneer.SPEED_INFUSION || buffid == ThunderBreaker.SPEED_INFUSION || buffid == Corsair.SPEED_INFUSION; - mplew.writeShort(SendOpcode.GIVE_BUFF.getValue()); - writeLongMask(mplew, statups); - mplew.writeShort(0); - for (Pair stat : statups) { - mplew.writeInt(stat.getRight().shortValue()); - mplew.writeInt(buffid); - mplew.skip(infusion ? 10 : 5); - mplew.writeShort(duration); - } - mplew.skip(3); - return mplew.getPacket(); - } - - public static byte[] giveForeignPirateBuff(int cid, int buffid, int time, List> statups) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - boolean infusion = buffid == Buccaneer.SPEED_INFUSION || buffid == ThunderBreaker.SPEED_INFUSION || buffid == Corsair.SPEED_INFUSION; - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMask(mplew, statups); - mplew.writeShort(0); - for (Pair statup : statups) { - mplew.writeInt(statup.getRight().shortValue()); - mplew.writeInt(buffid); - mplew.skip(infusion ? 10 : 5); - mplew.writeShort(time); - } - mplew.writeShort(0); - mplew.write(2); - return mplew.getPacket(); - } - - public static byte[] sendMTS(List items, int tab, int type, int page, int pages) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x15); //operation - mplew.writeInt(pages * 16); //testing, change to 10 if fails - mplew.writeInt(items.size()); //number of items - mplew.writeInt(tab); - mplew.writeInt(type); - mplew.writeInt(page); - mplew.write(1); - mplew.write(1); - for (MTSItemInfo item : items) { - addItemInfo(mplew, item.getItem(), true); - mplew.writeInt(item.getID()); //id - mplew.writeInt(item.getTaxes()); //this + below = price - mplew.writeInt(item.getPrice()); //price - mplew.writeInt(0); - mplew.writeLong(getTime(item.getEndingDate())); - mplew.writeMapleAsciiString(item.getSeller()); //account name (what was nexon thinking?) - mplew.writeMapleAsciiString(item.getSeller()); //char name - for (int j = 0; j < 28; j++) { - mplew.write(0); - } + mplew.write(hm.getChannel() - 1); } - mplew.write(1); - return mplew.getPacket(); + + mplew.write(itemType); + if (itemType == MapleInventoryType.EQUIP.getType()) { + addItemInfo(mplew, item.getItem(), true); + } + } + return mplew.getPacket(); + } + + public static byte[] getOwlOpen(List owlLeaderboards) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + + mplew.writeShort(SendOpcode.SHOP_SCANNER_RESULT.getValue()); + mplew.write(7); + mplew.write(owlLeaderboards.size()); + for (Integer i : owlLeaderboards) { + mplew.writeInt(i); } - public static byte[] noteSendMsg() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.MEMO_RESULT.getValue()); - mplew.write(4); - return mplew.getPacket(); - } + return mplew.getPacket(); + } - /* - * 0 = Player online, use whisper - * 1 = Check player's name - * 2 = Receiver inbox full - */ - public static byte[] noteError(byte error) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.MEMO_RESULT.getValue()); - mplew.write(5); - mplew.write(error); - return mplew.getPacket(); - } + public static byte[] retrieveFirstMessage() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT.getValue()); // header. + mplew.write(0x09); + return mplew.getPacket(); + } - public static byte[] showNotes(ResultSet notes, int count) throws SQLException { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MEMO_RESULT.getValue()); - mplew.write(3); - mplew.write(count); - for (int i = 0; i < count; i++) { - mplew.writeInt(notes.getInt("id")); - mplew.writeMapleAsciiString(notes.getString("from") + " ");//Stupid nexon forgot space lol - mplew.writeMapleAsciiString(notes.getString("message")); - mplew.writeLong(getTime(notes.getLong("timestamp"))); - mplew.write(notes.getByte("fame"));//FAME :D - notes.next(); + public static byte[] remoteChannelChange(byte ch) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT.getValue()); // header. + mplew.write(0x10); + mplew.writeInt(0);//No idea yet + mplew.write(ch); + return mplew.getPacket(); + } + /* + * Possible things for ENTRUSTED_SHOP_CHECK_RESULT + * 0x0E = 00 = Renaming Failed - Can't find the merchant, 01 = Renaming successful + * 0x10 = Changes channel to the store (Store is open at Channel 1, do you want to change channels?) + * 0x11 = You cannot sell any items when managing.. blabla + * 0x12 = FKING POPUP LOL + */ + + public static byte[] getHiredMerchant(MapleCharacter chr, MapleHiredMerchant hm, boolean firstTime) {//Thanks Dustin + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); + mplew.write(0x05); + mplew.write(0x04); + mplew.writeShort(hm.getVisitorSlotThreadsafe(chr) + 1); + mplew.writeInt(hm.getItemId()); + mplew.writeMapleAsciiString("Hired Merchant"); + + MapleCharacter[] visitors = hm.getVisitors(); + for (int i = 0; i < 3; i++) { + if (visitors[i] != null) { + mplew.write(i + 1); + addCharLook(mplew, visitors[i], false); + mplew.writeMapleAsciiString(visitors[i].getName()); + } + } + mplew.write(-1); + if (hm.isOwner(chr)) { + List> msgList = hm.getMessages(); + + mplew.writeShort(msgList.size()); + for (Pair stringBytePair : msgList) { + mplew.writeMapleAsciiString(stringBytePair.getLeft()); + mplew.write(stringBytePair.getRight()); + } + } else { + mplew.writeShort(0); + } + mplew.writeMapleAsciiString(hm.getOwner()); + if (hm.isOwner(chr)) { + mplew.writeShort(0); + mplew.writeShort(hm.getTimeOpen()); + mplew.write(firstTime ? 1 : 0); + List sold = hm.getSold(); + mplew.write(sold.size()); + for (MapleHiredMerchant.SoldItem s : sold) { + mplew.writeInt(s.getItemId()); + mplew.writeShort(s.getQuantity()); + mplew.writeInt(s.getMesos()); + mplew.writeMapleAsciiString(s.getBuyer()); + } + mplew.writeInt(chr.getMerchantMeso());//:D? + } + mplew.writeMapleAsciiString(hm.getDescription()); + mplew.write(0x10); //TODO SLOTS, which is 16 for most stores...slotMax + mplew.writeInt(hm.isOwner(chr) ? chr.getMerchantMeso() : chr.getMeso()); + mplew.write(hm.getItems().size()); + if (hm.getItems().isEmpty()) { + mplew.write(0);//Hmm?? + } else { + for (MaplePlayerShopItem item : hm.getItems()) { + mplew.writeShort(item.getBundles()); + mplew.writeShort(item.getItem().getQuantity()); + mplew.writeInt(item.getPrice()); + addItemInfo(mplew, item.getItem(), true); + } + } + return mplew.getPacket(); + } + + public static byte[] updateHiredMerchant(MapleHiredMerchant hm, MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.UPDATE_MERCHANT.getCode()); + mplew.writeInt(hm.isOwner(chr) ? chr.getMerchantMeso() : chr.getMeso()); + mplew.write(hm.getItems().size()); + for (MaplePlayerShopItem item : hm.getItems()) { + mplew.writeShort(item.getBundles()); + mplew.writeShort(item.getItem().getQuantity()); + mplew.writeInt(item.getPrice()); + addItemInfo(mplew, item.getItem(), true); + } + return mplew.getPacket(); + } + + public static byte[] hiredMerchantChat(String message, byte slot) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.CHAT.getCode()); + mplew.write(PlayerInteractionHandler.Action.CHAT_THING.getCode()); + mplew.write(slot); + mplew.writeMapleAsciiString(message); + return mplew.getPacket(); + } + + public static byte[] hiredMerchantVisitorLeave(int slot) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); + if (slot != 0) { + mplew.write(slot); + } + return mplew.getPacket(); + } + + public static byte[] hiredMerchantOwnerLeave() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.REAL_CLOSE_MERCHANT.getCode()); + mplew.write(0); + return mplew.getPacket(); + } + + public static byte[] hiredMerchantOwnerMaintenanceLeave() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.REAL_CLOSE_MERCHANT.getCode()); + mplew.write(5); + return mplew.getPacket(); + } + + public static byte[] hiredMerchantMaintenanceMessage() { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); + mplew.write(0x00); + mplew.write(0x12); + return mplew.getPacket(); + } + + public static byte[] leaveHiredMerchant(int slot, int status2) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); + mplew.write(slot); + mplew.write(status2); + return mplew.getPacket(); + } + + public static byte[] hiredMerchantVisitorAdd(MapleCharacter chr, int slot) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); + mplew.write(slot); + addCharLook(mplew, chr, false); + mplew.writeMapleAsciiString(chr.getName()); + return mplew.getPacket(); + } + + public static byte[] spawnHiredMerchantBox(MapleHiredMerchant hm) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SPAWN_HIRED_MERCHANT.getValue()); + mplew.writeInt(hm.getOwnerId()); + mplew.writeInt(hm.getItemId()); + mplew.writeShort((short) hm.getPosition().getX()); + mplew.writeShort((short) hm.getPosition().getY()); + mplew.writeShort(0); + mplew.writeMapleAsciiString(hm.getOwner()); + mplew.write(0x05); + mplew.writeInt(hm.getObjectId()); + mplew.writeMapleAsciiString(hm.getDescription()); + mplew.write(hm.getItemId() % 100); + mplew.write(new byte[]{1, 4}); + return mplew.getPacket(); + } + + public static byte[] removeHiredMerchantBox(int id) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.DESTROY_HIRED_MERCHANT.getValue()); + mplew.writeInt(id); + return mplew.getPacket(); + } + + public static byte[] spawnPlayerNPC(MaplePlayerNPC npc) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SPAWN_NPC_REQUEST_CONTROLLER.getValue()); + mplew.write(1); + mplew.writeInt(npc.getObjectId()); + mplew.writeInt(npc.getScriptId()); + mplew.writeShort(npc.getPosition().x); + mplew.writeShort(npc.getCY()); + mplew.write(npc.getDirection()); + mplew.writeShort(npc.getFH()); + mplew.writeShort(npc.getRX0()); + mplew.writeShort(npc.getRX1()); + mplew.write(1); + return mplew.getPacket(); + } + + public static byte[] getPlayerNPC(MaplePlayerNPC npc) { // thanks to Arnah + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.IMITATED_NPC_DATA.getValue()); + mplew.write(0x01); + mplew.writeInt(npc.getScriptId()); + mplew.writeMapleAsciiString(npc.getName()); + mplew.write(npc.getGender()); + mplew.write(npc.getSkin()); + mplew.writeInt(npc.getFace()); + mplew.write(0); + mplew.writeInt(npc.getHair()); + Map equip = npc.getEquips(); + Map myEquip = new LinkedHashMap<>(); + Map maskedEquip = new LinkedHashMap<>(); + for (short position : equip.keySet()) { + short pos = (byte) (position * -1); + if (pos < 100 && myEquip.get(pos) == null) { + myEquip.put(pos, equip.get(position)); + } else if ((pos > 100 && pos != 111) || pos == -128) { // don't ask. o.o + pos -= 100; + if (myEquip.get(pos) != null) { + maskedEquip.put(pos, myEquip.get(pos)); } - return mplew.getPacket(); + myEquip.put(pos, equip.get(position)); + } else if (myEquip.get(pos) != null) { + maskedEquip.put(pos, equip.get(position)); + } } + for (Entry entry : myEquip.entrySet()) { + mplew.write(entry.getKey()); + mplew.writeInt(entry.getValue()); + } + mplew.write(0xFF); + for (Entry entry : maskedEquip.entrySet()) { + mplew.write(entry.getKey()); + mplew.writeInt(entry.getValue()); + } + mplew.write(0xFF); + Integer cWeapon = equip.get((byte) -111); + if (cWeapon != null) { + mplew.writeInt(cWeapon); + } else { + mplew.writeInt(0); + } + for (int i = 0; i < 3; i++) { + mplew.writeInt(0); + } + return mplew.getPacket(); + } - public static byte[] useChalkboard(MapleCharacter chr, boolean close) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CHALKBOARD.getValue()); - mplew.writeInt(chr.getId()); - if (close) { - mplew.write(0); - } else { - mplew.write(1); - mplew.writeMapleAsciiString(chr.getChalkboard()); - } - return mplew.getPacket(); - } + public static byte[] removePlayerNPC(int oid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.IMITATED_NPC_DATA.getValue()); + mplew.write(0x00); + mplew.writeInt(oid); - public static byte[] trockRefreshMapList(MapleCharacter chr, boolean delete, boolean vip) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAP_TRANSFER_RESULT.getValue()); - mplew.write(delete ? 2 : 3); - if (vip) { - mplew.write(1); - List map = chr.getVipTrockMaps(); - for (int i = 0; i < 10; i++) { - mplew.writeInt(map.get(i)); - } - } else { - mplew.write(0); - List map = chr.getTrockMaps(); - for (int i = 0; i < 5; i++) { - mplew.writeInt(map.get(i)); - } - } - return mplew.getPacket(); + return mplew.getPacket(); + } + + public static byte[] sendYellowTip(String tip) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SET_WEEK_EVENT_MESSAGE.getValue()); + mplew.write(0xFF); + mplew.writeMapleAsciiString(tip); + mplew.writeShort(0); + return mplew.getPacket(); + } + + public static byte[] givePirateBuff(List> statups, int buffid, int duration) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + boolean infusion = buffid == Buccaneer.SPEED_INFUSION || buffid == ThunderBreaker.SPEED_INFUSION || buffid == Corsair.SPEED_INFUSION; + mplew.writeShort(SendOpcode.GIVE_BUFF.getValue()); + writeLongMask(mplew, statups); + mplew.writeShort(0); + for (Pair stat : statups) { + mplew.writeInt(stat.getRight().shortValue()); + mplew.writeInt(buffid); + mplew.skip(infusion ? 10 : 5); + mplew.writeShort(duration); } - - /* 1: cannot find char info, + mplew.skip(3); + return mplew.getPacket(); + } + + public static byte[] giveForeignPirateBuff(int cid, int buffid, int time, List> statups) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + boolean infusion = buffid == Buccaneer.SPEED_INFUSION || buffid == ThunderBreaker.SPEED_INFUSION || buffid == Corsair.SPEED_INFUSION; + mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); + mplew.writeInt(cid); + writeLongMask(mplew, statups); + mplew.writeShort(0); + for (Pair statup : statups) { + mplew.writeInt(statup.getRight().shortValue()); + mplew.writeInt(buffid); + mplew.skip(infusion ? 10 : 5); + mplew.writeShort(time); + } + mplew.writeShort(0); + mplew.write(2); + return mplew.getPacket(); + } + + public static byte[] sendMTS(List items, int tab, int type, int page, int pages) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); + mplew.write(0x15); //operation + mplew.writeInt(pages * 16); //testing, change to 10 if fails + mplew.writeInt(items.size()); //number of items + mplew.writeInt(tab); + mplew.writeInt(type); + mplew.writeInt(page); + mplew.write(1); + mplew.write(1); + for (MTSItemInfo item : items) { + addItemInfo(mplew, item.getItem(), true); + mplew.writeInt(item.getID()); //id + mplew.writeInt(item.getTaxes()); //this + below = price + mplew.writeInt(item.getPrice()); //price + mplew.writeInt(0); + mplew.writeLong(getTime(item.getEndingDate())); + mplew.writeMapleAsciiString(item.getSeller()); //account name (what was nexon thinking?) + mplew.writeMapleAsciiString(item.getSeller()); //char name + for (int j = 0; j < 28; j++) { + mplew.write(0); + } + } + mplew.write(1); + return mplew.getPacket(); + } + + public static byte[] noteSendMsg() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.MEMO_RESULT.getValue()); + mplew.write(4); + return mplew.getPacket(); + } + + /* + * 0 = Player online, use whisper + * 1 = Check player's name + * 2 = Receiver inbox full + */ + public static byte[] noteError(byte error) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); + mplew.writeShort(SendOpcode.MEMO_RESULT.getValue()); + mplew.write(5); + mplew.write(error); + return mplew.getPacket(); + } + + public static byte[] showNotes(ResultSet notes, int count) throws SQLException { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MEMO_RESULT.getValue()); + mplew.write(3); + mplew.write(count); + for (int i = 0; i < count; i++) { + mplew.writeInt(notes.getInt("id")); + mplew.writeMapleAsciiString(notes.getString("from") + " ");//Stupid nexon forgot space lol + mplew.writeMapleAsciiString(notes.getString("message")); + mplew.writeLong(getTime(notes.getLong("timestamp"))); + mplew.write(notes.getByte("fame"));//FAME :D + notes.next(); + } + return mplew.getPacket(); + } + + public static byte[] useChalkboard(MapleCharacter chr, boolean close) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CHALKBOARD.getValue()); + mplew.writeInt(chr.getId()); + if (close) { + mplew.write(0); + } else { + mplew.write(1); + mplew.writeMapleAsciiString(chr.getChalkboard()); + } + return mplew.getPacket(); + } + + public static byte[] trockRefreshMapList(MapleCharacter chr, boolean delete, boolean vip) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MAP_TRANSFER_RESULT.getValue()); + mplew.write(delete ? 2 : 3); + if (vip) { + mplew.write(1); + List map = chr.getVipTrockMaps(); + for (int i = 0; i < 10; i++) { + mplew.writeInt(map.get(i)); + } + } else { + mplew.write(0); + List map = chr.getTrockMaps(); + for (int i = 0; i < 5; i++) { + mplew.writeInt(map.get(i)); + } + } + return mplew.getPacket(); + } + + /* 1: cannot find char info, 2: cannot transfer under 20, 3: cannot send banned, 4: cannot send married, @@ -6126,2300 +6124,2317 @@ public class PacketCreator { 8: must quit family, 9: unknown error */ - public static byte[] sendWorldTransferRules(int error, MapleClient c) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_CHECK_TRANSFER_WORLD_POSSIBLE_RESULT.getValue()); - mplew.writeInt(0); //ignored - mplew.write(error); - mplew.writeInt(0); - mplew.writeBool(error == 0); //0 = ?, otherwise list servers - if(error == 0) { - List worlds = Server.getInstance().getWorlds(); - mplew.writeInt(worlds.size()); - for(World world : worlds) { - mplew.writeMapleAsciiString(GameConstants.WORLD_NAMES[world.getId()]); - } - } - return mplew.getPacket(); + public static byte[] sendWorldTransferRules(int error, MapleClient c) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_CHECK_TRANSFER_WORLD_POSSIBLE_RESULT.getValue()); + mplew.writeInt(0); //ignored + mplew.write(error); + mplew.writeInt(0); + mplew.writeBool(error == 0); //0 = ?, otherwise list servers + if (error == 0) { + List worlds = Server.getInstance().getWorlds(); + mplew.writeInt(worlds.size()); + for (World world : worlds) { + mplew.writeMapleAsciiString(GameConstants.WORLD_NAMES[world.getId()]); + } } - - public static byte[] showWorldTransferSuccess(Item item, int accountId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - mplew.write(0xA0); - addCashItemInformation(mplew, item, accountId); - return mplew.getPacket(); + return mplew.getPacket(); } - - /* 0: no error, send rules + + public static byte[] showWorldTransferSuccess(Item item, int accountId) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + mplew.write(0xA0); + addCashItemInformation(mplew, item, accountId); + return mplew.getPacket(); + } + + /* 0: no error, send rules 1: name change already submitted 2: name change within a month 3: recently banned 4: unknown error */ - public static byte[] sendNameTransferRules(int error) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_CHECK_NAME_CHANGE_POSSIBLE_RESULT.getValue()); + public static byte[] sendNameTransferRules(int error) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_CHECK_NAME_CHANGE_POSSIBLE_RESULT.getValue()); + mplew.writeInt(0); + mplew.write(error); + mplew.writeInt(0); + + return mplew.getPacket(); + } + + /* 0: Name available + * >0: Name is in use + * <0: Unknown error + */ + + public static byte[] sendNameTransferCheck(String availableName, boolean canUseName) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_CHECK_NAME_CHANGE.getValue()); + //Send provided name back to client to add to temporary cache of checked & accepted names + mplew.writeMapleAsciiString(availableName); + mplew.writeBool(!canUseName); + return mplew.getPacket(); + } + + public static byte[] showNameChangeSuccess(Item item, int accountId) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + mplew.write(0x9E); + addCashItemInformation(mplew, item, accountId); + return mplew.getPacket(); + } + + public static byte[] showNameChangeCancel(boolean success) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CANCEL_NAME_CHANGE_RESULT.getValue()); + mplew.writeBool(success); + if (!success) { + mplew.write(0); + } + //mplew.writeMapleAsciiString("Custom message."); //only if ^ != 0 + return mplew.getPacket(); + } + + public static byte[] showWorldTransferCancel(boolean success) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CANCEL_TRANSFER_WORLD_RESULT.getValue()); + mplew.writeBool(success); + if (!success) { + mplew.write(0); + } + //mplew.writeMapleAsciiString("Custom message."); //only if ^ != 0 + return mplew.getPacket(); + } + + public static byte[] showMTSCash(MapleCharacter p) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MTS_OPERATION2.getValue()); + mplew.writeInt(p.getCashShop().getCash(4)); + mplew.writeInt(p.getCashShop().getCash(2)); + return mplew.getPacket(); + } + + public static byte[] MTSWantedListingOver(int nx, int items) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); + mplew.write(0x3D); + mplew.writeInt(nx); + mplew.writeInt(items); + return mplew.getPacket(); + } + + public static byte[] MTSConfirmSell() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); + mplew.write(0x1D); + return mplew.getPacket(); + } + + public static byte[] MTSConfirmBuy() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); + mplew.write(0x33); + return mplew.getPacket(); + } + + public static byte[] MTSFailBuy() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); + mplew.write(0x34); + mplew.write(0x42); + return mplew.getPacket(); + } + + public static byte[] MTSConfirmTransfer(int quantity, int pos) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); + mplew.write(0x27); + mplew.writeInt(quantity); + mplew.writeInt(pos); + return mplew.getPacket(); + } + + public static byte[] notYetSoldInv(List items) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); + mplew.write(0x23); + mplew.writeInt(items.size()); + if (!items.isEmpty()) { + for (MTSItemInfo item : items) { + addItemInfo(mplew, item.getItem(), true); + mplew.writeInt(item.getID()); //id + mplew.writeInt(item.getTaxes()); //this + below = price + mplew.writeInt(item.getPrice()); //price mplew.writeInt(0); - mplew.write(error); + mplew.writeLong(getTime(item.getEndingDate())); + mplew.writeMapleAsciiString(item.getSeller()); //account name (what was nexon thinking?) + mplew.writeMapleAsciiString(item.getSeller()); //char name + for (int i = 0; i < 28; i++) { + mplew.write(0); + } + } + } else { + mplew.writeInt(0); + } + return mplew.getPacket(); + } + + public static byte[] transferInventory(List items) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); + mplew.write(0x21); + mplew.writeInt(items.size()); + if (!items.isEmpty()) { + for (MTSItemInfo item : items) { + addItemInfo(mplew, item.getItem(), true); + mplew.writeInt(item.getID()); //id + mplew.writeInt(item.getTaxes()); //taxes + mplew.writeInt(item.getPrice()); //price mplew.writeInt(0); - - return mplew.getPacket(); - } - - /* 0: Name available - * >0: Name is in use - * <0: Unknown error - */ - - public static byte[] sendNameTransferCheck(String availableName, boolean canUseName) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_CHECK_NAME_CHANGE.getValue()); - //Send provided name back to client to add to temporary cache of checked & accepted names - mplew.writeMapleAsciiString(availableName); - mplew.writeBool(!canUseName); - return mplew.getPacket(); - } - - public static byte[] showNameChangeSuccess(Item item, int accountId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - mplew.write(0x9E); - addCashItemInformation(mplew, item, accountId); - return mplew.getPacket(); - } - - public static byte[] showNameChangeCancel(boolean success) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_NAME_CHANGE_RESULT.getValue()); - mplew.writeBool(success); - if(!success) mplew.write(0); - //mplew.writeMapleAsciiString("Custom message."); //only if ^ != 0 - return mplew.getPacket(); - } - - public static byte[] showWorldTransferCancel(boolean success) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_TRANSFER_WORLD_RESULT.getValue()); - mplew.writeBool(success); - if(!success) mplew.write(0); - //mplew.writeMapleAsciiString("Custom message."); //only if ^ != 0 - return mplew.getPacket(); - } - - public static byte[] showMTSCash(MapleCharacter p) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION2.getValue()); - mplew.writeInt(p.getCashShop().getCash(4)); - mplew.writeInt(p.getCashShop().getCash(2)); - return mplew.getPacket(); - } - - public static byte[] MTSWantedListingOver(int nx, int items) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x3D); - mplew.writeInt(nx); - mplew.writeInt(items); - return mplew.getPacket(); - } - - public static byte[] MTSConfirmSell() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x1D); - return mplew.getPacket(); - } - - public static byte[] MTSConfirmBuy() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x33); - return mplew.getPacket(); - } - - public static byte[] MTSFailBuy() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x34); - mplew.write(0x42); - return mplew.getPacket(); - } - - public static byte[] MTSConfirmTransfer(int quantity, int pos) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x27); - mplew.writeInt(quantity); - mplew.writeInt(pos); - return mplew.getPacket(); - } - - public static byte[] notYetSoldInv(List items) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x23); - mplew.writeInt(items.size()); - if (!items.isEmpty()) { - for (MTSItemInfo item : items) { - addItemInfo(mplew, item.getItem(), true); - mplew.writeInt(item.getID()); //id - mplew.writeInt(item.getTaxes()); //this + below = price - mplew.writeInt(item.getPrice()); //price - mplew.writeInt(0); - mplew.writeLong(getTime(item.getEndingDate())); - mplew.writeMapleAsciiString(item.getSeller()); //account name (what was nexon thinking?) - mplew.writeMapleAsciiString(item.getSeller()); //char name - for (int i = 0; i < 28; i++) { - mplew.write(0); - } - } - } else { - mplew.writeInt(0); + mplew.writeLong(getTime(item.getEndingDate())); + mplew.writeMapleAsciiString(item.getSeller()); //account name (what was nexon thinking?) + mplew.writeMapleAsciiString(item.getSeller()); //char name + for (int i = 0; i < 28; i++) { + mplew.write(0); } - return mplew.getPacket(); + } + } + mplew.write(0xD0 + items.size()); + mplew.write(new byte[]{-1, -1, -1, 0}); + return mplew.getPacket(); + } + + public static byte[] showCouponRedeemedItems(int accountId, int maplePoints, int mesos, List cashItems, List> items) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + mplew.write(0x59); + mplew.write((byte) cashItems.size()); + for (Item item : cashItems) { + addCashItemInformation(mplew, item, accountId); + } + mplew.writeInt(maplePoints); + mplew.writeInt(items.size()); + for (Pair itemPair : items) { + int quantity = itemPair.getLeft(); + mplew.writeShort((short) quantity); //quantity (0 = 1 for cash items) + mplew.writeShort(0x1F); //0 = ?, >=0x20 = ?, <0x20 = ? (does nothing?) + mplew.writeInt(itemPair.getRight()); + } + mplew.writeInt(mesos); + return mplew.getPacket(); + } + + public static byte[] showCash(MapleCharacter mc) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.QUERY_CASH_RESULT.getValue()); + + mplew.writeInt(mc.getCashShop().getCash(1)); + mplew.writeInt(mc.getCashShop().getCash(2)); + mplew.writeInt(mc.getCashShop().getCash(4)); + + return mplew.getPacket(); + } + + public static byte[] enableCSUse(MapleCharacter mc) { + return showCash(mc); + } + + public static class WhisperFlag { + public static final byte LOCATION = 0x01; + public static final byte WHISPER = 0x02; + public static final byte REQUEST = 0x04; + public static final byte RESULT = 0x08; + public static final byte RECEIVE = 0x10; + public static final byte BLOCKED = 0x20; + public static final byte LOCATION_FRIEND = 0x40; + } + + /** + * User for /find, buddy find and /c (chase) + * CField::OnWhisper + * + * @param target Name String from the command parameter + * @param type Location of the target + * @param fieldOrChannel If true & chr is not null, shows different channel message + * @param flag LOCATION or LOCATION_FRIEND + * @return packet structure + */ + public static byte[] getFindResult(MapleCharacter target, byte type, int fieldOrChannel, byte flag) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.WHISPER.getValue()); + + mplew.write(flag | WhisperFlag.RESULT); + mplew.writeMapleAsciiString(target.getName()); + mplew.write(type); + mplew.writeInt(fieldOrChannel); + + if (type == WhisperHandler.RT_SAME_CHANNEL) { + mplew.writeInt(target.getPosition().x); + mplew.writeInt(target.getPosition().y); } - public static byte[] transferInventory(List items) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x21); - mplew.writeInt(items.size()); - if (!items.isEmpty()) { - for (MTSItemInfo item : items) { - addItemInfo(mplew, item.getItem(), true); - mplew.writeInt(item.getID()); //id - mplew.writeInt(item.getTaxes()); //taxes - mplew.writeInt(item.getPrice()); //price - mplew.writeInt(0); - mplew.writeLong(getTime(item.getEndingDate())); - mplew.writeMapleAsciiString(item.getSeller()); //account name (what was nexon thinking?) - mplew.writeMapleAsciiString(item.getSeller()); //char name - for (int i = 0; i < 28; i++) { - mplew.write(0); - } - } + return mplew.getPacket(); + } + + public static byte[] getWhisperResult(String target, boolean success) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.WHISPER.getValue()); + + mplew.write(WhisperFlag.WHISPER | WhisperFlag.RESULT); + mplew.writeMapleAsciiString(target); + mplew.writeBool(success); + + return mplew.getPacket(); + } + + public static byte[] getWhisperReceive(String sender, int channel, boolean fromAdmin, String message) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.WHISPER.getValue()); + + mplew.write(WhisperFlag.WHISPER | WhisperFlag.RECEIVE); + mplew.writeMapleAsciiString(sender); + mplew.write(channel); + mplew.writeBool(fromAdmin); + mplew.writeMapleAsciiString(message); + + return mplew.getPacket(); + } + + public static byte[] sendAutoHpPot(int itemId) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.AUTO_HP_POT.getValue()); + mplew.writeInt(itemId); + return mplew.getPacket(); + } + + public static byte[] sendAutoMpPot(int itemId) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); + mplew.writeShort(SendOpcode.AUTO_MP_POT.getValue()); + mplew.writeInt(itemId); + return mplew.getPacket(); + } + + public static byte[] showOXQuiz(int questionSet, int questionId, boolean askQuestion) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); + mplew.writeShort(SendOpcode.OX_QUIZ.getValue()); + mplew.write(askQuestion ? 1 : 0); + mplew.write(questionSet); + mplew.writeShort(questionId); + return mplew.getPacket(); + } + + public static byte[] updateGender(MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.SET_GENDER.getValue()); + mplew.write(chr.getGender()); + return mplew.getPacket(); + } + + public static byte[] enableReport() { // thanks to snow + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.CLAIM_STATUS_CHANGED.getValue()); + mplew.write(1); + return mplew.getPacket(); + } + + public static byte[] giveFinalAttack(int skillid, int time) { // packets found thanks to lailainoob + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GIVE_BUFF.getValue()); + mplew.writeLong(0); + mplew.writeShort(0); + mplew.write(0);//some 80 and 0 bs DIRECTION + mplew.write(0x80);//let's just do 80, then 0 + mplew.writeInt(0); + mplew.writeShort(1); + mplew.writeInt(skillid); + mplew.writeInt(time); + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] loadFamily(MapleCharacter player) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAMILY_PRIVILEGE_LIST.getValue()); + mplew.writeInt(MapleFamilyEntitlement.values().length); + for (int i = 0; i < MapleFamilyEntitlement.values().length; i++) { + MapleFamilyEntitlement entitlement = MapleFamilyEntitlement.values()[i]; + mplew.write(i <= 1 ? 1 : 2); //type + mplew.writeInt(entitlement.getRepCost()); + mplew.writeInt(entitlement.getUsageLimit()); + mplew.writeMapleAsciiString(entitlement.getName()); + mplew.writeMapleAsciiString(entitlement.getDescription()); + } + return mplew.getPacket(); + } + + /** + * Family Result Message + *

+ * Possible values for type:
+ * 64: You cannot add this character as a junior. + * 65: The name could not be found or is not online. + * 66: You belong to the same family. + * 67: You do not belong to the same family.
+ * 69: The character you wish to add as\r\na Junior must be in the same + * map.
+ * 70: This character is already a Junior of another character.
+ * 71: The Junior you wish to add\r\nmust be at a lower rank.
+ * 72: The gap between you and your\r\njunior must be within 20 levels.
+ * 73: Another character has requested to add this character.\r\nPlease try + * again later.
+ * 74: Another character has requested a summon.\r\nPlease try again + * later.
+ * 75: The summons has failed. Your current location or state does not allow + * a summons.
+ * 76: The family cannot extend more than 1000 generations from above and + * below.
+ * 77: The Junior you wish to add\r\nmust be over Level 10.
+ * 78: You cannot add a Junior \r\nthat has requested to change worlds.
+ * 79: You cannot add a Junior \r\nsince you've requested to change + * worlds.
+ * 80: Separation is not possible due to insufficient Mesos.\r\nYou will + * need %d Mesos to\r\nseparate with a Senior.
+ * 81: Separation is not possible due to insufficient Mesos.\r\nYou will + * need %d Mesos to\r\nseparate with a Junior.
+ * 82: The Entitlement does not apply because your level does not match the + * corresponding area.
+ * + * @param type The type + * @return Family Result packet + */ + public static byte[] sendFamilyMessage(int type, int mesos) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); + mplew.writeShort(SendOpcode.FAMILY_RESULT.getValue()); + mplew.writeInt(type); + mplew.writeInt(mesos); + return mplew.getPacket(); + } + + public static byte[] getFamilyInfo(MapleFamilyEntry f) { + if (f == null) { + return getEmptyFamilyInfo(); + } + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAMILY_INFO_RESULT.getValue()); + mplew.writeInt(f.getReputation()); // cur rep left + mplew.writeInt(f.getTotalReputation()); // tot rep left + mplew.writeInt(f.getTodaysRep()); // todays rep + mplew.writeShort(f.getJuniorCount()); // juniors added + mplew.writeShort(2); // juniors allowed + mplew.writeShort(0); //Unknown + mplew.writeInt(f.getFamily().getLeader().getChrId()); // Leader ID (Allows setting message) + mplew.writeMapleAsciiString(f.getFamily().getName()); + mplew.writeMapleAsciiString(f.getFamily().getMessage()); //family message + mplew.writeInt(MapleFamilyEntitlement.values().length); //Entitlement info count + for (MapleFamilyEntitlement entitlement : MapleFamilyEntitlement.values()) { + mplew.writeInt(entitlement.ordinal()); //ID + mplew.writeInt(f.isEntitlementUsed(entitlement) ? 1 : 0); //Used count + } + return mplew.getPacket(); + } + + private static byte[] getEmptyFamilyInfo() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAMILY_INFO_RESULT.getValue()); + mplew.writeInt(0); // cur rep left + mplew.writeInt(0); // tot rep left + mplew.writeInt(0); // todays rep + mplew.writeShort(0); // juniors added + mplew.writeShort(2); // juniors allowed + mplew.writeShort(0); //Unknown + mplew.writeInt(0); // Leader ID (Allows setting message) + mplew.writeMapleAsciiString(""); + mplew.writeMapleAsciiString(""); //family message + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] showPedigree(MapleFamilyEntry entry) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAMILY_CHART_RESULT.getValue()); + mplew.writeInt(entry.getChrId()); //ID of viewed player's pedigree, can't be leader? + List superJuniors = new ArrayList<>(4); + boolean hasOtherJunior = false; + int entryCount = 2; //2 guaranteed, leader and self + entryCount += Math.min(2, entry.getTotalSeniors()); + //needed since MaplePacketLittleEndianWriter doesn't have any seek functionality + if (entry.getSenior() != null) { + if (entry.getSenior().getJuniorCount() == 2) { + entryCount++; + hasOtherJunior = true; + } + } + for (MapleFamilyEntry junior : entry.getJuniors()) { + if (junior == null) { + continue; } - mplew.write(0xD0 + items.size()); - mplew.write(new byte[]{-1, -1, -1, 0}); - return mplew.getPacket(); - } - - public static byte[] showCouponRedeemedItems(int accountId, int maplePoints, int mesos, List cashItems, List> items) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - mplew.write(0x59); - mplew.write((byte)cashItems.size()); - for(Item item : cashItems) { - addCashItemInformation(mplew, item, accountId); - } - mplew.writeInt(maplePoints); - mplew.writeInt(items.size()); - for(Pair itemPair : items) { - int quantity = itemPair.getLeft(); - mplew.writeShort((short) quantity); //quantity (0 = 1 for cash items) - mplew.writeShort(0x1F); //0 = ?, >=0x20 = ?, <0x20 = ? (does nothing?) - mplew.writeInt(itemPair.getRight()); - } - mplew.writeInt(mesos); - return mplew.getPacket(); - } - - public static byte[] showCash(MapleCharacter mc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.QUERY_CASH_RESULT.getValue()); - - mplew.writeInt(mc.getCashShop().getCash(1)); - mplew.writeInt(mc.getCashShop().getCash(2)); - mplew.writeInt(mc.getCashShop().getCash(4)); - - return mplew.getPacket(); - } - - public static byte[] enableCSUse(MapleCharacter mc) { - return showCash(mc); - } - - public static class WhisperFlag { - public static final byte LOCATION = 0x01; - public static final byte WHISPER = 0x02; - public static final byte REQUEST = 0x04; - public static final byte RESULT = 0x08; - public static final byte RECEIVE = 0x10; - public static final byte BLOCKED = 0x20; - public static final byte LOCATION_FRIEND = 0x40; - } - - /** - * User for /find, buddy find and /c (chase) - * CField::OnWhisper - * - * @param target Name String from the command parameter - * @param type Location of the target - * @param fieldOrChannel If true & chr is not null, shows different channel message - * @param flag LOCATION or LOCATION_FRIEND - * @return packet structure - */ - public static byte[] getFindResult(MapleCharacter target, byte type, int fieldOrChannel, byte flag) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.WHISPER.getValue()); - - mplew.write(flag | WhisperFlag.RESULT); - mplew.writeMapleAsciiString(target.getName()); - mplew.write(type); - mplew.writeInt(fieldOrChannel); - - if (type == WhisperHandler.RT_SAME_CHANNEL) { - mplew.writeInt(target.getPosition().x); - mplew.writeInt(target.getPosition().y); - } - - return mplew.getPacket(); - } - - public static byte[] getWhisperResult(String target, boolean success) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.WHISPER.getValue()); - - mplew.write(WhisperFlag.WHISPER | WhisperFlag.RESULT); - mplew.writeMapleAsciiString(target); - mplew.writeBool(success); - - return mplew.getPacket(); - } - - public static byte[] getWhisperReceive(String sender, int channel, boolean fromAdmin, String message) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.WHISPER.getValue()); - - mplew.write(WhisperFlag.WHISPER | WhisperFlag.RECEIVE); - mplew.writeMapleAsciiString(sender); - mplew.write(channel); - mplew.writeBool(fromAdmin); - mplew.writeMapleAsciiString(message); - - return mplew.getPacket(); - } - - public static byte[] sendAutoHpPot(int itemId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.AUTO_HP_POT.getValue()); - mplew.writeInt(itemId); - return mplew.getPacket(); - } - - public static byte[] sendAutoMpPot(int itemId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.AUTO_MP_POT.getValue()); - mplew.writeInt(itemId); - return mplew.getPacket(); - } - - public static byte[] showOXQuiz(int questionSet, int questionId, boolean askQuestion) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.OX_QUIZ.getValue()); - mplew.write(askQuestion ? 1 : 0); - mplew.write(questionSet); - mplew.writeShort(questionId); - return mplew.getPacket(); - } - - public static byte[] updateGender(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.SET_GENDER.getValue()); - mplew.write(chr.getGender()); - return mplew.getPacket(); - } - - public static byte[] enableReport() { // thanks to snow - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.CLAIM_STATUS_CHANGED.getValue()); - mplew.write(1); - return mplew.getPacket(); - } - - public static byte[] giveFinalAttack(int skillid, int time) { // packets found thanks to lailainoob - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_BUFF.getValue()); - mplew.writeLong(0); - mplew.writeShort(0); - mplew.write(0);//some 80 and 0 bs DIRECTION - mplew.write(0x80);//let's just do 80, then 0 - mplew.writeInt(0); - mplew.writeShort(1); - mplew.writeInt(skillid); - mplew.writeInt(time); - mplew.writeInt(0); - return mplew.getPacket(); - } - - public static byte[] loadFamily(MapleCharacter player) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_PRIVILEGE_LIST.getValue()); - mplew.writeInt(MapleFamilyEntitlement.values().length); - for (int i = 0; i < MapleFamilyEntitlement.values().length; i++) { - MapleFamilyEntitlement entitlement = MapleFamilyEntitlement.values()[i]; - mplew.write(i <= 1 ? 1 : 2); //type - mplew.writeInt(entitlement.getRepCost()); - mplew.writeInt(entitlement.getUsageLimit()); - mplew.writeMapleAsciiString(entitlement.getName()); - mplew.writeMapleAsciiString(entitlement.getDescription()); - } - return mplew.getPacket(); - } - - /** - * Family Result Message - * - * Possible values for type:
- * 64: You cannot add this character as a junior. - * 65: The name could not be found or is not online. - * 66: You belong to the same family. - * 67: You do not belong to the same family.
- * 69: The character you wish to add as\r\na Junior must be in the same - * map.
- * 70: This character is already a Junior of another character.
- * 71: The Junior you wish to add\r\nmust be at a lower rank.
- * 72: The gap between you and your\r\njunior must be within 20 levels.
- * 73: Another character has requested to add this character.\r\nPlease try - * again later.
- * 74: Another character has requested a summon.\r\nPlease try again - * later.
- * 75: The summons has failed. Your current location or state does not allow - * a summons.
- * 76: The family cannot extend more than 1000 generations from above and - * below.
- * 77: The Junior you wish to add\r\nmust be over Level 10.
- * 78: You cannot add a Junior \r\nthat has requested to change worlds.
- * 79: You cannot add a Junior \r\nsince you've requested to change - * worlds.
- * 80: Separation is not possible due to insufficient Mesos.\r\nYou will - * need %d Mesos to\r\nseparate with a Senior.
- * 81: Separation is not possible due to insufficient Mesos.\r\nYou will - * need %d Mesos to\r\nseparate with a Junior.
- * 82: The Entitlement does not apply because your level does not match the - * corresponding area.
- * - * @param type The type - * @return Family Result packet - */ - public static byte[] sendFamilyMessage(int type, int mesos) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.FAMILY_RESULT.getValue()); - mplew.writeInt(type); - mplew.writeInt(mesos); - return mplew.getPacket(); - } - - public static byte[] getFamilyInfo(MapleFamilyEntry f) { - if(f == null) return getEmptyFamilyInfo(); - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_INFO_RESULT.getValue()); - mplew.writeInt(f.getReputation()); // cur rep left - mplew.writeInt(f.getTotalReputation()); // tot rep left - mplew.writeInt(f.getTodaysRep()); // todays rep - mplew.writeShort(f.getJuniorCount()); // juniors added - mplew.writeShort(2); // juniors allowed - mplew.writeShort(0); //Unknown - mplew.writeInt(f.getFamily().getLeader().getChrId()); // Leader ID (Allows setting message) - mplew.writeMapleAsciiString(f.getFamily().getName()); - mplew.writeMapleAsciiString(f.getFamily().getMessage()); //family message - mplew.writeInt(MapleFamilyEntitlement.values().length); //Entitlement info count - for(MapleFamilyEntitlement entitlement : MapleFamilyEntitlement.values()) { - mplew.writeInt(entitlement.ordinal()); //ID - mplew.writeInt(f.isEntitlementUsed(entitlement) ? 1 : 0); //Used count - } - return mplew.getPacket(); - } - - private static byte[] getEmptyFamilyInfo() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_INFO_RESULT.getValue()); - mplew.writeInt(0); // cur rep left - mplew.writeInt(0); // tot rep left - mplew.writeInt(0); // todays rep - mplew.writeShort(0); // juniors added - mplew.writeShort(2); // juniors allowed - mplew.writeShort(0); //Unknown - mplew.writeInt(0); // Leader ID (Allows setting message) - mplew.writeMapleAsciiString(""); - mplew.writeMapleAsciiString(""); //family message - mplew.writeInt(0); - return mplew.getPacket(); - } - - public static byte[] showPedigree(MapleFamilyEntry entry) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_CHART_RESULT.getValue()); - mplew.writeInt(entry.getChrId()); //ID of viewed player's pedigree, can't be leader? - List superJuniors = new ArrayList<>(4); - boolean hasOtherJunior = false; - int entryCount = 2; //2 guaranteed, leader and self - entryCount += Math.min(2, entry.getTotalSeniors()); - //needed since MaplePacketLittleEndianWriter doesn't have any seek functionality - if(entry.getSenior() != null) { - if(entry.getSenior().getJuniorCount() == 2) { - entryCount++; - hasOtherJunior = true; + entryCount++; + for (MapleFamilyEntry superJunior : junior.getJuniors()) { + if (superJunior == null) { + continue; } - } - for(MapleFamilyEntry junior : entry.getJuniors()) { - if(junior == null) continue; + entryCount++; + superJuniors.add(superJunior); + } + } + //write entries + boolean missingEntries = entryCount == 2; //pedigree requires at least 3 entries to show leader, might only have 2 if leader's juniors leave + if (missingEntries) { entryCount++; - for(MapleFamilyEntry superJunior : junior.getJuniors()) { - if(superJunior == null) continue; - entryCount++; - superJuniors.add(superJunior); + } + mplew.writeInt(entryCount); //player count + addPedigreeEntry(mplew, entry.getFamily().getLeader()); + if (entry.getSenior() != null) { + if (entry.getSenior().getSenior() != null) { + addPedigreeEntry(mplew, entry.getSenior().getSenior()); + } + addPedigreeEntry(mplew, entry.getSenior()); + } + addPedigreeEntry(mplew, entry); + if (hasOtherJunior) { //must be sent after own entry + MapleFamilyEntry otherJunior = entry.getSenior().getOtherJunior(entry); + if (otherJunior != null) { + addPedigreeEntry(mplew, otherJunior); + } + } + if (missingEntries) { + addPedigreeEntry(mplew, entry); + } + for (MapleFamilyEntry junior : entry.getJuniors()) { + if (junior == null) { + continue; + } + addPedigreeEntry(mplew, junior); + for (MapleFamilyEntry superJunior : junior.getJuniors()) { + if (superJunior != null) { + addPedigreeEntry(mplew, superJunior); } + } + } + mplew.writeInt(2 + superJuniors.size()); //member info count + // 0 = total seniors, -1 = total members, otherwise junior count of ID + mplew.writeInt(-1); + mplew.writeInt(entry.getFamily().getTotalMembers()); + mplew.writeInt(0); + mplew.writeInt(entry.getTotalSeniors()); //client subtracts provided seniors + for (MapleFamilyEntry superJunior : superJuniors) { + mplew.writeInt(superJunior.getChrId()); + mplew.writeInt(superJunior.getTotalJuniors()); + } + mplew.writeInt(0); //another loop count (entitlements used) + //mplew.writeInt(1); //entitlement index + //mplew.writeInt(2); //times used + mplew.writeShort(entry.getJuniorCount() >= 2 ? 0 : 2); //0 disables Add button (only if viewing own pedigree) + return mplew.getPacket(); + } + + private static void addPedigreeEntry(MaplePacketLittleEndianWriter mplew, MapleFamilyEntry entry) { + MapleCharacter chr = entry.getChr(); + boolean isOnline = chr != null; + mplew.writeInt(entry.getChrId()); //ID + mplew.writeInt(entry.getSenior() != null ? entry.getSenior().getChrId() : 0); //parent ID + mplew.writeShort(entry.getJob().getId()); //job id + mplew.write(entry.getLevel()); //level + mplew.writeBool(isOnline); //isOnline + mplew.writeInt(entry.getReputation()); //current rep + mplew.writeInt(entry.getTotalReputation()); //total rep + mplew.writeInt(entry.getRepsToSenior()); //reps recorded to senior + mplew.writeInt(entry.getTodaysRep()); + mplew.writeInt(isOnline ? ((chr.isAwayFromWorld() || chr.getCashShop().isOpened()) ? -1 : chr.getClient().getChannel() - 1) : 0); + mplew.writeInt(isOnline ? (int) (chr.getLoggedInTime() / 60000) : 0); //time online in minutes + mplew.writeMapleAsciiString(entry.getName()); //name + } + + public static byte[] updateAreaInfo(int area, String info) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(0x0A); //0x0B in v95 + mplew.writeShort(area);//infoNumber + mplew.writeMapleAsciiString(info); + return mplew.getPacket(); + } + + public static byte[] getGPMessage(int gpChange) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(6); + mplew.writeInt(gpChange); + return mplew.getPacket(); + } + + public static byte[] getItemMessage(int itemid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(7); + mplew.writeInt(itemid); + return mplew.getPacket(); + } + + public static byte[] addCard(boolean full, int cardid, int level) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); + mplew.writeShort(SendOpcode.MONSTER_BOOK_SET_CARD.getValue()); + mplew.write(full ? 0 : 1); + mplew.writeInt(cardid); + mplew.writeInt(level); + return mplew.getPacket(); + } + + public static byte[] showGainCard() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); + mplew.write(0x0D); + return mplew.getPacket(); + } + + public static byte[] showForeignCardEffect(int id) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); + mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); + mplew.writeInt(id); + mplew.write(0x0D); + return mplew.getPacket(); + } + + public static byte[] changeCover(int cardid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); + mplew.writeShort(SendOpcode.MONSTER_BOOK_SET_COVER.getValue()); + mplew.writeInt(cardid); + return mplew.getPacket(); + } + + public static byte[] aranGodlyStats() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FORCED_STAT_SET.getValue()); + mplew.write(new byte[]{(byte) 0x1F, (byte) 0x0F, 0, 0, (byte) 0xE7, 3, (byte) 0xE7, 3, (byte) 0xE7, 3, (byte) 0xE7, 3, (byte) 0xFF, 0, (byte) 0xE7, 3, (byte) 0xE7, 3, (byte) 0x78, (byte) 0x8C}); + return mplew.getPacket(); + } + + public static byte[] showIntro(String path) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); + mplew.write(0x12); + mplew.writeMapleAsciiString(path); + return mplew.getPacket(); + } + + public static byte[] showInfo(String path) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); + mplew.write(0x17); + mplew.writeMapleAsciiString(path); + mplew.writeInt(1); + return mplew.getPacket(); + } + + public static byte[] showForeignInfo(int cid, String path) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); + mplew.writeInt(cid); + mplew.write(0x17); + mplew.writeMapleAsciiString(path); + mplew.writeInt(1); + return mplew.getPacket(); + } + + /** + * Sends a UI utility. 0x01 - Equipment Inventory. 0x02 - Stat Window. 0x03 + * - Skill Window. 0x05 - Keyboard Settings. 0x06 - Quest window. 0x09 - + * Monsterbook Window. 0x0A - Char Info 0x0B - Guild BBS 0x12 - Monster + * Carnival Window 0x16 - Party Search. 0x17 - Item Creation Window. 0x1A - + * My Ranking O.O 0x1B - Family Window 0x1C - Family Pedigree 0x1D - GM + * Story Board /funny shet 0x1E - Envelop saying you got mail from an admin. + * lmfao 0x1F - Medal Window 0x20 - Maple Event (???) 0x21 - Invalid Pointer + * Crash + * + * @param ui + * @return + */ + public static byte[] openUI(byte ui) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.OPEN_UI.getValue()); + mplew.write(ui); + return mplew.getPacket(); + } + + public static byte[] lockUI(boolean enable) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.LOCK_UI.getValue()); + mplew.write(enable ? 1 : 0); + return mplew.getPacket(); + } + + public static byte[] disableUI(boolean enable) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.DISABLE_UI.getValue()); + mplew.write(enable ? 1 : 0); + return mplew.getPacket(); + } + + public static byte[] itemMegaphone(String msg, boolean whisper, int channel, Item item) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SERVERMESSAGE.getValue()); + mplew.write(8); + mplew.writeMapleAsciiString(msg); + mplew.write(channel - 1); + mplew.write(whisper ? 1 : 0); + if (item == null) { + mplew.write(0); + } else { + mplew.write(item.getPosition()); + addItemInfo(mplew, item, true); + } + return mplew.getPacket(); + } + + public static byte[] removeNPC(int oid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.REMOVE_NPC.getValue()); + mplew.writeInt(oid); + + return mplew.getPacket(); + } + + public static byte[] removeNPCController(int objectid) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + + mplew.writeShort(SendOpcode.SPAWN_NPC_REQUEST_CONTROLLER.getValue()); + mplew.write(0); + mplew.writeInt(objectid); + + return mplew.getPacket(); + } + + /** + * Sends a report response + *

+ * Possible values for mode:
0: You have succesfully + * reported the user.
1: Unable to locate the user.
2: You may only + * report users 10 times a day.
3: You have been reported to the GM's by + * a user.
4: Your request did not go through for unknown reasons. + * Please try again later.
+ * + * @param mode The mode + * @return Report Reponse packet + */ + public static byte[] reportResponse(byte mode) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SUE_CHARACTER_RESULT.getValue()); + mplew.write(mode); + return mplew.getPacket(); + } + + public static byte[] sendHammerData(int hammerUsed) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.VICIOUS_HAMMER.getValue()); + mplew.write(0x39); + mplew.writeInt(0); + mplew.writeInt(hammerUsed); + return mplew.getPacket(); + } + + public static byte[] sendHammerMessage() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.VICIOUS_HAMMER.getValue()); + mplew.write(0x3D); + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] playPortalSound() { + return showSpecialEffect(7); + } + + public static byte[] showMonsterBookPickup() { + return showSpecialEffect(14); + } + + public static byte[] showEquipmentLevelUp() { + return showSpecialEffect(15); + } + + public static byte[] showItemLevelup() { + return showSpecialEffect(15); + } + + public static byte[] showBuybackEffect() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); + mplew.write(11); + mplew.writeInt(0); + + return mplew.getPacket(); + } + + public static byte[] showForeignBuybackEffect(int cid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); + mplew.writeInt(cid); + mplew.write(11); + mplew.writeInt(0); + + return mplew.getPacket(); + } + + /** + * 0 = Levelup 6 = Exp did not drop (Safety Charms) 7 = Enter portal sound + * 8 = Job change 9 = Quest complete 10 = Recovery 11 = Buff effect + * 14 = Monster book pickup 15 = Equipment levelup 16 = Maker Skill Success + * 17 = Buff effect w/ sfx 19 = Exp card [500, 200, 50] 21 = Wheel of destiny + * 26 = Spirit Stone + * + * @param effect + * @return + */ + public static byte[] showSpecialEffect(int effect) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); + mplew.write(effect); + return mplew.getPacket(); + } + + public static byte[] showMakerEffect(boolean makerSucceeded) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); + mplew.write(16); + mplew.writeInt(makerSucceeded ? 0 : 1); + return mplew.getPacket(); + } + + public static byte[] showForeignMakerEffect(int cid, boolean makerSucceeded) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); + mplew.writeInt(cid); + mplew.write(16); + mplew.writeInt(makerSucceeded ? 0 : 1); + return mplew.getPacket(); + } + + public static byte[] showForeignEffect(int effect) { + return showForeignEffect(-1, effect); + } + + public static byte[] showForeignEffect(int cid, int effect) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); + mplew.writeInt(cid); + mplew.write(effect); + return mplew.getPacket(); + } + + public static byte[] showOwnRecovery(byte heal) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); + mplew.write(0x0A); + mplew.write(heal); + return mplew.getPacket(); + } + + public static byte[] showRecovery(int cid, byte amount) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); + mplew.writeInt(cid); + mplew.write(0x0A); + mplew.write(amount); + return mplew.getPacket(); + } + + public static byte[] showWheelsLeft(int left) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); + mplew.write(0x15); + mplew.write(left); + return mplew.getPacket(); + } + + public static byte[] updateQuestFinish(short quest, int npc, short nextquest) { //Check + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); //0xF2 in v95 + mplew.write(8);//0x0A in v95 + mplew.writeShort(quest); + mplew.writeInt(npc); + mplew.writeShort(nextquest); + return mplew.getPacket(); + } + + public static byte[] showInfoText(String text) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(9); + mplew.writeMapleAsciiString(text); + return mplew.getPacket(); + } + + public static byte[] questError(short quest) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); + mplew.write(0x0A); + mplew.writeShort(quest); + return mplew.getPacket(); + } + + public static byte[] questFailure(byte type) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); + mplew.write(type);//0x0B = No meso, 0x0D = Worn by character, 0x0E = Not having the item ? + return mplew.getPacket(); + } + + public static byte[] questExpire(short quest) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); + mplew.write(0x0F); + mplew.writeShort(quest); + return mplew.getPacket(); + } + + // MAKER_RESULT packets thanks to Arnah (Vertisy) + public static byte[] makerResult(boolean success, int itemMade, int itemCount, int mesos, List> itemsLost, int catalystID, List INCBuffGems) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MAKER_RESULT.getValue()); + mplew.writeInt(success ? 0 : 1); // 0 = success, 1 = fail + mplew.writeInt(1); // 1 or 2 doesn't matter, same methods + mplew.writeBool(!success); + if (success) { + mplew.writeInt(itemMade); + mplew.writeInt(itemCount); + } + mplew.writeInt(itemsLost.size()); // Loop + for (Pair item : itemsLost) { + mplew.writeInt(item.getLeft()); + mplew.writeInt(item.getRight()); + } + mplew.writeInt(INCBuffGems.size()); + for (Integer gem : INCBuffGems) { + mplew.writeInt(gem); + } + if (catalystID != -1) { + mplew.write(1); // stimulator + mplew.writeInt(catalystID); + } else { + mplew.write(0); + } + + mplew.writeInt(mesos); + return mplew.getPacket(); + } + + public static byte[] makerResultCrystal(int itemIdGained, int itemIdLost) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MAKER_RESULT.getValue()); + mplew.writeInt(0); // Always successful! + mplew.writeInt(3); // Monster Crystal + mplew.writeInt(itemIdGained); + mplew.writeInt(itemIdLost); + return mplew.getPacket(); + } + + public static byte[] makerResultDesynth(int itemId, int mesos, List> itemsGained) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MAKER_RESULT.getValue()); + mplew.writeInt(0); // Always successful! + mplew.writeInt(4); // Mode Desynth + mplew.writeInt(itemId); // Item desynthed + mplew.writeInt(itemsGained.size()); // Loop of items gained, (int, int) + for (Pair item : itemsGained) { + mplew.writeInt(item.getLeft()); + mplew.writeInt(item.getRight()); + } + mplew.writeInt(mesos); // Mesos spent. + return mplew.getPacket(); + } + + public static byte[] makerEnableActions() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MAKER_RESULT.getValue()); + mplew.writeInt(0); // Always successful! + mplew.writeInt(0); // Monster Crystal + mplew.writeInt(0); + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] getMultiMegaphone(String[] messages, int channel, boolean showEar) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SERVERMESSAGE.getValue()); + mplew.write(0x0A); + if (messages[0] != null) { + mplew.writeMapleAsciiString(messages[0]); + } + mplew.write(messages.length); + for (int i = 1; i < messages.length; i++) { + if (messages[i] != null) { + mplew.writeMapleAsciiString(messages[i]); + } + } + for (int i = 0; i < 10; i++) { + mplew.write(channel - 1); + } + mplew.write(showEar ? 1 : 0); + mplew.write(1); + return mplew.getPacket(); + } + + /** + * Gets a gm effect packet (ie. hide, banned, etc.) + *

+ * Possible values for type:
0x04: You have successfully + * blocked access.
+ * 0x05: The unblocking has been successful.
0x06 with Mode 0: You have + * successfully removed the name from the ranks.
0x06 with Mode 1: You + * have entered an invalid character name.
0x10: GM Hide, mode + * determines whether or not it is on.
0x1E: Mode 0: Failed to send + * warning Mode 1: Sent warning
0x13 with Mode 0: + mapid 0x13 with Mode + * 1: + ch (FF = Unable to find merchant) + * + * @param type The type + * @param mode The mode + * @return The gm effect packet + */ + public static byte[] getGMEffect(int type, byte mode) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ADMIN_RESULT.getValue()); + mplew.write(type); + mplew.write(mode); + return mplew.getPacket(); + } + + public static byte[] findMerchantResponse(boolean map, int extra) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ADMIN_RESULT.getValue()); + mplew.write(0x13); + mplew.write(map ? 0 : 1); //00 = mapid, 01 = ch + if (map) { + mplew.writeInt(extra); + } else { + mplew.write(extra); //-1 = unable to find + } + mplew.write(0); + return mplew.getPacket(); + } + + public static byte[] disableMinimap() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ADMIN_RESULT.getValue()); + mplew.writeShort(0x1C); + return mplew.getPacket(); + } + + public static byte[] sendFamilyInvite(int playerId, String inviter) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAMILY_JOIN_REQUEST.getValue()); + mplew.writeInt(playerId); + mplew.writeMapleAsciiString(inviter); + return mplew.getPacket(); + } + + public static byte[] sendFamilySummonRequest(String familyName, String from) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAMILY_SUMMON_REQUEST.getValue()); + mplew.writeMapleAsciiString(from); + mplew.writeMapleAsciiString(familyName); + return mplew.getPacket(); + } + + public static byte[] sendFamilyLoginNotice(String name, boolean loggedIn) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAMILY_NOTIFY_LOGIN_OR_LOGOUT.getValue()); + mplew.writeBool(loggedIn); + mplew.writeMapleAsciiString(name); + return mplew.getPacket(); + } + + public static byte[] sendFamilyJoinResponse(boolean accepted, String added) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAMILY_JOIN_REQUEST_RESULT.getValue()); + mplew.write(accepted ? 1 : 0); + mplew.writeMapleAsciiString(added); + return mplew.getPacket(); + } + + public static byte[] getSeniorMessage(String name) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAMILY_JOIN_ACCEPTED.getValue()); + mplew.writeMapleAsciiString(name); + mplew.writeInt(0); + return mplew.getPacket(); + } + + public static byte[] sendGainRep(int gain, String from) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FAMILY_REP_GAIN.getValue()); + mplew.writeInt(gain); + mplew.writeMapleAsciiString(from); + return mplew.getPacket(); + } + + public static byte[] showBoughtCashPackage(List cashPackage, int accountId) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + + mplew.write(0x89); + mplew.write(cashPackage.size()); + + for (Item item : cashPackage) { + addCashItemInformation(mplew, item, accountId); + } + + mplew.writeShort(0); + + return mplew.getPacket(); + } + + public static byte[] showBoughtQuestItem(int itemId) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + + mplew.write(0x8D); + mplew.writeInt(1); + mplew.writeShort(1); + mplew.write(0x0B); + mplew.write(0); + mplew.writeInt(itemId); + + return mplew.getPacket(); + } + + // Cash Shop Surprise packets found thanks to Arnah (Vertisy) + public static byte[] onCashItemGachaponOpenFailed() { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_CASH_ITEM_GACHAPON_RESULT.getValue()); + mplew.write(0xE4); + return mplew.getPacket(); + } + + public static byte[] onCashGachaponOpenSuccess(int accountid, long sn, int remainingBoxes, Item item, int itemid, int nSelectedItemCount, boolean bJackpot) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_CASH_ITEM_GACHAPON_RESULT.getValue()); + mplew.write(0xE5); // subopcode thanks to Ubaware + mplew.writeLong(sn);// sn of the box used + mplew.writeInt(remainingBoxes); + addCashItemInformation(mplew, item, accountid); + mplew.writeInt(itemid);// the itemid of the liSN? + mplew.write(nSelectedItemCount);// the total count now? o.O + mplew.writeBool(bJackpot);// "CashGachaponJackpot" + return mplew.getPacket(); + } + + private static void getGuildInfo(final MaplePacketLittleEndianWriter mplew, MapleGuild guild) { + mplew.writeInt(guild.getId()); + mplew.writeMapleAsciiString(guild.getName()); + for (int i = 1; i <= 5; i++) { + mplew.writeMapleAsciiString(guild.getRankTitle(i)); + } + Collection members = guild.getMembers(); + mplew.write(members.size()); + for (MapleGuildCharacter mgc : members) { + mplew.writeInt(mgc.getId()); + } + for (MapleGuildCharacter mgc : members) { + mplew.writeAsciiString(getRightPaddedStr(mgc.getName(), '\0', 13)); + mplew.writeInt(mgc.getJobId()); + mplew.writeInt(mgc.getLevel()); + mplew.writeInt(mgc.getGuildRank()); + mplew.writeInt(mgc.isOnline() ? 1 : 0); + mplew.writeInt(guild.getSignature()); + mplew.writeInt(mgc.getAllianceRank()); + } + mplew.writeInt(guild.getCapacity()); + mplew.writeShort(guild.getLogoBG()); + mplew.write(guild.getLogoBGColor()); + mplew.writeShort(guild.getLogo()); + mplew.write(guild.getLogoColor()); + mplew.writeMapleAsciiString(guild.getNotice()); + mplew.writeInt(guild.getGP()); + mplew.writeInt(guild.getAllianceId()); + } + + public static byte[] getAllianceInfo(MapleAlliance alliance) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); + mplew.write(0x0C); + mplew.write(1); + mplew.writeInt(alliance.getId()); + mplew.writeMapleAsciiString(alliance.getName()); + for (int i = 1; i <= 5; i++) { + mplew.writeMapleAsciiString(alliance.getRankTitle(i)); + } + mplew.write(alliance.getGuilds().size()); + mplew.writeInt(alliance.getCapacity()); // probably capacity + for (Integer guild : alliance.getGuilds()) { + mplew.writeInt(guild); + } + mplew.writeMapleAsciiString(alliance.getNotice()); + return mplew.getPacket(); + } + + public static byte[] updateAllianceInfo(MapleAlliance alliance, int world) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); + mplew.write(0x0F); + mplew.writeInt(alliance.getId()); + mplew.writeMapleAsciiString(alliance.getName()); + for (int i = 1; i <= 5; i++) { + mplew.writeMapleAsciiString(alliance.getRankTitle(i)); + } + mplew.write(alliance.getGuilds().size()); + for (Integer guild : alliance.getGuilds()) { + mplew.writeInt(guild); + } + mplew.writeInt(alliance.getCapacity()); // probably capacity + mplew.writeShort(0); + for (Integer guildid : alliance.getGuilds()) { + getGuildInfo(mplew, Server.getInstance().getGuild(guildid, world)); + } + return mplew.getPacket(); + } + + public static byte[] getGuildAlliances(MapleAlliance alliance, int worldId) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); + mplew.write(0x0D); + mplew.writeInt(alliance.getGuilds().size()); + for (Integer guild : alliance.getGuilds()) { + getGuildInfo(mplew, Server.getInstance().getGuild(guild, worldId)); + } + return mplew.getPacket(); + } + + public static byte[] addGuildToAlliance(MapleAlliance alliance, int newGuild, MapleClient c) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); + mplew.write(0x12); + mplew.writeInt(alliance.getId()); + mplew.writeMapleAsciiString(alliance.getName()); + for (int i = 1; i <= 5; i++) { + mplew.writeMapleAsciiString(alliance.getRankTitle(i)); + } + mplew.write(alliance.getGuilds().size()); + for (Integer guild : alliance.getGuilds()) { + mplew.writeInt(guild); + } + mplew.writeInt(alliance.getCapacity()); + mplew.writeMapleAsciiString(alliance.getNotice()); + mplew.writeInt(newGuild); + getGuildInfo(mplew, Server.getInstance().getGuild(newGuild, c.getWorld(), null)); + return mplew.getPacket(); + } + + public static byte[] allianceMemberOnline(MapleCharacter mc, boolean online) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); + mplew.write(0x0E); + mplew.writeInt(mc.getGuild().getAllianceId()); + mplew.writeInt(mc.getGuildId()); + mplew.writeInt(mc.getId()); + mplew.write(online ? 1 : 0); + return mplew.getPacket(); + } + + public static byte[] allianceNotice(int id, String notice) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); + mplew.write(0x1C); + mplew.writeInt(id); + mplew.writeMapleAsciiString(notice); + return mplew.getPacket(); + } + + public static byte[] changeAllianceRankTitle(int alliance, String[] ranks) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); + mplew.write(0x1A); + mplew.writeInt(alliance); + for (int i = 0; i < 5; i++) { + mplew.writeMapleAsciiString(ranks[i]); + } + return mplew.getPacket(); + } + + public static byte[] updateAllianceJobLevel(MapleCharacter mc) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); + mplew.write(0x18); + mplew.writeInt(mc.getGuild().getAllianceId()); + mplew.writeInt(mc.getGuildId()); + mplew.writeInt(mc.getId()); + mplew.writeInt(mc.getLevel()); + mplew.writeInt(mc.getJob().getId()); + return mplew.getPacket(); + } + + public static byte[] removeGuildFromAlliance(MapleAlliance alliance, int expelledGuild, int worldId) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); + mplew.write(0x10); + mplew.writeInt(alliance.getId()); + mplew.writeMapleAsciiString(alliance.getName()); + for (int i = 1; i <= 5; i++) { + mplew.writeMapleAsciiString(alliance.getRankTitle(i)); + } + mplew.write(alliance.getGuilds().size()); + for (Integer guild : alliance.getGuilds()) { + mplew.writeInt(guild); + } + mplew.writeInt(alliance.getCapacity()); + mplew.writeMapleAsciiString(alliance.getNotice()); + mplew.writeInt(expelledGuild); + getGuildInfo(mplew, Server.getInstance().getGuild(expelledGuild, worldId, null)); + mplew.write(0x01); + return mplew.getPacket(); + } + + public static byte[] disbandAlliance(int alliance) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); + mplew.write(0x1D); + mplew.writeInt(alliance); + return mplew.getPacket(); + } + + public static byte[] allianceInvite(int allianceid, MapleCharacter chr) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); + mplew.write(0x03); + mplew.writeInt(allianceid); + mplew.writeMapleAsciiString(chr.getName()); + mplew.writeShort(0); + return mplew.getPacket(); + } + + public static byte[] sendMesoLimit() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.TRADE_MONEY_LIMIT.getValue()); //Players under level 15 can only trade 1m per day + return mplew.getPacket(); + } + + public static byte[] removeItemFromDuey(boolean remove, int Package) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PARCEL.getValue()); + mplew.write(0x17); + mplew.writeInt(Package); + mplew.write(remove ? 3 : 4); + return mplew.getPacket(); + } + + public static byte[] sendDueyParcelReceived(String from, boolean quick) { // thanks inhyuk + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PARCEL.getValue()); + mplew.write(0x19); + mplew.writeMapleAsciiString(from); + mplew.writeBool(quick); + return mplew.getPacket(); + } + + public static byte[] sendDueyParcelNotification(boolean quick) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PARCEL.getValue()); + mplew.write(0x1B); + mplew.writeBool(quick); // 0 : package received, 1 : quick delivery package + return mplew.getPacket(); + } + + public static byte[] sendDueyMSG(byte operation) { + return sendDuey(operation, null); + } + + public static byte[] sendDuey(int operation, List packages) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PARCEL.getValue()); + mplew.write(operation); + if (operation == 8) { + mplew.write(0); + mplew.write(packages.size()); + for (DueyPackage dp : packages) { + mplew.writeInt(dp.getPackageId()); + mplew.writeAsciiString(dp.getSender()); + for (int i = dp.getSender().length(); i < 13; i++) { + mplew.write(0); } - //write entries - boolean missingEntries = entryCount == 2; //pedigree requires at least 3 entries to show leader, might only have 2 if leader's juniors leave - if(missingEntries) entryCount++; - mplew.writeInt(entryCount); //player count - addPedigreeEntry(mplew, entry.getFamily().getLeader()); - if(entry.getSenior() != null) { - if(entry.getSenior().getSenior() != null) addPedigreeEntry(mplew, entry.getSenior().getSenior()); - addPedigreeEntry(mplew, entry.getSenior()); - } - addPedigreeEntry(mplew, entry); - if(hasOtherJunior) { //must be sent after own entry - MapleFamilyEntry otherJunior = entry.getSenior().getOtherJunior(entry); - if(otherJunior != null) addPedigreeEntry(mplew, otherJunior); - } - if(missingEntries) addPedigreeEntry(mplew, entry); - for(MapleFamilyEntry junior : entry.getJuniors()) { - if(junior == null) continue; - addPedigreeEntry(mplew, junior); - for(MapleFamilyEntry superJunior : junior.getJuniors()) { - if(superJunior != null) addPedigreeEntry(mplew, superJunior); - } - } - mplew.writeInt(2 + superJuniors.size()); //member info count - // 0 = total seniors, -1 = total members, otherwise junior count of ID - mplew.writeInt(-1); - mplew.writeInt(entry.getFamily().getTotalMembers()); - mplew.writeInt(0); - mplew.writeInt(entry.getTotalSeniors()); //client subtracts provided seniors - for(MapleFamilyEntry superJunior : superJuniors) { - mplew.writeInt(superJunior.getChrId()); - mplew.writeInt(superJunior.getTotalJuniors()); - } - mplew.writeInt(0); //another loop count (entitlements used) - //mplew.writeInt(1); //entitlement index - //mplew.writeInt(2); //times used - mplew.writeShort(entry.getJuniorCount() >= 2 ? 0 : 2); //0 disables Add button (only if viewing own pedigree) - return mplew.getPacket(); - } - - private static void addPedigreeEntry(MaplePacketLittleEndianWriter mplew, MapleFamilyEntry entry) { - MapleCharacter chr = entry.getChr(); - boolean isOnline = chr != null; - mplew.writeInt(entry.getChrId()); //ID - mplew.writeInt(entry.getSenior() != null ? entry.getSenior().getChrId() : 0); //parent ID - mplew.writeShort(entry.getJob().getId()); //job id - mplew.write(entry.getLevel()); //level - mplew.writeBool(isOnline); //isOnline - mplew.writeInt(entry.getReputation()); //current rep - mplew.writeInt(entry.getTotalReputation()); //total rep - mplew.writeInt(entry.getRepsToSenior()); //reps recorded to senior - mplew.writeInt(entry.getTodaysRep()); - mplew.writeInt(isOnline ? ((chr.isAwayFromWorld() || chr.getCashShop().isOpened()) ? -1 : chr.getClient().getChannel() - 1) : 0); - mplew.writeInt(isOnline ? (int) (chr.getLoggedInTime() / 60000) : 0); //time online in minutes - mplew.writeMapleAsciiString(entry.getName()); //name - } - public static byte[] updateAreaInfo(int area, String info) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(0x0A); //0x0B in v95 - mplew.writeShort(area);//infoNumber - mplew.writeMapleAsciiString(info); - return mplew.getPacket(); - } + mplew.writeInt(dp.getMesos()); + mplew.writeLong(getTime(dp.sentTimeInMilliseconds())); - public static byte[] getGPMessage(int gpChange) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(6); - mplew.writeInt(gpChange); - return mplew.getPacket(); - } - - public static byte[] getItemMessage(int itemid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(7); - mplew.writeInt(itemid); - return mplew.getPacket(); - } - - public static byte[] addCard(boolean full, int cardid, int level) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); - mplew.writeShort(SendOpcode.MONSTER_BOOK_SET_CARD.getValue()); - mplew.write(full ? 0 : 1); - mplew.writeInt(cardid); - mplew.writeInt(level); - return mplew.getPacket(); - } - - public static byte[] showGainCard() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(0x0D); - return mplew.getPacket(); - } - - public static byte[] showForeignCardEffect(int id) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(id); - mplew.write(0x0D); - return mplew.getPacket(); - } - - public static byte[] changeCover(int cardid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.MONSTER_BOOK_SET_COVER.getValue()); - mplew.writeInt(cardid); - return mplew.getPacket(); - } - - public static byte[] aranGodlyStats() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FORCED_STAT_SET.getValue()); - mplew.write(new byte[]{(byte) 0x1F, (byte) 0x0F, 0, 0, (byte) 0xE7, 3, (byte) 0xE7, 3, (byte) 0xE7, 3, (byte) 0xE7, 3, (byte) 0xFF, 0, (byte) 0xE7, 3, (byte) 0xE7, 3, (byte) 0x78, (byte) 0x8C}); - return mplew.getPacket(); - } - - public static byte[] showIntro(String path) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(0x12); - mplew.writeMapleAsciiString(path); - return mplew.getPacket(); - } - - public static byte[] showInfo(String path) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(0x17); - mplew.writeMapleAsciiString(path); - mplew.writeInt(1); - return mplew.getPacket(); - } - - public static byte[] showForeignInfo(int cid, String path) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(0x17); - mplew.writeMapleAsciiString(path); - mplew.writeInt(1); - return mplew.getPacket(); - } - - /** - * Sends a UI utility. 0x01 - Equipment Inventory. 0x02 - Stat Window. 0x03 - * - Skill Window. 0x05 - Keyboard Settings. 0x06 - Quest window. 0x09 - - * Monsterbook Window. 0x0A - Char Info 0x0B - Guild BBS 0x12 - Monster - * Carnival Window 0x16 - Party Search. 0x17 - Item Creation Window. 0x1A - - * My Ranking O.O 0x1B - Family Window 0x1C - Family Pedigree 0x1D - GM - * Story Board /funny shet 0x1E - Envelop saying you got mail from an admin. - * lmfao 0x1F - Medal Window 0x20 - Maple Event (???) 0x21 - Invalid Pointer - * Crash - * - * @param ui - * @return - */ - public static byte[] openUI(byte ui) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.OPEN_UI.getValue()); - mplew.write(ui); - return mplew.getPacket(); - } - - public static byte[] lockUI(boolean enable) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.LOCK_UI.getValue()); - mplew.write(enable ? 1 : 0); - return mplew.getPacket(); - } - - public static byte[] disableUI(boolean enable) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DISABLE_UI.getValue()); - mplew.write(enable ? 1 : 0); - return mplew.getPacket(); - } - - public static byte[] itemMegaphone(String msg, boolean whisper, int channel, Item item) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SERVERMESSAGE.getValue()); - mplew.write(8); - mplew.writeMapleAsciiString(msg); - mplew.write(channel - 1); - mplew.write(whisper ? 1 : 0); - if (item == null) { + String msg = dp.getMessage(); + if (msg != null) { + mplew.writeInt(1); + mplew.writeAsciiString(msg); + for (int i = msg.length(); i < 200; i++) { mplew.write(0); + } } else { - mplew.write(item.getPosition()); - addItemInfo(mplew, item, true); + mplew.writeInt(0); + mplew.skip(200); } - return mplew.getPacket(); - } - public static byte[] removeNPC(int oid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.REMOVE_NPC.getValue()); - mplew.writeInt(oid); - - return mplew.getPacket(); - } - - public static byte[] removeNPCController(int objectid) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - - mplew.writeShort(SendOpcode.SPAWN_NPC_REQUEST_CONTROLLER.getValue()); mplew.write(0); - mplew.writeInt(objectid); - - return mplew.getPacket(); - } - - /** - * Sends a report response - * - * Possible values for mode:
0: You have succesfully - * reported the user.
1: Unable to locate the user.
2: You may only - * report users 10 times a day.
3: You have been reported to the GM's by - * a user.
4: Your request did not go through for unknown reasons. - * Please try again later.
- * - * @param mode The mode - * @return Report Reponse packet - */ - public static byte[] reportResponse(byte mode) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SUE_CHARACTER_RESULT.getValue()); - mplew.write(mode); - return mplew.getPacket(); - } - - public static byte[] sendHammerData(int hammerUsed) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.VICIOUS_HAMMER.getValue()); - mplew.write(0x39); - mplew.writeInt(0); - mplew.writeInt(hammerUsed); - return mplew.getPacket(); - } - - public static byte[] sendHammerMessage() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.VICIOUS_HAMMER.getValue()); - mplew.write(0x3D); - mplew.writeInt(0); - return mplew.getPacket(); - } - - public static byte[] playPortalSound() { - return showSpecialEffect(7); - } - - public static byte[] showMonsterBookPickup() { - return showSpecialEffect(14); - } - - public static byte[] showEquipmentLevelUp() { - return showSpecialEffect(15); - } - - public static byte[] showItemLevelup() { - return showSpecialEffect(15); - } - - public static byte[] showBuybackEffect() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(11); - mplew.writeInt(0); - - return mplew.getPacket(); - } - - public static byte[] showForeignBuybackEffect(int cid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(11); - mplew.writeInt(0); - - return mplew.getPacket(); - } - - /** - * 0 = Levelup 6 = Exp did not drop (Safety Charms) 7 = Enter portal sound - * 8 = Job change 9 = Quest complete 10 = Recovery 11 = Buff effect - * 14 = Monster book pickup 15 = Equipment levelup 16 = Maker Skill Success - * 17 = Buff effect w/ sfx 19 = Exp card [500, 200, 50] 21 = Wheel of destiny - * 26 = Spirit Stone - * - * @param effect - * @return - */ - public static byte[] showSpecialEffect(int effect) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(effect); - return mplew.getPacket(); - } - - public static byte[] showMakerEffect(boolean makerSucceeded) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(16); - mplew.writeInt(makerSucceeded ? 0 : 1); - return mplew.getPacket(); - } - - public static byte[] showForeignMakerEffect(int cid, boolean makerSucceeded) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(16); - mplew.writeInt(makerSucceeded ? 0 : 1); - return mplew.getPacket(); - } - - public static byte[] showForeignEffect(int effect) { - return showForeignEffect(-1, effect); - } - - public static byte[] showForeignEffect(int cid, int effect) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(effect); - return mplew.getPacket(); - } - - public static byte[] showOwnRecovery(byte heal) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(0x0A); - mplew.write(heal); - return mplew.getPacket(); - } - - public static byte[] showRecovery(int cid, byte amount) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(0x0A); - mplew.write(amount); - return mplew.getPacket(); - } - - public static byte[] showWheelsLeft(int left) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(0x15); - mplew.write(left); - return mplew.getPacket(); - } - - public static byte[] updateQuestFinish(short quest, int npc, short nextquest) { //Check - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); //0xF2 in v95 - mplew.write(8);//0x0A in v95 - mplew.writeShort(quest); - mplew.writeInt(npc); - mplew.writeShort(nextquest); - return mplew.getPacket(); - } - - public static byte[] showInfoText(String text) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(9); - mplew.writeMapleAsciiString(text); - return mplew.getPacket(); - } - - public static byte[] questError(short quest) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); - mplew.write(0x0A); - mplew.writeShort(quest); - return mplew.getPacket(); - } - - public static byte[] questFailure(byte type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); - mplew.write(type);//0x0B = No meso, 0x0D = Worn by character, 0x0E = Not having the item ? - return mplew.getPacket(); - } - - public static byte[] questExpire(short quest) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); - mplew.write(0x0F); - mplew.writeShort(quest); - return mplew.getPacket(); - } - - // MAKER_RESULT packets thanks to Arnah (Vertisy) - public static byte[] makerResult(boolean success, int itemMade, int itemCount, int mesos, List> itemsLost, int catalystID, List INCBuffGems) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAKER_RESULT.getValue()); - mplew.writeInt(success ? 0 : 1); // 0 = success, 1 = fail - mplew.writeInt(1); // 1 or 2 doesn't matter, same methods - mplew.writeBool(!success); - if (success) { - mplew.writeInt(itemMade); - mplew.writeInt(itemCount); - } - mplew.writeInt(itemsLost.size()); // Loop - for (Pair item : itemsLost) { - mplew.writeInt(item.getLeft()); - mplew.writeInt(item.getRight()); - } - mplew.writeInt(INCBuffGems.size()); - for (Integer gem : INCBuffGems) { - mplew.writeInt(gem); - } - if (catalystID != -1) { - mplew.write(1); // stimulator - mplew.writeInt(catalystID); + if (dp.getItem() != null) { + mplew.write(1); + addItemInfo(mplew, dp.getItem(), true); } else { mplew.write(0); } - - mplew.writeInt(mesos); - return mplew.getPacket(); - } - - public static byte[] makerResultCrystal(int itemIdGained, int itemIdLost) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAKER_RESULT.getValue()); - mplew.writeInt(0); // Always successful! - mplew.writeInt(3); // Monster Crystal - mplew.writeInt(itemIdGained); - mplew.writeInt(itemIdLost); - return mplew.getPacket(); - } - - public static byte[] makerResultDesynth(int itemId, int mesos, List> itemsGained) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAKER_RESULT.getValue()); - mplew.writeInt(0); // Always successful! - mplew.writeInt(4); // Mode Desynth - mplew.writeInt(itemId); // Item desynthed - mplew.writeInt(itemsGained.size()); // Loop of items gained, (int, int) - for (Pair item : itemsGained) { - mplew.writeInt(item.getLeft()); - mplew.writeInt(item.getRight()); - } - mplew.writeInt(mesos); // Mesos spent. - return mplew.getPacket(); - } - - public static byte[] makerEnableActions() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAKER_RESULT.getValue()); - mplew.writeInt(0); // Always successful! - mplew.writeInt(0); // Monster Crystal - mplew.writeInt(0); - mplew.writeInt(0); - return mplew.getPacket(); - } - - public static byte[] getMultiMegaphone(String[] messages, int channel, boolean showEar) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SERVERMESSAGE.getValue()); - mplew.write(0x0A); - if (messages[0] != null) { - mplew.writeMapleAsciiString(messages[0]); - } - mplew.write(messages.length); - for (int i = 1; i < messages.length; i++) { - if (messages[i] != null) { - mplew.writeMapleAsciiString(messages[i]); - } - } - for (int i = 0; i < 10; i++) { - mplew.write(channel - 1); - } - mplew.write(showEar ? 1 : 0); - mplew.write(1); - return mplew.getPacket(); - } - - /** - * Gets a gm effect packet (ie. hide, banned, etc.) - * - * Possible values for type:
0x04: You have successfully - * blocked access.
- * 0x05: The unblocking has been successful.
0x06 with Mode 0: You have - * successfully removed the name from the ranks.
0x06 with Mode 1: You - * have entered an invalid character name.
0x10: GM Hide, mode - * determines whether or not it is on.
0x1E: Mode 0: Failed to send - * warning Mode 1: Sent warning
0x13 with Mode 0: + mapid 0x13 with Mode - * 1: + ch (FF = Unable to find merchant) - * - * @param type The type - * @param mode The mode - * @return The gm effect packet - */ - public static byte[] getGMEffect(int type, byte mode) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ADMIN_RESULT.getValue()); - mplew.write(type); - mplew.write(mode); - return mplew.getPacket(); - } - - public static byte[] findMerchantResponse(boolean map, int extra) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ADMIN_RESULT.getValue()); - mplew.write(0x13); - mplew.write(map ? 0 : 1); //00 = mapid, 01 = ch - if (map) { - mplew.writeInt(extra); - } else { - mplew.write(extra); //-1 = unable to find - } - mplew.write(0); - return mplew.getPacket(); - } - - public static byte[] disableMinimap() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ADMIN_RESULT.getValue()); - mplew.writeShort(0x1C); - return mplew.getPacket(); - } - - public static byte[] sendFamilyInvite(int playerId, String inviter) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_JOIN_REQUEST.getValue()); - mplew.writeInt(playerId); - mplew.writeMapleAsciiString(inviter); - return mplew.getPacket(); - } - - public static byte[] sendFamilySummonRequest(String familyName, String from) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_SUMMON_REQUEST.getValue()); - mplew.writeMapleAsciiString(from); - mplew.writeMapleAsciiString(familyName); - return mplew.getPacket(); - } - - public static byte[] sendFamilyLoginNotice(String name, boolean loggedIn) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_NOTIFY_LOGIN_OR_LOGOUT.getValue()); - mplew.writeBool(loggedIn); - mplew.writeMapleAsciiString(name); - return mplew.getPacket(); - } - - public static byte[] sendFamilyJoinResponse(boolean accepted, String added) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_JOIN_REQUEST_RESULT.getValue()); - mplew.write(accepted ? 1 : 0); - mplew.writeMapleAsciiString(added); - return mplew.getPacket(); - } - - public static byte[] getSeniorMessage(String name) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_JOIN_ACCEPTED.getValue()); - mplew.writeMapleAsciiString(name); - mplew.writeInt(0); - return mplew.getPacket(); - } - - public static byte[] sendGainRep(int gain, String from) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_REP_GAIN.getValue()); - mplew.writeInt(gain); - mplew.writeMapleAsciiString(from); - return mplew.getPacket(); - } - - public static byte[] showBoughtCashPackage(List cashPackage, int accountId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - - mplew.write(0x89); - mplew.write(cashPackage.size()); - - for (Item item : cashPackage) { - addCashItemInformation(mplew, item, accountId); - } - - mplew.writeShort(0); - - return mplew.getPacket(); - } - - public static byte[] showBoughtQuestItem(int itemId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - - mplew.write(0x8D); - mplew.writeInt(1); - mplew.writeShort(1); - mplew.write(0x0B); - mplew.write(0); - mplew.writeInt(itemId); - - return mplew.getPacket(); - } - - // Cash Shop Surprise packets found thanks to Arnah (Vertisy) - public static byte[] onCashItemGachaponOpenFailed(){ - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_CASH_ITEM_GACHAPON_RESULT.getValue()); - mplew.write(0xE4); - return mplew.getPacket(); - } - - public static byte[] onCashGachaponOpenSuccess(int accountid, long sn, int remainingBoxes, Item item, int itemid, int nSelectedItemCount, boolean bJackpot){ - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_CASH_ITEM_GACHAPON_RESULT.getValue()); - mplew.write(0xE5); // subopcode thanks to Ubaware - mplew.writeLong(sn);// sn of the box used - mplew.writeInt(remainingBoxes); - addCashItemInformation(mplew, item, accountid); - mplew.writeInt(itemid);// the itemid of the liSN? - mplew.write(nSelectedItemCount);// the total count now? o.O - mplew.writeBool(bJackpot);// "CashGachaponJackpot" - return mplew.getPacket(); - } - - private static void getGuildInfo(final MaplePacketLittleEndianWriter mplew, MapleGuild guild) { - mplew.writeInt(guild.getId()); - mplew.writeMapleAsciiString(guild.getName()); - for (int i = 1; i <= 5; i++) { - mplew.writeMapleAsciiString(guild.getRankTitle(i)); - } - Collection members = guild.getMembers(); - mplew.write(members.size()); - for (MapleGuildCharacter mgc : members) { - mplew.writeInt(mgc.getId()); - } - for (MapleGuildCharacter mgc : members) { - mplew.writeAsciiString(getRightPaddedStr(mgc.getName(), '\0', 13)); - mplew.writeInt(mgc.getJobId()); - mplew.writeInt(mgc.getLevel()); - mplew.writeInt(mgc.getGuildRank()); - mplew.writeInt(mgc.isOnline() ? 1 : 0); - mplew.writeInt(guild.getSignature()); - mplew.writeInt(mgc.getAllianceRank()); - } - mplew.writeInt(guild.getCapacity()); - mplew.writeShort(guild.getLogoBG()); - mplew.write(guild.getLogoBGColor()); - mplew.writeShort(guild.getLogo()); - mplew.write(guild.getLogoColor()); - mplew.writeMapleAsciiString(guild.getNotice()); - mplew.writeInt(guild.getGP()); - mplew.writeInt(guild.getAllianceId()); - } - - public static byte[] getAllianceInfo(MapleAlliance alliance) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x0C); - mplew.write(1); - mplew.writeInt(alliance.getId()); - mplew.writeMapleAsciiString(alliance.getName()); - for (int i = 1; i <= 5; i++) { - mplew.writeMapleAsciiString(alliance.getRankTitle(i)); - } - mplew.write(alliance.getGuilds().size()); - mplew.writeInt(alliance.getCapacity()); // probably capacity - for (Integer guild : alliance.getGuilds()) { - mplew.writeInt(guild); - } - mplew.writeMapleAsciiString(alliance.getNotice()); - return mplew.getPacket(); - } - - public static byte[] updateAllianceInfo(MapleAlliance alliance, int world) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x0F); - mplew.writeInt(alliance.getId()); - mplew.writeMapleAsciiString(alliance.getName()); - for (int i = 1; i <= 5; i++) { - mplew.writeMapleAsciiString(alliance.getRankTitle(i)); - } - mplew.write(alliance.getGuilds().size()); - for (Integer guild : alliance.getGuilds()) { - mplew.writeInt(guild); - } - mplew.writeInt(alliance.getCapacity()); // probably capacity - mplew.writeShort(0); - for (Integer guildid : alliance.getGuilds()) { - getGuildInfo(mplew, Server.getInstance().getGuild(guildid, world)); - } - return mplew.getPacket(); - } - - public static byte[] getGuildAlliances(MapleAlliance alliance, int worldId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x0D); - mplew.writeInt(alliance.getGuilds().size()); - for (Integer guild : alliance.getGuilds()) { - getGuildInfo(mplew, Server.getInstance().getGuild(guild, worldId)); - } - return mplew.getPacket(); - } - - public static byte[] addGuildToAlliance(MapleAlliance alliance, int newGuild, MapleClient c) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x12); - mplew.writeInt(alliance.getId()); - mplew.writeMapleAsciiString(alliance.getName()); - for (int i = 1; i <= 5; i++) { - mplew.writeMapleAsciiString(alliance.getRankTitle(i)); - } - mplew.write(alliance.getGuilds().size()); - for (Integer guild : alliance.getGuilds()) { - mplew.writeInt(guild); - } - mplew.writeInt(alliance.getCapacity()); - mplew.writeMapleAsciiString(alliance.getNotice()); - mplew.writeInt(newGuild); - getGuildInfo(mplew, Server.getInstance().getGuild(newGuild, c.getWorld(), null)); - return mplew.getPacket(); - } - - public static byte[] allianceMemberOnline(MapleCharacter mc, boolean online) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x0E); - mplew.writeInt(mc.getGuild().getAllianceId()); - mplew.writeInt(mc.getGuildId()); - mplew.writeInt(mc.getId()); - mplew.write(online ? 1 : 0); - return mplew.getPacket(); - } - - public static byte[] allianceNotice(int id, String notice) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x1C); - mplew.writeInt(id); - mplew.writeMapleAsciiString(notice); - return mplew.getPacket(); - } - - public static byte[] changeAllianceRankTitle(int alliance, String[] ranks) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x1A); - mplew.writeInt(alliance); - for (int i = 0; i < 5; i++) { - mplew.writeMapleAsciiString(ranks[i]); - } - return mplew.getPacket(); - } - - public static byte[] updateAllianceJobLevel(MapleCharacter mc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x18); - mplew.writeInt(mc.getGuild().getAllianceId()); - mplew.writeInt(mc.getGuildId()); - mplew.writeInt(mc.getId()); - mplew.writeInt(mc.getLevel()); - mplew.writeInt(mc.getJob().getId()); - return mplew.getPacket(); - } - - public static byte[] removeGuildFromAlliance(MapleAlliance alliance, int expelledGuild, int worldId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x10); - mplew.writeInt(alliance.getId()); - mplew.writeMapleAsciiString(alliance.getName()); - for (int i = 1; i <= 5; i++) { - mplew.writeMapleAsciiString(alliance.getRankTitle(i)); - } - mplew.write(alliance.getGuilds().size()); - for (Integer guild : alliance.getGuilds()) { - mplew.writeInt(guild); - } - mplew.writeInt(alliance.getCapacity()); - mplew.writeMapleAsciiString(alliance.getNotice()); - mplew.writeInt(expelledGuild); - getGuildInfo(mplew, Server.getInstance().getGuild(expelledGuild, worldId, null)); - mplew.write(0x01); - return mplew.getPacket(); - } - - public static byte[] disbandAlliance(int alliance) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x1D); - mplew.writeInt(alliance); - return mplew.getPacket(); - } - - public static byte[] allianceInvite(int allianceid, MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x03); - mplew.writeInt(allianceid); - mplew.writeMapleAsciiString(chr.getName()); - mplew.writeShort(0); - return mplew.getPacket(); - } - - public static byte[] sendMesoLimit() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.TRADE_MONEY_LIMIT.getValue()); //Players under level 15 can only trade 1m per day - return mplew.getPacket(); - } - - public static byte[] removeItemFromDuey(boolean remove, int Package) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARCEL.getValue()); - mplew.write(0x17); - mplew.writeInt(Package); - mplew.write(remove ? 3 : 4); - return mplew.getPacket(); - } - - public static byte[] sendDueyParcelReceived(String from, boolean quick) { // thanks inhyuk - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARCEL.getValue()); - mplew.write(0x19); - mplew.writeMapleAsciiString(from); - mplew.writeBool(quick); - return mplew.getPacket(); - } - - public static byte[] sendDueyParcelNotification(boolean quick) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARCEL.getValue()); - mplew.write(0x1B); - mplew.writeBool(quick); // 0 : package received, 1 : quick delivery package - return mplew.getPacket(); - } - - public static byte[] sendDueyMSG(byte operation) { - return sendDuey(operation, null); - } - - public static byte[] sendDuey(int operation, List packages) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARCEL.getValue()); - mplew.write(operation); - if (operation == 8) { - mplew.write(0); - mplew.write(packages.size()); - for (DueyPackage dp : packages) { - mplew.writeInt(dp.getPackageId()); - mplew.writeAsciiString(dp.getSender()); - for (int i = dp.getSender().length(); i < 13; i++) { - mplew.write(0); - } - - mplew.writeInt(dp.getMesos()); - mplew.writeLong(getTime(dp.sentTimeInMilliseconds())); - - String msg = dp.getMessage(); - if (msg != null) { - mplew.writeInt(1); - mplew.writeAsciiString(msg); - for (int i = msg.length(); i < 200; i++) { - mplew.write(0); - } - } else { - mplew.writeInt(0); - mplew.skip(200); - } - - mplew.write(0); - if (dp.getItem() != null) { - mplew.write(1); - addItemInfo(mplew, dp.getItem(), true); - } else { - mplew.write(0); - } - } - mplew.write(0); - } - - return mplew.getPacket(); - } - - public static byte[] sendDojoAnimation(byte firstByte, String animation) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(firstByte); - mplew.writeMapleAsciiString(animation); - return mplew.getPacket(); - } - - public static byte[] getDojoInfo(String info) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(10); - mplew.write(new byte[]{(byte) 0xB7, 4});//QUEST ID f5 - mplew.writeMapleAsciiString(info); - return mplew.getPacket(); - } - - public static byte[] getDojoInfoMessage(String message) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(9); - mplew.writeMapleAsciiString(message); - return mplew.getPacket(); - } - - /** - * Gets a "block" packet (ie. the cash shop is unavailable, etc) - * - * Possible values for type:
1: The portal is closed for - * now.
2: You cannot go to that place.
3: Unable to approach due to - * the force of the ground.
4: You cannot teleport to or on this - * map.
5: Unable to approach due to the force of the ground.
6: - * Only party members can enter this map.
7: The Cash Shop is - * currently not available. Stay tuned...
- * - * @param type The type - * @return The "block" packet. - */ - public static byte[] blockedMessage(int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BLOCKED_MAP.getValue()); - mplew.write(type); - return mplew.getPacket(); - } - - /** - * Gets a "block" packet (ie. the cash shop is unavailable, etc) - * - * Possible values for type:
1: You cannot move that - * channel. Please try again later.
2: You cannot go into the cash shop. - * Please try again later.
3: The Item-Trading Shop is currently - * unavailable. Please try again later.
4: You cannot go into the trade - * shop, due to limitation of user count.
5: You do not meet the minimum - * level requirement to access the Trade Shop.
- * - * @param type The type - * @return The "block" packet. - */ - public static byte[] blockedMessage2(int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BLOCKED_SERVER.getValue()); - mplew.write(type); - return mplew.getPacket(); - } - - public static byte[] updateDojoStats(MapleCharacter chr, int belt) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(10); - mplew.write(new byte[]{(byte) 0xB7, 4}); //? - mplew.writeMapleAsciiString("pt=" + chr.getDojoPoints() + ";belt=" + belt + ";tuto=" + (chr.getFinishedDojoTutorial() ? "1" : "0")); - return mplew.getPacket(); - } - - /** - * Sends a "levelup" packet to the guild or family. - * - * Possible values for type:
0: ? has reached Lv. - * ?.
- The Reps you have received from ? will be reduced in half. 1: - * ? has reached Lv. ?.
2: ? has reached Lv. ?.
- * - * @param type The type - * @return The "levelup" packet. - */ - public static byte[] levelUpMessage(int type, int level, String charname) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NOTIFY_LEVELUP.getValue()); - mplew.write(type); - mplew.writeInt(level); - mplew.writeMapleAsciiString(charname); - - return mplew.getPacket(); - } - - /** - * Sends a "married" packet to the guild or family. - * - * Possible values for type:
0: 1: - * - * @param type The type - * @return The "married" packet. - */ - public static byte[] marriageMessage(int type, String charname) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NOTIFY_MARRIAGE.getValue()); - mplew.write(type); // 0: guild, 1: family - mplew.writeMapleAsciiString("> " + charname); //To fix the stupid packet lol - - return mplew.getPacket(); - } - - /** - * Sends a "job advance" packet to the guild or family. - * - * Possible values for type:
0: 1: - * - * @param type The type - * @return The "job advance" packet. - */ - public static byte[] jobMessage(int type, int job, String charname) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NOTIFY_JOB_CHANGE.getValue()); - mplew.write(type); - mplew.writeInt(job); //Why fking int? - mplew.writeMapleAsciiString("> " + charname); //To fix the stupid packet lol - - return mplew.getPacket(); - } - - /** - * - * @param type - (0:Light&Long 1:Heavy&Short) - * @param delay - seconds - * @return - */ - public static byte[] trembleEffect(int type, int delay) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(1); - mplew.write(type); - mplew.writeInt(delay); - return mplew.getPacket(); - } - - public static byte[] getEnergy(String info, int amount) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SESSION_VALUE.getValue()); - mplew.writeMapleAsciiString(info); - mplew.writeMapleAsciiString(Integer.toString(amount)); - return mplew.getPacket(); - } - - public static byte[] dojoWarpUp() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DOJO_WARP_UP.getValue()); - mplew.write(0); - mplew.write(6); - return mplew.getPacket(); - } - - public static byte[] itemExpired(int itemid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(2); - mplew.writeInt(itemid); - return mplew.getPacket(); - } - - private static String getRightPaddedStr(String in, char padchar, int length) { - StringBuilder builder = new StringBuilder(in); - for (int x = in.length(); x < length; x++) { - builder.append(padchar); - } - return builder.toString(); - } - - public static byte[] MobDamageMobFriendly(MapleMonster mob, int damage, int remainingHp) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DAMAGE_MONSTER.getValue()); - mplew.writeInt(mob.getObjectId()); - mplew.write(1); // direction ? - mplew.writeInt(damage); - mplew.writeInt(remainingHp); - mplew.writeInt(mob.getMaxHp()); - return mplew.getPacket(); - } - - public static byte[] shopErrorMessage(int error, int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(0x0A); - mplew.write(type); - mplew.write(error); - return mplew.getPacket(); - } - - private static void addRingInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.writeShort(chr.getCrushRings().size()); - for (MapleRing ring : chr.getCrushRings()) { - mplew.writeInt(ring.getPartnerChrId()); - mplew.writeAsciiString(getRightPaddedStr(ring.getPartnerName(), '\0', 13)); - mplew.writeInt(ring.getRingId()); - mplew.writeInt(0); - mplew.writeInt(ring.getPartnerRingId()); - mplew.writeInt(0); - } - mplew.writeShort(chr.getFriendshipRings().size()); - for (MapleRing ring : chr.getFriendshipRings()) { - mplew.writeInt(ring.getPartnerChrId()); - mplew.writeAsciiString(getRightPaddedStr(ring.getPartnerName(), '\0', 13)); - mplew.writeInt(ring.getRingId()); - mplew.writeInt(0); - mplew.writeInt(ring.getPartnerRingId()); - mplew.writeInt(0); - mplew.writeInt(ring.getItemId()); - } - - if(chr.getPartnerId() > 0) { - MapleRing marriageRing = chr.getMarriageRing(); - - mplew.writeShort(1); - mplew.writeInt(chr.getRelationshipId()); - mplew.writeInt(chr.getGender() == 0 ? chr.getId() : chr.getPartnerId()); - mplew.writeInt(chr.getGender() == 0 ? chr.getPartnerId() : chr.getId()); - mplew.writeShort((marriageRing != null) ? 3 : 1); - if (marriageRing != null) { - mplew.writeInt(marriageRing.getItemId()); - mplew.writeInt(marriageRing.getItemId()); - } else { - mplew.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) - mplew.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) - } - mplew.writeAsciiString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? chr.getName() : MapleCharacter.getNameById(chr.getPartnerId()), '\0', 13)); - mplew.writeAsciiString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? MapleCharacter.getNameById(chr.getPartnerId()) : chr.getName(), '\0', 13)); - } else { - mplew.writeShort(0); - } - } - - public static byte[] finishedSort(int inv) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.GATHER_ITEM_RESULT.getValue()); - mplew.write(0); - mplew.write(inv); - return mplew.getPacket(); - } - - public static byte[] finishedSort2(int inv) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.SORT_ITEM_RESULT.getValue()); - mplew.write(0); - mplew.write(inv); - return mplew.getPacket(); - } - - public static byte[] bunnyPacket() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(9); - mplew.writeAsciiString("Protect the Moon Bunny!!!"); - return mplew.getPacket(); - } - - public static byte[] hpqMessage(String text) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BLOW_WEATHER.getValue()); // not 100% sure - mplew.write(0); - mplew.writeInt(5120016); - mplew.writeAsciiString(text); - return mplew.getPacket(); - } - - public static byte[] showEventInstructions() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GMEVENT_INSTRUCTIONS.getValue()); - mplew.write(0); - return mplew.getPacket(); - } - - public static byte[] leftKnockBack() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(2); - mplew.writeShort(SendOpcode.LEFT_KNOCK_BACK.getValue()); - return mplew.getPacket(); - } - - public static byte[] rollSnowBall(boolean entermap, int state, MapleSnowball ball0, MapleSnowball ball1) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SNOWBALL_STATE.getValue()); - if (entermap) { - mplew.skip(21); - } else { - mplew.write(state);// 0 = move, 1 = roll, 2 is down disappear, 3 is up disappear - mplew.writeInt(ball0.getSnowmanHP() / 75); - mplew.writeInt(ball1.getSnowmanHP() / 75); - mplew.writeShort(ball0.getPosition());//distance snowball down, 84 03 = max - mplew.write(-1); - mplew.writeShort(ball1.getPosition());//distance snowball up, 84 03 = max - mplew.write(-1); - } - return mplew.getPacket(); - } - - public static byte[] hitSnowBall(int what, int damage) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.HIT_SNOWBALL.getValue()); - mplew.write(what); - mplew.writeInt(damage); - return mplew.getPacket(); - } - - /** - * Sends a Snowball Message
- * - * Possible values for message:
1: ... Team's snowball has - * passed the stage 1.
2: ... Team's snowball has passed the stage - * 2.
3: ... Team's snowball has passed the stage 3.
4: ... Team is - * attacking the snowman, stopping the progress
5: ... Team is moving - * again
- * - * @param message - * - */ - public static byte[] snowballMessage(int team, int message) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.SNOWBALL_MESSAGE.getValue()); - mplew.write(team);// 0 is down, 1 is up - mplew.writeInt(message); - return mplew.getPacket(); - } - - public static byte[] coconutScore(int team1, int team2) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.COCONUT_SCORE.getValue()); - mplew.writeShort(team1); - mplew.writeShort(team2); - return mplew.getPacket(); - } - - public static byte[] hitCoconut(boolean spawn, int id, int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.COCONUT_HIT.getValue()); - if (spawn) { - mplew.writeShort(-1); - mplew.writeShort(5000); - mplew.write(0); - } else { - mplew.writeShort(id); - mplew.writeShort(1000);//delay till you can attack again! - mplew.write(type); // What action to do for the coconut. - } - return mplew.getPacket(); - } - - public static byte[] customPacket(String packet) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.write(HexTool.getByteArrayFromHexString(packet)); - return mplew.getPacket(); - } - - public static byte[] customPacket(byte[] packet) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(packet.length); - mplew.write(packet); - return mplew.getPacket(); - } - - public static byte[] spawnGuide(boolean spawn) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.SPAWN_GUIDE.getValue()); - if (spawn) { - mplew.write(1); - } else { - mplew.write(0); - } - return mplew.getPacket(); - } - - public static byte[] talkGuide(String talk) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.TALK_GUIDE.getValue()); - mplew.write(0); - mplew.writeMapleAsciiString(talk); - mplew.write(new byte[]{(byte) 0xC8, 0, 0, 0, (byte) 0xA0, (byte) 0x0F, 0, 0}); - return mplew.getPacket(); - } - - public static byte[] guideHint(int hint) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); - mplew.writeShort(SendOpcode.TALK_GUIDE.getValue()); - mplew.write(1); - mplew.writeInt(hint); - mplew.writeInt(7000); - return mplew.getPacket(); - } - - public static void addCashItemInformation(final MaplePacketLittleEndianWriter mplew, Item item, int accountId) { - addCashItemInformation(mplew, item, accountId, null); - } - - public static void addCashItemInformation(final MaplePacketLittleEndianWriter mplew, Item item, int accountId, String giftMessage) { - boolean isGift = giftMessage != null; - boolean isRing = false; - Equip equip = null; - if (item.getInventoryType().equals(MapleInventoryType.EQUIP)) { - equip = (Equip) item; - isRing = equip.getRingId() > -1; - } - mplew.writeLong(item.getPetId() > -1 ? item.getPetId() : isRing ? equip.getRingId() : item.getCashId()); - if (!isGift) { - mplew.writeInt(accountId); - mplew.writeInt(0); - } - mplew.writeInt(item.getItemId()); - if (!isGift) { - mplew.writeInt(item.getSN()); - mplew.writeShort(item.getQuantity()); - } - mplew.writeAsciiString(StringUtil.getRightPaddedStr(item.getGiftFrom(), '\0', 13)); - if (isGift) { - mplew.writeAsciiString(StringUtil.getRightPaddedStr(giftMessage, '\0', 73)); - return; - } - addExpirationTime(mplew, item.getExpiration()); - mplew.writeLong(0); - } - - public static byte[] showWishList(MapleCharacter mc, boolean update) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - - if (update) { - mplew.write(0x55); - } else { - mplew.write(0x4F); - } - - for (int sn : mc.getCashShop().getWishList()) { - mplew.writeInt(sn); - } - - for (int i = mc.getCashShop().getWishList().size(); i < 10; i++) { - mplew.writeInt(0); - } - - return mplew.getPacket(); - } - - public static byte[] showBoughtCashItem(Item item, int accountId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - - mplew.write(0x57); - addCashItemInformation(mplew, item, accountId); - - return mplew.getPacket(); - } - - public static byte[] showBoughtCashRing(Item ring, String recipient, int accountId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - mplew.write(0x87); - addCashItemInformation(mplew, ring, accountId); - mplew.writeMapleAsciiString(recipient); + } + mplew.write(0); + } + + return mplew.getPacket(); + } + + public static byte[] sendDojoAnimation(byte firstByte, String animation) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); + mplew.write(firstByte); + mplew.writeMapleAsciiString(animation); + return mplew.getPacket(); + } + + public static byte[] getDojoInfo(String info) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(10); + mplew.write(new byte[]{(byte) 0xB7, 4});//QUEST ID f5 + mplew.writeMapleAsciiString(info); + return mplew.getPacket(); + } + + public static byte[] getDojoInfoMessage(String message) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(9); + mplew.writeMapleAsciiString(message); + return mplew.getPacket(); + } + + /** + * Gets a "block" packet (ie. the cash shop is unavailable, etc) + *

+ * Possible values for type:
1: The portal is closed for + * now.
2: You cannot go to that place.
3: Unable to approach due to + * the force of the ground.
4: You cannot teleport to or on this + * map.
5: Unable to approach due to the force of the ground.
6: + * Only party members can enter this map.
7: The Cash Shop is + * currently not available. Stay tuned...
+ * + * @param type The type + * @return The "block" packet. + */ + public static byte[] blockedMessage(int type) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.BLOCKED_MAP.getValue()); + mplew.write(type); + return mplew.getPacket(); + } + + /** + * Gets a "block" packet (ie. the cash shop is unavailable, etc) + *

+ * Possible values for type:
1: You cannot move that + * channel. Please try again later.
2: You cannot go into the cash shop. + * Please try again later.
3: The Item-Trading Shop is currently + * unavailable. Please try again later.
4: You cannot go into the trade + * shop, due to limitation of user count.
5: You do not meet the minimum + * level requirement to access the Trade Shop.
+ * + * @param type The type + * @return The "block" packet. + */ + public static byte[] blockedMessage2(int type) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.BLOCKED_SERVER.getValue()); + mplew.write(type); + return mplew.getPacket(); + } + + public static byte[] updateDojoStats(MapleCharacter chr, int belt) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(10); + mplew.write(new byte[]{(byte) 0xB7, 4}); //? + mplew.writeMapleAsciiString("pt=" + chr.getDojoPoints() + ";belt=" + belt + ";tuto=" + (chr.getFinishedDojoTutorial() ? "1" : "0")); + return mplew.getPacket(); + } + + /** + * Sends a "levelup" packet to the guild or family. + *

+ * Possible values for type:
0: ? has reached Lv. + * ?.
- The Reps you have received from ? will be reduced in half. 1: + * ? has reached Lv. ?.
2: ? has reached Lv. ?.
+ * + * @param type The type + * @return The "levelup" packet. + */ + public static byte[] levelUpMessage(int type, int level, String charname) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.NOTIFY_LEVELUP.getValue()); + mplew.write(type); + mplew.writeInt(level); + mplew.writeMapleAsciiString(charname); + + return mplew.getPacket(); + } + + /** + * Sends a "married" packet to the guild or family. + *

+ * Possible values for type:
0: 1: + * + * @param type The type + * @return The "married" packet. + */ + public static byte[] marriageMessage(int type, String charname) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.NOTIFY_MARRIAGE.getValue()); + mplew.write(type); // 0: guild, 1: family + mplew.writeMapleAsciiString("> " + charname); //To fix the stupid packet lol + + return mplew.getPacket(); + } + + /** + * Sends a "job advance" packet to the guild or family. + *

+ * Possible values for type:
0: 1: + * + * @param type The type + * @return The "job advance" packet. + */ + public static byte[] jobMessage(int type, int job, String charname) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.NOTIFY_JOB_CHANGE.getValue()); + mplew.write(type); + mplew.writeInt(job); //Why fking int? + mplew.writeMapleAsciiString("> " + charname); //To fix the stupid packet lol + + return mplew.getPacket(); + } + + /** + * @param type - (0:Light&Long 1:Heavy&Short) + * @param delay - seconds + * @return + */ + public static byte[] trembleEffect(int type, int delay) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); + mplew.write(1); + mplew.write(type); + mplew.writeInt(delay); + return mplew.getPacket(); + } + + public static byte[] getEnergy(String info, int amount) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SESSION_VALUE.getValue()); + mplew.writeMapleAsciiString(info); + mplew.writeMapleAsciiString(Integer.toString(amount)); + return mplew.getPacket(); + } + + public static byte[] dojoWarpUp() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.DOJO_WARP_UP.getValue()); + mplew.write(0); + mplew.write(6); + return mplew.getPacket(); + } + + public static byte[] itemExpired(int itemid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(2); + mplew.writeInt(itemid); + return mplew.getPacket(); + } + + private static String getRightPaddedStr(String in, char padchar, int length) { + StringBuilder builder = new StringBuilder(in); + for (int x = in.length(); x < length; x++) { + builder.append(padchar); + } + return builder.toString(); + } + + public static byte[] MobDamageMobFriendly(MapleMonster mob, int damage, int remainingHp) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.DAMAGE_MONSTER.getValue()); + mplew.writeInt(mob.getObjectId()); + mplew.write(1); // direction ? + mplew.writeInt(damage); + mplew.writeInt(remainingHp); + mplew.writeInt(mob.getMaxHp()); + return mplew.getPacket(); + } + + public static byte[] shopErrorMessage(int error, int type) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(0x0A); + mplew.write(type); + mplew.write(error); + return mplew.getPacket(); + } + + private static void addRingInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + mplew.writeShort(chr.getCrushRings().size()); + for (MapleRing ring : chr.getCrushRings()) { + mplew.writeInt(ring.getPartnerChrId()); + mplew.writeAsciiString(getRightPaddedStr(ring.getPartnerName(), '\0', 13)); + mplew.writeInt(ring.getRingId()); + mplew.writeInt(0); + mplew.writeInt(ring.getPartnerRingId()); + mplew.writeInt(0); + } + mplew.writeShort(chr.getFriendshipRings().size()); + for (MapleRing ring : chr.getFriendshipRings()) { + mplew.writeInt(ring.getPartnerChrId()); + mplew.writeAsciiString(getRightPaddedStr(ring.getPartnerName(), '\0', 13)); + mplew.writeInt(ring.getRingId()); + mplew.writeInt(0); + mplew.writeInt(ring.getPartnerRingId()); + mplew.writeInt(0); mplew.writeInt(ring.getItemId()); - mplew.writeShort(1); //quantity - return mplew.getPacket(); - } - - /* - * 00 = Due to an unknown error, failed - * A3 = Request timed out. Please try again. - * A4 = Due to an unknown error, failed + warpout - * A5 = You don't have enough cash. - * A6 = long as shet msg - * A7 = You have exceeded the allotted limit of price for gifts. - * A8 = You cannot send a gift to your own account. Log in on the char and purchase - * A9 = Please confirm whether the character's name is correct. - * AA = Gender restriction! - * AB = gift cannot be sent because recipient inv is full - * AC = exceeded the number of cash items you can have - * AD = check and see if the character name is wrong or there is gender restrictions - * //Skipped a few - * B0 = Wrong Coupon Code - * B1 = Disconnect from CS because of 3 wrong coupon codes < lol - * B2 = Expired Coupon - * B3 = Coupon has been used already - * B4 = Nexon internet cafes? lolfk - * B8 = Due to gender restrictions, the coupon cannot be used. - * BB = inv full - * BC = long as shet "(not?) available to purchase by a use at the premium" msg - * BD = invalid gift recipient - * BE = invalid receiver name - * BF = item unavailable to purchase at this hour - * C0 = not enough items in stock, therefore not available - * C1 = you have exceeded spending limit of NX - * C2 = not enough mesos? Lol not even 1 mesos xD - * C3 = cash shop unavailable during beta phase - * C4 = check birthday code - * C7 = only available to users buying cash item, whatever msg too long - * C8 = already applied for this - * CD = You have reached the daily purchase limit for the cash shop. - * D0 = coupon account limit reached - * D2 = coupon system currently unavailable - * D3 = item can only be used 15 days after registration - * D4 = not enough gift tokens - * D6 = fresh people cannot gift items lul - * D7 = bad people cannot gift items >:( - * D8 = cannot gift due to limitations - * D9 = cannot gift due to amount of gifted times - * DA = cannot be gifted due to technical difficulties - * DB = cannot transfer to char below level 20 - * DC = cannot transfer char to same world - * DD = cannot transfer char to new server world - * DE = cannot transfer char out of this world - * DF = cannot transfer char due to no empty char slots - * E0 = event or free test time ended - * E6 = item cannot be purchased with MaplePoints - * E7 = lol sorry for the inconvenience, eh? - * E8 = cannot purchase by anyone under 7 - */ - public static byte[] showCashShopMessage(byte message) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - - mplew.write(0x5C); - mplew.write(message); - - return mplew.getPacket(); } - public static byte[] showCashInventory(MapleClient c) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + if (chr.getPartnerId() > 0) { + MapleRing marriageRing = chr.getMarriageRing(); - mplew.write(0x4B); - mplew.writeShort(c.getPlayer().getCashShop().getInventory().size()); + mplew.writeShort(1); + mplew.writeInt(chr.getRelationshipId()); + mplew.writeInt(chr.getGender() == 0 ? chr.getId() : chr.getPartnerId()); + mplew.writeInt(chr.getGender() == 0 ? chr.getPartnerId() : chr.getId()); + mplew.writeShort((marriageRing != null) ? 3 : 1); + if (marriageRing != null) { + mplew.writeInt(marriageRing.getItemId()); + mplew.writeInt(marriageRing.getItemId()); + } else { + mplew.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) + mplew.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) + } + mplew.writeAsciiString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? chr.getName() : MapleCharacter.getNameById(chr.getPartnerId()), '\0', 13)); + mplew.writeAsciiString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? MapleCharacter.getNameById(chr.getPartnerId()) : chr.getName(), '\0', 13)); + } else { + mplew.writeShort(0); + } + } - for (Item item : c.getPlayer().getCashShop().getInventory()) { - addCashItemInformation(mplew, item, c.getAccID()); + public static byte[] finishedSort(int inv) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); + mplew.writeShort(SendOpcode.GATHER_ITEM_RESULT.getValue()); + mplew.write(0); + mplew.write(inv); + return mplew.getPacket(); + } + + public static byte[] finishedSort2(int inv) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); + mplew.writeShort(SendOpcode.SORT_ITEM_RESULT.getValue()); + mplew.write(0); + mplew.write(inv); + return mplew.getPacket(); + } + + public static byte[] bunnyPacket() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + mplew.write(9); + mplew.writeAsciiString("Protect the Moon Bunny!!!"); + return mplew.getPacket(); + } + + public static byte[] hpqMessage(String text) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.BLOW_WEATHER.getValue()); // not 100% sure + mplew.write(0); + mplew.writeInt(5120016); + mplew.writeAsciiString(text); + return mplew.getPacket(); + } + + public static byte[] showEventInstructions() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GMEVENT_INSTRUCTIONS.getValue()); + mplew.write(0); + return mplew.getPacket(); + } + + public static byte[] leftKnockBack() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(2); + mplew.writeShort(SendOpcode.LEFT_KNOCK_BACK.getValue()); + return mplew.getPacket(); + } + + public static byte[] rollSnowBall(boolean entermap, int state, MapleSnowball ball0, MapleSnowball ball1) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SNOWBALL_STATE.getValue()); + if (entermap) { + mplew.skip(21); + } else { + mplew.write(state);// 0 = move, 1 = roll, 2 is down disappear, 3 is up disappear + mplew.writeInt(ball0.getSnowmanHP() / 75); + mplew.writeInt(ball1.getSnowmanHP() / 75); + mplew.writeShort(ball0.getPosition());//distance snowball down, 84 03 = max + mplew.write(-1); + mplew.writeShort(ball1.getPosition());//distance snowball up, 84 03 = max + mplew.write(-1); + } + return mplew.getPacket(); + } + + public static byte[] hitSnowBall(int what, int damage) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); + mplew.writeShort(SendOpcode.HIT_SNOWBALL.getValue()); + mplew.write(what); + mplew.writeInt(damage); + return mplew.getPacket(); + } + + /** + * Sends a Snowball Message
+ *

+ * Possible values for message:
1: ... Team's snowball has + * passed the stage 1.
2: ... Team's snowball has passed the stage + * 2.
3: ... Team's snowball has passed the stage 3.
4: ... Team is + * attacking the snowman, stopping the progress
5: ... Team is moving + * again
+ * + * @param message + */ + public static byte[] snowballMessage(int team, int message) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); + mplew.writeShort(SendOpcode.SNOWBALL_MESSAGE.getValue()); + mplew.write(team);// 0 is down, 1 is up + mplew.writeInt(message); + return mplew.getPacket(); + } + + public static byte[] coconutScore(int team1, int team2) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); + mplew.writeShort(SendOpcode.COCONUT_SCORE.getValue()); + mplew.writeShort(team1); + mplew.writeShort(team2); + return mplew.getPacket(); + } + + public static byte[] hitCoconut(boolean spawn, int id, int type) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); + mplew.writeShort(SendOpcode.COCONUT_HIT.getValue()); + if (spawn) { + mplew.writeShort(-1); + mplew.writeShort(5000); + mplew.write(0); + } else { + mplew.writeShort(id); + mplew.writeShort(1000);//delay till you can attack again! + mplew.write(type); // What action to do for the coconut. + } + return mplew.getPacket(); + } + + public static byte[] customPacket(String packet) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.write(HexTool.getByteArrayFromHexString(packet)); + return mplew.getPacket(); + } + + public static byte[] customPacket(byte[] packet) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(packet.length); + mplew.write(packet); + return mplew.getPacket(); + } + + public static byte[] spawnGuide(boolean spawn) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.SPAWN_GUIDE.getValue()); + if (spawn) { + mplew.write(1); + } else { + mplew.write(0); + } + return mplew.getPacket(); + } + + public static byte[] talkGuide(String talk) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.TALK_GUIDE.getValue()); + mplew.write(0); + mplew.writeMapleAsciiString(talk); + mplew.write(new byte[]{(byte) 0xC8, 0, 0, 0, (byte) 0xA0, (byte) 0x0F, 0, 0}); + return mplew.getPacket(); + } + + public static byte[] guideHint(int hint) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); + mplew.writeShort(SendOpcode.TALK_GUIDE.getValue()); + mplew.write(1); + mplew.writeInt(hint); + mplew.writeInt(7000); + return mplew.getPacket(); + } + + public static void addCashItemInformation(final MaplePacketLittleEndianWriter mplew, Item item, int accountId) { + addCashItemInformation(mplew, item, accountId, null); + } + + public static void addCashItemInformation(final MaplePacketLittleEndianWriter mplew, Item item, int accountId, String giftMessage) { + boolean isGift = giftMessage != null; + boolean isRing = false; + Equip equip = null; + if (item.getInventoryType().equals(MapleInventoryType.EQUIP)) { + equip = (Equip) item; + isRing = equip.getRingId() > -1; + } + mplew.writeLong(item.getPetId() > -1 ? item.getPetId() : isRing ? equip.getRingId() : item.getCashId()); + if (!isGift) { + mplew.writeInt(accountId); + mplew.writeInt(0); + } + mplew.writeInt(item.getItemId()); + if (!isGift) { + mplew.writeInt(item.getSN()); + mplew.writeShort(item.getQuantity()); + } + mplew.writeAsciiString(StringUtil.getRightPaddedStr(item.getGiftFrom(), '\0', 13)); + if (isGift) { + mplew.writeAsciiString(StringUtil.getRightPaddedStr(giftMessage, '\0', 73)); + return; + } + addExpirationTime(mplew, item.getExpiration()); + mplew.writeLong(0); + } + + public static byte[] showWishList(MapleCharacter mc, boolean update) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + + if (update) { + mplew.write(0x55); + } else { + mplew.write(0x4F); + } + + for (int sn : mc.getCashShop().getWishList()) { + mplew.writeInt(sn); + } + + for (int i = mc.getCashShop().getWishList().size(); i < 10; i++) { + mplew.writeInt(0); + } + + return mplew.getPacket(); + } + + public static byte[] showBoughtCashItem(Item item, int accountId) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + + mplew.write(0x57); + addCashItemInformation(mplew, item, accountId); + + return mplew.getPacket(); + } + + public static byte[] showBoughtCashRing(Item ring, String recipient, int accountId) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + mplew.write(0x87); + addCashItemInformation(mplew, ring, accountId); + mplew.writeMapleAsciiString(recipient); + mplew.writeInt(ring.getItemId()); + mplew.writeShort(1); //quantity + return mplew.getPacket(); + } + + /* + * 00 = Due to an unknown error, failed + * A3 = Request timed out. Please try again. + * A4 = Due to an unknown error, failed + warpout + * A5 = You don't have enough cash. + * A6 = long as shet msg + * A7 = You have exceeded the allotted limit of price for gifts. + * A8 = You cannot send a gift to your own account. Log in on the char and purchase + * A9 = Please confirm whether the character's name is correct. + * AA = Gender restriction! + * AB = gift cannot be sent because recipient inv is full + * AC = exceeded the number of cash items you can have + * AD = check and see if the character name is wrong or there is gender restrictions + * //Skipped a few + * B0 = Wrong Coupon Code + * B1 = Disconnect from CS because of 3 wrong coupon codes < lol + * B2 = Expired Coupon + * B3 = Coupon has been used already + * B4 = Nexon internet cafes? lolfk + * B8 = Due to gender restrictions, the coupon cannot be used. + * BB = inv full + * BC = long as shet "(not?) available to purchase by a use at the premium" msg + * BD = invalid gift recipient + * BE = invalid receiver name + * BF = item unavailable to purchase at this hour + * C0 = not enough items in stock, therefore not available + * C1 = you have exceeded spending limit of NX + * C2 = not enough mesos? Lol not even 1 mesos xD + * C3 = cash shop unavailable during beta phase + * C4 = check birthday code + * C7 = only available to users buying cash item, whatever msg too long + * C8 = already applied for this + * CD = You have reached the daily purchase limit for the cash shop. + * D0 = coupon account limit reached + * D2 = coupon system currently unavailable + * D3 = item can only be used 15 days after registration + * D4 = not enough gift tokens + * D6 = fresh people cannot gift items lul + * D7 = bad people cannot gift items >:( + * D8 = cannot gift due to limitations + * D9 = cannot gift due to amount of gifted times + * DA = cannot be gifted due to technical difficulties + * DB = cannot transfer to char below level 20 + * DC = cannot transfer char to same world + * DD = cannot transfer char to new server world + * DE = cannot transfer char out of this world + * DF = cannot transfer char due to no empty char slots + * E0 = event or free test time ended + * E6 = item cannot be purchased with MaplePoints + * E7 = lol sorry for the inconvenience, eh? + * E8 = cannot purchase by anyone under 7 + */ + public static byte[] showCashShopMessage(byte message) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + + mplew.write(0x5C); + mplew.write(message); + + return mplew.getPacket(); + } + + public static byte[] showCashInventory(MapleClient c) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + + mplew.write(0x4B); + mplew.writeShort(c.getPlayer().getCashShop().getInventory().size()); + + for (Item item : c.getPlayer().getCashShop().getInventory()) { + addCashItemInformation(mplew, item, c.getAccID()); + } + + mplew.writeShort(c.getPlayer().getStorage().getSlots()); + mplew.writeShort(c.getCharacterSlots()); + + return mplew.getPacket(); + } + + public static byte[] showGifts(List> gifts) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + + mplew.write(0x4D); + mplew.writeShort(gifts.size()); + + for (Pair gift : gifts) { + addCashItemInformation(mplew, gift.getLeft(), 0, gift.getRight()); + } + + return mplew.getPacket(); + } + + public static byte[] showGiftSucceed(String to, CashItem item) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + + mplew.write(0x5E); //0x5D, Couldn't be sent + mplew.writeMapleAsciiString(to); + mplew.writeInt(item.getItemId()); + mplew.writeShort(item.getCount()); + mplew.writeInt(item.getPrice()); + + return mplew.getPacket(); + } + + public static byte[] showBoughtInventorySlots(int type, short slots) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + + mplew.write(0x60); + mplew.write(type); + mplew.writeShort(slots); + + return mplew.getPacket(); + } + + public static byte[] showBoughtStorageSlots(short slots) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + + mplew.write(0x62); + mplew.writeShort(slots); + + return mplew.getPacket(); + } + + public static byte[] showBoughtCharacterSlot(short slots) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + + mplew.write(0x64); + mplew.writeShort(slots); + + return mplew.getPacket(); + } + + public static byte[] takeFromCashInventory(Item item) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + + mplew.write(0x68); + mplew.writeShort(item.getPosition()); + addItemInfo(mplew, item, true); + + return mplew.getPacket(); + } + + public static byte[] deleteCashItem(Item item) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + mplew.write(0x6C); + mplew.writeLong(item.getCashId()); + return mplew.getPacket(); + } + + public static byte[] refundCashItem(Item item, int maplePoints) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + mplew.write(0x85); + mplew.writeLong(item.getCashId()); + mplew.writeInt(maplePoints); + return mplew.getPacket(); + } + + public static byte[] putIntoCashInventory(Item item, int accountId) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + + mplew.write(0x6A); + addCashItemInformation(mplew, item, accountId); + + return mplew.getPacket(); + } + + public static byte[] openCashShop(MapleClient c, boolean mts) throws Exception { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(mts ? SendOpcode.SET_ITC.getValue() : SendOpcode.SET_CASH_SHOP.getValue()); + + addCharacterInfo(mplew, c.getPlayer()); + + if (!mts) { + mplew.write(1); + } + + mplew.writeMapleAsciiString(c.getAccountName()); + if (mts) { + mplew.write(new byte[]{(byte) 0x88, 19, 0, 0, 7, 0, 0, 0, (byte) 0xF4, 1, 0, 0, (byte) 0x18, 0, 0, 0, (byte) 0xA8, 0, 0, 0, (byte) 0x70, (byte) 0xAA, (byte) 0xA7, (byte) 0xC5, (byte) 0x4E, (byte) 0xC1, (byte) 0xCA, 1}); + } else { + mplew.writeInt(0); + List lsci = CashItemFactory.getSpecialCashItems(); + mplew.writeShort(lsci.size());//Guess what + for (SpecialCashItem sci : lsci) { + mplew.writeInt(sci.getSN()); + mplew.writeInt(sci.getModifier()); + mplew.write(sci.getInfo()); + } + mplew.skip(121); + + List> mostSellers = c.getWorldServer().getMostSellerCashItems(); + for (int i = 1; i <= 8; i++) { + List mostSellersTab = mostSellers.get(i); + + for (int j = 0; j < 2; j++) { + for (Integer snid : mostSellersTab) { + mplew.writeInt(i); + mplew.writeInt(j); + mplew.writeInt(snid); + } } + } - mplew.writeShort(c.getPlayer().getStorage().getSlots()); - mplew.writeShort(c.getCharacterSlots()); - - return mplew.getPacket(); + mplew.writeInt(0); + mplew.writeShort(0); + mplew.write(0); + mplew.writeInt(75); } + return mplew.getPacket(); + } - public static byte[] showGifts(List> gifts) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + public static byte[] sendVegaScroll(int op) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.VEGA_SCROLL.getValue()); + mplew.write(op); + return mplew.getPacket(); + } - mplew.write(0x4D); - mplew.writeShort(gifts.size()); + public static byte[] resetForcedStats() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(2); + mplew.writeShort(SendOpcode.FORCED_STAT_RESET.getValue()); + return mplew.getPacket(); + } - for (Pair gift : gifts) { - addCashItemInformation(mplew, gift.getLeft(), 0, gift.getRight()); - } + public static byte[] showCombo(int count) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); + mplew.writeShort(SendOpcode.SHOW_COMBO.getValue()); + mplew.writeInt(count); + return mplew.getPacket(); + } - return mplew.getPacket(); + public static byte[] earnTitleMessage(String msg) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SCRIPT_PROGRESS_MESSAGE.getValue()); + mplew.writeMapleAsciiString(msg); + return mplew.getPacket(); + } + + public static byte[] CPUpdate(boolean party, int curCP, int totalCP, int team) { // CPQ + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + if (!party) { + mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_OBTAINED_CP.getValue()); + } else { + mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_PARTY_CP.getValue()); + mplew.write(team); // team? } - - public static byte[] showGiftSucceed(String to, CashItem item) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - - mplew.write(0x5E); //0x5D, Couldn't be sent - mplew.writeMapleAsciiString(to); - mplew.writeInt(item.getItemId()); - mplew.writeShort(item.getCount()); - mplew.writeInt(item.getPrice()); - - return mplew.getPacket(); - } - - public static byte[] showBoughtInventorySlots(int type, short slots) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - - mplew.write(0x60); - mplew.write(type); - mplew.writeShort(slots); - - return mplew.getPacket(); - } - - public static byte[] showBoughtStorageSlots(short slots) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - - mplew.write(0x62); - mplew.writeShort(slots); - - return mplew.getPacket(); - } - - public static byte[] showBoughtCharacterSlot(short slots) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - - mplew.write(0x64); - mplew.writeShort(slots); - - return mplew.getPacket(); - } - - public static byte[] takeFromCashInventory(Item item) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - - mplew.write(0x68); - mplew.writeShort(item.getPosition()); - addItemInfo(mplew, item, true); - - return mplew.getPacket(); - } - - public static byte[] deleteCashItem(Item item) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - mplew.write(0x6C); - mplew.writeLong(item.getCashId()); - return mplew.getPacket(); - } - - public static byte[] refundCashItem(Item item, int maplePoints) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - mplew.write(0x85); - mplew.writeLong(item.getCashId()); - mplew.writeInt(maplePoints); - return mplew.getPacket(); - } - - public static byte[] putIntoCashInventory(Item item, int accountId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - - mplew.write(0x6A); - addCashItemInformation(mplew, item, accountId); - - return mplew.getPacket(); - } - - public static byte[] openCashShop(MapleClient c, boolean mts) throws Exception { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(mts ? SendOpcode.SET_ITC.getValue() : SendOpcode.SET_CASH_SHOP.getValue()); - - addCharacterInfo(mplew, c.getPlayer()); - - if (!mts) { - mplew.write(1); - } - - mplew.writeMapleAsciiString(c.getAccountName()); - if (mts) { - mplew.write(new byte[]{(byte) 0x88, 19, 0, 0, 7, 0, 0, 0, (byte) 0xF4, 1, 0, 0, (byte) 0x18, 0, 0, 0, (byte) 0xA8, 0, 0, 0, (byte) 0x70, (byte) 0xAA, (byte) 0xA7, (byte) 0xC5, (byte) 0x4E, (byte) 0xC1, (byte) 0xCA, 1}); - } else { - mplew.writeInt(0); - List lsci = CashItemFactory.getSpecialCashItems(); - mplew.writeShort(lsci.size());//Guess what - for (SpecialCashItem sci : lsci) { - mplew.writeInt(sci.getSN()); - mplew.writeInt(sci.getModifier()); - mplew.write(sci.getInfo()); - } - mplew.skip(121); - - List> mostSellers = c.getWorldServer().getMostSellerCashItems(); - for (int i = 1; i <= 8; i++) { - List mostSellersTab = mostSellers.get(i); - - for (int j = 0; j < 2; j++) { - for (Integer snid : mostSellersTab) { - mplew.writeInt(i); - mplew.writeInt(j); - mplew.writeInt(snid); - } - } - } - - mplew.writeInt(0); - mplew.writeShort(0); - mplew.write(0); - mplew.writeInt(75); - } - return mplew.getPacket(); - } - - public static byte[] sendVegaScroll(int op) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.VEGA_SCROLL.getValue()); - mplew.write(op); - return mplew.getPacket(); - } - - public static byte[] resetForcedStats() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(2); - mplew.writeShort(SendOpcode.FORCED_STAT_RESET.getValue()); - return mplew.getPacket(); - } - - public static byte[] showCombo(int count) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.SHOW_COMBO.getValue()); - mplew.writeInt(count); - return mplew.getPacket(); - } - - public static byte[] earnTitleMessage(String msg) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SCRIPT_PROGRESS_MESSAGE.getValue()); - mplew.writeMapleAsciiString(msg); - return mplew.getPacket(); - } - - public static byte[] CPUpdate(boolean party, int curCP, int totalCP, int team) { // CPQ - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - if (!party) { - mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_OBTAINED_CP.getValue()); - } else { - mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_PARTY_CP.getValue()); - mplew.write(team); // team? - } - mplew.writeShort(curCP); - mplew.writeShort(totalCP); + mplew.writeShort(curCP); + mplew.writeShort(totalCP); return mplew.getPacket(); } public static byte[] CPQMessage(byte message) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_MESSAGE.getValue()); - mplew.write(message); // Message - return mplew.getPacket(); + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); + mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_MESSAGE.getValue()); + mplew.write(message); // Message + return mplew.getPacket(); } public static byte[] playerSummoned(String name, int tab, int number) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_SUMMON.getValue()); - mplew.write(tab); - mplew.write(number); - mplew.writeMapleAsciiString(name); - return mplew.getPacket(); + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_SUMMON.getValue()); + mplew.write(tab); + mplew.write(number); + mplew.writeMapleAsciiString(name); + return mplew.getPacket(); } public static byte[] playerDiedMessage(String name, int lostCP, int team) { // CPQ - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_DIED.getValue()); - mplew.write(team); // team - mplew.writeMapleAsciiString(name); - mplew.write(lostCP); - return mplew.getPacket(); + mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_DIED.getValue()); + mplew.write(team); // team + mplew.writeMapleAsciiString(name); + mplew.write(lostCP); + return mplew.getPacket(); } public static byte[] startMonsterCarnival(MapleCharacter chr, int team, int oposition) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(25); - mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_START.getValue()); - mplew.write(team); // team - mplew.writeShort(chr.getCP()); // Obtained CP - Used CP - mplew.writeShort(chr.getTotalCP()); // Total Obtained CP - mplew.writeShort(chr.getMonsterCarnival().getCP(team)); // Obtained CP - Used CP of the team - mplew.writeShort(chr.getMonsterCarnival().getTotalCP(team)); // Total Obtained CP of the team - mplew.writeShort(chr.getMonsterCarnival().getCP(oposition)); // Obtained CP - Used CP of the team - mplew.writeShort(chr.getMonsterCarnival().getTotalCP(oposition)); // Total Obtained CP of the team - mplew.writeShort(0); // Probably useless nexon shit - mplew.writeLong(0); // Probably useless nexon shit - return mplew.getPacket(); + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(25); + mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_START.getValue()); + mplew.write(team); // team + mplew.writeShort(chr.getCP()); // Obtained CP - Used CP + mplew.writeShort(chr.getTotalCP()); // Total Obtained CP + mplew.writeShort(chr.getMonsterCarnival().getCP(team)); // Obtained CP - Used CP of the team + mplew.writeShort(chr.getMonsterCarnival().getTotalCP(team)); // Total Obtained CP of the team + mplew.writeShort(chr.getMonsterCarnival().getCP(oposition)); // Obtained CP - Used CP of the team + mplew.writeShort(chr.getMonsterCarnival().getTotalCP(oposition)); // Total Obtained CP of the team + mplew.writeShort(0); // Probably useless nexon shit + mplew.writeLong(0); // Probably useless nexon shit + return mplew.getPacket(); } - public static byte[] sheepRanchInfo(byte wolf, byte sheep) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHEEP_RANCH_INFO.getValue()); - mplew.write(wolf); - mplew.write(sheep); - return mplew.getPacket(); - } - //Know what this is? ?? >=) + public static byte[] sheepRanchInfo(byte wolf, byte sheep) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHEEP_RANCH_INFO.getValue()); + mplew.write(wolf); + mplew.write(sheep); + return mplew.getPacket(); + } + //Know what this is? ?? >=) - public static byte[] sheepRanchClothes(int id, byte clothes) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHEEP_RANCH_CLOTHES.getValue()); - mplew.writeInt(id); //Character id - mplew.write(clothes); //0 = sheep, 1 = wolf, 2 = Spectator (wolf without wool) - return mplew.getPacket(); + public static byte[] sheepRanchClothes(int id, byte clothes) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHEEP_RANCH_CLOTHES.getValue()); + mplew.writeInt(id); //Character id + mplew.write(clothes); //0 = sheep, 1 = wolf, 2 = Spectator (wolf without wool) + return mplew.getPacket(); + } + + public static byte[] incubatorResult() {//lol + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); + mplew.writeShort(SendOpcode.INCUBATOR_RESULT.getValue()); + mplew.skip(6); + return mplew.getPacket(); + } + + public static byte[] pyramidGauge(int gauge) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); + mplew.writeShort(SendOpcode.PYRAMID_GAUGE.getValue()); + mplew.writeInt(gauge); + return mplew.getPacket(); + } + // f2 + + public static byte[] pyramidScore(byte score, int exp) {//Type cannot be higher than 4 (Rank D), otherwise you'll crash + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); + mplew.writeShort(SendOpcode.PYRAMID_SCORE.getValue()); + mplew.write(score); + mplew.writeInt(exp); + return mplew.getPacket(); + } + + public static byte[] spawnDragon(MapleDragon dragon) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SPAWN_DRAGON.getValue()); + mplew.writeInt(dragon.getOwner().getId());//objectid = owner id + mplew.writeShort(dragon.getPosition().x); + mplew.writeShort(0); + mplew.writeShort(dragon.getPosition().y); + mplew.writeShort(0); + mplew.write(dragon.getStance()); + mplew.write(0); + mplew.writeShort(dragon.getOwner().getJob().getId()); + return mplew.getPacket(); + } + + public static byte[] moveDragon(MapleDragon dragon, Point startPos, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.MOVE_DRAGON.getValue()); + mplew.writeInt(dragon.getOwner().getId()); + mplew.writePos(startPos); + rebroadcastMovementList(mplew, movementSlea, movementDataLength); + return mplew.getPacket(); + } + + /** + * Sends a request to remove Mir
+ * + * @param charid - Needs the specific Character ID + * @return The packet + */ + public static byte[] removeDragon(int chrid) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.REMOVE_DRAGON.getValue()); + mplew.writeInt(chrid); + return mplew.getPacket(); + } + + /** + * Changes the current background effect to either being rendered or not. + * Data is still missing, so this is pretty binary at the moment in how it + * behaves. + * + * @param remove whether or not the remove or add the specified layer. + * @param layer the targeted layer for removal or addition. + * @param transition the time it takes to transition the effect. + * @return a packet to change the background effect of a specified layer. + */ + public static byte[] changeBackgroundEffect(boolean remove, int layer, int transition) { + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SET_BACK_EFFECT.getValue()); + mplew.writeBool(remove); + mplew.writeInt(0); // not sure what this int32 does yet + mplew.write(layer); + mplew.writeInt(transition); + return mplew.getPacket(); + } + + /** + * Makes the NPCs provided set as scriptable, informing the client to search for js scripts for these NPCs even + * if they already have entries within the wz files. + * + * @param scriptableNpcIds Ids of npcs to enable scripts for. + * @return a packet which makes the npc's provided scriptable. + */ + public static byte[] setNPCScriptable(Map scriptableNpcIds) { // thanks to GabrielSin + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SET_NPC_SCRIPTABLE.getValue()); + mplew.write(scriptableNpcIds.size()); + scriptableNpcIds.forEach((id, name) -> { + mplew.writeInt(id); + // The client needs a name for the npc conversation, which is displayed under etc when the npc has a quest available. + mplew.writeMapleAsciiString(name); + mplew.writeInt(0); // start time + mplew.writeInt(Integer.MAX_VALUE); // end time + }); + return mplew.getPacket(); + } + + private static byte[] MassacreResult(byte nRank, int nIncExp) { + //CField_MassacreResult__OnMassacreResult @ 0x005617C5 + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PYRAMID_SCORE.getValue()); //MASSACRERESULT | 0x009E + mplew.write(nRank); //(0 - S) (1 - A) (2 - B) (3 - C) (4 - D) ( Else - Crash ) + mplew.writeInt(nIncExp); + return mplew.getPacket(); + } + + private static byte[] GuildBoss_HealerMove(short nY) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_BOSS_HEALER_MOVE.getValue()); + mplew.writeShort(nY); //New Y Position + return mplew.getPacket(); + } + + + private static byte[] GuildBoss_PulleyStateChange(byte nState) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_BOSS_PULLEY_STATE_CHANGE.getValue()); + mplew.write(nState); + return mplew.getPacket(); + } + + private static byte[] Tournament__Tournament(byte nState, byte nSubState) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.TOURNAMENT.getValue()); + mplew.write(nState); + mplew.write(nSubState); + return mplew.getPacket(); + } + + private static byte[] Tournament__MatchTable(byte nState, byte nSubState) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.TOURNAMENT_MATCH_TABLE.getValue()); //Prompts CMatchTableDlg Modal + return mplew.getPacket(); + } + + private static byte[] Tournament__SetPrize(byte bSetPrize, byte bHasPrize, int nItemID1, int nItemID2) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.TOURNAMENT_SET_PRIZE.getValue()); + + //0 = "You have failed the set the prize. Please check the item number again." + //1 = "You have successfully set the prize." + mplew.write(bSetPrize); + + mplew.write(bHasPrize); + + if (bHasPrize != 0) { + mplew.writeInt(nItemID1); + mplew.writeInt(nItemID2); } - public static byte[] incubatorResult() {//lol - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); - mplew.writeShort(SendOpcode.INCUBATOR_RESULT.getValue()); - mplew.skip(6); - return mplew.getPacket(); - } + return mplew.getPacket(); + } - public static byte[] pyramidGauge(int gauge) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.PYRAMID_GAUGE.getValue()); - mplew.writeInt(gauge); - return mplew.getPacket(); - } - // f2 + private static byte[] Tournament__UEW(byte nState) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.TOURNAMENT_UEW.getValue()); - public static byte[] pyramidScore(byte score, int exp) {//Type cannot be higher than 4 (Rank D), otherwise you'll crash - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.PYRAMID_SCORE.getValue()); - mplew.write(score); - mplew.writeInt(exp); - return mplew.getPacket(); - } - - public static byte[] spawnDragon(MapleDragon dragon) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_DRAGON.getValue()); - mplew.writeInt(dragon.getOwner().getId());//objectid = owner id - mplew.writeShort(dragon.getPosition().x); - mplew.writeShort(0); - mplew.writeShort(dragon.getPosition().y); - mplew.writeShort(0); - mplew.write(dragon.getStance()); - mplew.write(0); - mplew.writeShort(dragon.getOwner().getJob().getId()); - return mplew.getPacket(); - } + //Is this a bitflag o.o ? + //2 = "You have reached the finals by default." + //4 = "You have reached the semifinals by default." + //8 or 16 = "You have reached the round of %n by default." | Encodes nState as %n ?! + mplew.write(nState); - public static byte[] moveDragon(MapleDragon dragon, Point startPos, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MOVE_DRAGON.getValue()); - mplew.writeInt(dragon.getOwner().getId()); - mplew.writePos(startPos); - rebroadcastMovementList(mplew, movementSlea, movementDataLength); - return mplew.getPacket(); - } + return mplew.getPacket(); + } - /** - * Sends a request to remove Mir
- * - * @param charid - Needs the specific Character ID - * @return The packet - * - */ - public static byte[] removeDragon(int chrid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.REMOVE_DRAGON.getValue()); - mplew.writeInt(chrid); - return mplew.getPacket(); - } - - /** - * Changes the current background effect to either being rendered or not. - * Data is still missing, so this is pretty binary at the moment in how it - * behaves. - * - * @param remove whether or not the remove or add the specified layer. - * @param layer the targeted layer for removal or addition. - * @param transition the time it takes to transition the effect. - * - * @return a packet to change the background effect of a specified layer. - */ - public static byte[] changeBackgroundEffect(boolean remove, int layer, int transition) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_BACK_EFFECT.getValue()); - mplew.writeBool(remove); - mplew.writeInt(0); // not sure what this int32 does yet - mplew.write(layer); - mplew.writeInt(transition); - return mplew.getPacket(); - } - - /** - * Makes the NPCs provided set as scriptable, informing the client to search for js scripts for these NPCs even - * if they already have entries within the wz files. - * - * @param scriptableNpcIds Ids of npcs to enable scripts for. - * @return a packet which makes the npc's provided scriptable. - */ - public static byte[] setNPCScriptable(Map scriptableNpcIds) { // thanks to GabrielSin - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_NPC_SCRIPTABLE.getValue()); - mplew.write(scriptableNpcIds.size()); - scriptableNpcIds.forEach((id, name) -> { - mplew.writeInt(id); - // The client needs a name for the npc conversation, which is displayed under etc when the npc has a quest available. - mplew.writeMapleAsciiString(name); - mplew.writeInt(0); // start time - mplew.writeInt(Integer.MAX_VALUE); // end time - }); - return mplew.getPacket(); - } - - private static byte[] MassacreResult(byte nRank,int nIncExp) { - //CField_MassacreResult__OnMassacreResult @ 0x005617C5 - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PYRAMID_SCORE.getValue()); //MASSACRERESULT | 0x009E - mplew.write(nRank); //(0 - S) (1 - A) (2 - B) (3 - C) (4 - D) ( Else - Crash ) - mplew.writeInt(nIncExp); - return mplew.getPacket(); - } - - private static byte[] GuildBoss_HealerMove(short nY) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_BOSS_HEALER_MOVE.getValue()); - mplew.writeShort(nY); //New Y Position - return mplew.getPacket(); - } - - - private static byte[] GuildBoss_PulleyStateChange(byte nState) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_BOSS_PULLEY_STATE_CHANGE.getValue()); - mplew.write(nState); - return mplew.getPacket(); - } - - private static byte[] Tournament__Tournament(byte nState, byte nSubState) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.TOURNAMENT.getValue()); - mplew.write(nState); - mplew.write(nSubState); - return mplew.getPacket(); - } - - private static byte[] Tournament__MatchTable(byte nState, byte nSubState) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.TOURNAMENT_MATCH_TABLE.getValue()); //Prompts CMatchTableDlg Modal - return mplew.getPacket(); - } - - private static byte[] Tournament__SetPrize(byte bSetPrize, byte bHasPrize,int nItemID1,int nItemID2) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.TOURNAMENT_SET_PRIZE.getValue()); - - //0 = "You have failed the set the prize. Please check the item number again." - //1 = "You have successfully set the prize." - mplew.write(bSetPrize); - - mplew.write(bHasPrize); - - if(bHasPrize != 0) - { - mplew.writeInt(nItemID1); - mplew.writeInt(nItemID2); - } - - return mplew.getPacket(); - } - - private static byte[] Tournament__UEW(byte nState) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.TOURNAMENT_UEW.getValue()); - - //Is this a bitflag o.o ? - //2 = "You have reached the finals by default." - //4 = "You have reached the semifinals by default." - //8 or 16 = "You have reached the round of %n by default." | Encodes nState as %n ?! - mplew.write(nState); - - return mplew.getPacket(); - } - } From d8b0929975407f97e540040cb6234b8177ec89f2 Mon Sep 17 00:00:00 2001 From: P0nk Date: Fri, 20 Aug 2021 12:18:59 +0200 Subject: [PATCH 3/7] Tweak OutPacket --- src/main/java/client/MapleClient.java | 5 +++-- src/main/java/net/encryption/PacketEncoder.java | 6 +++--- src/main/java/net/packet/ByteBufOutPacket.java | 10 ++++++++-- src/main/java/net/packet/OutPacket.java | 8 +++++++- .../java/net/packet/ByteBufOutPacketTest.java | 15 +++++++++++++-- 5 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/main/java/client/MapleClient.java b/src/main/java/client/MapleClient.java index 2b0bd14158..e718af4908 100644 --- a/src/main/java/client/MapleClient.java +++ b/src/main/java/client/MapleClient.java @@ -33,6 +33,7 @@ import net.netty.InvalidPacketHeaderException; import net.packet.ByteBufOutPacket; import net.packet.InPacket; import net.packet.OutPacket; +import net.packet.Packet; import net.packet.logging.LoggingUtil; import net.packet.logging.MapleLogger; import net.server.Server; @@ -1467,10 +1468,10 @@ public class MapleClient extends ChannelInboundHandlerAdapter { } } - public void sendPacket(OutPacket outPacket) { + public void sendPacket(Packet packet) { announcerLock.lock(); try { - ioChannel.writeAndFlush(outPacket.getBytes()); + ioChannel.writeAndFlush(packet.getBytes()); } finally { announcerLock.unlock(); } diff --git a/src/main/java/net/encryption/PacketEncoder.java b/src/main/java/net/encryption/PacketEncoder.java index d558e7b13b..5940fd8024 100644 --- a/src/main/java/net/encryption/PacketEncoder.java +++ b/src/main/java/net/encryption/PacketEncoder.java @@ -3,9 +3,9 @@ package net.encryption; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToByteEncoder; -import net.packet.OutPacket; +import net.packet.Packet; -public class PacketEncoder extends MessageToByteEncoder { +public class PacketEncoder extends MessageToByteEncoder { private final MapleAESOFB sendCypher; public PacketEncoder(MapleAESOFB sendCypher) { @@ -13,7 +13,7 @@ public class PacketEncoder extends MessageToByteEncoder { } @Override - protected void encode(ChannelHandlerContext ctx, OutPacket in, ByteBuf out) { + protected void encode(ChannelHandlerContext ctx, Packet in, ByteBuf out) { byte[] packet = in.getBytes(); out.writeBytes(getEncodedHeader(packet.length)); diff --git a/src/main/java/net/packet/ByteBufOutPacket.java b/src/main/java/net/packet/ByteBufOutPacket.java index b062afcd3b..6d2637a75e 100644 --- a/src/main/java/net/packet/ByteBufOutPacket.java +++ b/src/main/java/net/packet/ByteBufOutPacket.java @@ -11,6 +11,7 @@ import java.awt.*; @NotThreadSafe public class ByteBufOutPacket implements OutPacket { private final ByteBuf byteBuf; + private byte[] bytes; @Deprecated(forRemoval = true) public ByteBufOutPacket() { @@ -31,7 +32,12 @@ public class ByteBufOutPacket implements OutPacket { @Override public byte[] getBytes() { - return ByteBufUtil.getBytes(byteBuf); + if (bytes == null) { + // Avoid creating new byte arrays when the packet is broadcast + bytes = ByteBufUtil.getBytes(byteBuf); + } + + return bytes; } @Override @@ -65,7 +71,7 @@ public class ByteBufOutPacket implements OutPacket { } @Override - public void writeBoolean(boolean value) { + public void writeBool(boolean value) { byteBuf.writeByte(value ? 1 : 0); } diff --git a/src/main/java/net/packet/OutPacket.java b/src/main/java/net/packet/OutPacket.java index 57e953a6f7..64d2783104 100644 --- a/src/main/java/net/packet/OutPacket.java +++ b/src/main/java/net/packet/OutPacket.java @@ -1,5 +1,7 @@ package net.packet; +import net.opcodes.SendOpcode; + import java.awt.*; public interface OutPacket extends Packet { @@ -9,8 +11,12 @@ public interface OutPacket extends Packet { void writeShort(int value); void writeInt(int value); void writeLong(long value); - void writeBoolean(boolean value); + void writeBool(boolean value); void writeString(String value); void writePoint(Point value); void skip(int numberOfBytes); + + static OutPacket create(SendOpcode opcode) { + return new ByteBufOutPacket(opcode); + } } diff --git a/src/test/java/net/packet/ByteBufOutPacketTest.java b/src/test/java/net/packet/ByteBufOutPacketTest.java index 3673254736..c0fa148e08 100644 --- a/src/test/java/net/packet/ByteBufOutPacketTest.java +++ b/src/test/java/net/packet/ByteBufOutPacketTest.java @@ -143,7 +143,7 @@ class ByteBufOutPacketTest { @Test void writeBoolean_true() { - outPacket.writeBoolean(true); + outPacket.writeBool(true); ByteBuf wrapped = wrapExplicitlyWrittenBytes(outPacket); byte readByte = wrapped.readByte(); @@ -153,7 +153,7 @@ class ByteBufOutPacketTest { @Test void writeBoolean_false() { - outPacket.writeBoolean(false); + outPacket.writeBool(false); ByteBuf wrapped = wrapExplicitlyWrittenBytes(outPacket); byte readByte = wrapped.readByte(); @@ -203,4 +203,15 @@ class ByteBufOutPacketTest { assertEquals(0, wrapped.readByte()); assertEquals(secondWrittenByte, wrapped.readByte()); } + + @Test + void whenGettingBytesRepeatedly_bytesShouldBeLockedInPlace() { + outPacket.writeByte(1); + byte[] initialWrite = outPacket.getBytes(); + + outPacket.writeByte(2); + byte[] afterWritingAgain = outPacket.getBytes(); + + assertArrayEquals(initialWrite, afterWritingAgain); + } } \ No newline at end of file From b5cd6887aed21a112b6011c8b61d75fa92d2bcd8 Mon Sep 17 00:00:00 2001 From: P0nk Date: Fri, 20 Aug 2021 16:11:07 +0200 Subject: [PATCH 4/7] Let PacketCreator create Packet - initial test --- src/main/java/client/MapleCharacter.java | 6 ++++ .../handlers/PlayerLoggedinHandler.java | 2 +- src/main/java/server/maps/MapleMap.java | 4 +-- src/main/java/tools/PacketCreator.java | 34 +++++++++---------- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/main/java/client/MapleCharacter.java b/src/main/java/client/MapleCharacter.java index 6a5bd054d6..e062f6b776 100644 --- a/src/main/java/client/MapleCharacter.java +++ b/src/main/java/client/MapleCharacter.java @@ -38,6 +38,7 @@ import constants.game.ExpTable; import constants.game.GameConstants; import constants.inventory.ItemConstants; import constants.skills.*; +import net.packet.Packet; import net.server.PlayerBuffValueHolder; import net.server.PlayerCoolDownValueHolder; import net.server.Server; @@ -10048,10 +10049,15 @@ public class MapleCharacter extends AbstractMapleCharacterObject { announce(PacketCreator.updatePlayerStats(Collections.singletonList(new Pair<>(stat, Integer.valueOf(newval))), itemReaction, this)); } + @Deprecated(forRemoval = true) public void announce(final byte[] packet) { client.announce(packet); } + public void sendPacket(Packet packet) { + client.sendPacket(packet); + } + @Override public int getObjectId() { return getId(); diff --git a/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java b/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java index e39875584a..a6edc7a3cc 100644 --- a/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java @@ -427,7 +427,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { npcsIds.put(YamlConfig.config.server.REBIRTH_NPC_ID, "Rebirth"); } - c.announce(PacketCreator.setNPCScriptable(npcsIds)); + c.sendPacket(PacketCreator.setNPCScriptable(npcsIds)); } if (newcomer) player.setLoginTime(System.currentTimeMillis()); diff --git a/src/main/java/server/maps/MapleMap.java b/src/main/java/server/maps/MapleMap.java index 851b866553..2a30648d88 100644 --- a/src/main/java/server/maps/MapleMap.java +++ b/src/main/java/server/maps/MapleMap.java @@ -3314,10 +3314,10 @@ public class MapleMap { } // not really costly to keep generating imo - public void sendNightEffect(MapleCharacter mc) { + public void sendNightEffect(MapleCharacter chr) { for (Entry types : backgroundTypes.entrySet()) { if (types.getValue() >= 3) { // 3 is a special number - mc.announce(PacketCreator.changeBackgroundEffect(true, types.getKey(), 0)); + chr.sendPacket(PacketCreator.changeBackgroundEffect(true, types.getKey(), 0)); } } } diff --git a/src/main/java/tools/PacketCreator.java b/src/main/java/tools/PacketCreator.java index fd539cc985..e3e0430b9f 100644 --- a/src/main/java/tools/PacketCreator.java +++ b/src/main/java/tools/PacketCreator.java @@ -38,6 +38,8 @@ import constants.skills.Corsair; import constants.skills.ThunderBreaker; import net.encryption.InitializationVector; import net.opcodes.SendOpcode; +import net.packet.OutPacket; +import net.packet.Packet; import net.server.PlayerCoolDownValueHolder; import net.server.Server; import net.server.channel.Channel; @@ -8337,14 +8339,13 @@ public class PacketCreator { * @param transition the time it takes to transition the effect. * @return a packet to change the background effect of a specified layer. */ - public static byte[] changeBackgroundEffect(boolean remove, int layer, int transition) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_BACK_EFFECT.getValue()); - mplew.writeBool(remove); - mplew.writeInt(0); // not sure what this int32 does yet - mplew.write(layer); - mplew.writeInt(transition); - return mplew.getPacket(); + public static Packet changeBackgroundEffect(boolean remove, int layer, int transition) { + OutPacket p = OutPacket.create(SendOpcode.SET_BACK_EFFECT); + p.writeBool(remove); + p.writeInt(0); // not sure what this int32 does yet + p.writeByte(layer); + p.writeInt(transition); + return p; } /** @@ -8354,18 +8355,17 @@ public class PacketCreator { * @param scriptableNpcIds Ids of npcs to enable scripts for. * @return a packet which makes the npc's provided scriptable. */ - public static byte[] setNPCScriptable(Map scriptableNpcIds) { // thanks to GabrielSin - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_NPC_SCRIPTABLE.getValue()); - mplew.write(scriptableNpcIds.size()); + public static Packet setNPCScriptable(Map scriptableNpcIds) { // thanks to GabrielSin + OutPacket p = OutPacket.create(SendOpcode.SET_NPC_SCRIPTABLE); + p.writeByte(scriptableNpcIds.size()); scriptableNpcIds.forEach((id, name) -> { - mplew.writeInt(id); + p.writeInt(id); // The client needs a name for the npc conversation, which is displayed under etc when the npc has a quest available. - mplew.writeMapleAsciiString(name); - mplew.writeInt(0); // start time - mplew.writeInt(Integer.MAX_VALUE); // end time + p.writeString(name); + p.writeInt(0); // start time + p.writeInt(Integer.MAX_VALUE); // end time }); - return mplew.getPacket(); + return p; } private static byte[] MassacreResult(byte nRank, int nIncExp) { From 8f6860d7d74960fcf263a5ed509abfe41e091798 Mon Sep 17 00:00:00 2001 From: P0nk Date: Sat, 21 Aug 2021 01:36:51 +0200 Subject: [PATCH 5/7] All packet creating methods now create Packet instead of byte[] This commit got way too big... - Remove deprecated methods for sending packets - Favor OutPacket & Packet over MaplePacketLittleEndianWriter, LittleEndianWriter, and byte array - Split up some packet creating methods into separate classes --- scripts/event/3rdJob_bowman.js | 2 +- scripts/event/3rdJob_magician.js | 2 +- scripts/event/3rdJob_mount.js | 2 +- scripts/event/3rdJob_pirate.js | 2 +- scripts/event/3rdJob_thief.js | 2 +- scripts/event/3rdJob_warrior.js | 2 +- scripts/event/Aran_2ndmount.js | 2 +- scripts/event/Aran_3rdmount.js | 2 +- scripts/event/BalrogQuest.js | 2 +- scripts/event/DollHouse.js | 2 +- scripts/event/Hak.js | 2 +- scripts/event/KerningTrain.js | 4 +- scripts/event/RescueGaga.js | 2 +- scripts/map/onUserEnter/200090000.js | 4 +- scripts/map/onUserEnter/200090010.js | 4 +- scripts/npc/1022101_old.js | 2 +- scripts/npc/2012027.js | 8 +- scripts/npc/2012028.js | 8 +- scripts/npc/2012029.js | 8 +- scripts/npc/2012030.js | 8 +- scripts/npc/2012031.js | 8 +- scripts/npc/2012032.js | 8 +- scripts/npc/2012033.js | 8 +- scripts/npc/9000019.js | 2 +- scripts/npc/9201002.js | 10 +- scripts/npc/9201011.js | 10 +- scripts/npc/9977777.js | 8 +- scripts/npc/MagatiaPassword.js | 2 +- src/main/java/client/BuddyList.java | 7 +- src/main/java/client/MapleCharacter.java | 232 +- src/main/java/client/MapleClient.java | 65 +- src/main/java/client/MapleFamily.java | 9 +- src/main/java/client/MapleFamilyEntry.java | 13 +- src/main/java/client/MonsterBook.java | 6 +- .../command/commands/gm0/DisposeCommand.java | 2 +- .../command/commands/gm0/RanksCommand.java | 4 +- .../command/commands/gm3/BanCommand.java | 6 +- .../commands/gm3/MaxEnergyCommand.java | 2 +- .../command/commands/gm3/MusicCommand.java | 4 +- .../command/commands/gm3/TimerAllCommand.java | 4 +- .../command/commands/gm3/TimerCommand.java | 4 +- .../command/commands/gm3/TimerMapCommand.java | 4 +- .../commands/gm6/WarpWorldCommand.java | 2 +- .../java/client/creator/CharacterFactory.java | 2 +- src/main/java/client/inventory/Equip.java | 4 +- src/main/java/client/inventory/MaplePet.java | 2 +- .../MapleInventoryManipulator.java | 88 +- .../client/keybind/MapleQuickslotBinding.java | 17 +- .../client/newyear/NewYearCardRecord.java | 2 +- .../processor/action/BuybackProcessor.java | 2 +- .../processor/action/MakerProcessor.java | 48 +- .../processor/action/PetAutopotProcessor.java | 8 +- .../processor/action/SpawnPetProcessor.java | 8 +- .../client/processor/npc/DueyProcessor.java | 36 +- .../processor/npc/FredrickProcessor.java | 4 +- .../processor/npc/StorageProcessor.java | 28 +- .../processor/stat/AssignAPProcessor.java | 50 +- .../processor/stat/AssignSPProcessor.java | 4 +- .../net/netty/ServerChannelInitializer.java | 2 +- .../java/net/packet/ByteBufOutPacket.java | 8 +- src/main/java/net/packet/OutPacket.java | 3 +- src/main/java/net/server/Server.java | 11 +- src/main/java/net/server/channel/Channel.java | 11 +- .../handlers/AbstractDealDamageHandler.java | 4 +- .../channel/handlers/AcceptFamilyHandler.java | 18 +- .../channel/handlers/AdminChatHandler.java | 3 +- .../channel/handlers/AdminCommandHandler.java | 14 +- .../handlers/AllianceOperationHandler.java | 46 +- .../channel/handlers/BBSOperationHandler.java | 6 +- .../handlers/BuddylistModifyHandler.java | 16 +- .../channel/handlers/CancelDebuffHandler.java | 2 +- .../handlers/CashOperationHandler.java | 98 +- .../handlers/CashShopSurpriseHandler.java | 4 +- .../channel/handlers/ChangeMapHandler.java | 18 +- .../handlers/ChangeMapSpecialHandler.java | 4 +- .../handlers/CharInfoRequestHandler.java | 2 +- .../handlers/CloseRangeDamageHandler.java | 10 +- .../channel/handlers/CouponCodeHandler.java | 6 +- .../handlers/DenyPartyRequestHandler.java | 2 +- .../server/channel/handlers/DoorHandler.java | 6 +- .../server/channel/handlers/DueyHandler.java | 2 +- .../handlers/EnterCashShopHandler.java | 20 +- .../channel/handlers/EnterMTSHandler.java | 32 +- .../channel/handlers/FamilyAddHandler.java | 20 +- .../handlers/FamilyPreceptsHandler.java | 2 +- .../handlers/FamilySeparateHandler.java | 6 +- .../handlers/FamilySummonResponseHandler.java | 2 +- .../channel/handlers/FamilyUseHandler.java | 14 +- .../channel/handlers/FredrickHandler.java | 2 +- .../channel/handlers/GeneralChatHandler.java | 2 +- .../channel/handlers/GiveFameHandler.java | 2 +- .../handlers/GuildOperationHandler.java | 21 +- .../handlers/HiredMerchantRequest.java | 10 +- .../handlers/InventoryMergeHandler.java | 6 +- .../handlers/InventorySortHandler.java | 8 +- .../channel/handlers/ItemMoveHandler.java | 2 +- .../channel/handlers/ItemRewardHandler.java | 4 +- .../handlers/LeftKnockbackHandler.java | 4 +- .../server/channel/handlers/MTSHandler.java | 101 +- .../channel/handlers/MagicDamageHandler.java | 7 +- .../channel/handlers/MesoDropHandler.java | 6 +- .../channel/handlers/MessengerHandler.java | 14 +- .../handlers/MobDamageMobFriendlyHandler.java | 2 +- .../handlers/MonsterBookCoverHandler.java | 2 +- .../handlers/MonsterCarnivalHandler.java | 34 +- .../channel/handlers/MoveDragonHandler.java | 2 +- .../channel/handlers/MoveLifeHandler.java | 4 +- .../channel/handlers/NPCAnimationHandler.java | 19 +- .../channel/handlers/NPCTalkHandler.java | 8 +- .../channel/handlers/NewYearCardHandler.java | 16 +- .../channel/handlers/NoteActionHandler.java | 2 +- .../channel/handlers/OpenFamilyHandler.java | 2 +- .../handlers/OpenFamilyPedigreeHandler.java | 2 +- .../channel/handlers/OwlWarpHandler.java | 40 +- .../handlers/PartyOperationHandler.java | 16 +- .../handlers/PartySearchStartHandler.java | 6 +- .../channel/handlers/PetFoodHandler.java | 4 +- .../channel/handlers/PetLootHandler.java | 12 +- .../handlers/PlayerInteractionHandler.java | 106 +- .../handlers/PlayerLoggedinHandler.java | 55 +- .../handlers/PlayerMapTransitionHandler.java | 4 +- .../channel/handlers/RPSActionHandler.java | 10 +- .../channel/handlers/RaiseIncExpHandler.java | 4 +- .../channel/handlers/RangedAttackHandler.java | 9 +- .../channel/handlers/RemoteStoreHandler.java | 4 +- .../channel/handlers/ReportHandler.java | 6 +- .../channel/handlers/RingActionHandler.java | 78 +- .../channel/handlers/ScrollHandler.java | 6 +- .../channel/handlers/SkillBookHandler.java | 2 +- .../channel/handlers/SpecialMoveHandler.java | 16 +- .../channel/handlers/SpouseChatHandler.java | 4 +- .../channel/handlers/TakeDamageHandler.java | 6 +- .../handlers/TouchingCashShopHandler.java | 2 +- .../channel/handlers/TransferNameHandler.java | 16 +- .../handlers/TransferNameResultHandler.java | 2 +- .../handlers/TransferWorldHandler.java | 14 +- .../channel/handlers/TrockAddMapHandler.java | 4 +- .../channel/handlers/UseCashItemHandler.java | 259 +- .../channel/handlers/UseCatchItemHandler.java | 36 +- .../channel/handlers/UseDeathItemHandler.java | 2 +- .../channel/handlers/UseGachaExpHandler.java | 2 +- .../channel/handlers/UseHammerHandler.java | 2 +- .../channel/handlers/UseItemHandler.java | 4 +- .../channel/handlers/UseMapleLifeHandler.java | 10 +- .../handlers/UseOwlOfMinervaHandler.java | 2 +- .../channel/handlers/UseSolomonHandler.java | 2 +- .../channel/handlers/UseSummonBagHandler.java | 4 +- .../channel/handlers/WeddingHandler.java | 28 +- .../channel/handlers/WeddingTalkHandler.java | 10 +- .../handlers/WeddingTalkMoreHandler.java | 6 +- .../channel/handlers/WhisperHandler.java | 14 +- .../listener/MatchCheckerGuildCreation.java | 19 +- .../MaplePartySearchCoordinator.java | 2 +- .../java/net/server/guild/GuildPackets.java | 543 + .../java/net/server/guild/MapleAlliance.java | 24 +- .../java/net/server/guild/MapleGuild.java | 54 +- .../net/server/guild/MapleGuildResponse.java | 12 +- .../server/handlers/CustomPacketHandler.java | 2 +- .../handlers/login/AcceptToSHandler.java | 4 +- .../handlers/login/AfterLoginHandler.java | 12 +- .../handlers/login/CharSelectedHandler.java | 10 +- .../login/CharSelectedWithPicHandler.java | 12 +- .../login/CharlistRequestHandler.java | 4 +- .../handlers/login/CheckCharNameHandler.java | 2 +- .../handlers/login/CreateCharHandler.java | 4 +- .../handlers/login/DeleteCharHandler.java | 14 +- .../handlers/login/GuestLoginHandler.java | 2 +- .../handlers/login/LoginPasswordHandler.java | 14 +- .../handlers/login/RegisterPicHandler.java | 10 +- .../handlers/login/RegisterPinHandler.java | 2 +- .../handlers/login/RelogRequestHandler.java | 2 +- .../login/ServerStatusRequestHandler.java | 4 +- .../login/ServerlistRequestHandler.java | 8 +- .../handlers/login/SetGenderHandler.java | 2 +- .../handlers/login/ViewAllCharHandler.java | 6 +- .../login/ViewAllCharRegisterPicHandler.java | 10 +- .../login/ViewAllCharSelectedHandler.java | 10 +- .../ViewAllCharSelectedWithPicHandler.java | 12 +- .../java/net/server/world/MapleParty.java | 12 +- src/main/java/net/server/world/World.java | 56 +- .../scripting/AbstractPlayerInteraction.java | 74 +- .../scripting/event/EventInstanceManager.java | 20 +- .../java/scripting/map/MapScriptMethods.java | 50 +- .../scripting/npc/NPCConversationManager.java | 61 +- .../java/scripting/npc/NPCScriptManager.java | 2 +- .../portal/PortalPlayerInteraction.java | 2 +- src/main/java/server/MapleShop.java | 26 +- src/main/java/server/MapleStatEffect.java | 31 +- src/main/java/server/MapleStorage.java | 12 +- src/main/java/server/MapleTrade.java | 26 +- .../java/server/events/gm/MapleCoconut.java | 36 +- .../java/server/events/gm/MapleFitness.java | 28 +- src/main/java/server/events/gm/MapleOla.java | 4 +- .../java/server/events/gm/MapleSnowball.java | 10 +- .../server/expeditions/MapleExpedition.java | 39 +- src/main/java/server/life/MapleMonster.java | 45 +- src/main/java/server/life/MapleNPC.java | 10 +- src/main/java/server/life/MaplePlayerNPC.java | 8 +- .../java/server/maps/MapleDoorObject.java | 20 +- src/main/java/server/maps/MapleDragon.java | 4 +- .../java/server/maps/MapleGenericPortal.java | 2 +- .../java/server/maps/MapleHiredMerchant.java | 39 +- src/main/java/server/maps/MapleKite.java | 24 +- src/main/java/server/maps/MapleMap.java | 182 +- src/main/java/server/maps/MapleMapEffect.java | 13 +- src/main/java/server/maps/MapleMapItem.java | 52 +- .../java/server/maps/MapleMiniDungeon.java | 4 +- src/main/java/server/maps/MapleMiniGame.java | 23 +- src/main/java/server/maps/MapleMist.java | 11 +- .../java/server/maps/MaplePlayerShop.java | 45 +- src/main/java/server/maps/MapleReactor.java | 9 +- src/main/java/server/maps/MapleSummon.java | 4 +- .../minigame/MapleRockPaperScissor.java | 14 +- .../server/movement/AbsoluteLifeMovement.java | 21 +- .../java/server/movement/ChairMovement.java | 18 +- .../java/server/movement/ChangeEquip.java | 13 +- .../server/movement/JumpDownMovement.java | 23 +- .../server/movement/LifeMovementFragment.java | 7 +- .../server/movement/RelativeLifeMovement.java | 16 +- .../server/movement/TeleportMovement.java | 17 +- .../server/partyquest/AriantColiseum.java | 4 +- .../server/partyquest/MonsterCarnival.java | 16 +- .../partyquest/MonsterCarnivalParty.java | 2 +- src/main/java/server/partyquest/Pyramid.java | 12 +- src/main/java/server/quest/MapleQuest.java | 6 +- .../java/server/quest/actions/ItemAction.java | 4 +- .../server/quest/actions/NextQuestAction.java | 2 +- src/main/java/tools/PacketCreator.java | 8897 ++++++++--------- src/main/java/tools/packets/Fishing.java | 2 +- .../{Wedding.java => WeddingPackets.java} | 194 +- .../java/net/packet/ByteBufOutPacketTest.java | 4 +- 231 files changed, 6403 insertions(+), 6927 deletions(-) create mode 100644 src/main/java/net/server/guild/GuildPackets.java rename src/main/java/tools/packets/{Wedding.java => WeddingPackets.java} (63%) diff --git a/scripts/event/3rdJob_bowman.js b/scripts/event/3rdJob_bowman.js index bf17764cd6..a68959262e 100644 --- a/scripts/event/3rdJob_bowman.js +++ b/scripts/event/3rdJob_bowman.js @@ -55,7 +55,7 @@ function playerEntry(eim, player) { em.setProperty("noEntry","true"); const PacketCreator = Java.type('tools.PacketCreator'); - player.getClient().announce(PacketCreator.getClock(eventTime * 60)); + player.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_magician.js b/scripts/event/3rdJob_magician.js index 9a9614084f..ca391ed446 100644 --- a/scripts/event/3rdJob_magician.js +++ b/scripts/event/3rdJob_magician.js @@ -55,7 +55,7 @@ function playerEntry(eim, player) { em.setProperty("noEntry","true"); const PacketCreator = Java.type('tools.PacketCreator'); - player.getClient().announce(PacketCreator.getClock(eventTime * 60)); + player.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_mount.js b/scripts/event/3rdJob_mount.js index bd514983f1..7d45386e66 100644 --- a/scripts/event/3rdJob_mount.js +++ b/scripts/event/3rdJob_mount.js @@ -85,7 +85,7 @@ function playerEntry(eim, player) { em.setProperty("noEntry","true"); const PacketCreator = Java.type('tools.PacketCreator'); - player.getClient().announce(PacketCreator.getClock(eventTime * 60)); + player.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_pirate.js b/scripts/event/3rdJob_pirate.js index fd95fe986b..928ec11638 100644 --- a/scripts/event/3rdJob_pirate.js +++ b/scripts/event/3rdJob_pirate.js @@ -47,7 +47,7 @@ function playerEntry(eim, player) { em.setProperty("noEntry","true"); const PacketCreator = Java.type('tools.PacketCreator'); - player.getClient().announce(PacketCreator.getClock(eventTime * 60)); + player.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_thief.js b/scripts/event/3rdJob_thief.js index 4ef82f1a06..780f66d860 100644 --- a/scripts/event/3rdJob_thief.js +++ b/scripts/event/3rdJob_thief.js @@ -55,7 +55,7 @@ function playerEntry(eim, player) { em.setProperty("noEntry","true"); const PacketCreator = Java.type('tools.PacketCreator'); - player.getClient().announce(PacketCreator.getClock(eventTime * 60)); + player.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_warrior.js b/scripts/event/3rdJob_warrior.js index 0f36734085..c4890fb012 100644 --- a/scripts/event/3rdJob_warrior.js +++ b/scripts/event/3rdJob_warrior.js @@ -55,7 +55,7 @@ function playerEntry(eim, player) { em.setProperty("noEntry","true"); const PacketCreator = Java.type('tools.PacketCreator'); - player.getClient().announce(PacketCreator.getClock(eventTime * 60)); + player.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/Aran_2ndmount.js b/scripts/event/Aran_2ndmount.js index 1639ae8252..87843af48c 100644 --- a/scripts/event/Aran_2ndmount.js +++ b/scripts/event/Aran_2ndmount.js @@ -61,7 +61,7 @@ function playerEntry(eim, player) { em.setProperty("noEntry","true"); const PacketCreator = Java.type('tools.PacketCreator'); - player.getClient().announce(PacketCreator.getClock(eventTime * 60)); + player.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/Aran_3rdmount.js b/scripts/event/Aran_3rdmount.js index cce7fb3f12..0e9f37aa7f 100644 --- a/scripts/event/Aran_3rdmount.js +++ b/scripts/event/Aran_3rdmount.js @@ -62,7 +62,7 @@ function playerEntry(eim, player) { em.setProperty("noEntry","true"); const PacketCreator = Java.type('tools.PacketCreator'); - player.getClient().announce(PacketCreator.getClock(eventTime * 60)); + player.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/BalrogQuest.js b/scripts/event/BalrogQuest.js index 3332e5f847..af9c4c834e 100644 --- a/scripts/event/BalrogQuest.js +++ b/scripts/event/BalrogQuest.js @@ -64,7 +64,7 @@ function playerEntry(eim, player) { em.setProperty("noEntry","true"); const PacketCreator = Java.type('tools.PacketCreator'); - player.getClient().announce(PacketCreator.getClock(eventTime * 60)); + player.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/DollHouse.js b/scripts/event/DollHouse.js index f476024254..42e0e93c5e 100644 --- a/scripts/event/DollHouse.js +++ b/scripts/event/DollHouse.js @@ -47,7 +47,7 @@ function playerEntry(eim, player) { em.setProperty("noEntry","true"); const PacketCreator = Java.type('tools.PacketCreator'); - player.getClient().announce(PacketCreator.getClock(eventTime * 60)); + player.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/Hak.js b/scripts/event/Hak.js index 0e10f03181..d47a926126 100644 --- a/scripts/event/Hak.js +++ b/scripts/event/Hak.js @@ -33,7 +33,7 @@ function playerEntry(eim, player) { player.changeMap(onRide, onRide.getPortal(0)); const PacketCreator = Java.type('tools.PacketCreator'); - player.getClient().announce(PacketCreator.getClock(rideTime / 1000)); + player.sendPacket(PacketCreator.getClock(rideTime / 1000)); eim.schedule("timeOut", rideTime); } diff --git a/scripts/event/KerningTrain.js b/scripts/event/KerningTrain.js index d672f9f72c..4146384fb8 100644 --- a/scripts/event/KerningTrain.js +++ b/scripts/event/KerningTrain.js @@ -34,8 +34,8 @@ function playerEntry(eim, player) { player.changeMap(onRide, onRide.getPortal(0)); const PacketCreator = Java.type('tools.PacketCreator'); - player.getClient().announce(PacketCreator.getClock(rideTime / 1000)); - player.getClient().announce(PacketCreator.earnTitleMessage("The next stop is at Kerning " + (myRide == 0 ? "Square" : "Subway") + " Station. The exit is to your left.")); + player.sendPacket(PacketCreator.getClock(rideTime / 1000)); + player.sendPacket(PacketCreator.earnTitleMessage("The next stop is at Kerning " + (myRide == 0 ? "Square" : "Subway") + " Station. The exit is to your left.")); eim.schedule("timeOut", rideTime); } diff --git a/scripts/event/RescueGaga.js b/scripts/event/RescueGaga.js index 9b3f739c91..99b80fe97a 100644 --- a/scripts/event/RescueGaga.js +++ b/scripts/event/RescueGaga.js @@ -102,7 +102,7 @@ function playerEntry(eim, player) { player.changeMap(map, map.getPortal(0)); const PacketCreator = Java.type('tools.PacketCreator'); - player.announce(PacketCreator.showEffect("event/space/start")); + player.sendPacket(PacketCreator.showEffect("event/space/start")); player.startMapEffect("Please rescue Gaga within the time limit.", 5120027); } diff --git a/scripts/map/onUserEnter/200090000.js b/scripts/map/onUserEnter/200090000.js index f59d69363f..0c6511cd61 100644 --- a/scripts/map/onUserEnter/200090000.js +++ b/scripts/map/onUserEnter/200090000.js @@ -6,8 +6,8 @@ function start(ms) { if(map.getDocked()) { const PacketCreator = Java.type('tools.PacketCreator'); - ms.getClient().announce(PacketCreator.musicChange("Bgm04/ArabPirate")); - ms.getClient().announce(PacketCreator.crogBoatPacket(true)); + ms.getClient().sendPacket(PacketCreator.musicChange("Bgm04/ArabPirate")); + ms.getClient().sendPacket(PacketCreator.crogBoatPacket(true)); } return true; diff --git a/scripts/map/onUserEnter/200090010.js b/scripts/map/onUserEnter/200090010.js index 65063ad747..ecd5b6feb0 100644 --- a/scripts/map/onUserEnter/200090010.js +++ b/scripts/map/onUserEnter/200090010.js @@ -6,8 +6,8 @@ function start(ms) { if(map.getDocked()) { const PacketCreator = Java.type('tools.PacketCreator'); - ms.getClient().announce(PacketCreator.musicChange("Bgm04/ArabPirate")); - ms.getClient().announce(PacketCreator.crogBoatPacket(true)); + ms.getClient().sendPacket(PacketCreator.musicChange("Bgm04/ArabPirate")); + ms.getClient().sendPacket(PacketCreator.crogBoatPacket(true)); } return true; diff --git a/scripts/npc/1022101_old.js b/scripts/npc/1022101_old.js index f0a0c226fc..aaf881afbf 100644 --- a/scripts/npc/1022101_old.js +++ b/scripts/npc/1022101_old.js @@ -137,7 +137,7 @@ function action(mode, type, selection) { cm.getPlayer().getCashShop().gainCash(1, nxAmount); const PacketCreator = Java.type('tools.PacketCreator'); - cm.getPlayer().announce(PacketCreator.earnTitleMessage("You have earned " + nxAmount + " NX")); + cm.getPlayer().sendPacket(PacketCreator.earnTitleMessage("You have earned " + nxAmount + " NX")); cm.logLeaf(nxAmount + " NX"); cm.dispose(); } else if(choice == 2) { diff --git a/scripts/npc/2012027.js b/scripts/npc/2012027.js index 0eb18ddd36..cba57b8d63 100644 --- a/scripts/npc/2012027.js +++ b/scripts/npc/2012027.js @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/2012028.js b/scripts/npc/2012028.js index 3986903679..bfe547c32b 100644 --- a/scripts/npc/2012028.js +++ b/scripts/npc/2012028.js @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/2012029.js b/scripts/npc/2012029.js index 8b986072ac..4d769c2932 100644 --- a/scripts/npc/2012029.js +++ b/scripts/npc/2012029.js @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/2012030.js b/scripts/npc/2012030.js index 2a50a6cf68..af7282a361 100644 --- a/scripts/npc/2012030.js +++ b/scripts/npc/2012030.js @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/2012031.js b/scripts/npc/2012031.js index 8202dad15f..4087b3f6f4 100644 --- a/scripts/npc/2012031.js +++ b/scripts/npc/2012031.js @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/2012032.js b/scripts/npc/2012032.js index 16281bbb9a..edbc02f44d 100644 --- a/scripts/npc/2012032.js +++ b/scripts/npc/2012032.js @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/2012033.js b/scripts/npc/2012033.js index 24379bd233..0f38111ea3 100644 --- a/scripts/npc/2012033.js +++ b/scripts/npc/2012033.js @@ -57,8 +57,8 @@ function action(mode, type, selection) { if(harpNote != nextNote) { cm.setQuestProgress(3114, 0); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/wrong_kor")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Failed")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/wrong_kor")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Failed")); cm.message("You've missed the note... Start over again."); } else { @@ -71,8 +71,8 @@ function action(mode, type, selection) { cm.message("Twinkle, twinkle, little star, how I wonder what you are."); cm.setQuestProgress(3114, 42); - cm.getPlayer().announce(PacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(PacketCreator.playSound("Party1/Clear")); + cm.getPlayer().sendPacket(PacketCreator.showEffect("quest/party/clear")); + cm.getPlayer().sendPacket(PacketCreator.playSound("Party1/Clear")); cm.dispose(); return; diff --git a/scripts/npc/9000019.js b/scripts/npc/9000019.js index c928c5cbe7..07f0e8658b 100644 --- a/scripts/npc/9000019.js +++ b/scripts/npc/9000019.js @@ -27,7 +27,7 @@ function action(mode, type, selection) { } const PacketCreator = Java.type('tools.PacketCreator'); - cm.getClient().announce(PacketCreator.openRPSNPC()); + cm.getClient().sendPacket(PacketCreator.openRPSNPC()); cm.dispose(); } } diff --git a/scripts/npc/9201002.js b/scripts/npc/9201002.js index ab3f04b48d..2825cacd15 100644 --- a/scripts/npc/9201002.js +++ b/scripts/npc/9201002.js @@ -303,15 +303,15 @@ function action(mode, type, selection) { const PacketCreator = Java.type('tools.PacketCreator'); if (YamlConfig.config.server.WEDDING_BLESSER_SHOWFX) { var target = cm.getPlayer(); - target.announce(PacketCreator.showSpecialEffect(9)); + target.sendPacket(PacketCreator.showSpecialEffect(9)); target.getMap().broadcastMessage(target, PacketCreator.showForeignEffect(target.getId(), 9), false); } else { var target = eim.getPlayerById(eim.getIntProperty("groomId")); - target.announce(PacketCreator.showSpecialEffect(9)); + target.sendPacket(PacketCreator.showSpecialEffect(9)); target.getMap().broadcastMessage(target, PacketCreator.showForeignEffect(target.getId(), 9), false); target = eim.getPlayerById(eim.getIntProperty("brideId")); - target.announce(PacketCreator.showSpecialEffect(9)); + target.sendPacket(PacketCreator.showSpecialEffect(9)); target.getMap().broadcastMessage(target, PacketCreator.showForeignEffect(target.getId(), 9), false); } @@ -357,8 +357,8 @@ function action(mode, type, selection) { partner.setMarriageItemId(marriageRingId); //var marriageId = eim.getIntProperty("weddingId"); - //player.announce(Wedding.OnMarriageResult(marriageId, player, true)); - //partner.announce(Wedding.OnMarriageResult(marriageId, player, true)); + //player.sendPacket(Wedding.OnMarriageResult(marriageId, player, true)); + //partner.sendPacket(Wedding.OnMarriageResult(marriageId, player, true)); giveCoupleBlessings(eim, player, partner); diff --git a/scripts/npc/9201011.js b/scripts/npc/9201011.js index a10562cef3..f41d49c2a5 100644 --- a/scripts/npc/9201011.js +++ b/scripts/npc/9201011.js @@ -173,15 +173,15 @@ function action(mode, type, selection) { const PacketCreator = Java.type('tools.PacketCreator'); if(YamlConfig.config.server.WEDDING_BLESSER_SHOWFX) { var target = cm.getPlayer(); - target.announce(PacketCreator.showSpecialEffect(9)); + target.sendPacket(PacketCreator.showSpecialEffect(9)); target.getMap().broadcastMessage(target, PacketCreator.showForeignEffect(target.getId(), 9), false); } else { var target = eim.getPlayerById(eim.getIntProperty("groomId")); - target.announce(PacketCreator.showSpecialEffect(9)); + target.sendPacket(PacketCreator.showSpecialEffect(9)); target.getMap().broadcastMessage(target, PacketCreator.showForeignEffect(target.getId(), 9), false); target = eim.getPlayerById(eim.getIntProperty("brideId")); - target.announce(PacketCreator.showSpecialEffect(9)); + target.sendPacket(PacketCreator.showSpecialEffect(9)); target.getMap().broadcastMessage(target, PacketCreator.showForeignEffect(target.getId(), 9), false); } @@ -227,8 +227,8 @@ function action(mode, type, selection) { partner.setMarriageItemId(marriageRingId); //var marriageId = eim.getIntProperty("weddingId"); - //player.announce(Wedding.OnMarriageResult(marriageId, player, true)); - //partner.announce(Wedding.OnMarriageResult(marriageId, player, true)); + //player.sendPacket(Wedding.OnMarriageResult(marriageId, player, true)); + //partner.sendPacket(Wedding.OnMarriageResult(marriageId, player, true)); giveCoupleBlessings(eim, player, partner); diff --git a/scripts/npc/9977777.js b/scripts/npc/9977777.js index c9e9a5805b..bcabefea5b 100644 --- a/scripts/npc/9977777.js +++ b/scripts/npc/9977777.js @@ -309,7 +309,7 @@ function writeAllFeatures() { function start() { const PacketCreator = Java.type('tools.PacketCreator'); - cm.getPlayer().announce(PacketCreator.musicChange(anthemSong)); + cm.getPlayer().sendPacket(PacketCreator.musicChange(anthemSong)); status = -1; writeAllFeatures(); action(1, 0, 0); @@ -318,11 +318,11 @@ function start() { function action(mode, type, selection) { const PacketCreator = Java.type('tools.PacketCreator'); if (mode == -1) { - cm.getPlayer().announce(PacketCreator.musicChange(ambientSong)); + cm.getPlayer().sendPacket(PacketCreator.musicChange(ambientSong)); cm.dispose(); } else { if (mode == 0 && type > 0) { - cm.getPlayer().announce(PacketCreator.musicChange(ambientSong)); + cm.getPlayer().sendPacket(PacketCreator.musicChange(ambientSong)); cm.dispose(); return; } @@ -356,7 +356,7 @@ function action(mode, type, selection) { cm.sendPrev(sendStr); } else { - cm.getPlayer().announce(PacketCreator.musicChange(ambientSong)); + cm.getPlayer().sendPacket(PacketCreator.musicChange(ambientSong)); cm.dispose(); } } diff --git a/scripts/npc/MagatiaPassword.js b/scripts/npc/MagatiaPassword.js index 9d54d25693..a4c10f40ab 100644 --- a/scripts/npc/MagatiaPassword.js +++ b/scripts/npc/MagatiaPassword.js @@ -22,7 +22,7 @@ function action(mode, type, selection){ if(cm.getText() == cm.getQuestProgress(3360)){ cm.setQuestProgress(3360, 1); const PacketCreator = Java.type('tools.PacketCreator'); - cm.getPlayer().announce(PacketCreator.playPortalSound()); + cm.getPlayer().sendPacket(PacketCreator.playPortalSound()); cm.warp(261030000, "sp_" + ((cm.getMapId() == 261010000) ? "jenu" : "alca")); } else { diff --git a/src/main/java/client/BuddyList.java b/src/main/java/client/BuddyList.java index 83ed697282..f7579c5b9a 100644 --- a/src/main/java/client/BuddyList.java +++ b/src/main/java/client/BuddyList.java @@ -21,6 +21,7 @@ */ package client; +import net.packet.Packet; import net.server.PlayerStorage; import tools.DatabaseConnection; import tools.PacketCreator; @@ -126,12 +127,12 @@ public class BuddyList { } } - public void broadcast(byte[] packet, PlayerStorage pstorage) { + public void broadcast(Packet packet, PlayerStorage pstorage) { for(int bid : getBuddyIds()) { MapleCharacter chr = pstorage.getCharacterById(bid); if(chr != null && chr.isLoggedinWorld()) { - chr.announce(packet); + chr.sendPacket(packet); } } } @@ -167,7 +168,7 @@ public class BuddyList { public void addBuddyRequest(MapleClient c, int cidFrom, String nameFrom, int channelFrom) { put(new BuddylistEntry(nameFrom, "Default Group", cidFrom, channelFrom, false)); if (pendingRequests.isEmpty()) { - c.announce(PacketCreator.requestBuddylistAdd(cidFrom, c.getPlayer().getId(), nameFrom)); + c.sendPacket(PacketCreator.requestBuddylistAdd(cidFrom, c.getPlayer().getId(), nameFrom)); } else { pendingRequests.push(new CharacterNameAndId(cidFrom, nameFrom)); } diff --git a/src/main/java/client/MapleCharacter.java b/src/main/java/client/MapleCharacter.java index e062f6b776..edb7fc099f 100644 --- a/src/main/java/client/MapleCharacter.java +++ b/src/main/java/client/MapleCharacter.java @@ -45,6 +45,7 @@ import net.server.Server; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import net.server.coordinator.world.MapleInviteCoordinator; +import net.server.guild.GuildPackets; import net.server.guild.MapleAlliance; import net.server.guild.MapleGuild; import net.server.guild.MapleGuildCharacter; @@ -76,7 +77,7 @@ import server.partyquest.PartyQuest; import server.quest.MapleQuest; import tools.*; import tools.exceptions.NotEnabledException; -import tools.packets.Wedding; +import tools.packets.WeddingPackets; import java.awt.*; import java.lang.ref.WeakReference; @@ -295,7 +296,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { statup.add(new Pair<>(s.getKey(), s.getValue())); } - announce(PacketCreator.updatePlayerStats(statup, true, MapleCharacter.this)); + sendPacket(PacketCreator.updatePlayerStats(statup, true, MapleCharacter.this)); } }); @@ -758,7 +759,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } combocounter = (short) Math.min(30000, count); if (count > 0) { - announce(PacketCreator.showCombo(combocounter)); + sendPacket(PacketCreator.showCombo(combocounter)); } } @@ -824,7 +825,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (isGM() && hide != this.hidden) { if (!hide) { this.hidden = false; - announce(PacketCreator.getGMEffect(0x10, (byte) 0)); + sendPacket(PacketCreator.getGMEffect(0x10, (byte) 0)); List dsstat = Collections.singletonList(MapleBuffStat.DARKSIGHT); getMap().broadcastGMMessage(this, PacketCreator.cancelForeignBuff(id, dsstat), false); getMap().broadcastSpawnPlayerMapObjectMessage(this, this, false); @@ -839,7 +840,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } } else { this.hidden = true; - announce(PacketCreator.getGMEffect(0x10, (byte) 1)); + sendPacket(PacketCreator.getGMEffect(0x10, (byte) 1)); if (!login) { getMap().broadcastNONGMMessage(this, PacketCreator.removePlayerFromMap(getId()), false); } @@ -847,7 +848,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { getMap().broadcastGMMessage(this, PacketCreator.giveForeignBuff(id, ldsstat), false); this.releaseControlledMonsters(); } - announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); } } @@ -872,7 +873,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { private void cancelPlayerBuffs(List buffstats) { if (client.getChannelServer().getPlayerStorage().getCharacterById(getId()) != null) { updateLocalStats(); - client.announce(PacketCreator.cancelBuff(buffstats)); + sendPacket(PacketCreator.cancelBuff(buffstats)); if (buffstats.size() > 0) { getMap().broadcastMessage(this, PacketCreator.cancelForeignBuff(getId(), buffstats), false); } @@ -1138,7 +1139,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { statup.add(new Pair<>(MapleStat.AVAILABLEAP, remainingAp)); statup.add(new Pair<>(MapleStat.AVAILABLESP, remainingSp[GameConstants.getSkillBook(job.getId())])); statup.add(new Pair<>(MapleStat.JOB, job.getId())); - client.announce(PacketCreator.updatePlayerStats(statup, true, this)); + sendPacket(PacketCreator.updatePlayerStats(statup, true, this)); } finally { statWlock.unlock(); effLock.unlock(); @@ -1182,7 +1183,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { broadcastAcquaintances(PacketCreator.serverNotice(type, message)); } - public void broadcastAcquaintances(byte[] packet) { + public void broadcastAcquaintances(Packet packet) { buddylist.broadcast(packet, getWorldServer().getPlayerStorage()); MapleFamily family = getFamily(); if(family != null) { @@ -1196,10 +1197,10 @@ public class MapleCharacter extends AbstractMapleCharacterObject { /* if(partnerid > 0) { - partner.announce(packet); not yet implemented + partner.sendPacket(packet); not yet implemented } */ - announce(packet); + sendPacket(packet); } public void changeKeybinding(int key, MapleKeyBinding keybinding) { @@ -1663,7 +1664,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if(partnerId > 0) { final MapleCharacter partner = getWorldServer().getPlayerStorage().getCharacterById(partnerId); if(partner != null && !partner.isAwayFromWorld()) { - partner.announce(Wedding.OnNotifyWeddingPartnerTransfer(id, mapid)); + partner.sendPacket(WeddingPackets.OnNotifyWeddingPartnerTransfer(id, mapid)); } } } @@ -1672,7 +1673,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { MapleInviteCoordinator.removePlayerIncomingInvites(id); } - private void changeMapInternal(final MapleMap to, final Point pos, final byte[] warpPacket) { + private void changeMapInternal(final MapleMap to, final Point pos, Packet warpPacket) { if (!canWarpMap) { return; } @@ -1690,7 +1691,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } final MapleParty k = e; - client.announce(warpPacket); + sendPacket(warpPacket); map.removePlayer(this); if (client.getChannelServer().getPlayerStorage().getCharacterById(getId()) != null) { map = to; @@ -1702,7 +1703,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { try { if (party != null) { mpc.setMapId(to.getId()); - client.announce(PacketCreator.updateParty(client.getChannel(), party, PartyOperation.SILENT_UPDATE, null)); + sendPacket(PacketCreator.updateParty(client.getChannel(), party, PartyOperation.SILENT_UPDATE, null)); updatePartyMemberHPInternal(); } } finally { @@ -1739,7 +1740,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } // if this map has obstacle components moving, make it do so for this client - announce(PacketCreator.environmentMoveList(map.getEnvironment().entrySet())); + sendPacket(PacketCreator.environmentMoveList(map.getEnvironment().entrySet())); } } @@ -1759,11 +1760,11 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (newLevel > -1) { skills.put(skill, new SkillEntry(newLevel, newMasterlevel, expiration)); if (!GameConstants.isHiddenSkills(skill.getId())) { - this.client.announce(PacketCreator.updateSkill(skill.getId(), newLevel, newMasterlevel, expiration)); + sendPacket(PacketCreator.updateSkill(skill.getId(), newLevel, newMasterlevel, expiration)); } } else { skills.remove(skill); - this.client.announce(PacketCreator.updateSkill(skill.getId(), newLevel, newMasterlevel, -1)); //Shouldn't use expiration anymore :) + sendPacket(PacketCreator.updateSkill(skill.getId(), newLevel, newMasterlevel, -1)); //Shouldn't use expiration anymore :) try (Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("DELETE FROM skills WHERE skillid = ? AND characterid = ?")) { ps.setInt(1, skill.getId()); @@ -1800,7 +1801,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { return; } - client.announce(PacketCreator.showOwnBerserk(skilllevel, berserk)); + sendPacket(PacketCreator.showOwnBerserk(skilllevel, berserk)); if (!isHidden) { getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showBerserk(getId(), skilllevel, berserk), false); } else { @@ -1924,7 +1925,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (ob instanceof MapleMapItem) { MapleMapItem mapitem = (MapleMapItem) ob; if (System.currentTimeMillis() - mapitem.getDropTime() < 400 || !mapitem.canBePickedBy(this)) { - client.announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); return; } @@ -1937,13 +1938,13 @@ public class MapleCharacter extends AbstractMapleCharacterObject { mapitem.lockItem(); try { if (mapitem.isPickedUp()) { - client.announce(PacketCreator.showItemUnavailable()); - client.announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.showItemUnavailable()); + sendPacket(PacketCreator.enableActions()); return; } boolean isPet = petIndex > -1; - final byte[] pickupPacket = PacketCreator.removeItemFromMap(mapitem.getObjectId(), (isPet) ? 5 : 2, this.getId(), isPet, petIndex); + final Packet pickupPacket = PacketCreator.removeItemFromMap(mapitem.getObjectId(), (isPet) ? 5 : 2, this.getId(), isPet, petIndex); Item mItem = mapitem.getItem(); boolean hasSpaceInventory = true; @@ -1976,21 +1977,21 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } else if (MapleInventoryManipulator.addFromDrop(client, mItem, true)) { this.getMap().pickItemDrop(pickupPacket, mapitem); } else { - client.announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); return; } } else { - client.announce(PacketCreator.showItemUnavailable()); - client.announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.showItemUnavailable()); + sendPacket(PacketCreator.enableActions()); return; } - client.announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); return; } if (!this.needQuestItem(mapitem.getQuest(), mapitem.getItemId())) { - client.announce(PacketCreator.showItemUnavailable()); - client.announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.showItemUnavailable()); + sendPacket(PacketCreator.enableActions()); return; } @@ -2011,7 +2012,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { itemScript = info; } else { if (!MapleInventoryManipulator.addFromDrop(client, mItem, true)) { - client.announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); return; } } @@ -2027,14 +2028,14 @@ public class MapleCharacter extends AbstractMapleCharacterObject { updateAriantScore(); } } else { - client.announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); return; } this.getMap().pickItemDrop(pickupPacket, mapitem); } else if(!hasSpaceInventory) { - client.announce(PacketCreator.getInventoryFull()); - client.announce(PacketCreator.getShowInventoryFull()); + sendPacket(PacketCreator.getInventoryFull()); + sendPacket(PacketCreator.getShowInventoryFull()); } } finally { mapitem.unlockItem(); @@ -2045,7 +2046,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { ism.runItemScript(client, itemScript); } } - client.announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); } public int countItem(int itemid) { @@ -2076,7 +2077,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void announceBattleshipHp() { - announce(PacketCreator.skillCooldown(5221999, battleshipHp)); + sendPacket(PacketCreator.skillCooldown(5221999, battleshipHp)); } public void decreaseBattleshipHp(int decrease) { @@ -2084,7 +2085,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (battleshipHp <= 0) { Skill battleship = SkillFactory.getSkill(Corsair.BATTLE_SHIP); int cooldown = battleship.getEffect(getSkillLevel(battleship)).getCooldown(); - announce(PacketCreator.skillCooldown(Corsair.BATTLE_SHIP, cooldown)); + sendPacket(PacketCreator.skillCooldown(Corsair.BATTLE_SHIP, cooldown)); addCooldown(Corsair.BATTLE_SHIP, Server.getInstance().getCurrentTime(), (long)(cooldown * 1000)); removeCooldown(5221999); cancelEffectFromBuffStat(MapleBuffStat.MONSTER_RIDING); @@ -2116,7 +2117,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { private void nextPendingRequest(MapleClient c) { CharacterNameAndId pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest(); if (pendingBuddyRequest != null) { - c.announce(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); + c.sendPacket(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); } } @@ -2134,7 +2135,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { notifyRemoteChannel(client, getWorldServer().find(otherCid), otherCid, BuddyList.BuddyOperation.DELETED); } bl.remove(otherCid); - client.announce(PacketCreator.updateBuddylist(getBuddylist().getBuddies())); + sendPacket(PacketCreator.updateBuddylist(getBuddylist().getBuddies())); nextPendingRequest(client); } @@ -2459,7 +2460,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if(MapleCharacter.this.getHp() < localmaxhp) { byte recHP = (byte) (healHP / YamlConfig.config.server.CHAIR_EXTRA_HEAL_MULTIPLIER); - client.announce(PacketCreator.showOwnRecovery(recHP)); + sendPacket(PacketCreator.showOwnRecovery(recHP)); getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showRecovery(id, recHP), false); } else if (MapleCharacter.this.getMp() >= localmaxmp) { stopChairTask(); // optimizing schedule management when player is already with full pool. @@ -2507,7 +2508,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if(MapleCharacter.this.getHp() < localmaxhp) { if(healHP > 0) { - client.announce(PacketCreator.showOwnRecovery(healHP)); + sendPacket(PacketCreator.showOwnRecovery(healHP)); getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showRecovery(id, healHP), false); } } @@ -2632,9 +2633,9 @@ public class MapleCharacter extends AbstractMapleCharacterObject { final List> debuff = Collections.singletonList(new Pair<>(disease, Integer.valueOf(skill.getX()))); if (disease != MapleDisease.SLOW) { - this.announce(PacketCreator.giveForeignDebuff(cid, debuff, skill)); + this.sendPacket(PacketCreator.giveForeignDebuff(cid, debuff, skill)); } else { - this.announce(PacketCreator.giveForeignSlowDebuff(cid, debuff, skill)); + this.sendPacket(PacketCreator.giveForeignSlowDebuff(cid, debuff, skill)); } } } @@ -2662,7 +2663,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } final List> debuff = Collections.singletonList(new Pair<>(disease, Integer.valueOf(skill.getX()))); - client.announce(PacketCreator.giveDebuff(debuff, skill)); + sendPacket(PacketCreator.giveDebuff(debuff, skill)); if (disease != MapleDisease.SLOW) { map.broadcastMessage(this, PacketCreator.giveForeignDebuff(id, debuff, skill), false); @@ -2675,7 +2676,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void dispelDebuff(MapleDisease debuff) { if (hasDisease(debuff)) { long mask = debuff.getValue(); - announce(PacketCreator.cancelDebuff(mask)); + sendPacket(PacketCreator.cancelDebuff(mask)); if (debuff != MapleDisease.SLOW) { map.broadcastMessage(this, PacketCreator.cancelForeignDebuff(id, mask), false); @@ -2790,7 +2791,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void dropMessage(int type, String message) { - client.announce(PacketCreator.serverNotice(type, message)); + sendPacket(PacketCreator.serverNotice(type, message)); } public void enteredScript(String script, int mapid) { @@ -2910,7 +2911,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { MapleCoolDownValueHolder mcdvh = bel.getValue(); if(curTime >= mcdvh.startTime + mcdvh.length) { removeCooldown(mcdvh.skillId); - client.announce(PacketCreator.skillCooldown(mcdvh.skillId, 0)); + sendPacket(PacketCreator.skillCooldown(mcdvh.skillId, 0)); } } } @@ -2955,7 +2956,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { forceUpdateItem(item); //TEST :3 } else if (expiration != -1 && expiration < currenttime) { if (!ItemConstants.isPet(item.getItemId())) { - client.announce(PacketCreator.itemExpired(item.getItemId())); + sendPacket(PacketCreator.itemExpired(item.getItemId())); toberemove.add(item); if (ItemConstants.isRateCoupon(item.getItemId())) { deletedCoupon = true; @@ -2967,7 +2968,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } if (ItemConstants.isExpirablePet(item.getItemId())) { - client.announce(PacketCreator.itemExpired(item.getItemId())); + sendPacket(PacketCreator.itemExpired(item.getItemId())); toberemove.add(item); } else { item.setExpiration(-1); @@ -3018,7 +3019,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { final List mods = new LinkedList<>(); mods.add(new ModifyInventory(3, item)); mods.add(new ModifyInventory(0, item)); - client.announce(PacketCreator.modifyInventory(true, mods)); + sendPacket(PacketCreator.modifyInventory(true, mods)); } public void gainGachaExp() { @@ -3095,7 +3096,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { white = false; } - client.announce(PacketCreator.getShowExpGain((int) gain, equip, party, inChat, white)); + sendPacket(PacketCreator.getShowExpGain((int) gain, equip, party, inChat, white)); } private synchronized void gainExpInternal(long gain, int equip, int party, boolean show, boolean inChat, boolean white) { // need of method synchonization here detected thanks to MedicOP @@ -3159,10 +3160,10 @@ public class MapleCharacter extends AbstractMapleCharacterObject { updateSingleStat(MapleStat.FAME, thisFame); if (fromPlayer != null) { - fromPlayer.announce(PacketCreator.giveFameResponse(mode, getName(), thisFame)); - announce(PacketCreator.receiveFame(mode, fromPlayer.getName())); + fromPlayer.sendPacket(PacketCreator.giveFameResponse(mode, getName(), thisFame)); + sendPacket(PacketCreator.receiveFame(mode, fromPlayer.getName())); } else { - announce(PacketCreator.getShowFameGain(delta)); + sendPacket(PacketCreator.getShowFameGain(delta)); } return true; @@ -3202,15 +3203,15 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (gain != 0) { updateSingleStat(MapleStat.MESO, (int) nextMeso, enableActions); if (show) { - client.announce(PacketCreator.getShowMesoGain(gain, inChat)); + sendPacket(PacketCreator.getShowMesoGain(gain, inChat)); } } else { - client.announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); } } public void genericGuildMessage(int code) { - this.client.announce(PacketCreator.genericGuildMessage((byte) code)); + this.sendPacket(GuildPackets.genericGuildMessage((byte) code)); } public int getAccountID() { @@ -4033,7 +4034,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } if (!inactiveStats.isEmpty()) { - client.announce(PacketCreator.cancelBuff(inactiveStats)); + sendPacket(PacketCreator.cancelBuff(inactiveStats)); getMap().broadcastMessage(this, PacketCreator.cancelForeignBuff(getId(), inactiveStats), false); } } @@ -4309,7 +4310,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (this.isRidingBattleship()) { List> statups = new ArrayList<>(1); statups.add(new Pair<>(MapleBuffStat.MONSTER_RIDING, 0)); - this.announce(PacketCreator.giveBuff(1932000, 5221006, statups)); + this.sendPacket(PacketCreator.giveBuff(1932000, 5221006, statups)); this.announceBattleshipHp(); } } @@ -4403,7 +4404,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } addHP(healEffect.getHp()); - client.announce(PacketCreator.showOwnBuffEffect(beholder, 2)); + sendPacket(PacketCreator.showOwnBuffEffect(beholder, 2)); getMap().broadcastMessage(MapleCharacter.this, PacketCreator.summonSkill(getId(), beholder, 5), true); getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showOwnBuffEffect(beholder, 2), false); } @@ -4421,9 +4422,9 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } buffEffect.applyTo(MapleCharacter.this); - client.announce(PacketCreator.showOwnBuffEffect(beholder, 2)); + sendPacket(PacketCreator.showOwnBuffEffect(beholder, 2)); getMap().broadcastMessage(MapleCharacter.this, PacketCreator.summonSkill(getId(), beholder, (int) (Math.random() * 3) + 6), true); - getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showBuffeffect(getId(), beholder, 2), false); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showBuffEffect(getId(), beholder, 2), false); } }, buffInterval, buffInterval); } @@ -4455,7 +4456,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } addHP(heal); - client.announce(PacketCreator.showOwnRecovery(heal)); + sendPacket(PacketCreator.showOwnRecovery(heal)); getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showRecovery(id, heal), false); } }, healInterval, healInterval); @@ -4813,7 +4814,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { Set exclItems = pe.getValue(); if (!exclItems.isEmpty()) { - client.announce(PacketCreator.loadExceptionList(this.getId(), pe.getKey(), petIndex, new ArrayList<>(exclItems))); + sendPacket(PacketCreator.loadExceptionList(this.getId(), pe.getKey(), petIndex, new ArrayList<>(exclItems))); chrLock.lock(); try { @@ -4837,7 +4838,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { Set exclItems = pe.getValue(); if (!exclItems.isEmpty()) { - c.announce(PacketCreator.loadExceptionList(this.getId(), pe.getKey(), petIndex, new ArrayList<>(exclItems))); + c.sendPacket(PacketCreator.loadExceptionList(this.getId(), pe.getKey(), petIndex, new ArrayList<>(exclItems))); } } } @@ -5936,7 +5937,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { //Server.getInstance().getGuild(guildid, world, mgc).gainGP(40); int allianceId = getGuild().getAllianceId(); if (allianceId > 0) { - Server.getInstance().allianceMessage(allianceId, PacketCreator.updateAllianceJobLevel(this), getId(), -1); + Server.getInstance().allianceMessage(allianceId, GuildPackets.updateAllianceJobLevel(this), getId(), -1); } } catch (Exception e) { e.printStackTrace(); @@ -5955,10 +5956,10 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.ENERGY_CHARGE, energybar)); setBuffedValue(MapleBuffStat.ENERGY_CHARGE, energybar); - client.announce(PacketCreator.giveBuff(energybar, 0, stat)); - client.announce(PacketCreator.showOwnBuffEffect(energycharge.getId(), 2)); - getMap().broadcastMessage(this, PacketCreator.showBuffeffect(id, energycharge.getId(), 2)); - getMap().broadcastMessage(this, PacketCreator.giveForeignBuff(energybar, stat)); + sendPacket(PacketCreator.giveBuff(energybar, 0, stat)); + sendPacket(PacketCreator.showOwnBuffEffect(energycharge.getId(), 2)); + getMap().broadcastPacket(this, PacketCreator.showBuffEffect(id, energycharge.getId(), 2)); + getMap().broadcastPacket(this, PacketCreator.giveForeignBuff(energybar, stat)); } if (energybar >= 10000 && energybar < 11000) { energybar = 15000; @@ -5969,8 +5970,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject { energybar = 0; List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.ENERGY_CHARGE, energybar)); setBuffedValue(MapleBuffStat.ENERGY_CHARGE, energybar); - client.announce(PacketCreator.giveBuff(energybar, 0, stat)); - getMap().broadcastMessage(chr, PacketCreator.cancelForeignFirstDebuff(id, ((long) 1) << 50)); + sendPacket(PacketCreator.giveBuff(energybar, 0, stat)); + getMap().broadcastPacket(chr, PacketCreator.cancelForeignFirstDebuff(id, ((long) 1) << 50)); } }, ceffect.getDuration()); } @@ -5981,7 +5982,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { Skill combo = SkillFactory.getSkill(skillid); List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.COMBO, 1)); setBuffedValue(MapleBuffStat.COMBO, 1); - client.announce(PacketCreator.giveBuff(skillid, combo.getEffect(getSkillLevel(combo)).getDuration() + (int) ((getBuffedStarttime(MapleBuffStat.COMBO) - System.currentTimeMillis())), stat)); + sendPacket(PacketCreator.giveBuff(skillid, combo.getEffect(getSkillLevel(combo)).getDuration() + (int) ((getBuffedStarttime(MapleBuffStat.COMBO) - System.currentTimeMillis())), stat)); getMap().broadcastMessage(this, PacketCreator.giveForeignBuff(getId(), stat), false); } @@ -6440,7 +6441,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { statup.add(new Pair<>(MapleStat.STR, str)); statup.add(new Pair<>(MapleStat.DEX, dex)); - client.announce(PacketCreator.updatePlayerStats(statup, true, this)); + sendPacket(PacketCreator.updatePlayerStats(statup, true, this)); } finally { statWlock.unlock(); effLock.unlock(); @@ -6498,7 +6499,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { MapleFamilyEntry senior = familyEntry.getSenior(); if(senior != null) { //only send the message to direct senior MapleCharacter seniorChr = senior.getChr(); - if(seniorChr != null) seniorChr.announce(PacketCreator.levelUpMessage(1, level, getName())); + if(seniorChr != null) seniorChr.sendPacket(PacketCreator.levelUpMessage(1, level, getName())); } } } @@ -7496,7 +7497,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void yellowMessage(String m) { - announce(PacketCreator.sendYellowTip(m)); + sendPacket(PacketCreator.sendYellowTip(m)); } public void raiseQuestMobCount(int id) { @@ -7604,7 +7605,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } unsitChairInternal(); - client.announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); } private void unsitChairInternal() { @@ -7622,7 +7623,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { getMap().broadcastMessage(this, PacketCreator.showChair(this.getId(), 0), false); } - announce(PacketCreator.cancelChair(-1)); + sendPacket(PacketCreator.cancelChair(-1)); } public void sitChair(int itemId) { @@ -7632,14 +7633,14 @@ public class MapleCharacter extends AbstractMapleCharacterObject { setChair(itemId); getMap().broadcastMessage(this, PacketCreator.showChair(this.getId(), itemId), false); } - announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); } else if (itemId >= 0) { // sit on map chair if (chair.get() < 0) { setChair(itemId); if (registerChairBuff()) { getMap().broadcastMessage(this, PacketCreator.giveForeignChairSkillEffect(this.getId()), false); } - announce(PacketCreator.cancelChair(itemId)); + sendPacket(PacketCreator.cancelChair(itemId)); } } else { // stand up unsitChairInternal(); @@ -7684,8 +7685,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } addHP(-bloodEffect.getX()); - announce(PacketCreator.showOwnBuffEffect(bloodEffect.getSourceId(), 5)); - getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showBuffeffect(getId(), bloodEffect.getSourceId(), 5), false); + sendPacket(PacketCreator.showOwnBuffEffect(bloodEffect.getSourceId(), 5)); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showBuffEffect(getId(), bloodEffect.getSourceId(), 5), false); } }, 4000, 4000); } @@ -7909,7 +7910,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { enforceMaxHpMp(); if (!hpmpupdate.isEmpty()) { - client.announce(PacketCreator.updatePlayerStats(hpmpupdate, true, this)); + sendPacket(PacketCreator.updatePlayerStats(hpmpupdate, true, this)); } if (oldmaxhp != localmaxhp) { // thanks Wh1SK3Y (Suwaidy) for pointing out a deadlock occuring related to party members HP @@ -7927,7 +7928,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { try { if (party != null) { for (MapleCharacter partychar : this.getPartyMembersOnSameMap()) { - announce(PacketCreator.updatePartyMemberHP(partychar.getId(), partychar.getHp(), partychar.getCurrentMaxHp())); + sendPacket(PacketCreator.updatePartyMemberHP(partychar.getId(), partychar.getHp(), partychar.getCurrentMaxHp())); } } } finally { @@ -7944,7 +7945,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (mcvh.skillId != id) { coolDowns.remove(mcvh.skillId); if (packet) { - client.announce(PacketCreator.skillCooldown(mcvh.skillId, 0)); + sendPacket(PacketCreator.skillCooldown(mcvh.skillId, 0)); } } } @@ -8743,7 +8744,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void sendPolice(int greason, String reason, int duration) { - announce(PacketCreator.sendPolice(String.format("You have been blocked by the#b %s Police for %s.#k", "Cosmic", reason))); + sendPacket(PacketCreator.sendPolice(String.format("You have been blocked by the#b %s Police for %s.#k", "Cosmic", reason))); this.isbanned = true; TimerManager.getInstance().schedule(new Runnable() { @Override @@ -8763,7 +8764,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { FilePrinter.print(FilePrinter.AUTOBAN_DC, message); } //Server.getInstance().broadcastGMMessage(0, PacketCreator.serverNotice(1, getName() + " received this - " + text)); - //announce(PacketCreator.sendPolice(text)); + //sendPacket(PacketCreator.sendPolice(text)); //this.isbanned = true; //TimerManager.getInstance().schedule(new Runnable() { // @Override @@ -8774,7 +8775,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void sendKeymap() { - client.announce(PacketCreator.getKeymap(keymap)); + sendPacket(PacketCreator.getKeymap(keymap)); } public void sendQuickmap() { @@ -8785,12 +8786,12 @@ public class MapleCharacter extends AbstractMapleCharacterObject { pQuickslotKeyMapped = new MapleQuickslotBinding(MapleQuickslotBinding.DEFAULT_QUICKSLOTS); } - this.announce(PacketCreator.QuickslotMappedInit(pQuickslotKeyMapped)); + this.sendPacket(PacketCreator.QuickslotMappedInit(pQuickslotKeyMapped)); } public void sendMacros() { // Always send the macro packet to fix a client side bug when switching characters. - client.announce(PacketCreator.getMacros(skillMacros)); + sendPacket(PacketCreator.getMacros(skillMacros)); } public SkillMacro[] getMacros() { @@ -8827,7 +8828,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void setBuddyCapacity(int capacity) { buddylist.setCapacity(capacity); - client.announce(PacketCreator.updateBuddyCapacity(capacity)); + sendPacket(PacketCreator.updateBuddyCapacity(capacity)); } public void setBuffedValue(MapleBuffStat effect, int value) { @@ -9301,7 +9302,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (newLimit != -1) { this.saveCharToDB(); if (update) { - client.announce(PacketCreator.updateInventorySlotLimit(type, newLimit)); + sendPacket(PacketCreator.updateInventorySlotLimit(type, newLimit)); } return true; } else { @@ -9603,7 +9604,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void showDojoClock() { if (GameConstants.isDojoBossArea(map.getId())) { - client.announce(PacketCreator.getClock((int) (getDojoTimeLeft() / 1000))); + sendPacket(PacketCreator.getClock((int) (getDojoTimeLeft() / 1000))); } } @@ -9633,7 +9634,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { strLines.add(""); strLines.add(this.getClient().getChannelServer().getServerMessage().isEmpty() ? 0 : 1, "Get off my lawn!!"); - this.announce(PacketCreator.getAvatarMega(mapOwner, medal, this.getClient().getChannel(), 5390006, strLines, true)); + this.sendPacket(PacketCreator.getAvatarMega(mapOwner, medal, this.getClient().getChannel(), 5390006, strLines, true)); } } @@ -9653,7 +9654,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { rs.last(); int count = rs.getRow(); rs.first(); - client.announce(PacketCreator.showNotes(rs, count)); + sendPacket(PacketCreator.showNotes(rs, count)); } } catch (SQLException e) { e.printStackTrace(); @@ -9750,11 +9751,11 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void startMapEffect(String msg, int itemId, int duration) { final MapleMapEffect mapEffect = new MapleMapEffect(msg, itemId); - getClient().announce(mapEffect.makeStartData()); + sendPacket(mapEffect.makeStartData()); TimerManager.getInstance().schedule(new Runnable() { @Override public void run() { - getClient().announce(mapEffect.makeDestroyData()); + sendPacket(mapEffect.makeDestroyData()); } }, duration); } @@ -9787,8 +9788,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject { removePet(pet, shift_left); commitExcludedItems(); - client.announce(PacketCreator.petStatUpdate(this)); - client.announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.petStatUpdate(this)); + sendPacket(PacketCreator.enableActions()); } public void updateMacros(int position, SkillMacro updateMacro) { @@ -9809,7 +9810,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { int curmaxhp = getCurrentMaxHp(); int curhp = getHp(); for (MapleCharacter partychar : this.getPartyMembersOnSameMap()) { - partychar.announce(PacketCreator.updatePartyMemberHP(getId(), curhp, curmaxhp)); + partychar.sendPacket(PacketCreator.updatePartyMemberHP(getId(), curhp, curmaxhp)); } } } @@ -9859,20 +9860,20 @@ public class MapleCharacter extends AbstractMapleCharacterObject { switch (questUpdate.getLeft()) { case UPDATE: - announce(PacketCreator.updateQuest(chr, (MapleQuestStatus) objs[0], (Boolean) objs[1])); + sendPacket(PacketCreator.updateQuest(chr, (MapleQuestStatus) objs[0], (Boolean) objs[1])); break; case FORFEIT: - announce(PacketCreator.forfeitQuest((Short) objs[0])); + sendPacket(PacketCreator.forfeitQuest((Short) objs[0])); break; case COMPLETE: - announce(PacketCreator.completeQuest((Short) objs[0], (Long) objs[1])); + sendPacket(PacketCreator.completeQuest((Short) objs[0], (Long) objs[1])); break; case INFO: MapleQuestStatus qs = (MapleQuestStatus) objs[0]; - announce(PacketCreator.updateQuestInfo(qs.getQuest().getId(), qs.getNpc())); + sendPacket(PacketCreator.updateQuestInfo(qs.getQuest().getId(), qs.getNpc())); break; } } @@ -9933,7 +9934,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { private void expireQuest(MapleQuest quest) { if (quest.forfeit(this)) { - announce(PacketCreator.questExpire(quest.getId())); + sendPacket(PacketCreator.questExpire(quest.getId())); } } @@ -10028,7 +10029,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void questTimeLimit(final MapleQuest quest, int seconds) { registerQuestExpire(quest, seconds * 1000); - announce(PacketCreator.addQuestTimeLimit(quest.getId(), seconds * 1000)); + sendPacket(PacketCreator.addQuestTimeLimit(quest.getId(), seconds * 1000)); } public void questTimeLimit2(final MapleQuest quest, long expires) { @@ -10046,12 +10047,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } private void updateSingleStat(MapleStat stat, int newval, boolean itemReaction) { - announce(PacketCreator.updatePlayerStats(Collections.singletonList(new Pair<>(stat, Integer.valueOf(newval))), itemReaction, this)); - } - - @Deprecated(forRemoval = true) - public void announce(final byte[] packet) { - client.announce(packet); + sendPacket(PacketCreator.updatePlayerStats(Collections.singletonList(new Pair<>(stat, Integer.valueOf(newval))), itemReaction, this)); } public void sendPacket(Packet packet) { @@ -10070,16 +10066,16 @@ public class MapleCharacter extends AbstractMapleCharacterObject { @Override public void sendDestroyData(MapleClient client) { - client.announce(PacketCreator.removePlayerFromMap(this.getObjectId())); + client.sendPacket(PacketCreator.removePlayerFromMap(this.getObjectId())); } @Override public void sendSpawnData(MapleClient client) { if (!this.isHidden() || client.getPlayer().gmLevel() > 1) { - client.announce(PacketCreator.spawnPlayerMapObject(client, this, false)); + client.sendPacket(PacketCreator.spawnPlayerMapObject(client, this, false)); if (buffEffects.containsKey(getJobMapChair(job))) { // mustn't effLock, chrLock sendSpawnData - client.announce(PacketCreator.giveForeignChairSkillEffect(id)); + client.sendPacket(PacketCreator.giveForeignChairSkillEffect(id)); } } @@ -10154,7 +10150,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void blockPortal(String scriptName) { if (!blockedPortals.contains(scriptName) && scriptName != null) { blockedPortals.add(scriptName); - client.announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); } } @@ -10178,7 +10174,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void updateAreaInfo(int area, String info) { area_info.put(Short.valueOf((short) area), info); - announce(PacketCreator.updateAreaInfo(area, info)); + sendPacket(PacketCreator.updateAreaInfo(area, info)); } public String getAreaInfo(int area) { @@ -10195,7 +10191,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } this.ban(reason); - announce(PacketCreator.sendPolice(String.format("You have been blocked by the#b %s Police for HACK reason.#k", "Cosmic"))); + sendPacket(PacketCreator.sendPolice(String.format("You have been blocked by the#b %s Police for HACK reason.#k", "Cosmic"))); TimerManager.getInstance().schedule(new Runnable() { @Override public void run() { @@ -11244,7 +11240,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (this.getCP() > this.getTotalCP()) { this.setTotalCP(this.getCP()); } - this.getClient().announce(PacketCreator.CPUpdate(false, this.getCP(), this.getTotalCP(), getTeam())); + sendPacket(PacketCreator.CPUpdate(false, this.getCP(), this.getTotalCP(), getTeam())); if (this.getParty() != null && getTeam() != -1) { this.getMap().broadcastMessage(PacketCreator.CPUpdate(true, this.getMonsterCarnival().getCP(team), this.getMonsterCarnival().getTotalCP(team), getTeam())); } else { diff --git a/src/main/java/client/MapleClient.java b/src/main/java/client/MapleClient.java index e718af4908..d5e5984a50 100644 --- a/src/main/java/client/MapleClient.java +++ b/src/main/java/client/MapleClient.java @@ -30,9 +30,7 @@ import io.netty.handler.timeout.IdleStateEvent; import net.MaplePacketHandler; import net.PacketProcessor; import net.netty.InvalidPacketHeaderException; -import net.packet.ByteBufOutPacket; import net.packet.InPacket; -import net.packet.OutPacket; import net.packet.Packet; import net.packet.logging.LoggingUtil; import net.packet.logging.MapleLogger; @@ -45,6 +43,7 @@ import net.server.coordinator.session.Hwid; import net.server.coordinator.session.IpAddresses; import net.server.coordinator.session.SessionCoordinator; import net.server.coordinator.session.SessionCoordinator.AntiMulticlientResult; +import net.server.guild.GuildPackets; import net.server.guild.MapleGuild; import net.server.guild.MapleGuildCharacter; import net.server.world.*; @@ -209,7 +208,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { handler.handlePacket(accessor, this); } catch (final Throwable t) { FilePrinter.printError(FilePrinter.PACKET_HANDLER + handler.getClass().getName() + ".txt", t, "Error for " + (getPlayer() == null ? "" : "player ; " + getPlayer() + " on map ; " + getPlayer().getMapId() + " - ") + "account ; " + getAccountName() + "\r\n" + accessor); - //client.announce(PacketCreator.enableActions());//bugs sometimes + //client.sendPacket(PacketCreator.enableActions());//bugs sometimes } } @@ -308,7 +307,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { } public void sendCharList(int server) { - this.announce(PacketCreator.getCharList(this, server, 0)); + this.sendPacket(PacketCreator.getCharList(this, server, 0)); } public List loadCharacters(int serverId) { @@ -1000,7 +999,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { if (guild != null) { final Server server = Server.getInstance(); server.setGuildMemberOnline(player, false, player.getClient().getChannel()); - player.getClient().announce(PacketCreator.showGuildInfo(player)); + player.sendPacket(GuildPackets.showGuildInfo(player)); } if (bl != null) { wserv.loggedOff(player.getName(), player.getId(), channel, player.getBuddylist().getBuddyIds()); @@ -1145,7 +1144,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { public void checkIfIdle(final IdleStateEvent event) { final long pingedAt = System.currentTimeMillis(); - announce(PacketCreator.getPing()); + sendPacket(PacketCreator.getPing()); TimerManager.getInstance().schedule(() -> { try { if (lastPong < pingedAt) { @@ -1415,15 +1414,15 @@ public class MapleClient extends ChannelInboundHandlerAdapter { private void announceDisableServerMessage() { if (!this.getWorldServer().registerDisabledServerMessage(player.getId())) { - announce(PacketCreator.serverMessage("")); + sendPacket(PacketCreator.serverMessage("")); } } public void announceServerMessage() { - announce(PacketCreator.serverMessage(this.getChannelServer().getServerMessage())); + sendPacket(PacketCreator.serverMessage(this.getChannelServer().getServerMessage())); } - public synchronized void announceBossHpBar(MapleMonster mm, final int mobHash, final byte[] packet) { + public synchronized void announceBossHpBar(MapleMonster mm, final int mobHash, Packet packet) { long timeNow = System.currentTimeMillis(); int targetHash = player.getTargetHpBarHash(); @@ -1431,55 +1430,31 @@ public class MapleClient extends ChannelInboundHandlerAdapter { if (timeNow - player.getTargetHpBarTime() >= 5 * 1000) { // is there a way to INTERRUPT this annoying thread running on the client that drops the boss bar after some time at every attack? announceDisableServerMessage(); - announce(packet); + sendPacket(packet); player.setTargetHpBarHash(mobHash); player.setTargetHpBarTime(timeNow); } } else { announceDisableServerMessage(); - announce(packet); + sendPacket(packet); player.setTargetHpBarTime(timeNow); } } - @Deprecated(forRemoval = true, since = "Netty migration") - public void announce(final byte[] packet) { // thanks GitGud for noticing an opportunity for improvement by overcoming "synchronized announce" - announcerLock.lock(); - try { - // session.write(packet); - sendPacket(packet); - } finally { - announcerLock.unlock(); - } - } - - // Workaround for old packets. All uses of Client#announce(byte[]) should be migrated to Client#sendPacket(OutPacket) - private void sendPacket(final byte[] packet) { - announcerLock.lock(); - try { - OutPacket outPacket = new ByteBufOutPacket(); - outPacket.writeBytes(packet); - - ioChannel.writeAndFlush(outPacket); - } finally { - announcerLock.unlock(); - } - } - public void sendPacket(Packet packet) { announcerLock.lock(); try { - ioChannel.writeAndFlush(packet.getBytes()); + ioChannel.writeAndFlush(packet); } finally { announcerLock.unlock(); } } public void announceHint(String msg, int length) { - announce(PacketCreator.sendHint(msg, length, 10)); - announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.sendHint(msg, length, 10)); + sendPacket(PacketCreator.enableActions()); } public void changeChannel(int channel) { @@ -1489,18 +1464,18 @@ public class MapleClient extends ChannelInboundHandlerAdapter { return; } if (!player.isAlive() || FieldLimit.CANNOTMIGRATE.check(player.getMap().getFieldLimit())) { - announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); return; } else if (MapleMiniDungeonInfo.isDungeonMap(player.getMapId())) { - announce(PacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); - announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); + sendPacket(PacketCreator.enableActions()); return; } String[] socket = Server.getInstance().getInetSocket(this, getWorld(), channel); if (socket == null) { - announce(PacketCreator.serverNotice(1, "Channel " + channel + " is currently disabled. Try another channel.")); - announce(PacketCreator.enableActions()); + sendPacket(PacketCreator.serverNotice(1, "Channel " + channel + " is currently disabled. Try another channel.")); + sendPacket(PacketCreator.enableActions()); return; } @@ -1531,7 +1506,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { player.setSessionTransitionState(); try { - announce(PacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]))); + sendPacket(PacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]))); } catch (IOException e) { e.printStackTrace(); } @@ -1587,7 +1562,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { } public void enableCSActions() { - announce(PacketCreator.enableCSUse(player)); + sendPacket(PacketCreator.enableCSUse(player)); } public boolean canBypassPin() { diff --git a/src/main/java/client/MapleFamily.java b/src/main/java/client/MapleFamily.java index 68d64ef3ea..b0a295f5b4 100644 --- a/src/main/java/client/MapleFamily.java +++ b/src/main/java/client/MapleFamily.java @@ -21,6 +21,7 @@ */ package client; +import net.packet.Packet; import net.server.Server; import net.server.world.World; import tools.DatabaseConnection; @@ -151,16 +152,16 @@ public class MapleFamily { return members.get(cid); } - public void broadcast(byte[] packet) { + public void broadcast(Packet packet) { broadcast(packet, -1); } - public void broadcast(byte[] packet, int ignoreID) { + public void broadcast(Packet packet, int ignoreID) { for(MapleFamilyEntry entry : members.values()) { MapleCharacter chr = entry.getChr(); if(chr != null) { if(chr.getId() == ignoreID) continue; - chr.getClient().announce(packet); + chr.sendPacket(packet); } } } @@ -169,7 +170,7 @@ public class MapleFamily { for(MapleFamilyEntry entry : members.values()) { MapleCharacter chr = entry.getChr(); if(chr != null) { - chr.getClient().announce(PacketCreator.getFamilyInfo(entry)); + chr.sendPacket(PacketCreator.getFamilyInfo(entry)); } } } diff --git a/src/main/java/client/MapleFamilyEntry.java b/src/main/java/client/MapleFamilyEntry.java index 4ab07299c5..f42cf3d540 100644 --- a/src/main/java/client/MapleFamilyEntry.java +++ b/src/main/java/client/MapleFamilyEntry.java @@ -19,6 +19,7 @@ */ package client; +import net.packet.Packet; import net.server.Server; import tools.DatabaseConnection; import tools.FilePrinter; @@ -264,7 +265,7 @@ public class MapleFamilyEntry { this.totalReputation += gain; } MapleCharacter chr = getChr(); - if(chr != null) chr.announce(PacketCreator.sendGainRep(gain, from != null ? from.getName() : "")); + if(chr != null) chr.sendPacket(PacketCreator.sendGainRep(gain, from != null ? from.getName() : "")); } public void giveReputationToSenior(int gain, boolean includeSuperSenior) { @@ -420,15 +421,15 @@ public class MapleFamilyEntry { this.totalJuniors = totalJuniors; } - public void announceToSenior(byte[] packet, boolean includeSuperSenior) { + public void announceToSenior(Packet packet, boolean includeSuperSenior) { MapleFamilyEntry senior = getSenior(); if(senior != null) { MapleCharacter seniorChr = senior.getChr(); - if(seniorChr != null) seniorChr.announce(packet); + if(seniorChr != null) seniorChr.sendPacket(packet); senior = senior.getSenior(); if(includeSuperSenior && senior != null) { seniorChr = senior.getChr(); - if(seniorChr != null) seniorChr.announce(packet); + if(seniorChr != null) seniorChr.sendPacket(packet); } } } @@ -437,11 +438,11 @@ public class MapleFamilyEntry { MapleFamilyEntry senior = getSenior(); if(senior != null) { MapleCharacter seniorChr = senior.getChr(); - if(seniorChr != null) seniorChr.announce(PacketCreator.getFamilyInfo(senior)); + if(seniorChr != null) seniorChr.sendPacket(PacketCreator.getFamilyInfo(senior)); senior = senior.getSenior(); if(includeSuperSenior && senior != null) { seniorChr = senior.getChr(); - if(seniorChr != null) seniorChr.announce(PacketCreator.getFamilyInfo(senior)); + if(seniorChr != null) seniorChr.sendPacket(PacketCreator.getFamilyInfo(senior)); } } } diff --git a/src/main/java/client/MonsterBook.java b/src/main/java/client/MonsterBook.java index 26bca16d1e..d0c7465883 100644 --- a/src/main/java/client/MonsterBook.java +++ b/src/main/java/client/MonsterBook.java @@ -84,10 +84,10 @@ public final class MonsterBook { calculateLevel(); } - c.announce(PacketCreator.addCard(false, cardid, qty + 1)); - c.announce(PacketCreator.showGainCard()); + c.sendPacket(PacketCreator.addCard(false, cardid, qty + 1)); + c.sendPacket(PacketCreator.showGainCard()); } else { - c.announce(PacketCreator.addCard(true, cardid, 5)); + c.sendPacket(PacketCreator.addCard(true, cardid, 5)); } } diff --git a/src/main/java/client/command/commands/gm0/DisposeCommand.java b/src/main/java/client/command/commands/gm0/DisposeCommand.java index aa5bdd6bcd..0593943e0f 100644 --- a/src/main/java/client/command/commands/gm0/DisposeCommand.java +++ b/src/main/java/client/command/commands/gm0/DisposeCommand.java @@ -38,7 +38,7 @@ public class DisposeCommand extends Command { public void execute(MapleClient c, String[] params) { NPCScriptManager.getInstance().dispose(c); QuestScriptManager.getInstance().dispose(c); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); c.removeClickedNPC(); c.getPlayer().message("You've been disposed."); } diff --git a/src/main/java/client/command/commands/gm0/RanksCommand.java b/src/main/java/client/command/commands/gm0/RanksCommand.java index 7da0fdb0b4..8e517fae34 100644 --- a/src/main/java/client/command/commands/gm0/RanksCommand.java +++ b/src/main/java/client/command/commands/gm0/RanksCommand.java @@ -27,7 +27,7 @@ import client.MapleCharacter; import client.MapleClient; import client.command.Command; import net.server.Server; -import tools.PacketCreator; +import net.server.guild.GuildPackets; import tools.Pair; import java.util.List; @@ -42,6 +42,6 @@ public class RanksCommand extends Command { MapleCharacter player = c.getPlayer(); List> worldRanking = Server.getInstance().getWorldPlayerRanking(player.getWorld()); - player.announce(PacketCreator.showPlayerRanks(9010000, worldRanking)); + player.sendPacket(GuildPackets.showPlayerRanks(9010000, worldRanking)); } } diff --git a/src/main/java/client/command/commands/gm3/BanCommand.java b/src/main/java/client/command/commands/gm3/BanCommand.java index 1e74cd8ba8..a6524147e9 100644 --- a/src/main/java/client/command/commands/gm3/BanCommand.java +++ b/src/main/java/client/command/commands/gm3/BanCommand.java @@ -73,15 +73,15 @@ public class BanCommand extends Command { target.ban(reason); target.yellowMessage("You have been banned by #b" + c.getPlayer().getName() + " #k."); target.yellowMessage("Reason: " + reason); - c.announce(PacketCreator.getGMEffect(4, (byte) 0)); + c.sendPacket(PacketCreator.getGMEffect(4, (byte) 0)); final MapleCharacter rip = target; TimerManager.getInstance().schedule(() -> rip.getClient().disconnect(false, false), 5000); //5 Seconds Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned.")); } else if (MapleCharacter.ban(ign, reason, false)) { - c.announce(PacketCreator.getGMEffect(4, (byte) 0)); + c.sendPacket(PacketCreator.getGMEffect(4, (byte) 0)); Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned.")); } else { - c.announce(PacketCreator.getGMEffect(6, (byte) 1)); + c.sendPacket(PacketCreator.getGMEffect(6, (byte) 1)); } } } diff --git a/src/main/java/client/command/commands/gm3/MaxEnergyCommand.java b/src/main/java/client/command/commands/gm3/MaxEnergyCommand.java index 540f92f231..f43b066c05 100644 --- a/src/main/java/client/command/commands/gm3/MaxEnergyCommand.java +++ b/src/main/java/client/command/commands/gm3/MaxEnergyCommand.java @@ -37,6 +37,6 @@ public class MaxEnergyCommand extends Command { public void execute(MapleClient c, String[] params) { MapleCharacter player = c.getPlayer(); c.getPlayer().setDojoEnergy(10000); - c.announce(PacketCreator.getEnergy("energy", 10000)); + c.sendPacket(PacketCreator.getEnergy("energy", 10000)); } } diff --git a/src/main/java/client/command/commands/gm3/MusicCommand.java b/src/main/java/client/command/commands/gm3/MusicCommand.java index c3bca566f8..bca318bb10 100644 --- a/src/main/java/client/command/commands/gm3/MusicCommand.java +++ b/src/main/java/client/command/commands/gm3/MusicCommand.java @@ -53,7 +53,7 @@ public class MusicCommand extends Command { sendMsg += "Syntax: #r!music #k\r\n\r\n"; sendMsg += getSongList(); - c.announce(PacketCreator.getNPCTalk(1052015, (byte) 0, sendMsg, "00 00", (byte) 0)); + c.sendPacket(PacketCreator.getNPCTalk(1052015, (byte) 0, sendMsg, "00 00", (byte) 0)); return; } @@ -70,6 +70,6 @@ public class MusicCommand extends Command { sendMsg += "Song not found, please enter a song below.\r\n\r\n"; sendMsg += getSongList(); - c.announce(PacketCreator.getNPCTalk(1052015, (byte) 0, sendMsg, "00 00", (byte) 0)); + c.sendPacket(PacketCreator.getNPCTalk(1052015, (byte) 0, sendMsg, "00 00", (byte) 0)); } } diff --git a/src/main/java/client/command/commands/gm3/TimerAllCommand.java b/src/main/java/client/command/commands/gm3/TimerAllCommand.java index a74bb55ff6..f58898dd43 100644 --- a/src/main/java/client/command/commands/gm3/TimerAllCommand.java +++ b/src/main/java/client/command/commands/gm3/TimerAllCommand.java @@ -43,13 +43,13 @@ public class TimerAllCommand extends Command { if (params[0].equalsIgnoreCase("remove")) { for (MapleCharacter victim : player.getWorldServer().getPlayerStorage().getAllCharacters()) { - victim.announce(PacketCreator.removeClock()); + victim.sendPacket(PacketCreator.removeClock()); } } else { try { int seconds = Integer.parseInt(params[0]); for (MapleCharacter victim : player.getWorldServer().getPlayerStorage().getAllCharacters()) { - victim.announce(PacketCreator.getClock(seconds)); + victim.sendPacket(PacketCreator.getClock(seconds)); } } catch (NumberFormatException e) { player.yellowMessage("Syntax: !timerall |remove"); diff --git a/src/main/java/client/command/commands/gm3/TimerCommand.java b/src/main/java/client/command/commands/gm3/TimerCommand.java index 78ceb32c12..927dc40571 100644 --- a/src/main/java/client/command/commands/gm3/TimerCommand.java +++ b/src/main/java/client/command/commands/gm3/TimerCommand.java @@ -44,10 +44,10 @@ public class TimerCommand extends Command { MapleCharacter victim = c.getWorldServer().getPlayerStorage().getCharacterByName(params[0]); if (victim != null) { if (params[1].equalsIgnoreCase("remove")) { - victim.announce(PacketCreator.removeClock()); + victim.sendPacket(PacketCreator.removeClock()); } else { try { - victim.announce(PacketCreator.getClock(Integer.parseInt(params[1]))); + victim.sendPacket(PacketCreator.getClock(Integer.parseInt(params[1]))); } catch (NumberFormatException e) { player.yellowMessage("Syntax: !timer |remove"); } diff --git a/src/main/java/client/command/commands/gm3/TimerMapCommand.java b/src/main/java/client/command/commands/gm3/TimerMapCommand.java index ce65f9a9d8..6b10b51092 100644 --- a/src/main/java/client/command/commands/gm3/TimerMapCommand.java +++ b/src/main/java/client/command/commands/gm3/TimerMapCommand.java @@ -43,13 +43,13 @@ public class TimerMapCommand extends Command { if (params[0].equalsIgnoreCase("remove")) { for (MapleCharacter victim : player.getMap().getCharacters()) { - victim.announce(PacketCreator.removeClock()); + victim.sendPacket(PacketCreator.removeClock()); } } else { try { int seconds = Integer.parseInt(params[0]); for (MapleCharacter victim : player.getMap().getCharacters()) { - victim.announce(PacketCreator.getClock(seconds)); + victim.sendPacket(PacketCreator.getClock(seconds)); } } catch (NumberFormatException e) { player.yellowMessage("Syntax: !timermap |remove"); diff --git a/src/main/java/client/command/commands/gm6/WarpWorldCommand.java b/src/main/java/client/command/commands/gm6/WarpWorldCommand.java index 3c159eb419..6f65a11c08 100644 --- a/src/main/java/client/command/commands/gm6/WarpWorldCommand.java +++ b/src/main/java/client/command/commands/gm6/WarpWorldCommand.java @@ -55,7 +55,7 @@ public class WarpWorldCommand extends Command { player.setSessionTransitionState(); player.setWorld(worldb); player.saveCharToDB();//To set the new world :O (true because else 2 player instances are created, one in both worlds) - c.announce(PacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]))); + c.sendPacket(PacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]))); } catch (UnknownHostException | NumberFormatException ex) { ex.printStackTrace(); player.message("Unexpected error when changing worlds, are you sure the world you are trying to warp to has the same amount of channels?"); diff --git a/src/main/java/client/creator/CharacterFactory.java b/src/main/java/client/creator/CharacterFactory.java index 34dffa08e2..d4d74e1768 100644 --- a/src/main/java/client/creator/CharacterFactory.java +++ b/src/main/java/client/creator/CharacterFactory.java @@ -90,7 +90,7 @@ public abstract class CharacterFactory { if (!newchar.insertNewChar(recipe)) { return -2; } - c.announce(PacketCreator.addNewCharEntry(newchar)); + c.sendPacket(PacketCreator.addNewCharEntry(newchar)); Server.getInstance().createCharacterEntry(newchar); Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.sendYellowTip("[New Char]: " + c.getAccountName() + " has created a new character with IGN " + name)); diff --git a/src/main/java/client/inventory/Equip.java b/src/main/java/client/inventory/Equip.java index a2e234c6ad..c6797a62f6 100644 --- a/src/main/java/client/inventory/Equip.java +++ b/src/main/java/client/inventory/Equip.java @@ -532,8 +532,8 @@ public class Equip extends Item { showLevelupMessage(showStr, c); // thanks to Polaris dev team ! c.getPlayer().dropMessage(6, lvupStr); - c.announce(PacketCreator.showEquipmentLevelUp()); - c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.showForeignEffect(c.getPlayer().getId(), 15)); + c.sendPacket(PacketCreator.showEquipmentLevelUp()); + c.getPlayer().getMap().broadcastPacket(c.getPlayer(), PacketCreator.showForeignEffect(c.getPlayer().getId(), 15)); c.getPlayer().forceUpdateItem(this); } diff --git a/src/main/java/client/inventory/MaplePet.java b/src/main/java/client/inventory/MaplePet.java index 3d0d6abbf1..0703424a44 100644 --- a/src/main/java/client/inventory/MaplePet.java +++ b/src/main/java/client/inventory/MaplePet.java @@ -202,7 +202,7 @@ public class MaplePet extends Item { closeness = newCloseness; while(newCloseness >= ExpTable.getClosenessNeededForLevel(level)) { level += 1; - owner.getClient().announce(PacketCreator.showOwnPetLevelUp(slot)); + owner.sendPacket(PacketCreator.showOwnPetLevelUp(slot)); owner.getMap().broadcastMessage(PacketCreator.showPetLevelUp(owner, slot)); } } diff --git a/src/main/java/client/inventory/manipulator/MapleInventoryManipulator.java b/src/main/java/client/inventory/manipulator/MapleInventoryManipulator.java index 62fc2e4b16..1199cdfd2a 100644 --- a/src/main/java/client/inventory/manipulator/MapleInventoryManipulator.java +++ b/src/main/java/client/inventory/manipulator/MapleInventoryManipulator.java @@ -92,7 +92,7 @@ public class MapleInventoryManipulator { quantity -= (newQ - oldQ); eItem.setQuantity(newQ); eItem.setExpiration(expiration); - c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(1, eItem)))); + c.sendPacket(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(1, eItem)))); } } else { break; @@ -109,17 +109,17 @@ public class MapleInventoryManipulator { nItem.setExpiration(expiration); short newSlot = inv.addItem(nItem); if (newSlot == -1) { - c.announce(PacketCreator.getInventoryFull()); - c.announce(PacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return false; } if (owner != null) { nItem.setOwner(owner); } - c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); + c.sendPacket(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); if(sandboxItem) chr.setHasSandboxItem(); } else { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } } @@ -129,11 +129,11 @@ public class MapleInventoryManipulator { nItem.setExpiration(expiration); short newSlot = inv.addItem(nItem); if (newSlot == -1) { - c.announce(PacketCreator.getInventoryFull()); - c.announce(PacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return false; } - c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); + c.sendPacket(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); if(MapleInventoryManipulator.isSandboxItem(nItem)) chr.setHasSandboxItem(); } } else if (quantity == 1) { @@ -145,11 +145,11 @@ public class MapleInventoryManipulator { } short newSlot = inv.addItem(nEquip); if (newSlot == -1) { - c.announce(PacketCreator.getInventoryFull()); - c.announce(PacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return false; } - c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nEquip)))); + c.sendPacket(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nEquip)))); if(MapleInventoryManipulator.isSandboxItem(nEquip)) chr.setHasSandboxItem(); } else { throw new RuntimeException("Trying to create equip with non-one quantity"); @@ -182,8 +182,8 @@ public class MapleInventoryManipulator { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); int itemid = item.getItemId(); if (ii.isPickupRestricted(itemid) && chr.haveItemWithId(itemid, true)) { - c.announce(PacketCreator.getInventoryFull()); - c.announce(PacketCreator.showItemUnavailable()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.showItemUnavailable()); return false; } short quantity = item.getQuantity(); @@ -203,7 +203,7 @@ public class MapleInventoryManipulator { quantity -= (newQ - oldQ); eItem.setQuantity(newQ); item.setPosition(eItem.getPosition()); - c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(1, eItem)))); + c.sendPacket(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(1, eItem)))); } } else { break; @@ -219,14 +219,14 @@ public class MapleInventoryManipulator { nItem.setFlag(item.getFlag()); short newSlot = inv.addItem(nItem); if (newSlot == -1) { - c.announce(PacketCreator.getInventoryFull()); - c.announce(PacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); item.setQuantity((short) (quantity + newQ)); return false; } nItem.setPosition(newSlot); item.setPosition(newSlot); - c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); + c.sendPacket(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); if (MapleInventoryManipulator.isSandboxItem(nItem)) chr.setHasSandboxItem(); } } else { @@ -236,34 +236,34 @@ public class MapleInventoryManipulator { short newSlot = inv.addItem(nItem); if (newSlot == -1) { - c.announce(PacketCreator.getInventoryFull()); - c.announce(PacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return false; } nItem.setPosition(newSlot); item.setPosition(newSlot); - c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); + c.sendPacket(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, nItem)))); if (MapleInventoryManipulator.isSandboxItem(nItem)) chr.setHasSandboxItem(); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } else if (quantity == 1) { short newSlot = inv.addItem(item); if (newSlot == -1) { - c.announce(PacketCreator.getInventoryFull()); - c.announce(PacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return false; } item.setPosition(newSlot); - c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, item)))); + c.sendPacket(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(0, item)))); if (MapleInventoryManipulator.isSandboxItem(item)) chr.setHasSandboxItem(); } else { FilePrinter.printError(FilePrinter.ITEM, "Tried to pickup Equip id " + itemid + " containing more than 1 quantity --> " + quantity); - c.announce(PacketCreator.getInventoryFull()); - c.announce(PacketCreator.showItemUnavailable()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.showItemUnavailable()); return false; } if (show) { - c.announce(PacketCreator.getShowItemGain(itemid, item.getQuantity())); + c.sendPacket(PacketCreator.getShowItemGain(itemid, item.getQuantity())); } return true; } @@ -429,9 +429,9 @@ public class MapleInventoryManipulator { private static void announceModifyInventory(MapleClient c, Item item, boolean fromDrop, boolean allowZero) { if (item.getQuantity() == 0 && !allowZero) { - c.announce(PacketCreator.modifyInventory(fromDrop, Collections.singletonList(new ModifyInventory(3, item)))); + c.sendPacket(PacketCreator.modifyInventory(fromDrop, Collections.singletonList(new ModifyInventory(3, item)))); } else { - c.announce(PacketCreator.modifyInventory(fromDrop, Collections.singletonList(new ModifyInventory(1, item)))); + c.sendPacket(PacketCreator.modifyInventory(fromDrop, Collections.singletonList(new ModifyInventory(1, item)))); } } @@ -498,7 +498,7 @@ public class MapleInventoryManipulator { } else { mods.add(new ModifyInventory(2, source, src)); } - c.announce(PacketCreator.modifyInventory(true, mods)); + c.sendPacket(PacketCreator.modifyInventory(true, mods)); } public static void equip(MapleClient c, short src, short dst) { @@ -510,7 +510,7 @@ public class MapleInventoryManipulator { Equip source = (Equip) eqpInv.getItem(src); if (source == null || !ii.canWearEquipment(chr, source, dst)) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } else if ((((source.getItemId() >= 1902000 && source.getItemId() <= 1902002) || source.getItemId() == 1912000) && chr.isCygnus()) || ((source.getItemId() >= 1902005 && source.getItemId() <= 1902007) || source.getItemId() == 1912005) && !chr.isCygnus()) {// Adventurer taming equipment return; @@ -527,8 +527,8 @@ public class MapleInventoryManipulator { Item top = eqpdInv.getItem((short) -5); if (top != null && ItemConstants.isOverall(top.getItemId())) { if (eqpInv.isFull()) { - c.announce(PacketCreator.getInventoryFull()); - c.announce(PacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return; } unequip(c, (byte) -5, eqpInv.getNextFreeSlot()); @@ -537,8 +537,8 @@ public class MapleInventoryManipulator { final Item bottom = eqpdInv.getItem((short) -6); if (bottom != null && ItemConstants.isOverall(source.getItemId())) { if (eqpInv.isFull()) { - c.announce(PacketCreator.getInventoryFull()); - c.announce(PacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return; } unequip(c, (byte) -6, eqpInv.getNextFreeSlot()); @@ -547,8 +547,8 @@ public class MapleInventoryManipulator { Item weapon = eqpdInv.getItem((short) -11); if (weapon != null && ii.isTwoHanded(weapon.getItemId())) { if (eqpInv.isFull()) { - c.announce(PacketCreator.getInventoryFull()); - c.announce(PacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return; } unequip(c, (byte) -11, eqpInv.getNextFreeSlot()); @@ -557,8 +557,8 @@ public class MapleInventoryManipulator { Item shield = eqpdInv.getItem((short) -10); if (shield != null && ii.isTwoHanded(source.getItemId())) { if (eqpInv.isFull()) { - c.announce(PacketCreator.getInventoryFull()); - c.announce(PacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return; } unequip(c, (byte) -10, eqpInv.getNextFreeSlot()); @@ -614,7 +614,7 @@ public class MapleInventoryManipulator { } mods.add(new ModifyInventory(2, source, src)); - c.announce(PacketCreator.modifyInventory(true, mods)); + c.sendPacket(PacketCreator.modifyInventory(true, mods)); chr.equipChanged(); } @@ -632,7 +632,7 @@ public class MapleInventoryManipulator { return; } if (target != null && src <= 0) { - c.announce(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); return; } @@ -656,7 +656,7 @@ public class MapleInventoryManipulator { target.setPosition(src); eqpdInv.addItemFromDB(target); } - c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(2, source, src)))); + c.sendPacket(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(2, source, src)))); chr.equipChanged(); } @@ -712,7 +712,7 @@ public class MapleInventoryManipulator { Item target = source.copy(); target.setQuantity(quantity); source.setQuantity((short) (source.getQuantity() - quantity)); - c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(1, source)))); + c.sendPacket(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(1, source)))); if (ItemConstants.isNewYearCardEtc(itemId)) { if(itemId == 4300000) { @@ -742,7 +742,7 @@ public class MapleInventoryManipulator { inv.removeSlot(src); } - c.announce(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(3, source)))); + c.sendPacket(PacketCreator.modifyInventory(true, Collections.singletonList(new ModifyInventory(3, source)))); if (src < 0) { chr.equipChanged(); } else if (ItemConstants.isNewYearCardEtc(itemId)) { diff --git a/src/main/java/client/keybind/MapleQuickslotBinding.java b/src/main/java/client/keybind/MapleQuickslotBinding.java index f592774abb..71e9189c18 100644 --- a/src/main/java/client/keybind/MapleQuickslotBinding.java +++ b/src/main/java/client/keybind/MapleQuickslotBinding.java @@ -1,6 +1,6 @@ package client.keybind; -import tools.data.output.MaplePacketLittleEndianWriter; +import net.packet.OutPacket; import java.util.Arrays; @@ -31,25 +31,22 @@ public class MapleQuickslotBinding this.m_aQuickslotKeyMapped = aKeys.clone(); } - public void Encode(MaplePacketLittleEndianWriter oPacket) + public void encode(OutPacket p) { // Quickslots are default. // The client will skip them and call CQuickslotKeyMappedMan::DefaultQuickslotKeyMap. - if(Arrays.equals(this.m_aQuickslotKeyMapped, DEFAULT_QUICKSLOTS)) - { - oPacket.writeBool(false); - + if (Arrays.equals(this.m_aQuickslotKeyMapped, DEFAULT_QUICKSLOTS)) { + p.writeBool(false); return; } - oPacket.writeBool(true); + p.writeBool(true); - for(byte nKey : this.m_aQuickslotKeyMapped) - { + for(byte nKey : this.m_aQuickslotKeyMapped) { // For some reason Nexon sends these as integers, similar to CFuncKeyMappedMan. // However there's no evidence any key can be above 0xFF anyhow. // Regardless, we need to encode an integer to avoid an error 38 crash; as CFuncKeyMapped::m_aQuickslotKeyMapped is int[8]. - oPacket.writeInt(nKey); + p.writeInt(nKey); } } diff --git a/src/main/java/client/newyear/NewYearCardRecord.java b/src/main/java/client/newyear/NewYearCardRecord.java index 38b51e23ba..c521148a7c 100644 --- a/src/main/java/client/newyear/NewYearCardRecord.java +++ b/src/main/java/client/newyear/NewYearCardRecord.java @@ -257,7 +257,7 @@ public class NewYearCardRecord { MapleCharacter target = server.getWorld(world).getPlayerStorage().getCharacterById(receiverId); if(target != null && target.isLoggedinWorld()) { - target.announce(PacketCreator.onNewYearCardRes(target, NewYearCardRecord.this, 0xC, 0)); + target.sendPacket(PacketCreator.onNewYearCardRes(target, NewYearCardRecord.this, 0xC, 0)); } }, 1000 * 60 * 60); //1 Hour } diff --git a/src/main/java/client/processor/action/BuybackProcessor.java b/src/main/java/client/processor/action/BuybackProcessor.java index 80439c143d..b96e10f4c0 100644 --- a/src/main/java/client/processor/action/BuybackProcessor.java +++ b/src/main/java/client/processor/action/BuybackProcessor.java @@ -77,7 +77,7 @@ public class BuybackProcessor { map.broadcastMessage(PacketCreator.playSound("Buyback/" + jobString)); map.broadcastMessage(PacketCreator.earnTitleMessage(chr.getName() + " just bought back into the game!")); - chr.announce(PacketCreator.showBuybackEffect()); + chr.sendPacket(PacketCreator.showBuybackEffect()); map.broadcastMessage(chr, PacketCreator.showForeignBuybackEffect(chr.getId()), false); } } diff --git a/src/main/java/client/processor/action/MakerProcessor.java b/src/main/java/client/processor/action/MakerProcessor.java index b8df84f107..ccbfd1d232 100644 --- a/src/main/java/client/processor/action/MakerProcessor.java +++ b/src/main/java/client/processor/action/MakerProcessor.java @@ -65,8 +65,8 @@ public class MakerProcessor { int fromLeftover = toCreate; toCreate = ii.getMakerCrystalFromLeftover(toCreate); if(toCreate == -1) { - c.announce(PacketCreator.serverNotice(1, ii.getName(fromLeftover) + " is unavailable for Monster Crystal conversion.")); - c.announce(PacketCreator.makerEnableActions()); + c.sendPacket(PacketCreator.serverNotice(1, ii.getName(fromLeftover) + " is unavailable for Monster Crystal conversion.")); + c.sendPacket(PacketCreator.makerEnableActions()); return; } @@ -83,13 +83,13 @@ public class MakerProcessor { if(p != null) { recipe = MakerItemFactory.generateDisassemblyCrystalEntry(toDisassemble, p.getLeft(), p.getRight()); } else { - c.announce(PacketCreator.serverNotice(1, ii.getName(toCreate) + " is unavailable for Monster Crystal disassembly.")); - c.announce(PacketCreator.makerEnableActions()); + c.sendPacket(PacketCreator.serverNotice(1, ii.getName(toCreate) + " is unavailable for Monster Crystal disassembly.")); + c.sendPacket(PacketCreator.makerEnableActions()); return; } } else { - c.announce(PacketCreator.serverNotice(1, "An unknown error occurred when trying to apply that item for disassembly.")); - c.announce(PacketCreator.makerEnableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "An unknown error occurred when trying to apply that item for disassembly.")); + c.sendPacket(PacketCreator.makerEnableActions()); return; } } else { @@ -136,8 +136,8 @@ public class MakerProcessor { if(!reagentids.isEmpty()) { if(!removeOddMakerReagents(toCreate, reagentids)) { - c.announce(PacketCreator.serverNotice(1, "You can only use WATK and MATK Strengthening Gems on weapon items.")); - c.announce(PacketCreator.makerEnableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "You can only use WATK and MATK Strengthening Gems on weapon items.")); + c.sendPacket(PacketCreator.makerEnableActions()); return; } } @@ -151,33 +151,33 @@ public class MakerProcessor { switch(createStatus) { case -1:// non-available for Maker itemid has been tried to forge FilePrinter.printError(FilePrinter.EXPLOITS, "Player " + c.getPlayer().getName() + " tried to craft itemid " + toCreate + " using the Maker skill."); - c.announce(PacketCreator.serverNotice(1, "The requested item could not be crafted on this operation.")); - c.announce(PacketCreator.makerEnableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "The requested item could not be crafted on this operation.")); + c.sendPacket(PacketCreator.makerEnableActions()); break; case 1: // no items - c.announce(PacketCreator.serverNotice(1, "You don't have all required items in your inventory to make " + ii.getName(toCreate) + ".")); - c.announce(PacketCreator.makerEnableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "You don't have all required items in your inventory to make " + ii.getName(toCreate) + ".")); + c.sendPacket(PacketCreator.makerEnableActions()); break; case 2: // no meso - c.announce(PacketCreator.serverNotice(1, "You don't have enough mesos (" + GameConstants.numberWithCommas(recipe.getCost()) + ") to complete this operation.")); - c.announce(PacketCreator.makerEnableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "You don't have enough mesos (" + GameConstants.numberWithCommas(recipe.getCost()) + ") to complete this operation.")); + c.sendPacket(PacketCreator.makerEnableActions()); break; case 3: // no req level - c.announce(PacketCreator.serverNotice(1, "You don't have enough level to complete this operation.")); - c.announce(PacketCreator.makerEnableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "You don't have enough level to complete this operation.")); + c.sendPacket(PacketCreator.makerEnableActions()); break; case 4: // no req skill level - c.announce(PacketCreator.serverNotice(1, "You don't have enough Maker level to complete this operation.")); - c.announce(PacketCreator.makerEnableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "You don't have enough Maker level to complete this operation.")); + c.sendPacket(PacketCreator.makerEnableActions()); break; case 5: // inventory full - c.announce(PacketCreator.serverNotice(1, "Your inventory is full.")); - c.announce(PacketCreator.makerEnableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "Your inventory is full.")); + c.sendPacket(PacketCreator.makerEnableActions()); break; default: @@ -214,14 +214,14 @@ public class MakerProcessor { // thanks inhyuk for noticing missing MAKER_RESULT packets if (type == 3) { - c.announce(PacketCreator.makerResultCrystal(recipe.getGainItems().get(0).getLeft(), recipe.getReqItems().get(0).getLeft())); + c.sendPacket(PacketCreator.makerResultCrystal(recipe.getGainItems().get(0).getLeft(), recipe.getReqItems().get(0).getLeft())); } else if (type == 4) { - c.announce(PacketCreator.makerResultDesynth(recipe.getReqItems().get(0).getLeft(), recipe.getCost(), recipe.getGainItems())); + c.sendPacket(PacketCreator.makerResultDesynth(recipe.getReqItems().get(0).getLeft(), recipe.getCost(), recipe.getGainItems())); } else { - c.announce(PacketCreator.makerResult(makerSucceeded, recipe.getGainItems().get(0).getLeft(), recipe.getGainItems().get(0).getRight(), recipe.getCost(), recipe.getReqItems(), stimulantid, new LinkedList<>(reagentids.keySet()))); + c.sendPacket(PacketCreator.makerResult(makerSucceeded, recipe.getGainItems().get(0).getLeft(), recipe.getGainItems().get(0).getRight(), recipe.getCost(), recipe.getReqItems(), stimulantid, new LinkedList<>(reagentids.keySet()))); } - c.announce(PacketCreator.showMakerEffect(makerSucceeded)); + c.sendPacket(PacketCreator.showMakerEffect(makerSucceeded)); c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.showForeignMakerEffect(c.getPlayer().getId(), makerSucceeded), false); if(toCreate == 4260003 && type == 3 && c.getPlayer().getQuestStatus(6033) == 1) { diff --git a/src/main/java/client/processor/action/PetAutopotProcessor.java b/src/main/java/client/processor/action/PetAutopotProcessor.java index d7c69eb52a..45114854bb 100644 --- a/src/main/java/client/processor/action/PetAutopotProcessor.java +++ b/src/main/java/client/processor/action/PetAutopotProcessor.java @@ -83,7 +83,7 @@ public class PetAutopotProcessor { MapleClient c = this.c; MapleCharacter chr = c.getPlayer(); if (!chr.isAlive()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -102,7 +102,7 @@ public class PetAutopotProcessor { toUse = useInv.getItem(slot); if (toUse != null) { if (toUse.getItemId() != itemId) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -111,7 +111,7 @@ public class PetAutopotProcessor { // from now on, toUse becomes the "cursor" for the current pot being used if (toUse.getQuantity() <= 0) { if (!cursorOnNextAvailablePot(chr)) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } @@ -179,7 +179,7 @@ public class PetAutopotProcessor { } } - chr.announce(PacketCreator.enableActions()); + chr.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/client/processor/action/SpawnPetProcessor.java b/src/main/java/client/processor/action/SpawnPetProcessor.java index b82a21c3f9..29cc716a31 100644 --- a/src/main/java/client/processor/action/SpawnPetProcessor.java +++ b/src/main/java/client/processor/action/SpawnPetProcessor.java @@ -52,7 +52,7 @@ public class SpawnPetProcessor { { if (chr.haveItem(petid + 1)) { chr.dropMessage(5, "You can't hatch your " + (petid == 5000028 ? "Dragon egg" : "Robo egg") + " if you already have a Baby " + (petid == 5000028 ? "Dragon." : "Robo.")); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } else { int evolveid = MapleDataTool.getInt("info/evol1", dataRoot.getData("Pet/" + petid + ".img")); @@ -64,7 +64,7 @@ public class SpawnPetProcessor { MapleInventoryManipulator.removeById(c, MapleInventoryType.CASH, petid, (short) 1, false, false); MapleInventoryManipulator.addById(c, evolveid, (short) 1, null, petId, expiration); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } @@ -86,8 +86,8 @@ public class SpawnPetProcessor { pet.saveToDb(); chr.addPet(pet); chr.getMap().broadcastMessage(c.getPlayer(), PacketCreator.showPet(c.getPlayer(), pet, false, false), true); - c.announce(PacketCreator.petStatUpdate(c.getPlayer())); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.petStatUpdate(c.getPlayer())); + c.sendPacket(PacketCreator.enableActions()); chr.commitExcludedItems(); chr.getClient().getWorldServer().registerPetHunger(chr, chr.getPetIndex(pet)); diff --git a/src/main/java/client/processor/npc/DueyProcessor.java b/src/main/java/client/processor/npc/DueyProcessor.java index c0289a9c9e..8e955a7d22 100644 --- a/src/main/java/client/processor/npc/DueyProcessor.java +++ b/src/main/java/client/processor/npc/DueyProcessor.java @@ -117,7 +117,7 @@ public class DueyProcessor { ps2.setInt(1, player.getId()); ps2.executeUpdate(); - c.announce(PacketCreator.sendDueyParcelReceived(rs.getString("SenderName"), rs.getInt("Type") == 1)); + c.sendPacket(PacketCreator.sendDueyParcelReceived(rs.getString("SenderName"), rs.getInt("Type") == 1)); } } } @@ -305,21 +305,21 @@ public class DueyProcessor { int recipientAccId = accIdCid.getLeft(); if (recipientAccId != -1) { if (recipientAccId == c.getAccID()) { - c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_SAMEACC_ERROR.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_SAMEACC_ERROR.getCode())); return; } } else { - c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_NAME_DOES_NOT_EXIST.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_NAME_DOES_NOT_EXIST.getCode())); return; } } else { - c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_NOT_ENOUGH_MESOS.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_NOT_ENOUGH_MESOS.getCode())); return; } int recipientCid = accIdCid.getRight(); if (recipientCid == -1) { - c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_NAME_DOES_NOT_EXIST.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_NAME_DOES_NOT_EXIST.getCode())); return; } @@ -329,18 +329,18 @@ public class DueyProcessor { int packageId = createPackage(sendMesos, sendMessage, c.getPlayer().getName(), recipientCid, quick); if (packageId == -1) { - c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_ENABLE_ACTIONS.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_ENABLE_ACTIONS.getCode())); return; } c.getPlayer().gainMeso((int) -finalcost, false); int res = addPackageItemFromInventory(packageId, c, invTypeId, itemPos, amount); if (res == 0) { - c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_SUCCESSFULLY_SENT.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_SUCCESSFULLY_SENT.getCode())); } else if (res > 0) { - c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_ENABLE_ACTIONS.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_ENABLE_ACTIONS.getCode())); } else { - c.announce(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_INCORRECT_REQUEST.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_INCORRECT_REQUEST.getCode())); } MapleClient rClient = null; @@ -368,7 +368,7 @@ public class DueyProcessor { if (c.tryacquireClient()) { try { removePackageFromDB(packageid); - c.announce(PacketCreator.removeItemFromDuey(playerRemove, packageid)); + c.sendPacket(PacketCreator.removeItemFromDuey(playerRemove, packageid)); } finally { c.releaseClient(); } @@ -392,29 +392,29 @@ public class DueyProcessor { } if (dp == null) { - c.announce(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to receive package from duey with id " + packageId); return; } if (dp.isDeliveringTime()) { - c.announce(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); return; } Item dpItem = dp.getItem(); if (dpItem != null) { if (!c.getPlayer().canHoldMeso(dp.getMesos())) { - c.announce(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); return; } if (!MapleInventoryManipulator.checkSpace(c, dpItem.getItemId(), dpItem.getQuantity(), dpItem.getOwner())) { int itemid = dpItem.getItemId(); if (MapleItemInformationProvider.getInstance().isPickupRestricted(itemid) && c.getPlayer().getInventory(ItemConstants.getInventoryType(itemid)).findById(itemid) != null) { - c.announce(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_RECEIVER_WITH_UNIQUE.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_RECEIVER_WITH_UNIQUE.getCode())); } else { - c.announce(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_NO_FREE_SLOTS.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_NO_FREE_SLOTS.getCode())); } return; @@ -440,15 +440,15 @@ public class DueyProcessor { try { long timeNow = System.currentTimeMillis(); if (timeNow - c.getPlayer().getNpcCooldown() < YamlConfig.config.server.BLOCK_NPC_RACE_CONDT) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } c.getPlayer().setNpcCooldown(timeNow); if (quickDelivery) { - c.announce(PacketCreator.sendDuey(0x1A, null)); + c.sendPacket(PacketCreator.sendDuey(0x1A, null)); } else { - c.announce(PacketCreator.sendDuey(0x8, loadPackages(c.getPlayer()))); + c.sendPacket(PacketCreator.sendDuey(0x8, loadPackages(c.getPlayer()))); } } finally { c.releaseClient(); diff --git a/src/main/java/client/processor/npc/FredrickProcessor.java b/src/main/java/client/processor/npc/FredrickProcessor.java index 43bd649a7b..d15b4bf63d 100644 --- a/src/main/java/client/processor/npc/FredrickProcessor.java +++ b/src/main/java/client/processor/npc/FredrickProcessor.java @@ -275,7 +275,7 @@ public class FredrickProcessor { byte response = canRetrieveFromFredrick(chr, items); if (response != 0) { - chr.announce(PacketCreator.fredrickMessage(response)); + chr.sendPacket(PacketCreator.fredrickMessage(response)); return; } @@ -294,7 +294,7 @@ public class FredrickProcessor { FilePrinter.print(FilePrinter.FREDRICK + chr.getName() + ".txt", chr.getName() + " gained " + item.getQuantity() + " " + itemName + " (" + item.getItemId() + ")"); } - chr.announce(PacketCreator.fredrickMessage((byte) 0x1E)); + chr.sendPacket(PacketCreator.fredrickMessage((byte) 0x1E)); removeFredrickLog(chr.getId()); } else { chr.message("An unknown error has occured."); diff --git a/src/main/java/client/processor/npc/StorageProcessor.java b/src/main/java/client/processor/npc/StorageProcessor.java index 55ea3433b2..37dde5f809 100644 --- a/src/main/java/client/processor/npc/StorageProcessor.java +++ b/src/main/java/client/processor/npc/StorageProcessor.java @@ -52,7 +52,7 @@ public class StorageProcessor { if (chr.getLevel() < 15){ chr.dropMessage(1, "You may only use the storage once you have reached level 15."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -71,13 +71,13 @@ public class StorageProcessor { Item item = storage.getItem(slot); if (item != null) { if (ii.isPickupRestricted(item.getItemId()) && chr.haveItemWithId(item.getItemId(), true)) { - c.announce(PacketCreator.getStorageError((byte) 0x0C)); + c.sendPacket(PacketCreator.getStorageError((byte) 0x0C)); return; } int takeoutFee = storage.getTakeOutFee(); if (chr.getMeso() < takeoutFee) { - c.announce(PacketCreator.getStorageError((byte) 0x0B)); + c.sendPacket(PacketCreator.getStorageError((byte) 0x0B)); return; } else { chr.gainMeso(-takeoutFee, false); @@ -95,11 +95,11 @@ public class StorageProcessor { storage.sendTakenOut(c, item.getInventoryType()); } else { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } else { - c.announce(PacketCreator.getStorageError((byte) 0x0A)); + c.sendPacket(PacketCreator.getStorageError((byte) 0x0A)); } } } else if (mode == 5) { // store @@ -115,17 +115,17 @@ public class StorageProcessor { return; } if (quantity < 1) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (storage.isFull()) { - c.announce(PacketCreator.getStorageError((byte) 0x11)); + c.sendPacket(PacketCreator.getStorageError((byte) 0x11)); return; } int storeFee = storage.getStoreFee(); if (chr.getMeso() < storeFee) { - c.announce(PacketCreator.getStorageError((byte) 0x0B)); + c.sendPacket(PacketCreator.getStorageError((byte) 0x0B)); } else { Item item; @@ -134,7 +134,7 @@ public class StorageProcessor { item = inv.getItem(slot); if (item != null && item.getItemId() == itemId && (item.getQuantity() >= quantity || ItemConstants.isRechargeable(itemId))) { if (ItemConstants.isWeddingRing(itemId) || ItemConstants.isWeddingToken(itemId)) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -144,7 +144,7 @@ public class StorageProcessor { MapleInventoryManipulator.removeFromSlot(c, invType, slot, quantity, false); } else { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -168,7 +168,7 @@ public class StorageProcessor { } } else if (mode == 6) { // arrange items if(YamlConfig.config.server.USE_STORAGE_ITEM_SORT) storage.arrangeItems(c); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if (mode == 7) { // meso int meso = slea.readInt(); int storageMesos = storage.getMeso(); @@ -177,13 +177,13 @@ public class StorageProcessor { if (meso < 0 && (storageMesos - meso) < 0) { meso = Integer.MIN_VALUE + storageMesos; if (meso < playerMesos) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } else if (meso > 0 && (playerMesos + meso) < 0) { meso = Integer.MAX_VALUE - playerMesos; if (meso > storageMesos) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } @@ -193,7 +193,7 @@ public class StorageProcessor { FilePrinter.print(FilePrinter.STORAGE + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + (meso > 0 ? " took out " : " stored ") + Math.abs(meso) + " mesos"); storage.sendMeso(c); } else { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } else if (mode == 8) {// close... unless the player decides to enter cash shop! diff --git a/src/main/java/client/processor/stat/AssignAPProcessor.java b/src/main/java/client/processor/stat/AssignAPProcessor.java index dcc9a77057..0b127535ef 100644 --- a/src/main/java/client/processor/stat/AssignAPProcessor.java +++ b/src/main/java/client/processor/stat/AssignAPProcessor.java @@ -329,11 +329,11 @@ public class AssignAPProcessor { } chr.assignStrDexIntLuk(statGain[0], statGain[1], statGain[3], statGain[2]); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); //---------------------------------------------------------------------------------------- - c.announce(PacketCreator.serverNotice(1, "Better AP applications detected:\r\nSTR: +" + statGain[0] + "\r\nDEX: +" + statGain[1] + "\r\nINT: +" + statGain[3] + "\r\nLUK: +" + statGain[2])); + c.sendPacket(PacketCreator.serverNotice(1, "Better AP applications detected:\r\nSTR: +" + statGain[0] + "\r\nDEX: +" + statGain[1] + "\r\nINT: +" + statGain[3] + "\r\nLUK: +" + statGain[2])); } else { if(slea.available() < 16) { AutobanFactory.PACKET_EDIT.alert(chr, "Didn't send full packet for Auto Assign."); @@ -353,7 +353,7 @@ public class AssignAPProcessor { } chr.assignStrDexIntLuk(statGain[0], statGain[1], statGain[3], statGain[2]); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } finally { c.unlockClient(); @@ -426,48 +426,48 @@ public class AssignAPProcessor { case 64: // str if (player.getStr() < 5) { player.message("You don't have the minimum STR required to swap."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } if (!player.assignStr(-1)) { player.message("Couldn't execute AP reset operation."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } break; case 128: // dex if (player.getDex() < 5) { player.message("You don't have the minimum DEX required to swap."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } if (!player.assignDex(-1)) { player.message("Couldn't execute AP reset operation."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } break; case 256: // int if (player.getInt() < 5) { player.message("You don't have the minimum INT required to swap."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } if (!player.assignInt(-1)) { player.message("Couldn't execute AP reset operation."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } break; case 512: // luk if (player.getLuk() < 5) { player.message("You don't have the minimum LUK required to swap."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } if (!player.assignLuk(-1)) { player.message("Couldn't execute AP reset operation."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } break; @@ -475,14 +475,14 @@ public class AssignAPProcessor { if(YamlConfig.config.server.USE_ENFORCE_HPMP_SWAP) { if (APTo != 8192) { player.message("You can only swap HP ability points to MP."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } } if (player.getHpMpApUsed() < 1) { player.message("You don't have enough HPMP stat points to spend on AP Reset."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } @@ -490,7 +490,7 @@ public class AssignAPProcessor { int level_ = player.getLevel(); if (hp < level_ * 14 + 148) { player.message("You don't have the minimum HP pool required to swap."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } @@ -506,14 +506,14 @@ public class AssignAPProcessor { if(YamlConfig.config.server.USE_ENFORCE_HPMP_SWAP) { if (APTo != 2048) { player.message("You can only swap MP ability points to HP."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } } if (player.getHpMpApUsed() < 1) { player.message("You don't have enough HPMP stat points to spend on AP Reset."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } @@ -534,7 +534,7 @@ public class AssignAPProcessor { if (!canWash) { player.message("You don't have the minimum MP pool required to swap."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } @@ -546,7 +546,7 @@ public class AssignAPProcessor { } break; default: - c.announce(PacketCreator.updatePlayerStats(PacketCreator.EMPTY_STATUPDATE, true, player)); + c.sendPacket(PacketCreator.updatePlayerStats(PacketCreator.EMPTY_STATUPDATE, true, player)); return false; } @@ -571,47 +571,47 @@ public class AssignAPProcessor { case 64: if (!chr.assignStr(1)) { chr.message("Couldn't execute AP assign operation."); - chr.announce(PacketCreator.enableActions()); + chr.sendPacket(PacketCreator.enableActions()); return false; } break; case 128: // Dex if (!chr.assignDex(1)) { chr.message("Couldn't execute AP assign operation."); - chr.announce(PacketCreator.enableActions()); + chr.sendPacket(PacketCreator.enableActions()); return false; } break; case 256: // Int if (!chr.assignInt(1)) { chr.message("Couldn't execute AP assign operation."); - chr.announce(PacketCreator.enableActions()); + chr.sendPacket(PacketCreator.enableActions()); return false; } break; case 512: // Luk if (!chr.assignLuk(1)) { chr.message("Couldn't execute AP assign operation."); - chr.announce(PacketCreator.enableActions()); + chr.sendPacket(PacketCreator.enableActions()); return false; } break; case 2048: if (!chr.assignHP(calcHpChange(chr, usedAPReset), 1)) { chr.message("Couldn't execute AP assign operation."); - chr.announce(PacketCreator.enableActions()); + chr.sendPacket(PacketCreator.enableActions()); return false; } break; case 8192: if (!chr.assignMP(calcMpChange(chr, usedAPReset), 1)) { chr.message("Couldn't execute AP assign operation."); - chr.announce(PacketCreator.enableActions()); + chr.sendPacket(PacketCreator.enableActions()); return false; } break; default: - chr.announce(PacketCreator.updatePlayerStats(PacketCreator.EMPTY_STATUPDATE, true, chr)); + chr.sendPacket(PacketCreator.updatePlayerStats(PacketCreator.EMPTY_STATUPDATE, true, chr)); return false; } return true; diff --git a/src/main/java/client/processor/stat/AssignSPProcessor.java b/src/main/java/client/processor/stat/AssignSPProcessor.java index 349b5ef244..191cf3aedf 100644 --- a/src/main/java/client/processor/stat/AssignSPProcessor.java +++ b/src/main/java/client/processor/stat/AssignSPProcessor.java @@ -41,7 +41,7 @@ public class AssignSPProcessor { public static boolean canSPAssign(MapleClient c, int skillid) { if (skillid == Aran.HIDDEN_FULL_DOUBLE || skillid == Aran.HIDDEN_FULL_TRIPLE || skillid == Aran.HIDDEN_OVER_DOUBLE || skillid == Aran.HIDDEN_OVER_TRIPLE) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } @@ -82,7 +82,7 @@ public class AssignSPProcessor { if (!isBeginnerSkill) { player.gainSp(-1, GameConstants.getSkillBook(skillid/10000), false); } else { - player.announce(PacketCreator.enableActions()); + player.sendPacket(PacketCreator.enableActions()); } if (skill.getId() == Aran.FULL_SWING) { player.changeSkillLevel(skill, (byte) (curLevel + 1), player.getMasterLevel(skill), player.getSkillExpiration(skill)); diff --git a/src/main/java/net/netty/ServerChannelInitializer.java b/src/main/java/net/netty/ServerChannelInitializer.java index e18f78e754..eb1cf96875 100644 --- a/src/main/java/net/netty/ServerChannelInitializer.java +++ b/src/main/java/net/netty/ServerChannelInitializer.java @@ -54,7 +54,7 @@ public abstract class ServerChannelInitializer extends ChannelInitializer= YamlConfig.config.server.FAMILY_MAX_GENERATIONS) { - inviter.announce(PacketCreator.sendFamilyMessage(76, 0)); - chr.announce(PacketCreator.sendFamilyMessage(76, 0)); + inviter.sendPacket(PacketCreator.sendFamilyMessage(76, 0)); + chr.sendPacket(PacketCreator.sendFamilyMessage(76, 0)); return; } MapleFamily newFamily = new MapleFamily(-1, c.getWorld()); @@ -113,14 +113,14 @@ public final class AcceptFamilyHandler extends AbstractMaplePacketHandler { } } c.getPlayer().getFamily().broadcast(PacketCreator.sendFamilyJoinResponse(true, c.getPlayer().getName()), c.getPlayer().getId()); - c.announce(PacketCreator.getSeniorMessage(inviter.getName())); - c.announce(PacketCreator.getFamilyInfo(chr.getFamilyEntry())); + c.sendPacket(PacketCreator.getSeniorMessage(inviter.getName())); + c.sendPacket(PacketCreator.getFamilyInfo(chr.getFamilyEntry())); chr.getFamilyEntry().updateSeniorFamilyInfo(true); } else { - inviter.announce(PacketCreator.sendFamilyJoinResponse(false, c.getPlayer().getName())); + inviter.sendPacket(PacketCreator.sendFamilyJoinResponse(false, c.getPlayer().getName())); } } - c.announce(PacketCreator.sendFamilyMessage(0, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(0, 0)); } private static void insertNewFamilyRecord(int characterID, int familyID, int seniorID, boolean updateChar) { diff --git a/src/main/java/net/server/channel/handlers/AdminChatHandler.java b/src/main/java/net/server/channel/handlers/AdminChatHandler.java index 0ebfa825d6..16e4cd01a5 100644 --- a/src/main/java/net/server/channel/handlers/AdminChatHandler.java +++ b/src/main/java/net/server/channel/handlers/AdminChatHandler.java @@ -3,6 +3,7 @@ package net.server.channel.handlers; import client.MapleClient; import config.YamlConfig; import net.AbstractMaplePacketHandler; +import net.packet.Packet; import tools.LogHelper; import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; @@ -21,7 +22,7 @@ public class AdminChatHandler extends AbstractMaplePacketHandler { byte mode = slea.readByte(); //not saving slides... String message = slea.readMapleAsciiString(); - byte[] packet = PacketCreator.serverNotice(slea.readByte(), message);//maybe I should make a check for the slea.readByte()... but I just hope gm's don't fuck things up :) + Packet packet = PacketCreator.serverNotice(slea.readByte(), message);//maybe I should make a check for the slea.readByte()... but I just hope gm's don't fuck things up :) switch (mode) { case 0:// /alertall, /noticeall, /slideall c.getWorldServer().broadcastPacket(packet); diff --git a/src/main/java/net/server/channel/handlers/AdminCommandHandler.java b/src/main/java/net/server/channel/handlers/AdminCommandHandler.java index 625c2662b1..ef48f94718 100644 --- a/src/main/java/net/server/channel/handlers/AdminCommandHandler.java +++ b/src/main/java/net/server/channel/handlers/AdminCommandHandler.java @@ -58,7 +58,7 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler { c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(toSpawnChild[0]), c.getPlayer().getPosition()); } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); break; case 0x01: { // /d (inv) byte type = slea.readByte(); @@ -94,11 +94,11 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler { target.block(type, duration, description); target.sendPolice(duration, reason, 6000); } - c.announce(PacketCreator.getGMEffect(4, (byte) 0)); + c.sendPacket(PacketCreator.getGMEffect(4, (byte) 0)); } else if (MapleCharacter.ban(victim, reason, false)) { - c.announce(PacketCreator.getGMEffect(4, (byte) 0)); + c.sendPacket(PacketCreator.getGMEffect(4, (byte) 0)); } else { - c.announce(PacketCreator.getGMEffect(6, (byte) 1)); + c.sendPacket(PacketCreator.getGMEffect(6, (byte) 1)); } break; case 0x10: // /h, information added by vana -- ... hide ofcourse @@ -160,10 +160,10 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler { String message = slea.readMapleAsciiString(); target = c.getChannelServer().getPlayerStorage().getCharacterByName(victim); if (target != null) { - target.getClient().announce(PacketCreator.serverNotice(1, message)); - c.announce(PacketCreator.getGMEffect(0x1E, (byte) 1)); + target.getClient().sendPacket(PacketCreator.serverNotice(1, message)); + c.sendPacket(PacketCreator.getGMEffect(0x1E, (byte) 1)); } else { - c.announce(PacketCreator.getGMEffect(0x1E, (byte) 0)); + c.sendPacket(PacketCreator.getGMEffect(0x1E, (byte) 0)); } break; case 0x24:// /Artifact Ranking diff --git a/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java b/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java index 8bfac3ff80..01a491ae0d 100644 --- a/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java @@ -25,7 +25,10 @@ import client.MapleCharacter; import client.MapleClient; import net.AbstractMaplePacketHandler; import net.opcodes.SendOpcode; +import net.packet.OutPacket; +import net.packet.Packet; import net.server.Server; +import net.server.guild.GuildPackets; import net.server.guild.MapleAlliance; import net.server.guild.MapleGuild; import net.server.guild.MapleGuildCharacter; @@ -45,7 +48,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { MapleCharacter chr = c.getPlayer(); if (chr.getGuild() == null) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -56,18 +59,18 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { byte b = slea.readByte(); if (alliance == null) { if (b != 4) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } else { if (b == 4) { chr.dropMessage(5, "Your guild is already registered on a guild alliance."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (chr.getMGC().getAllianceRank() > 2 || !alliance.getGuilds().contains(chr.getGuildId())) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } @@ -131,9 +134,9 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { chr.saveGuildStatus(); - Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.addGuildToAlliance(alliance, guildid, c), -1, -1); - Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.updateAllianceInfo(alliance, c.getWorld()), -1, -1); - Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.addGuildToAlliance(alliance, guildid, c), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.updateAllianceInfo(alliance, c.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); guild.dropMessage("Your guild has joined the [" + alliance.getName() + "] union."); break; @@ -145,12 +148,12 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { return; } - Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.removeGuildFromAlliance(alliance, guildid, c.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.removeGuildFromAlliance(alliance, guildid, c.getWorld()), -1, -1); Server.getInstance().removeGuildFromAlliance(alliance.getId(), guildid); - Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.getGuildAlliances(alliance, c.getWorld()), -1, -1); - Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); - Server.getInstance().guildMessage(guildid, PacketCreator.disbandAlliance(allianceid)); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.getGuildAlliances(alliance, c.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); + Server.getInstance().guildMessage(guildid, GuildPackets.disbandAlliance(allianceid)); alliance.dropMessage("[" + Server.getInstance().getGuild(guildid).getName() + "] guild has been expelled from the union."); break; @@ -175,7 +178,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { ranks[i] = slea.readMapleAsciiString(); } Server.getInstance().setAllianceRanks(alliance.getId(), ranks); - Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.changeAllianceRankTitle(alliance.getId(), ranks), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.changeAllianceRankTitle(alliance.getId(), ranks), -1, -1); break; case 0x09: { int int1 = slea.readInt(); @@ -190,7 +193,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { case 0x0A: String notice = slea.readMapleAsciiString(); Server.getInstance().setAllianceNotice(alliance.getId(), notice); - Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.allianceNotice(alliance.getId(), notice), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.allianceNotice(alliance.getId(), notice), -1, -1); alliance.dropMessage(5, "* Alliance Notice : " + notice); break; @@ -210,7 +213,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { newLeader.getMGC().setAllianceRank(1); newLeader.saveGuildStatus(); - Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.getGuildAlliances(alliance, newLeader.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.getGuildAlliances(alliance, newLeader.getWorld()), -1, -1); alliance.dropMessage("'" + newLeader.getName() + "' has been appointed as the new head of this Alliance."); } @@ -221,17 +224,16 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { chr.getMGC().setAllianceRank(newRank); chr.saveGuildStatus(); - Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.getGuildAlliances(alliance, chr.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.getGuildAlliances(alliance, chr.getWorld()), -1, -1); alliance.dropMessage("'" + chr.getName() + "' has been reassigned to '" + alliance.getRankTitle(newRank) + "' in this Alliance."); } - private static byte[] sendShowInfo(int allianceid, int playerid) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x02); - mplew.writeInt(allianceid); - mplew.writeInt(playerid); - return mplew.getPacket(); + private static Packet sendShowInfo(int allianceid, int playerid) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x02); + p.writeInt(allianceid); + p.writeInt(playerid); + return p; } private static byte[] sendInvitation(int allianceid, int playerid, final String guildname) { diff --git a/src/main/java/net/server/channel/handlers/BBSOperationHandler.java b/src/main/java/net/server/channel/handlers/BBSOperationHandler.java index d6e857cd31..318ecc1ec1 100644 --- a/src/main/java/net/server/channel/handlers/BBSOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/BBSOperationHandler.java @@ -24,8 +24,8 @@ package net.server.channel.handlers; import client.MapleCharacter; import client.MapleClient; import net.AbstractMaplePacketHandler; +import net.server.guild.GuildPackets; import tools.DatabaseConnection; -import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; import java.sql.Connection; @@ -103,7 +103,7 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler { ps.setInt(1, c.getPlayer().getGuildId()); try (ResultSet rs = ps.executeQuery()) { - c.announce(PacketCreator.BBSThreadList(rs, start)); + c.sendPacket(GuildPackets.BBSThreadList(rs, start)); } } catch (SQLException se) { se.printStackTrace(); @@ -317,7 +317,7 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler { ps2.setInt(1, !bIsThreadIdLocal ? threadid : threadRS.getInt("threadid")); repliesRS = ps2.executeQuery(); } - client.announce(PacketCreator.showThread(bIsThreadIdLocal ? threadid : threadRS.getInt("localthreadid"), threadRS, repliesRS)); + client.sendPacket(GuildPackets.showThread(bIsThreadIdLocal ? threadid : threadRS.getInt("localthreadid"), threadRS, repliesRS)); repliesRS.close(); } if (ps2 != null) { diff --git a/src/main/java/net/server/channel/handlers/BuddylistModifyHandler.java b/src/main/java/net/server/channel/handlers/BuddylistModifyHandler.java index 37a1c5b33d..47b9c06389 100644 --- a/src/main/java/net/server/channel/handlers/BuddylistModifyHandler.java +++ b/src/main/java/net/server/channel/handlers/BuddylistModifyHandler.java @@ -54,7 +54,7 @@ public class BuddylistModifyHandler extends AbstractMaplePacketHandler { private void nextPendingRequest(MapleClient c) { CharacterNameAndId pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest(); if (pendingBuddyRequest != null) { - c.announce(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); + c.sendPacket(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); } } @@ -88,9 +88,9 @@ public class BuddylistModifyHandler extends AbstractMaplePacketHandler { } BuddylistEntry ble = buddylist.get(addName); if (ble != null && !ble.isVisible() && group.equals(ble.getGroup())) { - c.announce(PacketCreator.serverNotice(1, "You already have \"" + ble.getName() + "\" on your Buddylist")); + c.sendPacket(PacketCreator.serverNotice(1, "You already have \"" + ble.getName() + "\" on your Buddylist")); } else if (buddylist.isFull() && ble == null) { - c.announce(PacketCreator.serverNotice(1, "Your buddylist is already full")); + c.sendPacket(PacketCreator.serverNotice(1, "Your buddylist is already full")); } else if (ble == null) { try { World world = c.getWorldServer(); @@ -135,7 +135,7 @@ public class BuddylistModifyHandler extends AbstractMaplePacketHandler { } } if (buddyAddResult == BuddyAddResult.BUDDYLIST_FULL) { - c.announce(PacketCreator.serverNotice(1, "\"" + addName + "\"'s Buddylist is full")); + c.sendPacket(PacketCreator.serverNotice(1, "\"" + addName + "\"'s Buddylist is full")); } else { int displayChannel; displayChannel = -1; @@ -152,17 +152,17 @@ public class BuddylistModifyHandler extends AbstractMaplePacketHandler { } } buddylist.put(new BuddylistEntry(charWithId.getName(), group, otherCid, displayChannel, true)); - c.announce(PacketCreator.updateBuddylist(buddylist.getBuddies())); + c.sendPacket(PacketCreator.updateBuddylist(buddylist.getBuddies())); } } else { - c.announce(PacketCreator.serverNotice(1, "A character called \"" + addName + "\" does not exist")); + c.sendPacket(PacketCreator.serverNotice(1, "A character called \"" + addName + "\" does not exist")); } } catch (SQLException e) { e.printStackTrace(); } } else { ble.changeGroup(group); - c.announce(PacketCreator.updateBuddylist(buddylist.getBuddies())); + c.sendPacket(PacketCreator.updateBuddylist(buddylist.getBuddies())); } } else if (mode == 2) { // accept buddy int otherCid = slea.readInt(); @@ -187,7 +187,7 @@ public class BuddylistModifyHandler extends AbstractMaplePacketHandler { } if (otherName != null) { buddylist.put(new BuddylistEntry(otherName, "Default Group", otherCid, channel, true)); - c.announce(PacketCreator.updateBuddylist(buddylist.getBuddies())); + c.sendPacket(PacketCreator.updateBuddylist(buddylist.getBuddies())); notifyRemoteChannel(c, channel, otherCid, ADDED); } } catch (SQLException e) { diff --git a/src/main/java/net/server/channel/handlers/CancelDebuffHandler.java b/src/main/java/net/server/channel/handlers/CancelDebuffHandler.java index d7add270f3..1d3927645d 100644 --- a/src/main/java/net/server/channel/handlers/CancelDebuffHandler.java +++ b/src/main/java/net/server/channel/handlers/CancelDebuffHandler.java @@ -35,7 +35,7 @@ public final class CancelDebuffHandler extends AbstractMaplePacketHandler {//TIP List disease_ = new ArrayList(); disease_.add(disease); diseases_.add(disease); - c.announce(PacketCreator.cancelDebuff(disease_)); + c.sendPacket(PacketCreator.cancelDebuff(disease_)); c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.cancelForeignDebuff(c.getPlayer().getId(), disease_), false); } for (MapleDisease disease : diseases_) { diff --git a/src/main/java/net/server/channel/handlers/CashOperationHandler.java b/src/main/java/net/server/channel/handlers/CashOperationHandler.java index 50445dc656..727a20eaf7 100644 --- a/src/main/java/net/server/channel/handlers/CashOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/CashOperationHandler.java @@ -55,7 +55,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { CashShop cs = chr.getCashShop(); if (!cs.isOpened()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -89,7 +89,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { Item item = cItem.toItem(); cs.gainCash(useNX, cItem, chr.getWorld()); // thanks Rohenn for noticing cash operations after item acquisition cs.addToInventory(item); - c.announce(PacketCreator.showBoughtCashItem(item, c.getAccID())); + c.sendPacket(PacketCreator.showBoughtCashItem(item, c.getAccID())); } else { // Package cs.gainCash(useNX, cItem, chr.getWorld()); @@ -97,9 +97,9 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { for (Item item : cashPackage) { cs.addToInventory(item); } - c.announce(PacketCreator.showBoughtCashPackage(cashPackage, c.getAccID())); + c.sendPacket(PacketCreator.showBoughtCashPackage(cashPackage, c.getAccID())); } - c.announce(PacketCreator.showCash(chr)); + c.sendPacket(PacketCreator.showCash(chr)); } else if (action == 0x04) {//TODO check for gender int birthday = slea.readInt(); CashItem cItem = CashItemFactory.getItem(slea.readInt()); @@ -110,19 +110,19 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { return; } if (!checkBirthday(c, birthday)) { - c.announce(PacketCreator.showCashShopMessage((byte) 0xC4)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC4)); return; } else if (recipient == null) { - c.announce(PacketCreator.showCashShopMessage((byte) 0xA9)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xA9)); return; } else if (recipient.get("accountid").equals(String.valueOf(c.getAccID()))) { - c.announce(PacketCreator.showCashShopMessage((byte) 0xA8)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xA8)); return; } cs.gainCash(4, cItem, chr.getWorld()); cs.gift(Integer.parseInt(recipient.get("id")), chr.getName(), message, cItem.getSN()); - c.announce(PacketCreator.showGiftSucceed(recipient.get("name"), cItem)); - c.announce(PacketCreator.showCash(chr)); + c.sendPacket(PacketCreator.showGiftSucceed(recipient.get("name"), cItem)); + c.sendPacket(PacketCreator.showCash(chr)); try { chr.sendNote(recipient.get("name"), chr.getName() + " has sent you a gift! Go check out the Cash Shop.", (byte) 0); //fame or not } catch (SQLException ex) { @@ -139,7 +139,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { cs.addToWishList(sn); } } - c.announce(PacketCreator.showWishList(chr, true)); + c.sendPacket(PacketCreator.showWishList(chr, true)); } else if (action == 0x06) { // Increase Inventory Slots slea.skip(1); int cash = slea.readInt(); @@ -157,8 +157,8 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } cs.gainCash(cash, -4000); if (chr.gainSlots(type, qty, false)) { - c.announce(PacketCreator.showBoughtInventorySlots(type, chr.getSlots(type))); - c.announce(PacketCreator.showCash(chr)); + c.sendPacket(PacketCreator.showBoughtInventorySlots(type, chr.getSlots(type))); + c.sendPacket(PacketCreator.showCash(chr)); } else { FilePrinter.printError(FilePrinter.CASHITEM_BOUGHT, "Could not add " + qty + " slots of type " + type + " for player " + MapleCharacter.makeMapleReadable(chr.getName())); } @@ -176,8 +176,8 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } cs.gainCash(cash, cItem, chr.getWorld()); if (chr.gainSlots(type, qty, false)) { - c.announce(PacketCreator.showBoughtInventorySlots(type, chr.getSlots(type))); - c.announce(PacketCreator.showCash(chr)); + c.sendPacket(PacketCreator.showBoughtInventorySlots(type, chr.getSlots(type))); + c.sendPacket(PacketCreator.showCash(chr)); } else { FilePrinter.printError(FilePrinter.CASHITEM_BOUGHT, "Could not add " + qty + " slots of type " + type + " for player " + MapleCharacter.makeMapleReadable(chr.getName())); } @@ -201,8 +201,8 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { FilePrinter.print(FilePrinter.STORAGE + c.getAccountName() + ".txt", c.getPlayer().getName() + " bought " + qty + " slots to their account storage."); chr.setUsedStorage(); - c.announce(PacketCreator.showBoughtStorageSlots(chr.getStorage().getSlots())); - c.announce(PacketCreator.showCash(chr)); + c.sendPacket(PacketCreator.showBoughtStorageSlots(chr.getStorage().getSlots())); + c.sendPacket(PacketCreator.showCash(chr)); } else { FilePrinter.printError(FilePrinter.CASHITEM_BOUGHT, "Could not add " + qty + " slots to " + MapleCharacter.makeMapleReadable(chr.getName()) + "'s account."); } @@ -223,8 +223,8 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { FilePrinter.print(FilePrinter.STORAGE + c.getAccountName() + ".txt", c.getPlayer().getName() + " bought " + qty + " slots to their account storage."); chr.setUsedStorage(); - c.announce(PacketCreator.showBoughtStorageSlots(chr.getStorage().getSlots())); - c.announce(PacketCreator.showCash(chr)); + c.sendPacket(PacketCreator.showBoughtStorageSlots(chr.getStorage().getSlots())); + c.sendPacket(PacketCreator.showCash(chr)); } else { FilePrinter.printError(FilePrinter.CASHITEM_BOUGHT, "Could not add " + qty + " slots to " + MapleCharacter.makeMapleReadable(chr.getName()) + "'s account."); } @@ -245,8 +245,8 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } cs.gainCash(cash, cItem, chr.getWorld()); if (c.gainCharacterSlot()) { - c.announce(PacketCreator.showBoughtCharacterSlot(c.getCharacterSlots())); - c.announce(PacketCreator.showCash(chr)); + c.sendPacket(PacketCreator.showBoughtCharacterSlot(c.getCharacterSlots())); + c.sendPacket(PacketCreator.showCash(chr)); } else { FilePrinter.printError(FilePrinter.CASHITEM_BOUGHT, "Could not add a character slot to " + MapleCharacter.makeMapleReadable(chr.getName()) + "'s account."); c.enableCSActions(); @@ -260,7 +260,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } if (chr.getInventory(item.getInventoryType()).addItem(item) != -1) { cs.removeFromInventory(item); - c.announce(PacketCreator.takeFromCashInventory(item)); + c.sendPacket(PacketCreator.takeFromCashInventory(item)); if(item instanceof Equip) { Equip equip = (Equip) item; @@ -286,17 +286,17 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { c.enableCSActions(); return; } else if (c.getPlayer().getPetIndex(item.getPetId()) > -1) { - chr.getClient().announce(PacketCreator.serverNotice(1, "You cannot put the pet you currently equip into the Cash Shop inventory.")); + chr.getClient().sendPacket(PacketCreator.serverNotice(1, "You cannot put the pet you currently equip into the Cash Shop inventory.")); c.enableCSActions(); return; } else if (ItemConstants.isWeddingRing(item.getItemId()) || ItemConstants.isWeddingToken(item.getItemId())) { - chr.getClient().announce(PacketCreator.serverNotice(1, "You cannot put relationship items into the Cash Shop inventory.")); + chr.getClient().sendPacket(PacketCreator.serverNotice(1, "You cannot put relationship items into the Cash Shop inventory.")); c.enableCSActions(); return; } cs.addToInventory(item); mi.removeSlot(item.getPosition()); - c.announce(PacketCreator.putIntoCashInventory(item, c.getAccID())); + c.sendPacket(PacketCreator.putIntoCashInventory(item, c.getAccID())); } else if (action == 0x1D) { //crush ring (action 28) int birthday = slea.readInt(); if (checkBirthday(c, birthday)) { @@ -307,7 +307,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { CashItem itemRing = CashItemFactory.getItem(SN); MapleCharacter partner = c.getChannelServer().getPlayerStorage().getCharacterByName(recipientName); if (partner == null) { - chr.getClient().announce(PacketCreator.serverNotice(1, "The partner you specified cannot be found.\r\nPlease make sure your partner is online and in the same channel.")); + chr.sendPacket(PacketCreator.serverNotice(1, "The partner you specified cannot be found.\r\nPlease make sure your partner is online and in the same channel.")); } else { /* if (partner.getGender() == chr.getGender()) { @@ -321,7 +321,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { Pair rings = MapleRing.createRing(itemRing.getItemId(), chr, partner); eqp.setRingId(rings.getLeft()); cs.addToInventory(eqp); - c.announce(PacketCreator.showBoughtCashItem(eqp, c.getAccID())); + c.sendPacket(PacketCreator.showBoughtCashItem(eqp, c.getAccID())); cs.gainCash(toCharge, itemRing, chr.getWorld()); cs.gift(partner.getId(), chr.getName(), text, eqp.getSN(), rings.getRight()); chr.addCrushRing(MapleRing.loadFromDb(rings.getLeft())); @@ -334,27 +334,27 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } } } else { - c.announce(PacketCreator.showCashShopMessage((byte) 0xC4)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC4)); } - c.announce(PacketCreator.showCash(c.getPlayer())); + c.sendPacket(PacketCreator.showCash(c.getPlayer())); } else if (action == 0x20) { int serialNumber = slea.readInt(); // thanks GabrielSin for detecting a potential exploit with 1 meso cash items. if (serialNumber / 10000000 != 8) { - c.announce(PacketCreator.showCashShopMessage((byte) 0xC0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC0)); return; } CashItem item = CashItemFactory.getItem(serialNumber); if (item == null || !item.isOnSale()) { - c.announce(PacketCreator.showCashShopMessage((byte) 0xC0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC0)); return; } int itemId = item.getItemId(); int itemPrice = item.getPrice(); if (itemPrice <= 0) { - c.announce(PacketCreator.showCashShopMessage((byte) 0xC0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC0)); return; } @@ -362,10 +362,10 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { if (chr.canHold(itemId)) { chr.gainMeso(-itemPrice, false); MapleInventoryManipulator.addById(c, itemId, (short) 1, "", -1); - c.announce(PacketCreator.showBoughtQuestItem(itemId)); + c.sendPacket(PacketCreator.showBoughtQuestItem(itemId)); } } - c.announce(PacketCreator.showCash(c.getPlayer())); + c.sendPacket(PacketCreator.showCash(c.getPlayer())); } else if (action == 0x23) { //Friendship :3 int birthday = slea.readInt(); if (checkBirthday(c, birthday)) { @@ -379,7 +379,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { slea.readByte(); MapleCharacter partner = c.getChannelServer().getPlayerStorage().getCharacterByName(sentTo); if (partner == null) { - c.announce(PacketCreator.showCashShopMessage((byte)0xBE)); + c.sendPacket(PacketCreator.showCashShopMessage((byte)0xBE)); } else { // Need to check to make sure its actually an equip and the right SN... if(itemRing.toItem() instanceof Equip) { @@ -387,7 +387,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { Pair rings = MapleRing.createRing(itemRing.getItemId(), chr, partner); eqp.setRingId(rings.getLeft()); cs.addToInventory(eqp); - c.announce(PacketCreator.showBoughtCashRing(eqp, partner.getName(), c.getAccID())); + c.sendPacket(PacketCreator.showBoughtCashRing(eqp, partner.getName(), c.getAccID())); cs.gainCash(payment, -itemRing.getPrice()); cs.gift(partner.getId(), chr.getName(), text, eqp.getSN(), rings.getRight()); chr.addFriendshipRing(MapleRing.loadFromDb(rings.getLeft())); @@ -400,14 +400,14 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } } } else { - c.announce(PacketCreator.showCashShopMessage((byte) 0xC4)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC4)); } - c.announce(PacketCreator.showCash(c.getPlayer())); + c.sendPacket(PacketCreator.showCash(c.getPlayer())); } else if (action == 0x2E) { //name change CashItem cItem = CashItemFactory.getItem(slea.readInt()); if (cItem == null || !canBuy(chr, cItem, cs.getCash(4))) { - c.announce(PacketCreator.showCashShopMessage((byte)0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte)0)); c.enableCSActions(); return; } @@ -415,28 +415,28 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { slea.readMapleAsciiString(); //old name String newName = slea.readMapleAsciiString(); if(!MapleCharacter.canCreateChar(newName) || chr.getLevel() < 10) { //(longest ban duration isn't tracked currently) - c.announce(PacketCreator.showCashShopMessage((byte)0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte)0)); c.enableCSActions(); return; } else if(c.getTempBanCalendar() != null && c.getTempBanCalendar().getTimeInMillis() + (30*24*60*60*1000) > Calendar.getInstance().getTimeInMillis()) { - c.announce(PacketCreator.showCashShopMessage((byte)0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte)0)); c.enableCSActions(); return; } if(chr.registerNameChange(newName)) { //success Item item = cItem.toItem(); - c.announce(PacketCreator.showNameChangeSuccess(item, c.getAccID())); + c.sendPacket(PacketCreator.showNameChangeSuccess(item, c.getAccID())); cs.gainCash(4, cItem, chr.getWorld()); cs.addToInventory(item); } else { - c.announce(PacketCreator.showCashShopMessage((byte)0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte)0)); } } c.enableCSActions(); } else if(action == 0x31) { //world transfer CashItem cItem = CashItemFactory.getItem(slea.readInt()); if (cItem == null || !canBuy(chr, cItem, cs.getCash(4))) { - c.announce(PacketCreator.showCashShopMessage((byte)0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte)0)); c.enableCSActions(); return; } @@ -445,21 +445,21 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { int worldTransferError = chr.checkWorldTransferEligibility(); if(worldTransferError != 0 || newWorldSelection >= Server.getInstance().getWorldsSize() || Server.getInstance().getWorldsSize() <= 1) { - c.announce(PacketCreator.showCashShopMessage((byte)0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte)0)); return; } else if(newWorldSelection == c.getWorld()) { - c.announce(PacketCreator.showCashShopMessage((byte)0xDC)); + c.sendPacket(PacketCreator.showCashShopMessage((byte)0xDC)); return; } else if(c.getAvailableCharacterWorldSlots(newWorldSelection) < 1 || Server.getInstance().getAccountWorldCharacterCount(c.getAccID(), newWorldSelection) >= 3) { - c.announce(PacketCreator.showCashShopMessage((byte)0xDF)); + c.sendPacket(PacketCreator.showCashShopMessage((byte)0xDF)); return; } else if(chr.registerWorldTransfer(newWorldSelection)) { Item item = cItem.toItem(); - c.announce(PacketCreator.showWorldTransferSuccess(item, c.getAccID())); + c.sendPacket(PacketCreator.showWorldTransferSuccess(item, c.getAccID())); cs.gainCash(4, cItem, chr.getWorld()); cs.addToInventory(item); } else { - c.announce(PacketCreator.showCashShopMessage((byte)0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte)0)); } } c.enableCSActions(); @@ -470,7 +470,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { c.releaseClient(); } } else { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/CashShopSurpriseHandler.java b/src/main/java/net/server/channel/handlers/CashShopSurpriseHandler.java index f7374def7f..b8b87625e6 100644 --- a/src/main/java/net/server/channel/handlers/CashShopSurpriseHandler.java +++ b/src/main/java/net/server/channel/handlers/CashShopSurpriseHandler.java @@ -41,9 +41,9 @@ public class CashShopSurpriseHandler extends AbstractMaplePacketHandler { if(cssResult != null) { Item cssItem = cssResult.getLeft(), cssBox = cssResult.getRight(); - c.announce(PacketCreator.onCashGachaponOpenSuccess(c.getAccID(), cssBox.getSN(), cssBox.getQuantity(), cssItem, cssItem.getItemId(), cssItem.getQuantity(), true)); + c.sendPacket(PacketCreator.onCashGachaponOpenSuccess(c.getAccID(), cssBox.getSN(), cssBox.getQuantity(), cssItem, cssItem.getItemId(), cssItem.getQuantity(), true)); } else { - c.announce(PacketCreator.onCashItemGachaponOpenFailed()); + c.sendPacket(PacketCreator.onCashItemGachaponOpenFailed()); } } } diff --git a/src/main/java/net/server/channel/handlers/ChangeMapHandler.java b/src/main/java/net/server/channel/handlers/ChangeMapHandler.java index b10bd7b371..071b568090 100644 --- a/src/main/java/net/server/channel/handlers/ChangeMapHandler.java +++ b/src/main/java/net/server/channel/handlers/ChangeMapHandler.java @@ -49,7 +49,7 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler { FilePrinter.printError(FilePrinter.PORTAL_STUCK + chr.getName() + ".txt", "Player " + chr.getName() + " got stuck when changing maps. Timestamp: " + Calendar.getInstance().getTime().toString() + " Last visited mapids: " + chr.getLastVisitedMapids()); } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (chr.getTrade() != null) { @@ -65,7 +65,7 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler { chr.setSessionTransitionState(); try { - c.announce(PacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]))); + c.sendPacket(PacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]))); } catch (UnknownHostException ex) { ex.printStackTrace(); } @@ -95,7 +95,7 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler { // thanks lucasziron (lziron) for showing revivePlayer() triggering by Wheel MapleInventoryManipulator.removeById(c, MapleInventoryType.CASH, 5510000, 1, true, false); - chr.announce(PacketCreator.showWheelsLeft(chr.getItemQuantity(5510000, false))); + chr.sendPacket(PacketCreator.showWheelsLeft(chr.getItemQuantity(5510000, false))); chr.updateHp(50); chr.changeMap(map, map.findClosestPlayerSpawnpoint(chr.getPosition())); @@ -121,8 +121,8 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler { } } else if (divi == 20100) { if (targetid == 104000000) { - c.announce(PacketCreator.lockUI(false)); - c.announce(PacketCreator.disableUI(false)); + c.sendPacket(PacketCreator.lockUI(false)); + c.sendPacket(PacketCreator.disableUI(false)); warp = true; } } else if (divi == 9130401) { // Only allow warp if player is already in Intro map, or else = hack @@ -151,8 +151,8 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler { } if (portal != null && !portal.getPortalStatus()) { - c.announce(PacketCreator.blockedMessage(1)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.blockedMessage(1)); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -164,13 +164,13 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler { if (portal != null) { if (portal.getPosition().distanceSq(chr.getPosition()) > 400000) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } portal.enterPortal(c); } else { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/net/server/channel/handlers/ChangeMapSpecialHandler.java b/src/main/java/net/server/channel/handlers/ChangeMapSpecialHandler.java index 796609abb9..0709f6170b 100644 --- a/src/main/java/net/server/channel/handlers/ChangeMapSpecialHandler.java +++ b/src/main/java/net/server/channel/handlers/ChangeMapSpecialHandler.java @@ -37,11 +37,11 @@ public final class ChangeMapSpecialHandler extends AbstractMaplePacketHandler { slea.readShort(); MaplePortal portal = c.getPlayer().getMap().getPortal(startwp); if (portal == null || c.getPlayer().portalDelay() > currentServerTime() || c.getPlayer().getBlockedPortals().contains(portal.getScriptName())) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (c.getPlayer().isChangingMaps() || c.getPlayer().isBanned()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (c.getPlayer().getTrade() != null) { diff --git a/src/main/java/net/server/channel/handlers/CharInfoRequestHandler.java b/src/main/java/net/server/channel/handlers/CharInfoRequestHandler.java index ad1bc1ad8a..822dd221b6 100644 --- a/src/main/java/net/server/channel/handlers/CharInfoRequestHandler.java +++ b/src/main/java/net/server/channel/handlers/CharInfoRequestHandler.java @@ -42,7 +42,7 @@ public final class CharInfoRequestHandler extends AbstractMaplePacketHandler { if(c.getPlayer().getId() != player.getId()) { player.exportExcludedItems(c); } - c.announce(PacketCreator.charInfo(player)); + c.sendPacket(PacketCreator.charInfo(player)); } } } diff --git a/src/main/java/net/server/channel/handlers/CloseRangeDamageHandler.java b/src/main/java/net/server/channel/handlers/CloseRangeDamageHandler.java index da71d9b818..10e8da6a68 100644 --- a/src/main/java/net/server/channel/handlers/CloseRangeDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/CloseRangeDamageHandler.java @@ -59,7 +59,7 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler { return; if (GameConstants.isDojo(chr.getMap().getId()) && attack.numAttacked > 0) { chr.setDojoEnergy(chr.getDojoEnergy() + YamlConfig.config.server.DOJO_ENERGY_ATK); - c.announce(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); + c.sendPacket(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); } chr.getMap().broadcastMessage(chr, PacketCreator.closeRangeAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, attack.allDamage, attack.speed, attack.direction, attack.display), false, true); @@ -104,7 +104,7 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler { List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.COMBO, neworbcount)); chr.setBuffedValue(MapleBuffStat.COMBO, neworbcount); duration -= (int) (currentServerTime() - chr.getBuffedStarttime(MapleBuffStat.COMBO)); - c.announce(PacketCreator.giveBuff(oid, duration, stat)); + c.sendPacket(PacketCreator.giveBuff(oid, duration, stat)); chr.getMap().broadcastMessage(chr, PacketCreator.giveForeignBuff(chr.getId(), stat), false); } } @@ -146,8 +146,8 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler { } chr.setDojoEnergy(0); - c.announce(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); - c.announce(PacketCreator.serverNotice(5, "As you used the secret skill, your energy bar has been reset.")); + c.sendPacket(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); + c.sendPacket(PacketCreator.serverNotice(5, "As you used the secret skill, your energy bar has been reset.")); } else if (attack.skill > 0) { Skill skill = SkillFactory.getSkill(attack.skill); MapleStatEffect effect_ = skill.getEffect(chr.getSkillLevel(skill)); @@ -155,7 +155,7 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler { if (chr.skillIsCooling(attack.skill)) { return; } else { - c.announce(PacketCreator.skillCooldown(attack.skill, effect_.getCooldown())); + c.sendPacket(PacketCreator.skillCooldown(attack.skill, effect_.getCooldown())); chr.addCooldown(attack.skill, currentServerTime(), effect_.getCooldown() * 1000); } } diff --git a/src/main/java/net/server/channel/handlers/CouponCodeHandler.java b/src/main/java/net/server/channel/handlers/CouponCodeHandler.java index 7fcae0f642..6920594961 100644 --- a/src/main/java/net/server/channel/handlers/CouponCodeHandler.java +++ b/src/main/java/net/server/channel/handlers/CouponCodeHandler.java @@ -188,7 +188,7 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler { Pair>>> codeRes = getNXCodeResult(c.getPlayer(), code.toUpperCase()); int type = codeRes.getLeft(); if (type < 0) { - c.announce(PacketCreator.showCashShopMessage((byte) parseCouponResult(type))); + c.sendPacket(PacketCreator.showCashShopMessage((byte) parseCouponResult(type))); } else { List cashItems = new LinkedList<>(); List> items = new LinkedList<>(); @@ -260,9 +260,9 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler { } } if (nxCredit != 0 || nxPrepaid != 0) { //coupon packet can only show maple points (afaik) - c.announce(PacketCreator.showBoughtQuestItem(0)); + c.sendPacket(PacketCreator.showBoughtQuestItem(0)); } else { - c.announce(PacketCreator.showCouponRedeemedItems(c.getAccID(), maplePoints, mesos, cashItems, items)); + c.sendPacket(PacketCreator.showCouponRedeemedItems(c.getAccID(), maplePoints, mesos, cashItems, items)); } c.enableCSActions(); } diff --git a/src/main/java/net/server/channel/handlers/DenyPartyRequestHandler.java b/src/main/java/net/server/channel/handlers/DenyPartyRequestHandler.java index 6648c0e5a7..d873996092 100644 --- a/src/main/java/net/server/channel/handlers/DenyPartyRequestHandler.java +++ b/src/main/java/net/server/channel/handlers/DenyPartyRequestHandler.java @@ -43,7 +43,7 @@ public final class DenyPartyRequestHandler extends AbstractMaplePacketHandler { if (MapleInviteCoordinator.answerInvite(InviteType.PARTY, chr.getId(), cfrom.getPartyId(), false).result == InviteResult.DENIED) { chr.updatePartySearchAvailability(chr.getParty() == null); - cfrom.getClient().announce(PacketCreator.partyStatusMessage(23, chr.getName())); + cfrom.sendPacket(PacketCreator.partyStatusMessage(23, chr.getName())); } } } diff --git a/src/main/java/net/server/channel/handlers/DoorHandler.java b/src/main/java/net/server/channel/handlers/DoorHandler.java index 497629861c..72b7139f31 100644 --- a/src/main/java/net/server/channel/handlers/DoorHandler.java +++ b/src/main/java/net/server/channel/handlers/DoorHandler.java @@ -41,7 +41,7 @@ public final class DoorHandler extends AbstractMaplePacketHandler { MapleCharacter chr = c.getPlayer(); if (chr.isChangingMaps() || chr.isBanned()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -55,7 +55,7 @@ public final class DoorHandler extends AbstractMaplePacketHandler { } } - c.announce(PacketCreator.blockedMessage(6)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.blockedMessage(6)); + c.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/DueyHandler.java b/src/main/java/net/server/channel/handlers/DueyHandler.java index c6956c00c1..3b28f14b62 100644 --- a/src/main/java/net/server/channel/handlers/DueyHandler.java +++ b/src/main/java/net/server/channel/handlers/DueyHandler.java @@ -33,7 +33,7 @@ public final class DueyHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { if (!YamlConfig.config.server.USE_DUEY){ - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } diff --git a/src/main/java/net/server/channel/handlers/EnterCashShopHandler.java b/src/main/java/net/server/channel/handlers/EnterCashShopHandler.java index b9b61f8b50..d66e2d3b8c 100644 --- a/src/main/java/net/server/channel/handlers/EnterCashShopHandler.java +++ b/src/main/java/net/server/channel/handlers/EnterCashShopHandler.java @@ -40,19 +40,19 @@ public class EnterCashShopHandler extends AbstractMaplePacketHandler { MapleCharacter mc = c.getPlayer(); if (mc.cannotEnterCashShop()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if(mc.getEventInstance() != null) { - c.announce(PacketCreator.serverNotice(5, "Entering Cash Shop or MTS are disabled when registered on an event.")); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.serverNotice(5, "Entering Cash Shop or MTS are disabled when registered on an event.")); + c.sendPacket(PacketCreator.enableActions()); return; } if(MapleMiniDungeonInfo.isDungeonMap(mc.getMapId())) { - c.announce(PacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -79,11 +79,11 @@ public class EnterCashShopHandler extends AbstractMaplePacketHandler { mc.forfeitExpirableQuests(); mc.cancelQuestExpirationTask(); - c.announce(PacketCreator.openCashShop(c, false)); - c.announce(PacketCreator.showCashInventory(c)); - c.announce(PacketCreator.showGifts(mc.getCashShop().loadGifts())); - c.announce(PacketCreator.showWishList(mc, false)); - c.announce(PacketCreator.showCash(mc)); + c.sendPacket(PacketCreator.openCashShop(c, false)); + c.sendPacket(PacketCreator.showCashInventory(c)); + c.sendPacket(PacketCreator.showGifts(mc.getCashShop().loadGifts())); + c.sendPacket(PacketCreator.showWishList(mc, false)); + c.sendPacket(PacketCreator.showCash(mc)); c.getChannelServer().removePlayer(mc); mc.getMap().removePlayer(mc); diff --git a/src/main/java/net/server/channel/handlers/EnterMTSHandler.java b/src/main/java/net/server/channel/handlers/EnterMTSHandler.java index 2d5919fc70..e766473a5d 100644 --- a/src/main/java/net/server/channel/handlers/EnterMTSHandler.java +++ b/src/main/java/net/server/channel/handlers/EnterMTSHandler.java @@ -51,38 +51,38 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler { if(!chr.isAlive() && YamlConfig.config.server.USE_BUYBACK_SYSTEM) { BuybackProcessor.processBuyback(c); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else { if (!YamlConfig.config.server.USE_MTS) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if(chr.getEventInstance() != null) { - c.announce(PacketCreator.serverNotice(5, "Entering Cash Shop or MTS are disabled when registered on an event.")); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.serverNotice(5, "Entering Cash Shop or MTS are disabled when registered on an event.")); + c.sendPacket(PacketCreator.enableActions()); return; } if(MapleMiniDungeonInfo.isDungeonMap(chr.getMapId())) { - c.announce(PacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); + c.sendPacket(PacketCreator.enableActions()); return; } if (FieldLimit.CANNOTMIGRATE.check(chr.getMap().getFieldLimit())) { chr.dropMessage(1, "You can't do it here in this map."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (!chr.isAlive()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (chr.getLevel() < 10) { - c.announce(PacketCreator.blockedMessage2(5)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.blockedMessage2(5)); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -110,14 +110,14 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler { c.getChannelServer().removePlayer(chr); chr.getMap().removePlayer(c.getPlayer()); try { - c.announce(PacketCreator.openCashShop(c, true)); + c.sendPacket(PacketCreator.openCashShop(c, true)); } catch (Exception ex) { ex.printStackTrace(); } chr.getCashShop().open(true);// xD c.enableCSActions(); - c.announce(PacketCreator.MTSWantedListingOver(0, 0)); - c.announce(PacketCreator.showMTSCash(c.getPlayer())); + c.sendPacket(PacketCreator.MTSWantedListingOver(0, 0)); + c.sendPacket(PacketCreator.showMTSCash(c.getPlayer())); List items = new ArrayList<>(); int pages = 0; try (Connection con = DatabaseConnection.getConnection()) { @@ -171,9 +171,9 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler { } catch (SQLException e) { e.printStackTrace(); } - c.announce(PacketCreator.sendMTS(items, 1, 0, 0, pages)); - c.announce(PacketCreator.transferInventory(getTransfer(chr.getId()))); - c.announce(PacketCreator.notYetSoldInv(getNotYetSold(chr.getId()))); + c.sendPacket(PacketCreator.sendMTS(items, 1, 0, 0, pages)); + c.sendPacket(PacketCreator.transferInventory(getTransfer(chr.getId()))); + c.sendPacket(PacketCreator.notYetSoldInv(getNotYetSold(chr.getId()))); } } diff --git a/src/main/java/net/server/channel/handlers/FamilyAddHandler.java b/src/main/java/net/server/channel/handlers/FamilyAddHandler.java index 1d9bd53fea..ffc8115d25 100644 --- a/src/main/java/net/server/channel/handlers/FamilyAddHandler.java +++ b/src/main/java/net/server/channel/handlers/FamilyAddHandler.java @@ -45,26 +45,26 @@ public final class FamilyAddHandler extends AbstractMaplePacketHandler { MapleCharacter addChr = c.getChannelServer().getPlayerStorage().getCharacterByName(toAdd); MapleCharacter chr = c.getPlayer(); if(addChr == null) { - c.announce(PacketCreator.sendFamilyMessage(65, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(65, 0)); } else if(addChr == chr) { //only possible through packet editing/client editing i think? - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if(addChr.getMap() != chr.getMap() || (addChr.isHidden()) && chr.gmLevel() < addChr.gmLevel()) { - c.announce(PacketCreator.sendFamilyMessage(69, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(69, 0)); } else if(addChr.getLevel() <= 10) { - c.announce(PacketCreator.sendFamilyMessage(77, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(77, 0)); } else if(Math.abs(addChr.getLevel() - chr.getLevel()) > 20) { - c.announce(PacketCreator.sendFamilyMessage(72, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(72, 0)); } else if(addChr.getFamily() != null && addChr.getFamily() == chr.getFamily()) { //same family - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if(MapleInviteCoordinator.hasInvite(InviteType.FAMILY, addChr.getId())) { - c.announce(PacketCreator.sendFamilyMessage(73, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(73, 0)); } else if(chr.getFamily() != null && addChr.getFamily() != null && addChr.getFamily().getTotalGenerations() + chr.getFamily().getTotalGenerations() > YamlConfig.config.server.FAMILY_MAX_GENERATIONS) { - c.announce(PacketCreator.sendFamilyMessage(76, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(76, 0)); } else { MapleInviteCoordinator.createInvite(InviteType.FAMILY, chr, addChr, addChr.getId()); - addChr.getClient().announce(PacketCreator.sendFamilyInvite(chr.getId(), chr.getName())); + addChr.getClient().sendPacket(PacketCreator.sendFamilyInvite(chr.getId(), chr.getName())); chr.dropMessage("The invite has been sent."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } } diff --git a/src/main/java/net/server/channel/handlers/FamilyPreceptsHandler.java b/src/main/java/net/server/channel/handlers/FamilyPreceptsHandler.java index 68f79b3af3..1ea23d9f5b 100644 --- a/src/main/java/net/server/channel/handlers/FamilyPreceptsHandler.java +++ b/src/main/java/net/server/channel/handlers/FamilyPreceptsHandler.java @@ -17,7 +17,7 @@ public class FamilyPreceptsHandler extends AbstractMaplePacketHandler { if(newPrecepts.length() > 200) return; family.setMessage(newPrecepts, true); //family.broadcastFamilyInfoUpdate(); //probably don't need to broadcast for this? - c.announce(PacketCreator.getFamilyInfo(c.getPlayer().getFamilyEntry())); + c.sendPacket(PacketCreator.getFamilyInfo(c.getPlayer().getFamilyEntry())); } } diff --git a/src/main/java/net/server/channel/handlers/FamilySeparateHandler.java b/src/main/java/net/server/channel/handlers/FamilySeparateHandler.java index bfb72af671..02293785ac 100644 --- a/src/main/java/net/server/channel/handlers/FamilySeparateHandler.java +++ b/src/main/java/net/server/channel/handlers/FamilySeparateHandler.java @@ -52,7 +52,7 @@ public class FamilySeparateHandler extends AbstractMaplePacketHandler { int cost = 2500 * levelDiff; cost += levelDiff * levelDiff; if(c.getPlayer().getMeso() < cost) { - c.announce(PacketCreator.sendFamilyMessage(isSenior ? 81 : 80, cost)); + c.sendPacket(PacketCreator.sendFamilyMessage(isSenior ? 81 : 80, cost)); return; } c.getPlayer().gainMeso(-cost); @@ -61,9 +61,9 @@ public class FamilySeparateHandler extends AbstractMaplePacketHandler { if(senior.getSenior() != null) senior.getSenior().gainReputation(-(repCost/2), false); forkOn.announceToSenior(PacketCreator.serverNotice(5, forkOn.getName() + " has left the family."), true); forkOn.fork(); - c.announce(PacketCreator.getFamilyInfo(forkOn)); //pedigree info will be requested from the client if the window is open + c.sendPacket(PacketCreator.getFamilyInfo(forkOn)); //pedigree info will be requested from the client if the window is open forkOn.updateSeniorFamilyInfo(true); - c.announce(PacketCreator.sendFamilyMessage(1, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(1, 0)); } diff --git a/src/main/java/net/server/channel/handlers/FamilySummonResponseHandler.java b/src/main/java/net/server/channel/handlers/FamilySummonResponseHandler.java index e01f38a2b0..dcbd6b22d9 100644 --- a/src/main/java/net/server/channel/handlers/FamilySummonResponseHandler.java +++ b/src/main/java/net/server/channel/handlers/FamilySummonResponseHandler.java @@ -32,7 +32,7 @@ public class FamilySummonResponseHandler extends AbstractMaplePacketHandler { } else { inviterEntry.refundEntitlement(MapleFamilyEntitlement.SUMMON_FAMILY); inviterEntry.gainReputation(MapleFamilyEntitlement.SUMMON_FAMILY.getRepCost(), false); //refund rep cost if declined - inviter.announce(PacketCreator.getFamilyInfo(inviterEntry)); + inviter.sendPacket(PacketCreator.getFamilyInfo(inviterEntry)); inviter.dropMessage(5, c.getPlayer().getName() + " has denied the summon request."); } } diff --git a/src/main/java/net/server/channel/handlers/FamilyUseHandler.java b/src/main/java/net/server/channel/handlers/FamilyUseHandler.java index 52a343cb03..97f1e2abbf 100644 --- a/src/main/java/net/server/channel/handlers/FamilyUseHandler.java +++ b/src/main/java/net/server/channel/handlers/FamilyUseHandler.java @@ -51,7 +51,7 @@ public final class FamilyUseHandler extends AbstractMaplePacketHandler { if(entry.getReputation() < cost || entry.isEntitlementUsed(type)) { return; // shouldn't even be able to request it } - c.announce(PacketCreator.getFamilyInfo(entry)); + c.sendPacket(PacketCreator.getFamilyInfo(entry)); MapleCharacter victim; if(type == MapleFamilyEntitlement.FAMILY_REUINION || type == MapleFamilyEntitlement.SUMMON_FAMILY) { victim = c.getChannelServer().getPlayerStorage().getCharacterByName(slea.readMapleAsciiString()); @@ -67,7 +67,7 @@ public final class FamilyUseHandler extends AbstractMaplePacketHandler { c.getPlayer().changeMap(victim.getMap(), victim.getMap().getPortal(0)); useEntitlement(entry, type); } else { - c.announce(PacketCreator.sendFamilyMessage(75, 0)); // wrong message, but close enough. (client should check this first anyway) + c.sendPacket(PacketCreator.sendFamilyMessage(75, 0)); // wrong message, but close enough. (client should check this first anyway) return; } } else { @@ -75,20 +75,20 @@ public final class FamilyUseHandler extends AbstractMaplePacketHandler { && (ownMap.getForcedReturnId() == 999999999 || ownMap.getId() < 100000000) && ownMap.getEventInstance() == null) { if(MapleInviteCoordinator.hasInvite(InviteType.FAMILY_SUMMON, victim.getId())) { - c.announce(PacketCreator.sendFamilyMessage(74, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(74, 0)); return; } MapleInviteCoordinator.createInvite(InviteType.FAMILY_SUMMON, c.getPlayer(), victim, victim.getId(), c.getPlayer().getMap()); - victim.announce(PacketCreator.sendFamilySummonRequest(c.getPlayer().getFamily().getName(), c.getPlayer().getName())); + victim.sendPacket(PacketCreator.sendFamilySummonRequest(c.getPlayer().getFamily().getName(), c.getPlayer().getName())); useEntitlement(entry, type); } else { - c.announce(PacketCreator.sendFamilyMessage(75, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(75, 0)); return; } } } } else { - c.announce(PacketCreator.sendFamilyMessage(67, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(67, 0)); } } } else if(type == MapleFamilyEntitlement.FAMILY_BONDING) { @@ -133,7 +133,7 @@ public final class FamilyUseHandler extends AbstractMaplePacketHandler { private boolean useEntitlement(MapleFamilyEntry entry, MapleFamilyEntitlement entitlement) { if(entry.useEntitlement(entitlement)) { entry.gainReputation(-entitlement.getRepCost(), false); - entry.getChr().announce(PacketCreator.getFamilyInfo(entry)); + entry.getChr().sendPacket(PacketCreator.getFamilyInfo(entry)); return true; } return false; diff --git a/src/main/java/net/server/channel/handlers/FredrickHandler.java b/src/main/java/net/server/channel/handlers/FredrickHandler.java index 7347eae914..8c0f08af84 100644 --- a/src/main/java/net/server/channel/handlers/FredrickHandler.java +++ b/src/main/java/net/server/channel/handlers/FredrickHandler.java @@ -40,7 +40,7 @@ public class FredrickHandler extends AbstractMaplePacketHandler { switch (operation) { case 0x19: //Will never come... - //c.announce(PacketCreator.getFredrick((byte) 0x24)); + //c.sendPacket(PacketCreator.getFredrick((byte) 0x24)); break; case 0x1A: FredrickProcessor.fredrickRetrieveItems(c); diff --git a/src/main/java/net/server/channel/handlers/GeneralChatHandler.java b/src/main/java/net/server/channel/handlers/GeneralChatHandler.java index 75c79e6c3a..cdad5a31c7 100644 --- a/src/main/java/net/server/channel/handlers/GeneralChatHandler.java +++ b/src/main/java/net/server/channel/handlers/GeneralChatHandler.java @@ -38,7 +38,7 @@ public final class GeneralChatHandler extends AbstractMaplePacketHandler { String s = slea.readMapleAsciiString(); MapleCharacter chr = c.getPlayer(); if(chr.getAutobanManager().getLastSpam(7) + 200 > currentServerTime()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (s.length() > Byte.MAX_VALUE && !chr.isGM()) { diff --git a/src/main/java/net/server/channel/handlers/GiveFameHandler.java b/src/main/java/net/server/channel/handlers/GiveFameHandler.java index a171580708..399b8499b7 100644 --- a/src/main/java/net/server/channel/handlers/GiveFameHandler.java +++ b/src/main/java/net/server/channel/handlers/GiveFameHandler.java @@ -57,7 +57,7 @@ public final class GiveFameHandler extends AbstractMaplePacketHandler { player.message("Could not process the request, since this character currently has the minimum/maximum level of fame."); } } else { - c.announce(PacketCreator.giveFameErrorResponse(status == FameStatus.NOT_TODAY ? 3 : 4)); + c.sendPacket(PacketCreator.giveFameErrorResponse(status == FameStatus.NOT_TODAY ? 3 : 4)); } } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/GuildOperationHandler.java b/src/main/java/net/server/channel/handlers/GuildOperationHandler.java index 0fb36f08aa..4434ac29dd 100644 --- a/src/main/java/net/server/channel/handlers/GuildOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/GuildOperationHandler.java @@ -28,6 +28,7 @@ import constants.game.GameConstants; import net.AbstractMaplePacketHandler; import net.server.Server; import net.server.coordinator.matchchecker.MatchCheckerListenerFactory.MatchCheckerType; +import net.server.guild.GuildPackets; import net.server.guild.MapleAlliance; import net.server.guild.MapleGuild; import net.server.guild.MapleGuildResponse; @@ -59,7 +60,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { int allianceId = -1; switch (type) { case 0x00: - //c.announce(PacketCreator.showGuildInfo(mc)); + //c.sendPacket(PacketCreator.showGuildInfo(mc)); break; case 0x02: if (mc.getGuildId() > 0) { @@ -109,7 +110,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { String targetName = slea.readMapleAsciiString(); MapleGuildResponse mgr = MapleGuild.sendInvitation(c, targetName); if (mgr != null) { - c.announce(mgr.getPacket(targetName)); + c.sendPacket(mgr.getPacket(targetName)); } else {} // already sent invitation, do nothing break; @@ -140,14 +141,14 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { return; } - c.announce(PacketCreator.showGuildInfo(mc)); + c.sendPacket(GuildPackets.showGuildInfo(mc)); allianceId = mc.getGuild().getAllianceId(); if(allianceId > 0) Server.getInstance().getAlliance(allianceId).updateAlliancePackets(mc); mc.saveGuildStatus(); // update database - mc.getMap().broadcastMessage(mc, PacketCreator.guildNameChanged(mc.getId(), mc.getGuild().getName())); // thanks Vcoc for pointing out an issue with updating guild tooltip to players in the map - mc.getMap().broadcastMessage(mc, PacketCreator.guildMarkChanged(mc.getId(), mc.getGuild())); + mc.getMap().broadcastPacket(mc, GuildPackets.guildNameChanged(mc.getId(), mc.getGuild().getName())); // thanks Vcoc for pointing out an issue with updating guild tooltip to players in the map + mc.getMap().broadcastPacket(mc, GuildPackets.guildMarkChanged(mc.getId(), mc.getGuild())); break; case 0x07: cid = slea.readInt(); @@ -159,16 +160,16 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { allianceId = mc.getGuild().getAllianceId(); - c.announce(PacketCreator.updateGP(mc.getGuildId(), 0)); + c.sendPacket(GuildPackets.updateGP(mc.getGuildId(), 0)); Server.getInstance().leaveGuild(mc.getMGC()); - c.announce(PacketCreator.showGuildInfo(null)); + c.sendPacket(GuildPackets.showGuildInfo(null)); if(allianceId > 0) Server.getInstance().getAlliance(allianceId).updateAlliancePackets(mc); mc.getMGC().setGuildId(0); mc.getMGC().setGuildRank(5); mc.saveGuildStatus(); - mc.getMap().broadcastMessage(mc, PacketCreator.guildNameChanged(mc.getId(), "")); + mc.getMap().broadcastPacket(mc, GuildPackets.guildNameChanged(mc.getId(), "")); break; case 0x08: allianceId = mc.getGuild().getAllianceId(); @@ -213,7 +214,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { return; } if (mc.getMeso() < YamlConfig.config.server.CHANGE_EMBLEM_COST) { - c.announce(PacketCreator.serverNotice(1, "You do not have " + GameConstants.numberWithCommas(YamlConfig.config.server.CHANGE_EMBLEM_COST) + " mesos to change the Guild emblem.")); + c.sendPacket(PacketCreator.serverNotice(1, "You do not have " + GameConstants.numberWithCommas(YamlConfig.config.server.CHANGE_EMBLEM_COST) + " mesos to change the Guild emblem.")); return; } short bg = slea.readShort(); @@ -224,7 +225,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { if (mc.getGuild() != null && mc.getGuild().getAllianceId() > 0) { MapleAlliance alliance = mc.getAlliance(); - Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.getGuildAlliances(alliance, c.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.getGuildAlliances(alliance, c.getWorld()), -1, -1); } mc.gainMeso(-YamlConfig.config.server.CHANGE_EMBLEM_COST, true, false, true); diff --git a/src/main/java/net/server/channel/handlers/HiredMerchantRequest.java b/src/main/java/net/server/channel/handlers/HiredMerchantRequest.java index 64fe53fd34..71c3a25847 100644 --- a/src/main/java/net/server/channel/handlers/HiredMerchantRequest.java +++ b/src/main/java/net/server/channel/handlers/HiredMerchantRequest.java @@ -53,11 +53,11 @@ public final class HiredMerchantRequest extends AbstractMaplePacketHandler { MaplePlayerShop shop = mc.getPlayerShop(); if (shop != null && shop.isOwner(mc)) { - chr.announce(PacketCreator.getMiniRoomError(13)); + chr.sendPacket(PacketCreator.getMiniRoomError(13)); return; } } else { - chr.announce(PacketCreator.getMiniRoomError(13)); + chr.sendPacket(PacketCreator.getMiniRoomError(13)); return; } } @@ -65,7 +65,7 @@ public final class HiredMerchantRequest extends AbstractMaplePacketHandler { Point cpos = chr.getPosition(); MaplePortal portal = chr.getMap().findClosestTeleportPortal(cpos); if (portal != null && portal.getPosition().distance(cpos) < 120.0) { - chr.announce(PacketCreator.getMiniRoomError(10)); + chr.sendPacket(PacketCreator.getMiniRoomError(10)); return; } } catch (Exception e) { @@ -76,9 +76,9 @@ public final class HiredMerchantRequest extends AbstractMaplePacketHandler { if (!chr.hasMerchant()) { try { if (ItemFactory.MERCHANT.loadItems(chr.getId(), false).isEmpty() && chr.getMerchantMeso() == 0) { - c.announce(PacketCreator.hiredMerchantBox()); + c.sendPacket(PacketCreator.hiredMerchantBox()); } else { - chr.announce(PacketCreator.retrieveFirstMessage()); + chr.sendPacket(PacketCreator.retrieveFirstMessage()); } } catch (SQLException ex) { ex.printStackTrace(); diff --git a/src/main/java/net/server/channel/handlers/InventoryMergeHandler.java b/src/main/java/net/server/channel/handlers/InventoryMergeHandler.java index 307e62ea04..5a09df8d85 100644 --- a/src/main/java/net/server/channel/handlers/InventoryMergeHandler.java +++ b/src/main/java/net/server/channel/handlers/InventoryMergeHandler.java @@ -43,7 +43,7 @@ public final class InventoryMergeHandler extends AbstractMaplePacketHandler { chr.getAutobanManager().setTimestamp(2, Server.getInstance().getCurrentTimestamp(), 4); if(!YamlConfig.config.server.USE_ITEM_SORT) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -106,7 +106,7 @@ public final class InventoryMergeHandler extends AbstractMaplePacketHandler { inventory.unlockInventory(); } - c.announce(PacketCreator.finishedSort(inventoryType.getType())); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.finishedSort(inventoryType.getType())); + c.sendPacket(PacketCreator.enableActions()); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/InventorySortHandler.java b/src/main/java/net/server/channel/handlers/InventorySortHandler.java index e3b63fe9a0..028db91ac9 100644 --- a/src/main/java/net/server/channel/handlers/InventorySortHandler.java +++ b/src/main/java/net/server/channel/handlers/InventorySortHandler.java @@ -267,7 +267,7 @@ public final class InventorySortHandler extends AbstractMaplePacketHandler { chr.getAutobanManager().setTimestamp(3, Server.getInstance().getCurrentTimestamp(), 4); if(!YamlConfig.config.server.USE_ITEM_SORT) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -308,8 +308,8 @@ public final class InventorySortHandler extends AbstractMaplePacketHandler { inventory.unlockInventory(); } - c.announce(PacketCreator.modifyInventory(true, mods)); - c.announce(PacketCreator.finishedSort2(invType)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.modifyInventory(true, mods)); + c.sendPacket(PacketCreator.finishedSort2(invType)); + c.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/ItemMoveHandler.java b/src/main/java/net/server/channel/handlers/ItemMoveHandler.java index 99c4594435..2ad2df288d 100644 --- a/src/main/java/net/server/channel/handlers/ItemMoveHandler.java +++ b/src/main/java/net/server/channel/handlers/ItemMoveHandler.java @@ -37,7 +37,7 @@ public final class ItemMoveHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { slea.skip(4); if(c.getPlayer().getAutobanManager().getLastSpam(6) + 300 > currentServerTime()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } diff --git a/src/main/java/net/server/channel/handlers/ItemRewardHandler.java b/src/main/java/net/server/channel/handlers/ItemRewardHandler.java index 853f0f0c6d..eeeee09d7c 100644 --- a/src/main/java/net/server/channel/handlers/ItemRewardHandler.java +++ b/src/main/java/net/server/channel/handlers/ItemRewardHandler.java @@ -54,7 +54,7 @@ public final class ItemRewardHandler extends AbstractMaplePacketHandler { Pair> rewards = ii.getItemReward(itemId); for (RewardItem reward : rewards.getRight()) { if (!MapleInventoryManipulator.checkSpace(c, reward.itemid, reward.quantity, "")) { - c.announce(PacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); break; } if (Randomizer.nextInt(rewards.getLeft()) < reward.prob) {//Is it even possible to get an item with prob 1? @@ -77,6 +77,6 @@ public final class ItemRewardHandler extends AbstractMaplePacketHandler { break; } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/LeftKnockbackHandler.java b/src/main/java/net/server/channel/handlers/LeftKnockbackHandler.java index 8a05b55cb0..7d5e223bbb 100644 --- a/src/main/java/net/server/channel/handlers/LeftKnockbackHandler.java +++ b/src/main/java/net/server/channel/handlers/LeftKnockbackHandler.java @@ -33,7 +33,7 @@ import tools.data.input.SeekableLittleEndianAccessor; */ public class LeftKnockbackHandler extends AbstractMaplePacketHandler { public void handlePacket(SeekableLittleEndianAccessor slea, final MapleClient c) { - c.announce(PacketCreator.leftKnockBack()); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.leftKnockBack()); + c.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/MTSHandler.java b/src/main/java/net/server/channel/handlers/MTSHandler.java index 2b4b3aa46b..007565f827 100644 --- a/src/main/java/net/server/channel/handlers/MTSHandler.java +++ b/src/main/java/net/server/channel/handlers/MTSHandler.java @@ -29,6 +29,7 @@ import client.inventory.MapleInventoryType; import client.inventory.manipulator.MapleInventoryManipulator; import constants.inventory.ItemConstants; import net.AbstractMaplePacketHandler; +import net.packet.Packet; import net.server.Server; import net.server.channel.Channel; import server.MTSItemInfo; @@ -114,9 +115,9 @@ public final class MTSHandler extends AbstractMaplePacketHandler { if (rs.next()) { if (rs.getInt(1) > 10) { //They have more than 10 items up for sale already! c.getPlayer().dropMessage(1, "You already have 10 items up for auction!"); - c.announce(getMTS(1, 0, 0)); - c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.sendPacket(getMTS(1, 0, 0)); + c.sendPacket(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); rs.close(); ps.close(); return; @@ -219,11 +220,11 @@ public final class MTSHandler extends AbstractMaplePacketHandler { e.printStackTrace(); } c.getPlayer().gainMeso(-5000, false); - c.announce(PacketCreator.MTSConfirmSell()); - c.announce(getMTS(1, 0, 0)); + c.sendPacket(PacketCreator.MTSConfirmSell()); + c.sendPacket(getMTS(1, 0, 0)); c.enableCSActions(); - c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); } } else if (op == 3) { //send offer for wanted item } else if (op == 4) { //list wanted item @@ -238,18 +239,18 @@ public final class MTSHandler extends AbstractMaplePacketHandler { int page = slea.readInt(); c.getPlayer().changePage(page); if (tab == 4 && type == 0) { - c.announce(getCart(c.getPlayer().getId())); + c.sendPacket(getCart(c.getPlayer().getId())); } else if (tab == c.getPlayer().getCurrentTab() && type == c.getPlayer().getCurrentType() && c.getPlayer().getSearch() != null) { - c.announce(getMTSSearch(tab, type, c.getPlayer().getCurrentCI(), c.getPlayer().getSearch(), page)); + c.sendPacket(getMTSSearch(tab, type, c.getPlayer().getCurrentCI(), c.getPlayer().getSearch(), page)); } else { c.getPlayer().setSearch(null); - c.announce(getMTS(tab, type, page)); + c.sendPacket(getMTS(tab, type, page)); } c.getPlayer().changeTab(tab); c.getPlayer().changeType(type); c.enableCSActions(); - c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); } else if (op == 6) { //search int tab = slea.readInt(); int type = slea.readInt(); @@ -261,11 +262,11 @@ public final class MTSHandler extends AbstractMaplePacketHandler { c.getPlayer().changeType(type); c.getPlayer().changeCI(ci); c.enableCSActions(); - c.announce(PacketCreator.enableActions()); - c.announce(getMTSSearch(tab, type, ci, search, c.getPlayer().getCurrentPage())); - c.announce(PacketCreator.showMTSCash(c.getPlayer())); - c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.enableActions()); + c.sendPacket(getMTSSearch(tab, type, ci, search, c.getPlayer().getCurrentPage())); + c.sendPacket(PacketCreator.showMTSCash(c.getPlayer())); + c.sendPacket(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); } else if (op == 7) { //cancel sale int id = slea.readInt(); //id of the item Connection con = null; @@ -285,9 +286,9 @@ public final class MTSHandler extends AbstractMaplePacketHandler { e.printStackTrace(); } c.enableCSActions(); - c.announce(getMTS(c.getPlayer().getCurrentTab(), c.getPlayer().getCurrentType(), c.getPlayer().getCurrentPage())); - c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); - c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.sendPacket(getMTS(c.getPlayer().getCurrentTab(), c.getPlayer().getCurrentType(), c.getPlayer().getCurrentPage())); + c.sendPacket(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); } else if (op == 8) { //transfer item from transfer inv. int id = slea.readInt(); //id of the item Connection con = null; @@ -344,10 +345,10 @@ public final class MTSHandler extends AbstractMaplePacketHandler { } MapleInventoryManipulator.addFromDrop(c, i, false); c.enableCSActions(); - c.announce(getCart(c.getPlayer().getId())); - c.announce(getMTS(c.getPlayer().getCurrentTab(), c.getPlayer().getCurrentType(), c.getPlayer().getCurrentPage())); - c.announce(PacketCreator.MTSConfirmTransfer(i.getQuantity(), i.getPosition())); - c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.sendPacket(getCart(c.getPlayer().getId())); + c.sendPacket(getMTS(c.getPlayer().getCurrentTab(), c.getPlayer().getCurrentType(), c.getPlayer().getCurrentPage())); + c.sendPacket(PacketCreator.MTSConfirmTransfer(i.getQuantity(), i.getPosition())); + c.sendPacket(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); } rs.close(); ps.close(); @@ -385,11 +386,11 @@ public final class MTSHandler extends AbstractMaplePacketHandler { } catch (SQLException e) { e.printStackTrace(); } - c.announce(getMTS(c.getPlayer().getCurrentTab(), c.getPlayer().getCurrentType(), c.getPlayer().getCurrentPage())); + c.sendPacket(getMTS(c.getPlayer().getCurrentTab(), c.getPlayer().getCurrentType(), c.getPlayer().getCurrentPage())); c.enableCSActions(); - c.announce(PacketCreator.enableActions()); - c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); } else if (op == 10) { //delete from cart int id = slea.readInt(); //id of the item Connection con = null; @@ -404,10 +405,10 @@ public final class MTSHandler extends AbstractMaplePacketHandler { } catch (SQLException e) { e.printStackTrace(); } - c.announce(getCart(c.getPlayer().getId())); + c.sendPacket(getCart(c.getPlayer().getId())); c.enableCSActions(); - c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); } else if (op == 12) { //put item up for auction } else if (op == 13) { //cancel wanted cart thing } else if (op == 14) { //buy auction item now @@ -458,14 +459,14 @@ public final class MTSHandler extends AbstractMaplePacketHandler { pse.close(); c.getPlayer().getCashShop().gainCash(4, -price); c.enableCSActions(); - c.announce(getMTS(c.getPlayer().getCurrentTab(), c.getPlayer().getCurrentType(), c.getPlayer().getCurrentPage())); - c.announce(PacketCreator.MTSConfirmBuy()); - c.announce(PacketCreator.showMTSCash(c.getPlayer())); - c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); - c.announce(PacketCreator.enableActions()); + c.sendPacket(getMTS(c.getPlayer().getCurrentTab(), c.getPlayer().getCurrentType(), c.getPlayer().getCurrentPage())); + c.sendPacket(PacketCreator.MTSConfirmBuy()); + c.sendPacket(PacketCreator.showMTSCash(c.getPlayer())); + c.sendPacket(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.enableActions()); } else { - c.announce(PacketCreator.MTSFailBuy()); + c.sendPacket(PacketCreator.MTSFailBuy()); } } rs.close(); @@ -473,7 +474,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler { con.close(); } catch (SQLException e) { e.printStackTrace(); - c.announce(PacketCreator.MTSFailBuy()); + c.sendPacket(PacketCreator.MTSFailBuy()); } } else if (op == 17) { //buy from cart int id = slea.readInt(); //id of the item @@ -518,14 +519,14 @@ public final class MTSHandler extends AbstractMaplePacketHandler { pse.executeUpdate(); pse.close(); c.getPlayer().getCashShop().gainCash(4, -price); - c.announce(getCart(c.getPlayer().getId())); + c.sendPacket(getCart(c.getPlayer().getId())); c.enableCSActions(); - c.announce(PacketCreator.MTSConfirmBuy()); - c.announce(PacketCreator.showMTSCash(c.getPlayer())); - c.announce(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.MTSConfirmBuy()); + c.sendPacket(PacketCreator.showMTSCash(c.getPlayer())); + c.sendPacket(PacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); + c.sendPacket(PacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); } else { - c.announce(PacketCreator.MTSFailBuy()); + c.sendPacket(PacketCreator.MTSFailBuy()); } } rs.close(); @@ -533,13 +534,13 @@ public final class MTSHandler extends AbstractMaplePacketHandler { con.close(); } catch (SQLException e) { e.printStackTrace(); - c.announce(PacketCreator.MTSFailBuy()); + c.sendPacket(PacketCreator.MTSFailBuy()); } } else { System.out.println("Unhandled OP(MTS): " + op + " Packet: " + slea.toString()); } } else { - c.announce(PacketCreator.showMTSCash(c.getPlayer())); + c.sendPacket(PacketCreator.showMTSCash(c.getPlayer())); } } @@ -598,7 +599,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler { return items; } - public byte[] getCart(int cid) { + public Packet getCart(int cid) { List items = new ArrayList<>(); Connection con = null; PreparedStatement ps; @@ -726,7 +727,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler { return items; } - private static byte[] getMTS(int tab, int type, int page) { + private static Packet getMTS(int tab, int type, int page) { List items = new ArrayList<>(); Connection con = null; PreparedStatement ps; @@ -806,7 +807,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler { return PacketCreator.sendMTS(items, tab, type, page, pages); // resniff } - public byte[] getMTSSearch(int tab, int type, int cOi, String search, int page) { + public Packet getMTSSearch(int tab, int type, int cOi, String search, int page) { List items = new ArrayList<>(); MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); String listaitems = ""; diff --git a/src/main/java/net/server/channel/handlers/MagicDamageHandler.java b/src/main/java/net/server/channel/handlers/MagicDamageHandler.java index 72f00f05f4..963f0cc0ca 100644 --- a/src/main/java/net/server/channel/handlers/MagicDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/MagicDamageHandler.java @@ -28,6 +28,7 @@ import constants.skills.Bishop; import constants.skills.Evan; import constants.skills.FPArchMage; import constants.skills.ILArchMage; +import net.packet.Packet; import server.MapleStatEffect; import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; @@ -55,11 +56,11 @@ public final class MagicDamageHandler extends AbstractDealDamageHandler { if (GameConstants.isDojo(chr.getMap().getId()) && attack.numAttacked > 0) { chr.setDojoEnergy(chr.getDojoEnergy() + + YamlConfig.config.server.DOJO_ENERGY_ATK); - c.announce(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); + c.sendPacket(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); } int charge = (attack.skill == Evan.FIRE_BREATH || attack.skill == Evan.ICE_BREATH || attack.skill == FPArchMage.BIG_BANG || attack.skill == ILArchMage.BIG_BANG || attack.skill == Bishop.BIG_BANG) ? attack.charge : -1; - byte[] packet = PacketCreator.magicAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, attack.allDamage, charge, attack.speed, attack.direction, attack.display); + Packet packet = PacketCreator.magicAttack(chr, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, attack.allDamage, charge, attack.speed, attack.direction, attack.display); chr.getMap().broadcastMessage(chr, packet, false, true); MapleStatEffect effect = attack.getAttackEffect(chr, null); @@ -69,7 +70,7 @@ public final class MagicDamageHandler extends AbstractDealDamageHandler { if (chr.skillIsCooling(attack.skill)) { return; } else { - c.announce(PacketCreator.skillCooldown(attack.skill, effect_.getCooldown())); + c.sendPacket(PacketCreator.skillCooldown(attack.skill, effect_.getCooldown())); chr.addCooldown(attack.skill, currentServerTime(), effect_.getCooldown() * 1000); } } diff --git a/src/main/java/net/server/channel/handlers/MesoDropHandler.java b/src/main/java/net/server/channel/handlers/MesoDropHandler.java index cd37bc745f..196fbe327a 100644 --- a/src/main/java/net/server/channel/handlers/MesoDropHandler.java +++ b/src/main/java/net/server/channel/handlers/MesoDropHandler.java @@ -37,7 +37,7 @@ public final class MesoDropHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { MapleCharacter player = c.getPlayer(); if (!player.isAlive()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } slea.skip(4); @@ -48,14 +48,14 @@ public final class MesoDropHandler extends AbstractMaplePacketHandler { if (meso <= player.getMeso() && meso > 9 && meso < 50001) { player.gainMeso(-meso, false, true, false); } else { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } finally { c.releaseClient(); } } else { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } diff --git a/src/main/java/net/server/channel/handlers/MessengerHandler.java b/src/main/java/net/server/channel/handlers/MessengerHandler.java index 62efac1f3b..1a84d63bef 100644 --- a/src/main/java/net/server/channel/handlers/MessengerHandler.java +++ b/src/main/java/net/server/channel/handlers/MessengerHandler.java @@ -82,30 +82,30 @@ public final class MessengerHandler extends AbstractMaplePacketHandler { break; case 0x03: if (messenger == null) { - c.announce(PacketCreator.messengerChat(player.getName() + " : This Maple Messenger is currently unavailable. Please quit this chat.")); + c.sendPacket(PacketCreator.messengerChat(player.getName() + " : This Maple Messenger is currently unavailable. Please quit this chat.")); } else if (messenger.getMembers().size() < 3) { input = slea.readMapleAsciiString(); MapleCharacter target = c.getChannelServer().getPlayerStorage().getCharacterByName(input); if (target != null) { if (target.getMessenger() == null) { if (MapleInviteCoordinator.createInvite(InviteType.MESSENGER, c.getPlayer(), messenger.getId(), target.getId())) { - target.getClient().announce(PacketCreator.messengerInvite(c.getPlayer().getName(), messenger.getId())); - c.announce(PacketCreator.messengerNote(input, 4, 1)); + target.sendPacket(PacketCreator.messengerInvite(c.getPlayer().getName(), messenger.getId())); + c.sendPacket(PacketCreator.messengerNote(input, 4, 1)); } else { - c.announce(PacketCreator.messengerChat(player.getName() + " : " + input + " is already managing a Maple Messenger invitation")); + c.sendPacket(PacketCreator.messengerChat(player.getName() + " : " + input + " is already managing a Maple Messenger invitation")); } } else { - c.announce(PacketCreator.messengerChat(player.getName() + " : " + input + " is already using Maple Messenger")); + c.sendPacket(PacketCreator.messengerChat(player.getName() + " : " + input + " is already using Maple Messenger")); } } else { if (world.find(input) > -1) { world.messengerInvite(c.getPlayer().getName(), messenger.getId(), input, c.getChannel()); } else { - c.announce(PacketCreator.messengerNote(input, 4, 0)); + c.sendPacket(PacketCreator.messengerNote(input, 4, 0)); } } } else { - c.announce(PacketCreator.messengerChat(player.getName() + " : You cannot have more than 3 people in the Maple Messenger")); + c.sendPacket(PacketCreator.messengerChat(player.getName() + " : You cannot have more than 3 people in the Maple Messenger")); } break; case 0x05: diff --git a/src/main/java/net/server/channel/handlers/MobDamageMobFriendlyHandler.java b/src/main/java/net/server/channel/handlers/MobDamageMobFriendlyHandler.java index ec5a787e86..0f921988c0 100644 --- a/src/main/java/net/server/channel/handlers/MobDamageMobFriendlyHandler.java +++ b/src/main/java/net/server/channel/handlers/MobDamageMobFriendlyHandler.java @@ -84,6 +84,6 @@ public final class MobDamageMobFriendlyHandler extends AbstractMaplePacketHandle } map.broadcastMessage(PacketCreator.MobDamageMobFriendly(monster, damage, remainingHp), monster.getPosition()); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/MonsterBookCoverHandler.java b/src/main/java/net/server/channel/handlers/MonsterBookCoverHandler.java index abb60a2b92..b7b74987ce 100644 --- a/src/main/java/net/server/channel/handlers/MonsterBookCoverHandler.java +++ b/src/main/java/net/server/channel/handlers/MonsterBookCoverHandler.java @@ -31,7 +31,7 @@ public final class MonsterBookCoverHandler extends AbstractMaplePacketHandler { int id = slea.readInt(); if (id == 0 || id / 10000 == 238) { c.getPlayer().setMonsterBookCover(id); - c.announce(PacketCreator.changeCover(id)); + c.sendPacket(PacketCreator.changeCover(id)); } } } diff --git a/src/main/java/net/server/channel/handlers/MonsterCarnivalHandler.java b/src/main/java/net/server/channel/handlers/MonsterCarnivalHandler.java index 912aac9463..4ca4d92e78 100644 --- a/src/main/java/net/server/channel/handlers/MonsterCarnivalHandler.java +++ b/src/main/java/net/server/channel/handlers/MonsterCarnivalHandler.java @@ -57,8 +57,8 @@ public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler { if (tab == 0) { final List> mobs = c.getPlayer().getMap().getMobsToSpawn(); if (num >= mobs.size() || c.getPlayer().getCP() < mobs.get(num).right) { - c.announce(PacketCreator.CPQMessage((byte) 1)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.CPQMessage((byte) 1)); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -66,8 +66,8 @@ public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler { MonsterCarnival mcpq = c.getPlayer().getMonsterCarnival(); if (mcpq != null) { if (!mcpq.canSummonR() && c.getPlayer().getTeam() == 0 || !mcpq.canSummonB() && c.getPlayer().getTeam() == 1) { - c.announce(PacketCreator.CPQMessage((byte) 2)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.CPQMessage((byte) 2)); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -82,7 +82,7 @@ public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler { c.getPlayer().getMap().addMonsterSpawn(mob, 1, c.getPlayer().getTeam()); c.getPlayer().getMap().addAllMonsterSpawn(mob, 1, c.getPlayer().getTeam()); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } neededCP = mobs.get(num).right; @@ -90,13 +90,13 @@ public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler { final List skillid = c.getPlayer().getMap().getSkillIds(); if (num >= skillid.size()) { c.getPlayer().dropMessage(5, "An unexpected error has occurred."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } final MCSkill skill = MapleCarnivalFactory.getInstance().getSkill(skillid.get(num)); //ugh wtf if (skill == null || c.getPlayer().getCP() < skill.cpLoss) { - c.announce(PacketCreator.CPQMessage((byte) 1)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.CPQMessage((byte) 1)); + c.sendPacket(PacketCreator.enableActions()); return; } final MapleDisease dis = skill.getDisease(); @@ -131,20 +131,20 @@ public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler { } } neededCP = skill.cpLoss; - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if (tab == 2) { //protectors final MCSkill skill = MapleCarnivalFactory.getInstance().getGuardian(num); if (skill == null || c.getPlayer().getCP() < skill.cpLoss) { - c.announce(PacketCreator.CPQMessage((byte) 1)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.CPQMessage((byte) 1)); + c.sendPacket(PacketCreator.enableActions()); return; } MonsterCarnival mcpq = c.getPlayer().getMonsterCarnival(); if (mcpq != null) { if (!mcpq.canGuardianR() && c.getPlayer().getTeam() == 0 || !mcpq.canGuardianB() && c.getPlayer().getTeam() == 1) { - c.announce(PacketCreator.CPQMessage((byte) 2)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.CPQMessage((byte) 2)); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -152,17 +152,17 @@ public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler { if (success != 1) { switch (success) { case -1: - c.announce(PacketCreator.CPQMessage((byte) 3)); + c.sendPacket(PacketCreator.CPQMessage((byte) 3)); break; case 0: - c.announce(PacketCreator.CPQMessage((byte) 4)); + c.sendPacket(PacketCreator.CPQMessage((byte) 4)); break; default: - c.announce(PacketCreator.CPQMessage((byte) 3)); + c.sendPacket(PacketCreator.CPQMessage((byte) 3)); } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } else { neededCP = skill.cpLoss; diff --git a/src/main/java/net/server/channel/handlers/MoveDragonHandler.java b/src/main/java/net/server/channel/handlers/MoveDragonHandler.java index 2195e42d76..e9b5ce4dfc 100644 --- a/src/main/java/net/server/channel/handlers/MoveDragonHandler.java +++ b/src/main/java/net/server/channel/handlers/MoveDragonHandler.java @@ -45,7 +45,7 @@ public class MoveDragonHandler extends AbstractMovementPacketHandler { slea.seek(movementDataStart); if (chr.isHidden()) { - chr.getMap().broadcastGMMessage(chr, PacketCreator.moveDragon(dragon, startPos, slea, movementDataLength)); + chr.getMap().broadcastGMPacket(chr, PacketCreator.moveDragon(dragon, startPos, slea, movementDataLength)); } else { chr.getMap().broadcastMessage(chr, PacketCreator.moveDragon(dragon, startPos, slea, movementDataLength), dragon.getPosition()); } diff --git a/src/main/java/net/server/channel/handlers/MoveLifeHandler.java b/src/main/java/net/server/channel/handlers/MoveLifeHandler.java index bd0d6ba87c..0bbf41d8aa 100644 --- a/src/main/java/net/server/channel/handlers/MoveLifeHandler.java +++ b/src/main/java/net/server/channel/handlers/MoveLifeHandler.java @@ -150,9 +150,9 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler { if (aggro == null) return; if (nextUse != null) { - c.announce(PacketCreator.moveMonsterResponse(objectid, moveid, mobMp, aggro, nextSkillId, nextSkillLevel)); + c.sendPacket(PacketCreator.moveMonsterResponse(objectid, moveid, mobMp, aggro, nextSkillId, nextSkillLevel)); } else { - c.announce(PacketCreator.moveMonsterResponse(objectid, moveid, mobMp, aggro)); + c.sendPacket(PacketCreator.moveMonsterResponse(objectid, moveid, mobMp, aggro)); } diff --git a/src/main/java/net/server/channel/handlers/NPCAnimationHandler.java b/src/main/java/net/server/channel/handlers/NPCAnimationHandler.java index 5be8060028..499eb4bc83 100644 --- a/src/main/java/net/server/channel/handlers/NPCAnimationHandler.java +++ b/src/main/java/net/server/channel/handlers/NPCAnimationHandler.java @@ -24,8 +24,8 @@ package net.server.channel.handlers; import client.MapleClient; import net.AbstractMaplePacketHandler; import net.opcodes.SendOpcode; +import net.packet.OutPacket; import tools.data.input.SeekableLittleEndianAccessor; -import tools.data.output.MaplePacketLittleEndianWriter; public final class NPCAnimationHandler extends AbstractMaplePacketHandler { @Override @@ -33,20 +33,17 @@ public final class NPCAnimationHandler extends AbstractMaplePacketHandler { if (c.getPlayer().isChangingMaps()) { // possible cause of error 38 in some map transition scenarios, thanks Arnah return; } - - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + + OutPacket p = OutPacket.create(SendOpcode.NPC_ACTION); int length = (int) slea.available(); if (length == 6) { // NPC Talk - mplew.writeShort(SendOpcode.NPC_ACTION.getValue()); - mplew.writeInt(slea.readInt()); - mplew.write(slea.readByte()); // 2 bytes, thanks resinate - mplew.write(slea.readByte()); - c.announce(mplew.getPacket()); + p.writeInt(slea.readInt()); + p.writeByte(slea.readByte()); // 2 bytes, thanks resinate + p.writeByte(slea.readByte()); } else if (length > 6) { // NPC Move byte[] bytes = slea.read(length - 9); - mplew.writeShort(SendOpcode.NPC_ACTION.getValue()); - mplew.write(bytes); - c.announce(mplew.getPacket()); + p.writeBytes(bytes); } + c.sendPacket(p); } } diff --git a/src/main/java/net/server/channel/handlers/NPCTalkHandler.java b/src/main/java/net/server/channel/handlers/NPCTalkHandler.java index a283e495b2..4cffe9c820 100644 --- a/src/main/java/net/server/channel/handlers/NPCTalkHandler.java +++ b/src/main/java/net/server/channel/handlers/NPCTalkHandler.java @@ -37,12 +37,12 @@ public final class NPCTalkHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { if (!c.getPlayer().isAlive()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if(currentServerTime() - c.getPlayer().getNpcCooldown() < YamlConfig.config.server.BLOCK_NPC_RACE_CONDT) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -56,7 +56,7 @@ public final class NPCTalkHandler extends AbstractMaplePacketHandler { DueyProcessor.dueySendTalk(c, false); } else { if (c.getCM() != null || c.getQM() != null) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -74,7 +74,7 @@ public final class NPCTalkHandler extends AbstractMaplePacketHandler { FilePrinter.printError(FilePrinter.NPC_UNCODED, "NPC " + npc.getName() + "(" + npc.getId() + ") is not coded."); return; } else if (c.getPlayer().getShop() != null) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } diff --git a/src/main/java/net/server/channel/handlers/NewYearCardHandler.java b/src/main/java/net/server/channel/handlers/NewYearCardHandler.java index 0c351feed2..4bee6e232c 100644 --- a/src/main/java/net/server/channel/handlers/NewYearCardHandler.java +++ b/src/main/java/net/server/channel/handlers/NewYearCardHandler.java @@ -72,21 +72,21 @@ public final class NewYearCardHandler extends AbstractMaplePacketHandler { Server.getInstance().setNewYearCard(newyear); newyear.startNewYearCardTask(); - player.announce(PacketCreator.onNewYearCardRes(player, newyear, 4, 0)); // successfully sent + player.sendPacket(PacketCreator.onNewYearCardRes(player, newyear, 4, 0)); // successfully sent } else { - player.announce(PacketCreator.onNewYearCardRes(player, -1, 5, 0xF)); // cannot send to yourself + player.sendPacket(PacketCreator.onNewYearCardRes(player, -1, 5, 0xF)); // cannot send to yourself } } else { - player.announce(PacketCreator.onNewYearCardRes(player, -1, 5, 0x13)); // cannot find such character + player.sendPacket(PacketCreator.onNewYearCardRes(player, -1, 5, 0x13)); // cannot find such character } } else { - player.announce(PacketCreator.onNewYearCardRes(player, -1, 5, 0x10)); // inventory full + player.sendPacket(PacketCreator.onNewYearCardRes(player, -1, 5, 0x10)); // inventory full } } else { - player.announce(PacketCreator.onNewYearCardRes(player, -1, 5, status)); // item and inventory errors + player.sendPacket(PacketCreator.onNewYearCardRes(player, -1, 5, status)); // item and inventory errors } } else { - player.announce(PacketCreator.onNewYearCardRes(player, -1, 5, 0x11)); // have no card to send + player.sendPacket(PacketCreator.onNewYearCardRes(player, -1, 5, 0x11)); // have no card to send } } else { //receiver accepted the card int cardid = slea.readInt(); @@ -103,7 +103,7 @@ public final class NewYearCardHandler extends AbstractMaplePacketHandler { if(!newyear.getMessage().isEmpty()) player.dropMessage(6, "[New Year] " + newyear.getSenderName() + ": " + newyear.getMessage()); player.addNewYearRecord(newyear); - player.announce(PacketCreator.onNewYearCardRes(player, newyear, 6, 0)); // successfully rcvd + player.sendPacket(PacketCreator.onNewYearCardRes(player, newyear, 6, 0)); // successfully rcvd player.getMap().broadcastMessage(PacketCreator.onNewYearCardRes(player, newyear, 0xD, 0)); @@ -113,7 +113,7 @@ public final class NewYearCardHandler extends AbstractMaplePacketHandler { sender.dropMessage(6, "[New Year] Your addressee successfully received the New Year card."); } } else { - player.announce(PacketCreator.onNewYearCardRes(player, -1, 5, 0x10)); // inventory full + player.sendPacket(PacketCreator.onNewYearCardRes(player, -1, 5, 0x10)); // inventory full } } else { player.dropMessage(6, "[New Year] The sender of the New Year card already dropped it. Nothing to receive."); diff --git a/src/main/java/net/server/channel/handlers/NoteActionHandler.java b/src/main/java/net/server/channel/handlers/NoteActionHandler.java index 00d5cb5d90..e151dd4e97 100644 --- a/src/main/java/net/server/channel/handlers/NoteActionHandler.java +++ b/src/main/java/net/server/channel/handlers/NoteActionHandler.java @@ -41,7 +41,7 @@ public final class NoteActionHandler extends AbstractMaplePacketHandler { String message = slea.readMapleAsciiString(); try { if (c.getPlayer().getCashShop().isOpened()) { - c.announce(PacketCreator.showCashInventory(c)); + c.sendPacket(PacketCreator.showCashInventory(c)); } c.getPlayer().sendNote(charname, message, (byte) 1); diff --git a/src/main/java/net/server/channel/handlers/OpenFamilyHandler.java b/src/main/java/net/server/channel/handlers/OpenFamilyHandler.java index f4be5f63d7..5f8f834078 100644 --- a/src/main/java/net/server/channel/handlers/OpenFamilyHandler.java +++ b/src/main/java/net/server/channel/handlers/OpenFamilyHandler.java @@ -35,7 +35,7 @@ public final class OpenFamilyHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) return; MapleCharacter chr = c.getPlayer(); - c.announce(PacketCreator.getFamilyInfo(chr.getFamilyEntry())); + c.sendPacket(PacketCreator.getFamilyInfo(chr.getFamilyEntry())); } } diff --git a/src/main/java/net/server/channel/handlers/OpenFamilyPedigreeHandler.java b/src/main/java/net/server/channel/handlers/OpenFamilyPedigreeHandler.java index 30926e0289..eb3c02de09 100644 --- a/src/main/java/net/server/channel/handlers/OpenFamilyPedigreeHandler.java +++ b/src/main/java/net/server/channel/handlers/OpenFamilyPedigreeHandler.java @@ -36,7 +36,7 @@ public final class OpenFamilyPedigreeHandler extends AbstractMaplePacketHandler if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) return; MapleCharacter target = c.getChannelServer().getPlayerStorage().getCharacterByName(slea.readMapleAsciiString()); if(target != null && target.getFamily() != null) { - c.announce(PacketCreator.showPedigree(target.getFamilyEntry())); + c.sendPacket(PacketCreator.showPedigree(target.getFamilyEntry())); } } } diff --git a/src/main/java/net/server/channel/handlers/OwlWarpHandler.java b/src/main/java/net/server/channel/handlers/OwlWarpHandler.java index fed429d03e..587ecb8dde 100644 --- a/src/main/java/net/server/channel/handlers/OwlWarpHandler.java +++ b/src/main/java/net/server/channel/handlers/OwlWarpHandler.java @@ -38,7 +38,7 @@ public final class OwlWarpHandler extends AbstractMaplePacketHandler { int mapid = slea.readInt(); if(ownerid == c.getPlayer().getId()) { - c.announce(PacketCreator.serverNotice(1, "You cannot visit your own shop.")); + c.sendPacket(PacketCreator.serverNotice(1, "You cannot visit your own shop.")); return; } @@ -47,8 +47,8 @@ public final class OwlWarpHandler extends AbstractMaplePacketHandler { if(hm == null || hm.getMapId() != mapid || !hm.hasItem(c.getPlayer().getOwlSearch())) { ps = c.getWorldServer().getPlayerShop(ownerid); if(ps == null || ps.getMapId() != mapid || !ps.hasItem(c.getPlayer().getOwlSearch())) { - if(hm == null && ps == null) c.announce(PacketCreator.getOwlMessage(1)); - else c.announce(PacketCreator.getOwlMessage(3)); + if(hm == null && ps == null) c.sendPacket(PacketCreator.getOwlMessage(1)); + else c.sendPacket(PacketCreator.getOwlMessage(3)); return; } @@ -59,22 +59,22 @@ public final class OwlWarpHandler extends AbstractMaplePacketHandler { if(ps.isOpen()) { //change map has a delay, must double check if(!ps.visitShop(c.getPlayer())) { - if(!ps.isBanned(c.getPlayer().getName())) c.announce(PacketCreator.getOwlMessage(2)); - else c.announce(PacketCreator.getOwlMessage(17)); + if(!ps.isBanned(c.getPlayer().getName())) c.sendPacket(PacketCreator.getOwlMessage(2)); + else c.sendPacket(PacketCreator.getOwlMessage(17)); } } else { - //c.announce(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); - c.announce(PacketCreator.getOwlMessage(18)); + //c.sendPacket(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); + c.sendPacket(PacketCreator.getOwlMessage(18)); } } else { - c.announce(PacketCreator.serverNotice(1, "That shop is currently located in another channel. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); + c.sendPacket(PacketCreator.serverNotice(1, "That shop is currently located in another channel. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); } } else { - c.announce(PacketCreator.serverNotice(1, "That shop is currently located outside of the FM area. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); + c.sendPacket(PacketCreator.serverNotice(1, "That shop is currently located outside of the FM area. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); } } else { - //c.announce(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); - c.announce(PacketCreator.getOwlMessage(18)); + //c.sendPacket(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); + c.sendPacket(PacketCreator.getOwlMessage(18)); } } else { if(hm.isOpen()) { @@ -84,25 +84,25 @@ public final class OwlWarpHandler extends AbstractMaplePacketHandler { if(hm.isOpen()) { //change map has a delay, must double check if(hm.addVisitor(c.getPlayer())) { - c.announce(PacketCreator.getHiredMerchant(c.getPlayer(), hm, false)); + c.sendPacket(PacketCreator.getHiredMerchant(c.getPlayer(), hm, false)); c.getPlayer().setHiredMerchant(hm); } else { - //c.announce(PacketCreator.serverNotice(1, hm.getOwner() + "'s merchant is full. Wait awhile before trying again.")); - c.announce(PacketCreator.getOwlMessage(2)); + //c.sendPacket(PacketCreator.serverNotice(1, hm.getOwner() + "'s merchant is full. Wait awhile before trying again.")); + c.sendPacket(PacketCreator.getOwlMessage(2)); } } else { - //c.announce(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); - c.announce(PacketCreator.getOwlMessage(18)); + //c.sendPacket(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); + c.sendPacket(PacketCreator.getOwlMessage(18)); } } else { - c.announce(PacketCreator.serverNotice(1, "That merchant is currently located in another channel. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); + c.sendPacket(PacketCreator.serverNotice(1, "That merchant is currently located in another channel. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); } } else { - c.announce(PacketCreator.serverNotice(1, "That merchant is currently located outside of the FM area. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); + c.sendPacket(PacketCreator.serverNotice(1, "That merchant is currently located outside of the FM area. Current location: Channel " + hm.getChannel() + ", '" + hm.getMap().getMapName() + "'.")); } } else { - //c.announce(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); - c.announce(PacketCreator.getOwlMessage(18)); + //c.sendPacket(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); + c.sendPacket(PacketCreator.getOwlMessage(18)); } } } diff --git a/src/main/java/net/server/channel/handlers/PartyOperationHandler.java b/src/main/java/net/server/channel/handlers/PartyOperationHandler.java index 2bd2f3e0eb..443dd9b107 100644 --- a/src/main/java/net/server/channel/handlers/PartyOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/PartyOperationHandler.java @@ -69,7 +69,7 @@ public final class PartyOperationHandler extends AbstractMaplePacketHandler { if (res == InviteResult.ACCEPTED) { MapleParty.joinParty(player, partyid, false); } else { - c.announce(PacketCreator.serverNotice(5, "You couldn't join the party due to an expired invitation request.")); + c.sendPacket(PacketCreator.serverNotice(5, "You couldn't join the party due to an expired invitation request.")); } break; } @@ -78,11 +78,11 @@ public final class PartyOperationHandler extends AbstractMaplePacketHandler { MapleCharacter invited = world.getPlayerStorage().getCharacterByName(name); if (invited != null) { if(invited.getLevel() < 10 && (!YamlConfig.config.server.USE_PARTY_FOR_STARTERS || player.getLevel() >= 10)) { //min requirement is level 10 - c.announce(PacketCreator.serverNotice(5, "The player you have invited does not meet the requirements.")); + c.sendPacket(PacketCreator.serverNotice(5, "The player you have invited does not meet the requirements.")); return; } if(YamlConfig.config.server.USE_PARTY_FOR_STARTERS && invited.getLevel() >= 10 && player.getLevel() < 10) { //trying to invite high level - c.announce(PacketCreator.serverNotice(5, "The player you have invited does not meet the requirements.")); + c.sendPacket(PacketCreator.serverNotice(5, "The player you have invited does not meet the requirements.")); return; } @@ -96,18 +96,18 @@ public final class PartyOperationHandler extends AbstractMaplePacketHandler { } if (party.getMembers().size() < 6) { if (MapleInviteCoordinator.createInvite(InviteType.PARTY, player, party.getId(), invited.getId())) { - invited.getClient().announce(PacketCreator.partyInvite(player)); + invited.sendPacket(PacketCreator.partyInvite(player)); } else { - c.announce(PacketCreator.partyStatusMessage(22, invited.getName())); + c.sendPacket(PacketCreator.partyStatusMessage(22, invited.getName())); } } else { - c.announce(PacketCreator.partyStatusMessage(17)); + c.sendPacket(PacketCreator.partyStatusMessage(17)); } } else { - c.announce(PacketCreator.partyStatusMessage(16)); + c.sendPacket(PacketCreator.partyStatusMessage(16)); } } else { - c.announce(PacketCreator.partyStatusMessage(19)); + c.sendPacket(PacketCreator.partyStatusMessage(19)); } break; } diff --git a/src/main/java/net/server/channel/handlers/PartySearchStartHandler.java b/src/main/java/net/server/channel/handlers/PartySearchStartHandler.java index f4d21c7c90..eb8c569e22 100644 --- a/src/main/java/net/server/channel/handlers/PartySearchStartHandler.java +++ b/src/main/java/net/server/channel/handlers/PartySearchStartHandler.java @@ -44,19 +44,19 @@ public class PartySearchStartHandler extends AbstractMaplePacketHandler { MapleCharacter chr = c.getPlayer(); if (min > max) { chr.dropMessage(1, "The min. value is higher than the max!"); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (max - min > 30) { chr.dropMessage(1, "You can only search for party members within a range of 30 levels."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (chr.getLevel() < min || chr.getLevel() > max) { chr.dropMessage(1, "The range of level for search has to include your own level."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } diff --git a/src/main/java/net/server/channel/handlers/PetFoodHandler.java b/src/main/java/net/server/channel/handlers/PetFoodHandler.java index 6d56611372..8f16b27b59 100644 --- a/src/main/java/net/server/channel/handlers/PetFoodHandler.java +++ b/src/main/java/net/server/channel/handlers/PetFoodHandler.java @@ -41,14 +41,14 @@ public final class PetFoodHandler extends AbstractMaplePacketHandler { MapleCharacter chr = c.getPlayer(); AutobanManager abm = chr.getAutobanManager(); if (abm.getLastSpam(2) + 500 > currentServerTime()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } abm.spam(2); slea.readInt(); // timestamp issue detected thanks to Masterrulax abm.setTimestamp(1, Server.getInstance().getCurrentTimestamp(), 3); if (chr.getNoPets() == 0) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } int previousFullness = 100; diff --git a/src/main/java/net/server/channel/handlers/PetLootHandler.java b/src/main/java/net/server/channel/handlers/PetLootHandler.java index 68494ba459..e3cda96fcb 100644 --- a/src/main/java/net/server/channel/handlers/PetLootHandler.java +++ b/src/main/java/net/server/channel/handlers/PetLootHandler.java @@ -44,7 +44,7 @@ public final class PetLootHandler extends AbstractMaplePacketHandler { int petIndex = chr.getPetIndex(slea.readInt()); MaplePet pet = chr.getPet(petIndex); if (pet == null || !pet.isSummoned()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -55,27 +55,27 @@ public final class PetLootHandler extends AbstractMaplePacketHandler { MapleMapItem mapitem = (MapleMapItem) ob; if (mapitem.getMeso() > 0) { if (!chr.isEquippedMesoMagnet()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (chr.isEquippedPetItemIgnore()) { final Set petIgnore = chr.getExcludedItems(); if(!petIgnore.isEmpty() && petIgnore.contains(Integer.MAX_VALUE)) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } } else { if (!chr.isEquippedItemPouch()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (chr.isEquippedPetItemIgnore()) { final Set petIgnore = chr.getExcludedItems(); if(!petIgnore.isEmpty() && petIgnore.contains(mapitem.getItem().getItemId())) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } @@ -83,7 +83,7 @@ public final class PetLootHandler extends AbstractMaplePacketHandler { chr.pickupItem(ob, petIndex); } catch (NullPointerException | ClassCastException e) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } } diff --git a/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java b/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java index 52fa49abb0..373a23b320 100644 --- a/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerInteractionHandler.java @@ -128,7 +128,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { if (!c.tryacquireClient()) { // thanks GabrielSin for pointing dupes within player interactions - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -138,7 +138,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if (mode == Action.CREATE.getCode()) { if(!chr.isAlive()) { // thanks GabrielSin for pointing this - chr.getClient().announce(PacketCreator.getMiniRoomError(4)); + chr.sendPacket(PacketCreator.getMiniRoomError(4)); return; } @@ -148,7 +148,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { } else if (createType == 1) { // omok mini game int status = establishMiniroomStatus(chr, true); if (status > 0) { - chr.getClient().announce(PacketCreator.getMiniRoomError(status)); + chr.sendPacket(PacketCreator.getMiniRoomError(status)); return; } @@ -168,7 +168,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { type = 0; } if (!chr.haveItem(4080000 + type)) { - chr.getClient().announce(PacketCreator.getMiniRoomError(6)); + chr.sendPacket(PacketCreator.getMiniRoomError(6)); return; } @@ -182,7 +182,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { } else if (createType == 2) { // matchcard int status = establishMiniroomStatus(chr, true); if (status > 0) { - chr.getClient().announce(PacketCreator.getMiniRoomError(status)); + chr.sendPacket(PacketCreator.getMiniRoomError(status)); return; } @@ -202,7 +202,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { type = 0; } if (!chr.haveItem(4080100)) { - chr.getClient().announce(PacketCreator.getMiniRoomError(6)); + chr.sendPacket(PacketCreator.getMiniRoomError(6)); return; } @@ -222,13 +222,13 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { game.sendMatchCard(c, type); } else if (createType == 4 || createType == 5) { // shop if(!GameConstants.isFreeMarketRoom(chr.getMapId())) { - chr.getClient().announce(PacketCreator.getMiniRoomError(15)); + chr.sendPacket(PacketCreator.getMiniRoomError(15)); return; } int status = establishMiniroomStatus(chr, false); if (status > 0) { - chr.getClient().announce(PacketCreator.getMiniRoomError(status)); + chr.sendPacket(PacketCreator.getMiniRoomError(status)); return; } @@ -240,7 +240,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { slea.skip(3); int itemId = slea.readInt(); if (chr.getInventory(MapleInventoryType.CASH).countById(itemId) < 1) { - chr.getClient().announce(PacketCreator.getMiniRoomError(6)); + chr.sendPacket(PacketCreator.getMiniRoomError(6)); return; } @@ -250,13 +250,13 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { chr.getMap().addMapObject(shop); shop.sendShop(c); c.getWorldServer().registerPlayerShop(shop); - //c.announce(PacketCreator.getPlayerShopRemoveVisitor(1)); + //c.sendPacket(PacketCreator.getPlayerShopRemoveVisitor(1)); } else if (ItemConstants.isHiredMerchant(itemId)) { MapleHiredMerchant merchant = new MapleHiredMerchant(chr, desc, itemId); chr.setHiredMerchant(merchant); c.getWorldServer().registerHiredMerchant(merchant); chr.getClient().getChannelServer().addHiredMerchant(chr.getId(), merchant); - chr.announce(PacketCreator.getHiredMerchant(chr, merchant, true)); + chr.sendPacket(PacketCreator.getHiredMerchant(chr, merchant, true)); } } } else if (mode == Action.INVITE.getCode()) { @@ -274,7 +274,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if (!chr.getTrade().isFullTrade() && !chr.getTrade().getPartner().isFullTrade()) { MapleTrade.visitTrade(chr, chr.getTrade().getPartner().getChr()); } else { - chr.getClient().announce(PacketCreator.getMiniRoomError(2)); + chr.sendPacket(PacketCreator.getMiniRoomError(2)); return; } } else { @@ -303,10 +303,10 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { break; } } else { - chr.getClient().announce(PacketCreator.getMiniRoomError(2)); + chr.sendPacket(PacketCreator.getMiniRoomError(2)); } } else { - chr.getClient().announce(PacketCreator.getMiniRoomError(22)); + chr.sendPacket(PacketCreator.getMiniRoomError(22)); } } else if (ob instanceof MapleHiredMerchant && chr.getHiredMerchant() == null) { MapleHiredMerchant merchant = (MapleHiredMerchant) ob; @@ -347,11 +347,11 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { slea.readShort(); int birthday = slea.readInt(); if (!CashOperationHandler.checkBirthday(c, birthday)) { // birthday check here found thanks to lucasziron - c.announce(PacketCreator.serverNotice(1, "Please check again the birthday date.")); + c.sendPacket(PacketCreator.serverNotice(1, "Please check again the birthday date.")); return; } - c.announce(PacketCreator.hiredMerchantOwnerMaintenanceLeave()); + c.sendPacket(PacketCreator.hiredMerchantOwnerMaintenanceLeave()); } if (!canPlaceStore(chr)) { // thanks Ari for noticing player shops overlapping on opening time @@ -453,7 +453,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if (game.isOwner(chr)) { game.broadcastToVisitor(PacketCreator.getMatchCardSelect(game, turn, slot, firstslot, turn)); } else { - game.getOwner().getClient().announce(PacketCreator.getMatchCardSelect(game, turn, slot, firstslot, turn)); + game.getOwner().sendPacket(PacketCreator.getMatchCardSelect(game, turn, slot, firstslot, turn)); } } else if ((game.getCardId(firstslot)) == (game.getCardId(slot))) { if (game.isOwner(chr)) { @@ -480,30 +480,30 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if (targetSlot < 1 || targetSlot > 9) { System.out.println("[Hack] " + chr.getName() + " Trying to dupe on trade slot."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (item == null) { - c.announce(PacketCreator.serverNotice(1, "Invalid item description.")); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "Invalid item description.")); + c.sendPacket(PacketCreator.enableActions()); return; } if (ii.isUnmerchable(item.getItemId())) { if (ItemConstants.isPet(item.getItemId())) { - c.announce(PacketCreator.serverNotice(1, "Pets are not allowed to be traded.")); + c.sendPacket(PacketCreator.serverNotice(1, "Pets are not allowed to be traded.")); } else { - c.announce(PacketCreator.serverNotice(1, "Cash items are not allowed to be traded.")); + c.sendPacket(PacketCreator.serverNotice(1, "Cash items are not allowed to be traded.")); } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (quantity < 1 || quantity > item.getQuantity()) { - c.announce(PacketCreator.serverNotice(1, "You don't have enough quantity of the item.")); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "You don't have enough quantity of the item.")); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -512,8 +512,8 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if ((quantity <= item.getQuantity() && quantity >= 0) || ItemConstants.isRechargeable(item.getItemId())) { if (ii.isDropRestricted(item.getItemId())) { // ensure that undroppable items do not make it to the trade window if (!MapleKarmaManipulator.hasKarmaFlag(item)) { - c.announce(PacketCreator.serverNotice(1, "That item is untradeable.")); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "That item is untradeable.")); + c.sendPacket(PacketCreator.enableActions()); return; } } @@ -523,8 +523,8 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { try { Item checkItem = chr.getInventory(ivType).getItem(pos); if (checkItem != item || checkItem.getPosition() != item.getPosition()) { - c.announce(PacketCreator.serverNotice(1, "Invalid item description.")); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "Invalid item description.")); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -539,9 +539,9 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if (trade.addItem(tradeItem)) { MapleInventoryManipulator.removeFromSlot(c, ivType, item.getPosition(), quantity, true); - trade.getChr().announce(PacketCreator.getTradeItemAdd((byte) 0, tradeItem)); + trade.getChr().sendPacket(PacketCreator.getTradeItemAdd((byte) 0, tradeItem)); if (trade.getPartner() != null) { - trade.getPartner().getChr().announce(PacketCreator.getTradeItemAdd((byte) 1, tradeItem)); + trade.getPartner().getChr().sendPacket(PacketCreator.getTradeItemAdd((byte) 1, tradeItem)); } } } catch (Exception e) { @@ -562,17 +562,17 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { Item ivItem = chr.getInventory(ivType).getItem(slot); if (ivItem == null || ivItem.isUntradeable()) { - c.announce(PacketCreator.serverNotice(1, "Could not perform shop operation with that item.")); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "Could not perform shop operation with that item.")); + c.sendPacket(PacketCreator.enableActions()); return; } else if (MapleItemInformationProvider.getInstance().isUnmerchable(ivItem.getItemId())) { if (ItemConstants.isPet(ivItem.getItemId())) { - c.announce(PacketCreator.serverNotice(1, "Pets are not allowed to be sold on the Player Store.")); + c.sendPacket(PacketCreator.serverNotice(1, "Pets are not allowed to be sold on the Player Store.")); } else { - c.announce(PacketCreator.serverNotice(1, "Cash items are not allowed to be sold on the Player Store.")); + c.sendPacket(PacketCreator.serverNotice(1, "Cash items are not allowed to be sold on the Player Store.")); } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -582,8 +582,8 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { perBundle = 1; bundles = 1; } else if (ivItem.getQuantity() < (bundles * perBundle)) { // thanks GabrielSin for finding a dupe here - c.announce(PacketCreator.serverNotice(1, "Could not perform shop operation with that item.")); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "Could not perform shop operation with that item.")); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -604,7 +604,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MapleHiredMerchant merchant = chr.getHiredMerchant(); if (shop != null && shop.isOwner(chr)) { if (shop.isOpen() || !shop.addItem(shopItem)) { // thanks Vcoc for pointing an exploit with unlimited shop slots - c.announce(PacketCreator.serverNotice(1, "You can't sell it anymore.")); + c.sendPacket(PacketCreator.serverNotice(1, "You can't sell it anymore.")); return; } @@ -614,15 +614,15 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.removeFromSlot(c, ivType, slot, (short) (bundles * perBundle), true); } - c.announce(PacketCreator.getPlayerShopItemUpdate(shop)); + c.sendPacket(PacketCreator.getPlayerShopItemUpdate(shop)); } else if (merchant != null && merchant.isOwner(chr)) { if (ivType.equals(MapleInventoryType.CASH) && merchant.isPublished()) { - c.announce(PacketCreator.serverNotice(1, "Cash items are only allowed to be sold when first opening the store.")); + c.sendPacket(PacketCreator.serverNotice(1, "Cash items are only allowed to be sold when first opening the store.")); return; } if (merchant.isOpen() || !merchant.addItem(shopItem)) { // thanks Vcoc for pointing an exploit with unlimited shop slots - c.announce(PacketCreator.serverNotice(1, "You can't sell it anymore.")); + c.sendPacket(PacketCreator.serverNotice(1, "You can't sell it anymore.")); return; } @@ -632,7 +632,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.removeFromSlot(c, ivType, slot, (short) (bundles * perBundle), true); } - c.announce(PacketCreator.updateHiredMerchant(merchant, chr)); + c.sendPacket(PacketCreator.updateHiredMerchant(merchant, chr)); if (YamlConfig.config.server.USE_ENFORCE_MERCHANT_SAVE) { chr.saveCharToDB(false); @@ -644,7 +644,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { ex.printStackTrace(); } } else { - c.announce(PacketCreator.serverNotice(1, "You can't sell without owning a shop.")); + c.sendPacket(PacketCreator.serverNotice(1, "You can't sell without owning a shop.")); } } else if (mode == Action.REMOVE_ITEM.getCode()) { if (isTradeOpen(chr)) return; @@ -652,7 +652,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MaplePlayerShop shop = chr.getPlayerShop(); if (shop != null && shop.isOwner(chr)) { if (shop.isOpen()) { - c.announce(PacketCreator.serverNotice(1, "You can't take it with the store open.")); + c.sendPacket(PacketCreator.serverNotice(1, "You can't take it with the store open.")); return; } @@ -682,7 +682,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { merchant.closeOwnerMerchant(chr); return; } - c.announce(PacketCreator.updateHiredMerchant(merchant, chr)); + c.sendPacket(PacketCreator.updateHiredMerchant(merchant, chr)); } else if (mode == Action.BUY.getCode() || mode == Action.MERCHANT_BUY.getCode()) { if (isTradeOpen(chr)) return; @@ -711,7 +711,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MapleHiredMerchant merchant = chr.getHiredMerchant(); if (merchant != null && merchant.isOwner(chr)) { if (merchant.isOpen()) { - c.announce(PacketCreator.serverNotice(1, "You can't take it with the store open.")); + c.sendPacket(PacketCreator.serverNotice(1, "You can't take it with the store open.")); return; } @@ -749,7 +749,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { } chr.setHiredMerchant(null); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if (mode == Action.BAN_PLAYER.getCode()) { slea.skip(1); @@ -764,7 +764,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if(visitor != null) { visitor.closeMiniGame(false); - visitor.announce(PacketCreator.getMiniGameClose(true, 5)); + visitor.sendPacket(PacketCreator.getMiniGameClose(true, 5)); } } } else if (mode == Action.EXIT_AFTER_GAME.getCode()) { @@ -786,7 +786,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { private static boolean isTradeOpen(MapleCharacter chr) { if (chr.getTrade() != null) { // thanks to Rien dev team //Apparently there is a dupe exploit that causes racing conditions when saving/retrieving from the db with stuff like trade open. - chr.announce(PacketCreator.enableActions()); + chr.sendPacket(PacketCreator.enableActions()); return true; } @@ -804,11 +804,11 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MaplePlayerShop shop = mc.getPlayerShop(); if (shop != null && shop.isOwner(mc)) { - chr.announce(PacketCreator.getMiniRoomError(13)); + chr.sendPacket(PacketCreator.getMiniRoomError(13)); return false; } } else { - chr.announce(PacketCreator.getMiniRoomError(13)); + chr.sendPacket(PacketCreator.getMiniRoomError(13)); return false; } } @@ -816,7 +816,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { Point cpos = chr.getPosition(); MaplePortal portal = chr.getMap().findClosestTeleportPortal(cpos); if (portal != null && portal.getPosition().distance(cpos) < 120.0) { - chr.announce(PacketCreator.getMiniRoomError(10)); + chr.sendPacket(PacketCreator.getMiniRoomError(10)); return false; } } catch (Exception e) { diff --git a/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java b/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java index a6edc7a3cc..bff68265fd 100644 --- a/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java @@ -34,6 +34,7 @@ import net.server.channel.CharacterIdChannelPair; import net.server.coordinator.session.Hwid; import net.server.coordinator.session.SessionCoordinator; import net.server.coordinator.world.MapleEventRecallCoordinator; +import net.server.guild.GuildPackets; import net.server.guild.MapleAlliance; import net.server.guild.MapleGuild; import net.server.world.MaplePartyCharacter; @@ -46,7 +47,7 @@ import tools.FilePrinter; import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; -import tools.packets.Wedding; +import tools.packets.WeddingPackets; import java.sql.Connection; import java.sql.PreparedStatement; @@ -89,7 +90,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { if (!c.tryacquireClient()) { // thanks MedicOP for assisting on concurrency protection here - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); } try { @@ -176,7 +177,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { if (state == MapleClient.LOGIN_LOGGEDIN) { c.disconnect(true, false); } else { - c.announce(PacketCreator.getAfterLoginError(7)); + c.sendPacket(PacketCreator.getAfterLoginError(7)); } return; @@ -188,7 +189,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { } else { c.setPlayer(null); c.setAccID(0); - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } @@ -213,7 +214,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { player.silentApplyDiseases(diseases); } - c.announce(PacketCreator.getCharInfo(player)); + c.sendPacket(PacketCreator.getCharInfo(player)); if (!player.isHidden()) { if (player.isGM() && YamlConfig.config.server.USE_AUTOHIDE_GM) { player.toggleHide(true); @@ -225,10 +226,10 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { // pot bindings being passed through other characters on the account detected thanks to Croosade dev team MapleKeyBinding autohpPot = player.getKeymap().get(91); - player.announce(PacketCreator.sendAutoHpPot(autohpPot != null ? autohpPot.getAction() : 0)); + player.sendPacket(PacketCreator.sendAutoHpPot(autohpPot != null ? autohpPot.getAction() : 0)); MapleKeyBinding autompPot = player.getKeymap().get(92); - player.announce(PacketCreator.sendAutoMpPot(autompPot != null ? autompPot.getAction() : 0)); + player.sendPacket(PacketCreator.sendAutoMpPot(autompPot != null ? autompPot.getAction() : 0)); player.getMap().addPlayer(player); player.visitMap(player.getMap()); @@ -241,9 +242,9 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { ble.setChannel(onlineBuddy.getChannel()); bl.put(ble); } - c.announce(PacketCreator.updateBuddylist(bl.getBuddies())); + c.sendPacket(PacketCreator.updateBuddylist(bl.getBuddies())); - c.announce(PacketCreator.loadFamily(player)); + c.sendPacket(PacketCreator.loadFamily(player)); if (player.getFamilyId() > 0) { MapleFamily f = wserv.getFamily(player.getFamilyId()); if (f != null) { @@ -252,17 +253,17 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { familyEntry.setCharacter(player); player.setFamilyEntry(familyEntry); - c.announce(PacketCreator.getFamilyInfo(familyEntry)); + c.sendPacket(PacketCreator.getFamilyInfo(familyEntry)); familyEntry.announceToSenior(PacketCreator.sendFamilyLoginNotice(player.getName(), true), true); } else { FilePrinter.printError(FilePrinter.FAMILY_ERROR, "Player " + player.getName() + "'s family doesn't have an entry for them. (" + f.getID() + ")"); } } else { FilePrinter.printError(FilePrinter.FAMILY_ERROR, "Player " + player.getName() + " has an invalid family ID. (" + player.getFamilyId() + ")"); - c.announce(PacketCreator.getFamilyInfo(null)); + c.sendPacket(PacketCreator.getFamilyInfo(null)); } } else { - c.announce(PacketCreator.getFamilyInfo(null)); + c.sendPacket(PacketCreator.getFamilyInfo(null)); } if (player.getGuildId() > 0) { @@ -275,7 +276,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { playerGuild.getMGC(player.getId()).setCharacter(player); player.setMGC(playerGuild.getMGC(player.getId())); server.setGuildMemberOnline(player, true, c.getChannel()); - c.announce(PacketCreator.showGuildInfo(player)); + c.sendPacket(GuildPackets.showGuildInfo(player)); int allianceId = player.getGuild().getAllianceId(); if (allianceId > 0) { MapleAlliance newAlliance = server.getAlliance(allianceId); @@ -288,11 +289,11 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { } } if (newAlliance != null) { - c.announce(PacketCreator.updateAllianceInfo(newAlliance, c.getWorld())); - c.announce(PacketCreator.allianceNotice(newAlliance.getId(), newAlliance.getNotice())); + c.sendPacket(GuildPackets.updateAllianceInfo(newAlliance, c.getWorld())); + c.sendPacket(GuildPackets.allianceNotice(newAlliance.getId(), newAlliance.getNotice())); if (newcomer) { - server.allianceMessage(allianceId, PacketCreator.allianceMemberOnline(player, true), player.getId(), -1); + server.allianceMessage(allianceId, GuildPackets.allianceMemberOnline(player, true), player.getId(), -1); } } } @@ -304,7 +305,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { MaplePartyCharacter pchar = player.getMPC(); //Use this in case of enabling party HPbar HUD when logging in, however "you created a party" will appear on chat. - //c.announce(PacketCreator.partyCreated(pchar)); + //c.sendPacket(PacketCreator.partyCreated(pchar)); pchar.setChannel(c.getChannel()); pchar.setMapId(player.getMapId()); @@ -323,16 +324,16 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { eqpInv.unlockInventory(); } - c.announce(PacketCreator.updateBuddylist(player.getBuddylist().getBuddies())); + c.sendPacket(PacketCreator.updateBuddylist(player.getBuddylist().getBuddies())); CharacterNameAndId pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest(); if (pendingBuddyRequest != null) { - c.announce(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); + c.sendPacket(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); } - c.announce(PacketCreator.updateGender(player)); + c.sendPacket(PacketCreator.updateGender(player)); player.checkMessenger(); - c.announce(PacketCreator.enableReport()); + c.sendPacket(PacketCreator.enableReport()); player.changeSkillLevel(SkillFactory.getSkill(10000000 * player.getJobType() + 12), (byte) (player.getLinkedLevel() / 10), 20, -1); player.checkBerserk(player.isHidden()); @@ -345,14 +346,14 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { MapleMount mount = player.getMount(); // thanks Ari for noticing a scenario where Silver Mane quest couldn't be started if (mount.getItemId() != 0) { - player.announce(PacketCreator.updateMount(player.getId(), mount, false)); + player.sendPacket(PacketCreator.updateMount(player.getId(), mount, false)); } player.reloadQuestExpirations(); /* if (!c.hasVotedAlready()){ - player.announce(PacketCreator.earnTitleMessage("You can vote now! Vote and earn a vote point!")); + player.sendPacket(PacketCreator.earnTitleMessage("You can vote now! Vote and earn a vote point!")); } */ if (player.isGM()) { @@ -362,7 +363,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { if (diseases != null) { for (Entry> e : diseases.entrySet()) { final List> debuff = Collections.singletonList(new Pair<>(e.getKey(), e.getValue().getRight().getX())); - c.announce(PacketCreator.giveDebuff(debuff, e.getValue().getRight())); + c.sendPacket(PacketCreator.giveDebuff(debuff, e.getValue().getRight())); } } } else { @@ -400,8 +401,8 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { final MapleCharacter partner = wserv.getPlayerStorage().getCharacterById(partnerId); if (partner != null && !partner.isAwayFromWorld()) { - player.announce(Wedding.OnNotifyWeddingPartnerTransfer(partnerId, partner.getMapId())); - partner.announce(Wedding.OnNotifyWeddingPartnerTransfer(player.getId(), player.getMapId())); + player.sendPacket(WeddingPackets.OnNotifyWeddingPartnerTransfer(partnerId, partner.getMapId())); + partner.sendPacket(WeddingPackets.OnNotifyWeddingPartnerTransfer(player.getId(), player.getMapId())); } } @@ -449,7 +450,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { ps2.setInt(1, player.getId()); ps2.executeUpdate(); - c.announce(PacketCreator.sendDueyParcelNotification(rs.getInt("Type") == 1)); + c.sendPacket(PacketCreator.sendDueyParcelNotification(rs.getInt("Type") == 1)); } } } diff --git a/src/main/java/net/server/channel/handlers/PlayerMapTransitionHandler.java b/src/main/java/net/server/channel/handlers/PlayerMapTransitionHandler.java index 4eb702b576..9e1fed873e 100644 --- a/src/main/java/net/server/channel/handlers/PlayerMapTransitionHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerMapTransitionHandler.java @@ -49,7 +49,7 @@ public final class PlayerMapTransitionHandler extends AbstractMaplePacketHandler chr.cancelBuffStats(MapleBuffStat.HOMING_BEACON); final List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.HOMING_BEACON, 0)); - chr.announce(PacketCreator.giveBuff(1, beaconid, stat)); + chr.sendPacket(PacketCreator.giveBuff(1, beaconid, stat)); } if (!chr.isHidden()) { // thanks Lame (Conrad) for noticing hidden characters controlling mobs @@ -57,7 +57,7 @@ public final class PlayerMapTransitionHandler extends AbstractMaplePacketHandler MapleMonster m = (MapleMonster) mo; if (m.getSpawnEffect() == 0 || m.getHp() < m.getMaxHp()) { // avoid effect-spawning mobs if (m.getController() == chr) { - c.announce(PacketCreator.stopControllingMonster(m.getObjectId())); + c.sendPacket(PacketCreator.stopControllingMonster(m.getObjectId())); m.sendDestroyData(c); m.aggroRemoveController(); } else { diff --git a/src/main/java/net/server/channel/handlers/RPSActionHandler.java b/src/main/java/net/server/channel/handlers/RPSActionHandler.java index b185d7ca1f..8ff86854a6 100644 --- a/src/main/java/net/server/channel/handlers/RPSActionHandler.java +++ b/src/main/java/net/server/channel/handlers/RPSActionHandler.java @@ -37,29 +37,29 @@ public final class RPSActionHandler extends AbstractMaplePacketHandler{ if(chr.getMeso() >= 1000){ chr.setRPS(new MapleRockPaperScissor(c, mode)); }else{ - c.announce(PacketCreator.rpsMesoError(-1)); + c.sendPacket(PacketCreator.rpsMesoError(-1)); } break; case 1: // answer if(rps == null || !rps.answer(c, slea.readByte())){ - c.announce(PacketCreator.rpsMode((byte) 0x0D));// 13 + c.sendPacket(PacketCreator.rpsMode((byte) 0x0D));// 13 } break; case 2: // time over if(rps == null || !rps.timeOut(c)){ - c.announce(PacketCreator.rpsMode((byte) 0x0D)); + c.sendPacket(PacketCreator.rpsMode((byte) 0x0D)); } break; case 3: // continue if(rps == null || !rps.nextRound(c)){ - c.announce(PacketCreator.rpsMode((byte) 0x0D)); + c.sendPacket(PacketCreator.rpsMode((byte) 0x0D)); } break; case 4: // leave if(rps != null){ rps.dispose(c); }else{ - c.announce(PacketCreator.rpsMode((byte) 0x0D)); + c.sendPacket(PacketCreator.rpsMode((byte) 0x0D)); } break; } diff --git a/src/main/java/net/server/channel/handlers/RaiseIncExpHandler.java b/src/main/java/net/server/channel/handlers/RaiseIncExpHandler.java index 21336fb4b1..aaf4f237dd 100644 --- a/src/main/java/net/server/channel/handlers/RaiseIncExpHandler.java +++ b/src/main/java/net/server/channel/handlers/RaiseIncExpHandler.java @@ -42,7 +42,7 @@ public class RaiseIncExpHandler extends AbstractMaplePacketHandler { MapleCharacter chr = c.getPlayer(); MapleQuest quest = MapleQuest.getInstanceFromInfoNumber(infoNumber); if (!chr.getQuest(quest).getStatus().equals(MapleQuestStatus.Status.STARTED)) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -64,7 +64,7 @@ public class RaiseIncExpHandler extends AbstractMaplePacketHandler { int nextValue = Math.min(consumables.get(consId) + c.getAbstractPlayerInteraction().getQuestProgressInt(questid, infoNumber), consItem.exp * consItem.grade); c.getAbstractPlayerInteraction().setQuestProgress(questid, infoNumber, nextValue); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } finally { c.releaseClient(); } diff --git a/src/main/java/net/server/channel/handlers/RangedAttackHandler.java b/src/main/java/net/server/channel/handlers/RangedAttackHandler.java index 7b758a0dd4..b61c193f16 100644 --- a/src/main/java/net/server/channel/handlers/RangedAttackHandler.java +++ b/src/main/java/net/server/channel/handlers/RangedAttackHandler.java @@ -31,6 +31,7 @@ import config.YamlConfig; import constants.game.GameConstants; import constants.inventory.ItemConstants; import constants.skills.*; +import net.packet.Packet; import server.MapleItemInformationProvider; import server.MapleStatEffect; import tools.PacketCreator; @@ -62,7 +63,7 @@ public final class RangedAttackHandler extends AbstractDealDamageHandler { if (GameConstants.isDojo(chr.getMap().getId()) && attack.numAttacked > 0) { chr.setDojoEnergy(chr.getDojoEnergy() + YamlConfig.config.server.DOJO_ENERGY_ATK); - c.announce(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); + c.sendPacket(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); } if (attack.skill == Buccaneer.ENERGY_ORB || attack.skill == ThunderBreaker.SPARK || attack.skill == Shadower.TAUNT || attack.skill == NightLord.TAUNT) { @@ -101,7 +102,7 @@ public final class RangedAttackHandler extends AbstractDealDamageHandler { effect = attack.getAttackEffect(chr, null); bulletCount = effect.getBulletCount(); if (effect.getCooldown() > 0) { - c.announce(PacketCreator.skillCooldown(attack.skill, effect.getCooldown())); + c.sendPacket(PacketCreator.skillCooldown(attack.skill, effect.getCooldown())); } if(attack.skill == 4111004) { // shadow meso @@ -187,7 +188,7 @@ public final class RangedAttackHandler extends AbstractDealDamageHandler { visProjectile = 0; } - byte[] packet; + final Packet packet; switch (attack.skill) { case 3121004: // Hurricane case 3221001: // Pierce @@ -208,7 +209,7 @@ public final class RangedAttackHandler extends AbstractDealDamageHandler { if (chr.skillIsCooling(attack.skill)) { return; } else { - c.announce(PacketCreator.skillCooldown(attack.skill, effect_.getCooldown())); + c.sendPacket(PacketCreator.skillCooldown(attack.skill, effect_.getCooldown())); chr.addCooldown(attack.skill, currentServerTime(), effect_.getCooldown() * 1000); } } diff --git a/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java b/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java index 0447680ffa..bda4500775 100644 --- a/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java +++ b/src/main/java/net/server/channel/handlers/RemoteStoreHandler.java @@ -42,13 +42,13 @@ public class RemoteStoreHandler extends AbstractMaplePacketHandler { if (hm.getChannel() == chr.getClient().getChannel()) { hm.visitShop(chr); } else { - c.announce(PacketCreator.remoteChannelChange((byte) (hm.getChannel() - 1))); + c.sendPacket(PacketCreator.remoteChannelChange((byte) (hm.getChannel() - 1))); } return; } else { chr.dropMessage(1, "You don't have a Merchant open."); } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } private static MapleHiredMerchant getMerchant(MapleClient c) { diff --git a/src/main/java/net/server/channel/handlers/ReportHandler.java b/src/main/java/net/server/channel/handlers/ReportHandler.java index 219ee9e9d8..3d4a1635c4 100644 --- a/src/main/java/net/server/channel/handlers/ReportHandler.java +++ b/src/main/java/net/server/channel/handlers/ReportHandler.java @@ -51,11 +51,11 @@ public final class ReportHandler extends AbstractMaplePacketHandler { c.getPlayer().decreaseReports(); c.getPlayer().gainMeso(-300, true); } else { - c.announce(PacketCreator.reportResponse((byte) 4)); + c.sendPacket(PacketCreator.reportResponse((byte) 4)); return; } } else { - c.announce(PacketCreator.reportResponse((byte) 2)); + c.sendPacket(PacketCreator.reportResponse((byte) 2)); return; } Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(6, victim + " was reported for: " + description)); @@ -70,7 +70,7 @@ public final class ReportHandler extends AbstractMaplePacketHandler { c.getPlayer().decreaseReports(); c.getPlayer().gainMeso(-300, true); } else { - c.announce(PacketCreator.reportResponse((byte) 4)); + c.sendPacket(PacketCreator.reportResponse((byte) 4)); return; } } diff --git a/src/main/java/net/server/channel/handlers/RingActionHandler.java b/src/main/java/net/server/channel/handlers/RingActionHandler.java index 0d5bcbeaa8..f2e9a5d0ef 100644 --- a/src/main/java/net/server/channel/handlers/RingActionHandler.java +++ b/src/main/java/net/server/channel/handlers/RingActionHandler.java @@ -38,7 +38,7 @@ import tools.DatabaseConnection; import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; -import tools.packets.Wedding; +import tools.packets.WeddingPackets; import java.sql.Connection; import java.sql.PreparedStatement; @@ -63,71 +63,71 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { // TODO: get the correct packet bytes for these popups if (source.isMarried()) { source.dropMessage(1, "You're already married!"); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if (source.getPartnerId() > 0) { source.dropMessage(1, "You're already engaged!"); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if (source.getMarriageItemId() > 0) { source.dropMessage(1, "You're already engaging someone!"); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if (target == null) { source.dropMessage(1, "Unable to find " + name + " on this channel."); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if (target == source) { source.dropMessage(1, "You can't engage yourself."); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if(target.getLevel() < 50) { source.dropMessage(1, "You can only propose to someone level 50 or higher."); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if(source.getLevel() < 50) { source.dropMessage(1, "You can only propose being level 50 or higher."); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if (!target.getMap().equals(source.getMap())) { source.dropMessage(1, "Make sure your partner is on the same map!"); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if (!source.haveItem(itemid) || itemid < 2240000 || itemid > 2240015) { - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if (target.isMarried()) { source.dropMessage(1, "The player is already married!"); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if (target.getPartnerId() > 0 || target.getMarriageItemId() > 0) { source.dropMessage(1, "The player is already engaged!"); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if (target.haveWeddingRing()) { source.dropMessage(1, "The player already holds a marriage ring..."); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if (source.haveWeddingRing()) { source.dropMessage(1, "You can't propose while holding a marriage ring!"); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if (target.getGender() == source.getGender()) { source.dropMessage(1, "You may only propose to a " + (source.getGender() == 1 ? "male" : "female") + "!"); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if (!MapleInventoryManipulator.checkSpace(c, newBoxId, 1, "")) { source.dropMessage(5, "You don't have a ETC slot available right now!"); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } else if (!MapleInventoryManipulator.checkSpace(target.getClient(), newBoxId + 1, 1, "")) { source.dropMessage(5, "The girl you proposed doesn't have a ETC slot available right now."); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); return; } source.setMarriageItemId(itemid); - target.announce(Wedding.OnMarriageRequest(source.getName(), source.getId())); + target.sendPacket(WeddingPackets.onMarriageRequest(source.getName(), source.getId())); } private static void eraseEngagementOffline(int characterId) { @@ -184,8 +184,8 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { } else { partner.dropMessage(5, chr.getName() + " has decided to break up the marriage."); - //partner.announce(Wedding.OnMarriageResult((byte) 0)); ok, how to gracefully unengage someone without the need to cc? - partner.announce(Wedding.OnNotifyWeddingPartnerTransfer(0, 0)); + //partner.sendPacket(Wedding.OnMarriageResult((byte) 0)); ok, how to gracefully unengage someone without the need to cc? + partner.sendPacket(WeddingPackets.OnNotifyWeddingPartnerTransfer(0, 0)); resetRingId(partner); partner.setPartnerId(-1); partner.setMarriageItemId(-1); @@ -194,8 +194,8 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { chr.dropMessage(5, "You have successfully break the marriage with " + MapleCharacter.getNameById(partnerid) + "."); - //chr.announce(Wedding.OnMarriageResult((byte) 0)); - chr.announce(Wedding.OnNotifyWeddingPartnerTransfer(0, 0)); + //chr.sendPacket(Wedding.OnMarriageResult((byte) 0)); + chr.sendPacket(WeddingPackets.OnNotifyWeddingPartnerTransfer(0, 0)); resetRingId(chr); chr.setPartnerId(-1); chr.setMarriageItemId(-1); @@ -233,8 +233,8 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.removeById(partner.getClient(), MapleInventoryType.ETC, partnerMarriageitemid, (short) 1, false, false); } - //partner.announce(Wedding.OnMarriageResult((byte) 0)); ok, how to gracefully unengage someone without the need to cc? - partner.announce(Wedding.OnNotifyWeddingPartnerTransfer(0, 0)); + //partner.sendPacket(Wedding.OnMarriageResult((byte) 0)); ok, how to gracefully unengage someone without the need to cc? + partner.sendPacket(WeddingPackets.OnNotifyWeddingPartnerTransfer(0, 0)); partner.setPartnerId(-1); partner.setMarriageItemId(-1); } @@ -244,8 +244,8 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { } chr.dropMessage(5, "You have successfully break the engagement with " + MapleCharacter.getNameById(partnerid) + "."); - //chr.announce(Wedding.OnMarriageResult((byte) 0)); - chr.announce(Wedding.OnNotifyWeddingPartnerTransfer(0, 0)); + //chr.sendPacket(Wedding.OnMarriageResult((byte) 0)); + chr.sendPacket(WeddingPackets.OnNotifyWeddingPartnerTransfer(0, 0)); chr.setPartnerId(-1); chr.setMarriageItemId(-1); } @@ -315,20 +315,20 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { final MapleCharacter target = c.getPlayer(); if (source == null) { - target.announce(PacketCreator.enableActions()); + target.sendPacket(PacketCreator.enableActions()); return; } final int itemid = source.getMarriageItemId(); if (target.getPartnerId() > 0 || source.getId() != id || itemid <= 0 || !source.haveItem(itemid) || source.getPartnerId() > 0 || !source.isAlive() || !target.isAlive()) { - target.announce(PacketCreator.enableActions()); + target.sendPacket(PacketCreator.enableActions()); return; } if (accepted) { final int newItemId = getBoxId(itemid); if (!MapleInventoryManipulator.checkSpace(c, newItemId, 1, "") || !MapleInventoryManipulator.checkSpace(source.getClient(), newItemId, 1, "")) { - target.announce(PacketCreator.enableActions()); + target.sendPacket(PacketCreator.enableActions()); return; } @@ -345,17 +345,17 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.addById(source.getClient(), newItemId, (short) 1); MapleInventoryManipulator.addById(c, (newItemId + 1), (short) 1); - source.announce(Wedding.OnMarriageResult(marriageId, source, false)); - target.announce(Wedding.OnMarriageResult(marriageId, source, false)); + source.sendPacket(WeddingPackets.OnMarriageResult(marriageId, source, false)); + target.sendPacket(WeddingPackets.OnMarriageResult(marriageId, source, false)); - source.announce(Wedding.OnNotifyWeddingPartnerTransfer(target.getId(), target.getMapId())); - target.announce(Wedding.OnNotifyWeddingPartnerTransfer(source.getId(), source.getMapId())); + source.sendPacket(WeddingPackets.OnNotifyWeddingPartnerTransfer(target.getId(), target.getMapId())); + target.sendPacket(WeddingPackets.OnNotifyWeddingPartnerTransfer(source.getId(), source.getMapId())); } catch (Exception e) { System.out.println("Error with engagement " + e.getMessage()); } } else { source.dropMessage(1, "She has politely declined your engagement request."); - source.announce(Wedding.OnMarriageResult((byte) 0)); + source.sendPacket(WeddingPackets.OnMarriageResult((byte) 0)); source.setMarriageItemId(-1); } @@ -374,12 +374,12 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { try { itemId = c.getPlayer().getInventory(MapleInventoryType.ETC).getItem(slot).getItemId(); } catch(NullPointerException npe) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if((itemId != 4031377 && itemId != 4031395) || !c.getPlayer().haveItem(itemId)) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -444,7 +444,7 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { if(invitationid == 4031406 || invitationid == 4031407) { Item item = c.getPlayer().getInventory(MapleInventoryType.ETC).getItem(slot); if(item == null || item.getItemId() != invitationid) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -452,7 +452,7 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { Pair coupleId = c.getWorldServer().getWeddingCoupleForGuest(c.getPlayer().getId(), invitationid == 4031407); if (coupleId != null) { int groomId = coupleId.getLeft(), brideId = coupleId.getRight(); - c.announce(Wedding.sendWeddingInvitation(MapleCharacter.getNameById(groomId), MapleCharacter.getNameById(brideId))); + c.sendPacket(WeddingPackets.sendWeddingInvitation(MapleCharacter.getNameById(groomId), MapleCharacter.getNameById(brideId))); } } @@ -502,6 +502,6 @@ public final class RingActionHandler extends AbstractMaplePacketHandler { break; } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/ScrollHandler.java b/src/main/java/net/server/channel/handlers/ScrollHandler.java index a22d413c5e..2bb16041ad 100644 --- a/src/main/java/net/server/channel/handlers/ScrollHandler.java +++ b/src/main/java/net/server/channel/handlers/ScrollHandler.java @@ -171,7 +171,7 @@ public final class ScrollHandler extends AbstractMaplePacketHandler { mods.add(new ModifyInventory(3, scrolled)); mods.add(new ModifyInventory(0, scrolled)); } - c.announce(PacketCreator.modifyInventory(true, mods)); + c.sendPacket(PacketCreator.modifyInventory(true, mods)); chr.getMap().broadcastMessage(PacketCreator.getScrollEffect(chr.getId(), scrollSuccess, legendarySpirit, whiteScroll)); if (dst < 0 && (scrollSuccess == Equip.ScrollResult.SUCCESS || scrollSuccess == Equip.ScrollResult.CURSE)) { chr.equipChanged(); @@ -184,9 +184,9 @@ public final class ScrollHandler extends AbstractMaplePacketHandler { private static void announceCannotScroll(MapleClient c, boolean legendarySpirit) { if (legendarySpirit) { - c.announce(PacketCreator.getScrollEffect(c.getPlayer().getId(), Equip.ScrollResult.FAIL, false, false)); + c.sendPacket(PacketCreator.getScrollEffect(c.getPlayer().getId(), Equip.ScrollResult.FAIL, false, false)); } else { - c.announce(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); } } diff --git a/src/main/java/net/server/channel/handlers/SkillBookHandler.java b/src/main/java/net/server/channel/handlers/SkillBookHandler.java index 5a4774cc9d..37bee76147 100644 --- a/src/main/java/net/server/channel/handlers/SkillBookHandler.java +++ b/src/main/java/net/server/channel/handlers/SkillBookHandler.java @@ -40,7 +40,7 @@ public final class SkillBookHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { if (!c.getPlayer().isAlive()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } diff --git a/src/main/java/net/server/channel/handlers/SpecialMoveHandler.java b/src/main/java/net/server/channel/handlers/SpecialMoveHandler.java index 2b96e283ed..93935599b6 100644 --- a/src/main/java/net/server/channel/handlers/SpecialMoveHandler.java +++ b/src/main/java/net/server/channel/handlers/SpecialMoveHandler.java @@ -64,8 +64,8 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler { } skillLevel = 1; chr.setDojoEnergy(0); - c.announce(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); - c.announce(PacketCreator.serverNotice(5, "As you used the secret skill, your energy bar has been reset.")); + c.sendPacket(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); + c.sendPacket(PacketCreator.serverNotice(5, "As you used the secret skill, your energy bar has been reset.")); } if (skillLevel == 0 || skillLevel != __skillLevel) return; @@ -79,7 +79,7 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler { cooldownTime /= 60; } - c.announce(PacketCreator.skillCooldown(skillid, cooldownTime)); + c.sendPacket(PacketCreator.skillCooldown(skillid, cooldownTime)); chr.addCooldown(skillid, currentServerTime(), cooldownTime * 1000); } } @@ -102,8 +102,8 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler { } } byte direction = slea.readByte(); // thanks MedicOP for pointing some 3rd-party related issues with Magnet - chr.getMap().broadcastMessage(chr, PacketCreator.showBuffeffect(chr.getId(), skillid, chr.getSkillLevel(skillid), 1, direction), false); - c.announce(PacketCreator.enableActions()); + chr.getMap().broadcastMessage(chr, PacketCreator.showBuffEffect(chr.getId(), skillid, chr.getSkillLevel(skillid), 1, direction), false); + c.sendPacket(PacketCreator.enableActions()); return; } else if (skillid == Brawler.MP_RECOVERY) {// MP Recovery Skill s = SkillFactory.getSkill(skillid); @@ -114,7 +114,7 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler { chr.addMP(gain); } else if (skillid == SuperGM.HEAL_PLUS_DISPEL) { slea.skip(11); - chr.getMap().broadcastMessage(chr, PacketCreator.showBuffeffect(chr.getId(), skillid, chr.getSkillLevel(skillid)), false); + chr.getMap().broadcastMessage(chr, PacketCreator.showBuffEffect(chr.getId(), skillid, chr.getSkillLevel(skillid)), false); } else if (skillid % 10000000 == 1004) { slea.readShort(); } @@ -143,10 +143,10 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler { } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } else { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/SpouseChatHandler.java b/src/main/java/net/server/channel/handlers/SpouseChatHandler.java index 6da509343d..9c0f142d82 100644 --- a/src/main/java/net/server/channel/handlers/SpouseChatHandler.java +++ b/src/main/java/net/server/channel/handlers/SpouseChatHandler.java @@ -39,8 +39,8 @@ public final class SpouseChatHandler extends AbstractMaplePacketHandler { if (partnerId > 0) { // yay marriage MapleCharacter spouse = c.getWorldServer().getPlayerStorage().getCharacterById(partnerId); if (spouse != null) { - spouse.announce(PacketCreator.OnCoupleMessage(c.getPlayer().getName(), msg, true)); - c.announce(PacketCreator.OnCoupleMessage(c.getPlayer().getName(), msg, true)); + spouse.sendPacket(PacketCreator.OnCoupleMessage(c.getPlayer().getName(), msg, true)); + c.sendPacket(PacketCreator.OnCoupleMessage(c.getPlayer().getName(), msg, true)); if (YamlConfig.config.server.USE_ENABLE_CHAT_LOG) { LogHelper.logChat(c, "Spouse", msg); } diff --git a/src/main/java/net/server/channel/handlers/TakeDamageHandler.java b/src/main/java/net/server/channel/handlers/TakeDamageHandler.java index 8e59aace0e..6acda7e7e0 100644 --- a/src/main/java/net/server/channel/handlers/TakeDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/TakeDamageHandler.java @@ -169,8 +169,8 @@ public final class TakeDamageHandler extends AbstractMaplePacketHandler { } map.damageMonster(chr, attacker, bouncedamage); map.broadcastMessage(chr, PacketCreator.damageMonster(oid, bouncedamage), true); - chr.getClient().announce(PacketCreator.showOwnBuffEffect(id, 5)); - map.broadcastMessage(chr, PacketCreator.showBuffeffect(chr.getId(), id, 5), false); + chr.sendPacket(PacketCreator.showOwnBuffEffect(id, 5)); + map.broadcastMessage(chr, PacketCreator.showBuffEffect(chr.getId(), id, 5), false); } } } @@ -274,7 +274,7 @@ public final class TakeDamageHandler extends AbstractMaplePacketHandler { } if (GameConstants.isDojo(map.getId())) { chr.setDojoEnergy(chr.getDojoEnergy() + YamlConfig.config.server.DOJO_ENERGY_DMG); - c.announce(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); + c.sendPacket(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); } for (MapleCharacter player : banishPlayers) { // chill, if this list ever gets non-empty an attacker does exist, trust me :) diff --git a/src/main/java/net/server/channel/handlers/TouchingCashShopHandler.java b/src/main/java/net/server/channel/handlers/TouchingCashShopHandler.java index c6613ceeb7..5679254814 100644 --- a/src/main/java/net/server/channel/handlers/TouchingCashShopHandler.java +++ b/src/main/java/net/server/channel/handlers/TouchingCashShopHandler.java @@ -33,6 +33,6 @@ import tools.data.input.SeekableLittleEndianAccessor; public final class TouchingCashShopHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { - c.announce(PacketCreator.showCash(c.getPlayer())); + c.sendPacket(PacketCreator.showCash(c.getPlayer())); } } diff --git a/src/main/java/net/server/channel/handlers/TransferNameHandler.java b/src/main/java/net/server/channel/handlers/TransferNameHandler.java index 89f38629c5..6aebf3b4a7 100644 --- a/src/main/java/net/server/channel/handlers/TransferNameHandler.java +++ b/src/main/java/net/server/channel/handlers/TransferNameHandler.java @@ -43,20 +43,20 @@ public final class TransferNameHandler extends AbstractMaplePacketHandler { slea.readInt(); //cid int birthday = slea.readInt(); if (!CashOperationHandler.checkBirthday(c, birthday)) { - c.announce(PacketCreator.showCashShopMessage((byte) 0xC4)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC4)); + c.sendPacket(PacketCreator.enableActions()); return; } if(!YamlConfig.config.server.ALLOW_CASHSHOP_NAME_CHANGE) { - c.announce(PacketCreator.sendNameTransferRules(4)); + c.sendPacket(PacketCreator.sendNameTransferRules(4)); return; } MapleCharacter chr = c.getPlayer(); if(chr.getLevel() < 10) { - c.announce(PacketCreator.sendNameTransferRules(4)); + c.sendPacket(PacketCreator.sendNameTransferRules(4)); return; } else if(c.getTempBanCalendar() != null && c.getTempBanCalendar().getTimeInMillis() + (30*24*60*60*1000) < Calendar.getInstance().getTimeInMillis()) { - c.announce(PacketCreator.sendNameTransferRules(2)); + c.sendPacket(PacketCreator.sendNameTransferRules(2)); return; } //sql queries @@ -67,10 +67,10 @@ public final class TransferNameHandler extends AbstractMaplePacketHandler { while(rs.next()) { Timestamp completedTimestamp = rs.getTimestamp("completionTime"); if(completedTimestamp == null) { //has pending name request - c.announce(PacketCreator.sendNameTransferRules(1)); + c.sendPacket(PacketCreator.sendNameTransferRules(1)); return; } else if(completedTimestamp.getTime() + YamlConfig.config.server.NAME_CHANGE_COOLDOWN > System.currentTimeMillis()) { - c.announce(PacketCreator.sendNameTransferRules(3)); + c.sendPacket(PacketCreator.sendNameTransferRules(3)); return; } } @@ -78,6 +78,6 @@ public final class TransferNameHandler extends AbstractMaplePacketHandler { e.printStackTrace(); return; } - c.announce(PacketCreator.sendNameTransferRules(0)); + c.sendPacket(PacketCreator.sendNameTransferRules(0)); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/TransferNameResultHandler.java b/src/main/java/net/server/channel/handlers/TransferNameResultHandler.java index 647a043541..fbe86a1f68 100644 --- a/src/main/java/net/server/channel/handlers/TransferNameResultHandler.java +++ b/src/main/java/net/server/channel/handlers/TransferNameResultHandler.java @@ -35,6 +35,6 @@ public final class TransferNameResultHandler extends AbstractMaplePacketHandler @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { String name = slea.readMapleAsciiString(); - c.announce(PacketCreator.sendNameTransferCheck(name, MapleCharacter.canCreateChar(name))); + c.sendPacket(PacketCreator.sendNameTransferCheck(name, MapleCharacter.canCreateChar(name))); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/TransferWorldHandler.java b/src/main/java/net/server/channel/handlers/TransferWorldHandler.java index b2fbc14c7a..6dcee7e311 100644 --- a/src/main/java/net/server/channel/handlers/TransferWorldHandler.java +++ b/src/main/java/net/server/channel/handlers/TransferWorldHandler.java @@ -43,18 +43,18 @@ public final class TransferWorldHandler extends AbstractMaplePacketHandler { slea.readInt(); //cid int birthday = slea.readInt(); if (!CashOperationHandler.checkBirthday(c, birthday)) { - c.announce(PacketCreator.showCashShopMessage((byte) 0xC4)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC4)); + c.sendPacket(PacketCreator.enableActions()); return; } MapleCharacter chr = c.getPlayer(); if(!YamlConfig.config.server.ALLOW_CASHSHOP_WORLD_TRANSFER || Server.getInstance().getWorldsSize() <= 1) { - c.announce(PacketCreator.sendWorldTransferRules(9, c)); + c.sendPacket(PacketCreator.sendWorldTransferRules(9, c)); return; } int worldTransferError = chr.checkWorldTransferEligibility(); if(worldTransferError != 0) { - c.announce(PacketCreator.sendWorldTransferRules(worldTransferError, c)); + c.sendPacket(PacketCreator.sendWorldTransferRules(worldTransferError, c)); return; } try (Connection con = DatabaseConnection.getConnection(); @@ -64,10 +64,10 @@ public final class TransferWorldHandler extends AbstractMaplePacketHandler { while(rs.next()) { Timestamp completedTimestamp = rs.getTimestamp("completionTime"); if(completedTimestamp == null) { //has pending world transfer - c.announce(PacketCreator.sendWorldTransferRules(6, c)); + c.sendPacket(PacketCreator.sendWorldTransferRules(6, c)); return; } else if(completedTimestamp.getTime() + YamlConfig.config.server.WORLD_TRANSFER_COOLDOWN > System.currentTimeMillis()) { - c.announce(PacketCreator.sendWorldTransferRules(7, c)); + c.sendPacket(PacketCreator.sendWorldTransferRules(7, c)); return; } } @@ -75,6 +75,6 @@ public final class TransferWorldHandler extends AbstractMaplePacketHandler { e.printStackTrace(); return; } - c.announce(PacketCreator.sendWorldTransferRules(0, c)); + c.sendPacket(PacketCreator.sendWorldTransferRules(0, c)); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/TrockAddMapHandler.java b/src/main/java/net/server/channel/handlers/TrockAddMapHandler.java index 0011af7535..a261a0f41e 100644 --- a/src/main/java/net/server/channel/handlers/TrockAddMapHandler.java +++ b/src/main/java/net/server/channel/handlers/TrockAddMapHandler.java @@ -45,7 +45,7 @@ public final class TrockAddMapHandler extends AbstractMaplePacketHandler { chr.deleteFromVipTrocks(mapId); else chr.deleteFromTrocks(mapId); - c.announce(PacketCreator.trockRefreshMapList(chr, true, vip)); + c.sendPacket(PacketCreator.trockRefreshMapList(chr, true, vip)); } else if (type == 0x01) { if (!FieldLimit.CANNOTVIPROCK.check(chr.getMap().getFieldLimit())) { if (vip) @@ -53,7 +53,7 @@ public final class TrockAddMapHandler extends AbstractMaplePacketHandler { else chr.addTrockMap(); - c.announce(PacketCreator.trockRefreshMapList(chr, false, vip)); + c.sendPacket(PacketCreator.trockRefreshMapList(chr, false, vip)); } else { chr.message("You may not save this map."); } diff --git a/src/main/java/net/server/channel/handlers/UseCashItemHandler.java b/src/main/java/net/server/channel/handlers/UseCashItemHandler.java index 3bc6beff29..de4ef33990 100644 --- a/src/main/java/net/server/channel/handlers/UseCashItemHandler.java +++ b/src/main/java/net/server/channel/handlers/UseCashItemHandler.java @@ -54,44 +54,44 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { final MapleCharacter player = c.getPlayer(); - + long timeNow = currentServerTime(); if (timeNow - player.getLastUsedCashItem() < 3000) { player.dropMessage(1, "You have used a cash item recently. Wait a moment, then try again."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } player.setLastUsedCashItem(timeNow); - + MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); short position = slea.readShort(); int itemId = slea.readInt(); int itemType = itemId / 10000; - + MapleInventory cashInv = player.getInventory(MapleInventoryType.CASH); Item toUse = cashInv.getItem(position); if (toUse == null || toUse.getItemId() != itemId) { toUse = cashInv.findById(itemId); - + if (toUse == null) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } - + position = toUse.getPosition(); } - + if (toUse.getQuantity() < 1) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } - + String medal = ""; Item medalItem = player.getInventory(MapleInventoryType.EQUIPPED).getItem((short) -49); if (medalItem != null) { medal = "<" + ii.getName(medalItem.getItemId()) + "> "; } - + if (itemType == 504) { // vip teleport rock String error1 = "Either the player could not be found or you were trying to teleport to an illegal location."; boolean vip = slea.readByte() == 1 && itemId / 1000 >= 5041; @@ -113,7 +113,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { } else { String name = slea.readMapleAsciiString(); MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(name); - + if (victim != null) { MapleMap targetMap = victim.getMap(); if (!FieldLimit.CANNOTVIPROCK.check(targetMap.getFieldLimit()) && (targetMap.getForcedReturnId() == 999999999 || targetMap.getId() < 100000000)) { @@ -130,23 +130,23 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { player.dropMessage(1, "Player could not be found in this channel."); } } - + if (!success) { MapleInventoryManipulator.addById(c, itemId, (short) 1); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } else if (itemType == 505) { // AP/SP reset - if(!player.isAlive()) { - c.announce(PacketCreator.enableActions()); + if (!player.isAlive()) { + c.sendPacket(PacketCreator.enableActions()); return; } - + if (itemId > 5050000) { int SPTo = slea.readInt(); if (!AssignSPProcessor.canSPAssign(c, SPTo)) { // exploit found thanks to Arnah return; } - + int SPFrom = slea.readInt(); Skill skillSPTo = SkillFactory.getSkill(SPTo); Skill skillSPFrom = SkillFactory.getSkill(SPFrom); @@ -155,39 +155,43 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { if ((curLevel < skillSPTo.getMaxLevel()) && curLevelSPFrom > 0) { player.changeSkillLevel(skillSPFrom, (byte) (curLevelSPFrom - 1), player.getMasterLevel(skillSPFrom), -1); player.changeSkillLevel(skillSPTo, (byte) (curLevel + 1), player.getMasterLevel(skillSPTo), -1); - + // update macros, thanks to Arnah - if((curLevelSPFrom - 1) == 0){ + if ((curLevelSPFrom - 1) == 0) { boolean updated = false; - for(SkillMacro macro : player.getMacros()){ - if(macro == null) continue; - + for (SkillMacro macro : player.getMacros()) { + if (macro == null) { + continue; + } + boolean update = false;// cleaner? - if(macro.getSkill1() == SPFrom){ + if (macro.getSkill1() == SPFrom) { update = true; macro.setSkill1(0); } - if(macro.getSkill2() == SPFrom){ + if (macro.getSkill2() == SPFrom) { update = true; macro.setSkill2(0); } - if(macro.getSkill3() == SPFrom){ + if (macro.getSkill3() == SPFrom) { update = true; macro.setSkill3(0); } - if(update){ + if (update) { updated = true; player.updateMacros(macro.getPosition(), macro); } } - if(updated) player.sendMacros(); + if (updated) { + player.sendMacros(); + } } } } else { int APTo = slea.readInt(); int APFrom = slea.readInt(); - - if(!AssignAPProcessor.APResetAction(c, APFrom, APTo)) { + + if (!AssignAPProcessor.APResetAction(c, APFrom, APTo)) { return; } } @@ -292,16 +296,16 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { messages.add(message); } slea.readInt(); - + if (!MapleTVEffect.broadcastMapleTVIfNotActive(player, victim, messages, tvType)) { player.dropMessage(1, "MapleTV is already in use."); return; } - + if (megassenger) { - Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.serverNotice(3, c.getChannel(), medal + player.getName() + " : " + builder.toString(), ear)); + Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.serverNotice(3, c.getChannel(), medal + player.getName() + " : " + builder, ear)); } - + break; case 6: //item megaphone String msg = medal + player.getName() + " : " + slea.readMapleAsciiString(); @@ -313,7 +317,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { { return; } - + // thanks Conrad for noticing that untradeable items should be allowed in megas } Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.itemMegaphone(msg, whisper, c.getChannel(), item)); @@ -335,12 +339,12 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { remove(c, position, itemId); } else if (itemType == 508) { // thanks tmskdl12 for graduation banner; thanks ratency for first pointing lack of Kite handling MapleKite kite = new MapleKite(player, slea.readMapleAsciiString(), itemId); - + if (!GameConstants.isFreeMarketRoom(player.getMapId())) { player.getMap().spawnKite(kite); remove(c, position, itemId); } else { - c.announce(PacketCreator.sendCannotSpawnKite()); + c.sendPacket(PacketCreator.sendCannotSpawnKite()); } } else if (itemType == 509) { String sendTo = slea.readMapleAsciiString(); @@ -365,41 +369,46 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { } else if (itemType == 517) { MaplePet pet = player.getPet(0); if (pet == null) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } String newName = slea.readMapleAsciiString(); pet.setName(newName); pet.saveToDb(); - + Item item = player.getInventory(MapleInventoryType.CASH).getItem(pet.getPosition()); - if (item != null) + if (item != null) { player.forceUpdateItem(item); - + } + player.getMap().broadcastMessage(player, PacketCreator.changePetName(player, newName, 1), true); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); remove(c, position, itemId); } else if (itemType == 520) { player.gainMeso(ii.getMeso(itemId), true, false, true); remove(c, position, itemId); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if (itemType == 523) { int itemid = slea.readInt(); - - if(!YamlConfig.config.server.USE_ENFORCE_ITEM_SUGGESTION) c.getWorldServer().addOwlItemSearch(itemid); + + if (!YamlConfig.config.server.USE_ENFORCE_ITEM_SUGGESTION) { + c.getWorldServer().addOwlItemSearch(itemid); + } player.setOwlSearch(itemid); List> hmsAvailable = c.getWorldServer().getAvailableItemBundles(itemid); - if(!hmsAvailable.isEmpty()) remove(c, position, itemId); - - c.announce(PacketCreator.owlOfMinerva(c, itemid, hmsAvailable)); - c.announce(PacketCreator.enableActions()); - + if (!hmsAvailable.isEmpty()) { + remove(c, position, itemId); + } + + c.sendPacket(PacketCreator.owlOfMinerva(c, itemid, hmsAvailable)); + c.sendPacket(PacketCreator.enableActions()); + } else if (itemType == 524) { for (byte i = 0; i < 3; i++) { MaplePet pet = player.getPet(i); if (pet != null) { Pair p = pet.canConsume(itemId); - + if (p.getRight()) { pet.gainClosenessFullness(player, p.getLeft(), 100, 1); remove(c, position, itemId); @@ -409,7 +418,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { break; } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if (itemType == 530) { ii.getItemEffect(itemId).applyTo(player); remove(c, position, itemId); @@ -418,20 +427,20 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { } else if (itemType == 537) { if (GameConstants.isFreeMarketRoom(player.getMapId())) { player.dropMessage(5, "You cannot use the chalkboard here."); - player.getClient().announce(PacketCreator.enableActions()); + player.sendPacket(PacketCreator.enableActions()); return; } - + player.setChalkboard(slea.readMapleAsciiString()); player.getMap().broadcastMessage(PacketCreator.useChalkboard(player, false)); - player.getClient().announce(PacketCreator.enableActions()); + player.sendPacket(PacketCreator.enableActions()); //remove(c, position, itemId); thanks Conrad for noticing chalkboards shouldn't be depleted upon use } else if (itemType == 539) { List strLines = new LinkedList<>(); for (int i = 0; i < 4; i++) { strLines.add(slea.readMapleAsciiString()); } - + final int world = c.getWorld(); Server.getInstance().broadcastMessage(world, PacketCreator.getAvatarMega(player, medal, c.getChannel(), itemId, strLines, (slea.readByte() != 0))); TimerManager.getInstance().schedule(() -> Server.getInstance().broadcastMessage(world, PacketCreator.byeAvatarMega()), 1000 * 10); @@ -439,20 +448,20 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { } else if (itemType == 540) { slea.readByte(); slea.readInt(); - if(itemId == 5400000) { //name change - c.announce(PacketCreator.showNameChangeCancel(player.cancelPendingNameChange())); - } else if(itemId == 5401000) { //world transfer - c.announce(PacketCreator.showWorldTransferCancel(player.cancelPendingWorldTranfer())); + if (itemId == 5400000) { //name change + c.sendPacket(PacketCreator.showNameChangeCancel(player.cancelPendingNameChange())); + } else if (itemId == 5401000) { //world transfer + c.sendPacket(PacketCreator.showWorldTransferCancel(player.cancelPendingWorldTranfer())); } remove(c, position, itemId); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if (itemType == 543) { - if(itemId == 5432000 && !c.gainCharacterSlot()) { + if (itemId == 5432000 && !c.gainCharacterSlot()) { player.dropMessage(1, "You have already used up all 12 extra character slots."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } - + String name = slea.readMapleAsciiString(); int face = slea.readInt(); int hair = slea.readInt(); @@ -461,39 +470,25 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { int gender = slea.readInt(); int jobid = slea.readInt(); int improveSp = slea.readInt(); - - int createStatus; - switch(jobid) { - case 0: - createStatus = WarriorCreator.createCharacter(c, name, face, hair + haircolor, skin, gender, improveSp); - break; - - case 1: - createStatus = MagicianCreator.createCharacter(c, name, face, hair + haircolor, skin, gender, improveSp); - break; - - case 2: - createStatus = BowmanCreator.createCharacter(c, name, face, hair + haircolor, skin, gender, improveSp); - break; - - case 3: - createStatus = ThiefCreator.createCharacter(c, name, face, hair + haircolor, skin, gender, improveSp); - break; - - default: - createStatus = PirateCreator.createCharacter(c, name, face, hair + haircolor, skin, gender, improveSp); - } - - if(createStatus == 0) { - c.announce(PacketCreator.sendMapleLifeError(0)); // success! - + + int createStatus = switch (jobid) { + case 0 -> WarriorCreator.createCharacter(c, name, face, hair + haircolor, skin, gender, improveSp); + case 1 -> MagicianCreator.createCharacter(c, name, face, hair + haircolor, skin, gender, improveSp); + case 2 -> BowmanCreator.createCharacter(c, name, face, hair + haircolor, skin, gender, improveSp); + case 3 -> ThiefCreator.createCharacter(c, name, face, hair + haircolor, skin, gender, improveSp); + default -> PirateCreator.createCharacter(c, name, face, hair + haircolor, skin, gender, improveSp); + }; + + if (createStatus == 0) { + c.sendPacket(PacketCreator.sendMapleLifeError(0)); // success! + player.showHint("#bSuccess#k on creation of the new character through the Maple Life card."); remove(c, position, itemId); } else { - if(createStatus == -1) { // check name - c.announce(PacketCreator.sendMapleLifeNameError()); + if (createStatus == -1) { // check name + c.sendPacket(PacketCreator.sendMapleLifeNameError()); } else { - c.announce(PacketCreator.sendMapleLifeError(-1 * createStatus)); + c.sendPacket(PacketCreator.sendMapleLifeError(-1 * createStatus)); } } } else if (itemType == 545) { // MiuMiu's travel store @@ -504,25 +499,25 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { remove(c, position, itemId); } } else { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } else if (itemType == 550) { //Extend item expiration - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if (itemType == 552) { MapleInventoryType type = MapleInventoryType.getByType((byte) slea.readInt()); short slot = (short) slea.readInt(); Item item = player.getInventory(type).getItem(slot); if (item == null || item.getQuantity() <= 0 || MapleKarmaManipulator.hasKarmaFlag(item) || !ii.isKarmaAble(item.getItemId())) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } - + MapleKarmaManipulator.setKarmaFlag(item); player.forceUpdateItem(item); remove(c, position, itemId); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if (itemType == 552) { //DS EGG THING - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if (itemType == 557) { slea.readInt(); int itemSlot = slea.readInt(); @@ -534,70 +529,74 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { equip.setVicious(equip.getVicious() + 1); equip.setUpgradeSlots(equip.getUpgradeSlots() + 1); remove(c, position, itemId); - c.announce(PacketCreator.enableActions()); - c.announce(PacketCreator.sendHammerData(equip.getVicious())); + c.sendPacket(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.sendHammerData(equip.getVicious())); player.forceUpdateItem(equip); } else if (itemType == 561) { //VEGA'S SPELL if (slea.readInt() != 1) { return; } - + final byte eSlot = (byte) slea.readInt(); final Item eitem = player.getInventory(MapleInventoryType.EQUIP).getItem(eSlot); - + if (slea.readInt() != 2) { return; } - + final byte uSlot = (byte) slea.readInt(); final Item uitem = player.getInventory(MapleInventoryType.USE).getItem(uSlot); if (eitem == null || uitem == null) { return; } - + Equip toScroll = (Equip) eitem; if (toScroll.getUpgradeSlots() < 1) { - c.announce(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); return; } - + //should have a check here against PE hacks - if(itemId / 1000000 != 5) itemId = 0; - + if (itemId / 1000000 != 5) { + itemId = 0; + } + player.toggleBlockCashShop(); - + final int curlevel = toScroll.getLevel(); - c.announce(PacketCreator.sendVegaScroll(0x40)); - + c.sendPacket(PacketCreator.sendVegaScroll(0x40)); + final Equip scrolled = (Equip) ii.scrollEquipWithId(toScroll, uitem.getItemId(), false, itemId, player.isGM()); - c.announce(PacketCreator.sendVegaScroll(scrolled.getLevel() > curlevel ? 0x41 : 0x43)); + c.sendPacket(PacketCreator.sendVegaScroll(scrolled.getLevel() > curlevel ? 0x41 : 0x43)); //opcodes 0x42, 0x44: "this item cannot be used"; 0x39, 0x45: crashes - + MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, uSlot, (short) 1, false); remove(c, position, itemId); - + final MapleClient client = c; TimerManager.getInstance().schedule(() -> { -if(!player.isLoggedin()) return; + if (!player.isLoggedin()) { + return; + } -player.toggleBlockCashShop(); + player.toggleBlockCashShop(); -final List mods = new ArrayList<>(); -mods.add(new ModifyInventory(3, scrolled)); -mods.add(new ModifyInventory(0, scrolled)); -client.announce(PacketCreator.modifyInventory(true, mods)); + final List mods = new ArrayList<>(); + mods.add(new ModifyInventory(3, scrolled)); + mods.add(new ModifyInventory(0, scrolled)); + client.sendPacket(PacketCreator.modifyInventory(true, mods)); -ScrollResult scrollResult = scrolled.getLevel() > curlevel ? ScrollResult.SUCCESS : ScrollResult.FAIL; -player.getMap().broadcastMessage(PacketCreator.getScrollEffect(player.getId(), scrollResult, false, false)); -if (eSlot < 0 && (scrollResult == ScrollResult.SUCCESS)) { -player.equipChanged(); -} + ScrollResult scrollResult = scrolled.getLevel() > curlevel ? ScrollResult.SUCCESS : ScrollResult.FAIL; + player.getMap().broadcastMessage(PacketCreator.getScrollEffect(player.getId(), scrollResult, false, false)); + if (eSlot < 0 && (scrollResult == ScrollResult.SUCCESS)) { + player.equipChanged(); + } -client.announce(PacketCreator.enableActions()); + client.sendPacket(PacketCreator.enableActions()); }, 1000 * 3); } else { - System.out.println("NEW CASH ITEM: " + itemType + "\n" + slea.toString()); - c.announce(PacketCreator.enableActions()); + System.out.println("NEW CASH ITEM: " + itemType + "\n" + slea); + c.sendPacket(PacketCreator.enableActions()); } } @@ -612,7 +611,7 @@ client.announce(PacketCreator.enableActions()); position = it.getPosition(); } } - + MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.CASH, position, (short) 1, true, false); } finally { cashInv.unlockInventory(); diff --git a/src/main/java/net/server/channel/handlers/UseCatchItemHandler.java b/src/main/java/net/server/channel/handlers/UseCatchItemHandler.java index 906d86772c..f20b5e4c57 100644 --- a/src/main/java/net/server/channel/handlers/UseCatchItemHandler.java +++ b/src/main/java/net/server/channel/handlers/UseCatchItemHandler.java @@ -64,7 +64,7 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 1902000, (short) 1, "", -1); } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); break; case 2270001: if (mob.getId() == 9500197) { @@ -76,10 +76,10 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.addById(c, 4031830, (short) 1, "", -1); } else { abm.spam(10); - c.announce(PacketCreator.catchMessage(0)); + c.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } break; case 2270002: @@ -101,10 +101,10 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { abm.spam(10); } else { - c.announce(PacketCreator.catchMessage(0)); + c.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } break; case 2270003: @@ -115,10 +115,10 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 4031887, (short) 1, "", -1); } else { - c.announce(PacketCreator.catchMessage(0)); + c.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); break; case 2270005: if (mob.getId() == 9300187) { @@ -128,10 +128,10 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 2109001, (short) 1, "", -1); } else { - c.announce(PacketCreator.catchMessage(0)); + c.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); break; case 2270006: if (mob.getId() == 9300189) { @@ -141,10 +141,10 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 2109002, (short) 1, "", -1); } else { - c.announce(PacketCreator.catchMessage(0)); + c.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); break; case 2270007: if (mob.getId() == 9300191) { @@ -154,10 +154,10 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 2109003, (short) 1, "", -1); } else { - c.announce(PacketCreator.catchMessage(0)); + c.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); break; case 2270004: if (mob.getId() == 9300175) { @@ -167,10 +167,10 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, itemId, 1, true, true); MapleInventoryManipulator.addById(c, 4001169, (short) 1, "", -1); } else { - c.announce(PacketCreator.catchMessage(0)); + c.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); break; case 2270008: if (mob.getId() == 9500336) { @@ -183,7 +183,7 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { } else { chr.message("You cannot use the Fishing Net yet."); } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } break; default: @@ -206,14 +206,14 @@ public final class UseCatchItemHandler extends AbstractMaplePacketHandler { } else if (mob.getId() != 9500336) { if (mobHp != 0) { abm.spam(10); - c.announce(PacketCreator.catchMessage(0)); + c.sendPacket(PacketCreator.catchMessage(0)); } } else { chr.message("You cannot use the Fishing Net yet."); } } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); // System.out.println("UseCatchItemHandler: \r\n" + slea.toString()); } diff --git a/src/main/java/net/server/channel/handlers/UseDeathItemHandler.java b/src/main/java/net/server/channel/handlers/UseDeathItemHandler.java index 5714263866..a8579a0397 100644 --- a/src/main/java/net/server/channel/handlers/UseDeathItemHandler.java +++ b/src/main/java/net/server/channel/handlers/UseDeathItemHandler.java @@ -31,6 +31,6 @@ public final class UseDeathItemHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { int itemId = slea.readInt(); c.getPlayer().setItemEffect(itemId); - c.announce(PacketCreator.itemEffect(c.getPlayer().getId(), itemId)); + c.sendPacket(PacketCreator.itemEffect(c.getPlayer().getId(), itemId)); } } diff --git a/src/main/java/net/server/channel/handlers/UseGachaExpHandler.java b/src/main/java/net/server/channel/handlers/UseGachaExpHandler.java index 7aa95462c8..5356016443 100644 --- a/src/main/java/net/server/channel/handlers/UseGachaExpHandler.java +++ b/src/main/java/net/server/channel/handlers/UseGachaExpHandler.java @@ -50,6 +50,6 @@ public class UseGachaExpHandler extends AbstractMaplePacketHandler { } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/UseHammerHandler.java b/src/main/java/net/server/channel/handlers/UseHammerHandler.java index 68c4640575..57802103de 100644 --- a/src/main/java/net/server/channel/handlers/UseHammerHandler.java +++ b/src/main/java/net/server/channel/handlers/UseHammerHandler.java @@ -32,6 +32,6 @@ import tools.data.input.SeekableLittleEndianAccessor; */ public final class UseHammerHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { - c.announce(PacketCreator.sendHammerMessage()); + c.sendPacket(PacketCreator.sendHammerMessage()); } } diff --git a/src/main/java/net/server/channel/handlers/UseItemHandler.java b/src/main/java/net/server/channel/handlers/UseItemHandler.java index 32e150d0df..7a716b28b2 100644 --- a/src/main/java/net/server/channel/handlers/UseItemHandler.java +++ b/src/main/java/net/server/channel/handlers/UseItemHandler.java @@ -44,7 +44,7 @@ public final class UseItemHandler extends AbstractMaplePacketHandler { MapleCharacter chr = c.getPlayer(); if (!chr.isAlive()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); @@ -108,6 +108,6 @@ public final class UseItemHandler extends AbstractMaplePacketHandler { private void remove(MapleClient c, short slot) { MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, slot, (short) 1, false); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/UseMapleLifeHandler.java b/src/main/java/net/server/channel/handlers/UseMapleLifeHandler.java index 43ca8b9b25..36a2000e9b 100644 --- a/src/main/java/net/server/channel/handlers/UseMapleLifeHandler.java +++ b/src/main/java/net/server/channel/handlers/UseMapleLifeHandler.java @@ -37,18 +37,18 @@ public class UseMapleLifeHandler extends AbstractMaplePacketHandler { if(timeNow - player.getLastUsedCashItem() < 3000) { player.dropMessage(5, "Please wait a moment before trying again."); - c.announce(PacketCreator.sendMapleLifeError(3)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.sendMapleLifeError(3)); + c.sendPacket(PacketCreator.enableActions()); return; } player.setLastUsedCashItem(timeNow); String name = slea.readMapleAsciiString(); if(MapleCharacter.canCreateChar(name)) { - c.announce(PacketCreator.sendMapleLifeCharacterInfo()); + c.sendPacket(PacketCreator.sendMapleLifeCharacterInfo()); } else { - c.announce(PacketCreator.sendMapleLifeNameError()); + c.sendPacket(PacketCreator.sendMapleLifeNameError()); } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/UseOwlOfMinervaHandler.java b/src/main/java/net/server/channel/handlers/UseOwlOfMinervaHandler.java index 1ca579a505..c8d21ef126 100644 --- a/src/main/java/net/server/channel/handlers/UseOwlOfMinervaHandler.java +++ b/src/main/java/net/server/channel/handlers/UseOwlOfMinervaHandler.java @@ -59,6 +59,6 @@ public final class UseOwlOfMinervaHandler extends AbstractMaplePacketHandler { } } - c.announce(PacketCreator.getOwlOpen(owlLeaderboards)); + c.sendPacket(PacketCreator.getOwlOpen(owlLeaderboards)); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/UseSolomonHandler.java b/src/main/java/net/server/channel/handlers/UseSolomonHandler.java index 7d6aa7df59..dbc984b42c 100644 --- a/src/main/java/net/server/channel/handlers/UseSolomonHandler.java +++ b/src/main/java/net/server/channel/handlers/UseSolomonHandler.java @@ -75,6 +75,6 @@ public final class UseSolomonHandler extends AbstractMaplePacketHandler { } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/UseSummonBagHandler.java b/src/main/java/net/server/channel/handlers/UseSummonBagHandler.java index 0eedeebe3f..3b9322d072 100644 --- a/src/main/java/net/server/channel/handlers/UseSummonBagHandler.java +++ b/src/main/java/net/server/channel/handlers/UseSummonBagHandler.java @@ -42,7 +42,7 @@ public final class UseSummonBagHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { //[4A 00][6C 4C F2 02][02 00][63 0B 20 00] if (!c.getPlayer().isAlive()) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } slea.readInt(); @@ -58,6 +58,6 @@ public final class UseSummonBagHandler extends AbstractMaplePacketHandler { } } } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/net/server/channel/handlers/WeddingHandler.java b/src/main/java/net/server/channel/handlers/WeddingHandler.java index 3bfc0bc374..0d9f4c3f41 100644 --- a/src/main/java/net/server/channel/handlers/WeddingHandler.java +++ b/src/main/java/net/server/channel/handlers/WeddingHandler.java @@ -20,7 +20,7 @@ import net.AbstractMaplePacketHandler; import server.MapleMarriage; import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; -import tools.packets.Wedding; +import tools.packets.WeddingPackets; import java.util.Collections; import java.util.List; @@ -74,10 +74,10 @@ public final class WeddingHandler extends AbstractMaplePacketHandler { MapleKarmaManipulator.toggleKarmaFlagToUntradeable(newItem); marriage.setIntProperty(groomWishlistProp, giftCount + 1); - c.announce(Wedding.OnWeddingGiftResult((byte) 0xB, marriage.getWishlistItems(groomWishlist), Collections.singletonList(newItem))); + c.sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0xB, marriage.getWishlistItems(groomWishlist), Collections.singletonList(newItem))); } } else { - c.announce(Wedding.OnWeddingGiftResult((byte) 0xE, marriage.getWishlistItems(groomWishlist), null)); + c.sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0xE, marriage.getWishlistItems(groomWishlist), null)); } } } finally { @@ -89,17 +89,17 @@ public final class WeddingHandler extends AbstractMaplePacketHandler { marriage.saveGiftItemsToDb(c, groomWishlist, cid); } } else { - c.announce(Wedding.OnWeddingGiftResult((byte) 0xE, marriage.getWishlistItems(groomWishlist), null)); + c.sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0xE, marriage.getWishlistItems(groomWishlist), null)); } } else { - c.announce(Wedding.OnWeddingGiftResult((byte) 0xE, marriage.getWishlistItems(groomWishlist), null)); + c.sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0xE, marriage.getWishlistItems(groomWishlist), null)); } } else { - c.announce(Wedding.OnWeddingGiftResult((byte) 0xC, marriage.getWishlistItems(groomWishlist), null)); + c.sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0xC, marriage.getWishlistItems(groomWishlist), null)); } } catch (NumberFormatException nfe) {} } else { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } else if (mode == 7) { // take items slea.readByte(); // invType @@ -117,14 +117,14 @@ public final class WeddingHandler extends AbstractMaplePacketHandler { MapleInventoryManipulator.addFromDrop(c, item, true); - c.announce(Wedding.OnWeddingGiftResult((byte) 0xF, marriage.getWishlistItems(groomWishlist), marriage.getGiftItems(c, groomWishlist))); + c.sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0xF, marriage.getWishlistItems(groomWishlist), marriage.getGiftItems(c, groomWishlist))); } else { c.getPlayer().dropMessage(1, "Free a slot on your inventory before collecting this item."); - c.announce(Wedding.OnWeddingGiftResult((byte) 0xE, marriage.getWishlistItems(groomWishlist), marriage.getGiftItems(c, groomWishlist))); + c.sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0xE, marriage.getWishlistItems(groomWishlist), marriage.getGiftItems(c, groomWishlist))); } } else { c.getPlayer().dropMessage(1, "You have already collected this item."); - c.announce(Wedding.OnWeddingGiftResult((byte) 0xE, marriage.getWishlistItems(groomWishlist), marriage.getGiftItems(c, groomWishlist))); + c.sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0xE, marriage.getWishlistItems(groomWishlist), marriage.getGiftItems(c, groomWishlist))); } } } else { @@ -136,18 +136,18 @@ public final class WeddingHandler extends AbstractMaplePacketHandler { MapleMarriage.saveGiftItemsToDb(c, items, chr.getId()); MapleInventoryManipulator.addFromDrop(c, item, true); - c.announce(Wedding.OnWeddingGiftResult((byte) 0xF, Collections.singletonList(""), items)); + c.sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0xF, Collections.singletonList(""), items)); } else { c.getPlayer().dropMessage(1, "Free a slot on your inventory before collecting this item."); - c.announce(Wedding.OnWeddingGiftResult((byte) 0xE, Collections.singletonList(""), items)); + c.sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0xE, Collections.singletonList(""), items)); } } catch (Exception e) { c.getPlayer().dropMessage(1, "You have already collected this item."); - c.announce(Wedding.OnWeddingGiftResult((byte) 0xE, Collections.singletonList(""), items)); + c.sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0xE, Collections.singletonList(""), items)); } } } else if (mode == 8) { // out of Wedding Registry - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else { System.out.println(mode); } diff --git a/src/main/java/net/server/channel/handlers/WeddingTalkHandler.java b/src/main/java/net/server/channel/handlers/WeddingTalkHandler.java index 9f93e371c7..dec9329860 100644 --- a/src/main/java/net/server/channel/handlers/WeddingTalkHandler.java +++ b/src/main/java/net/server/channel/handlers/WeddingTalkHandler.java @@ -25,7 +25,7 @@ import net.AbstractMaplePacketHandler; import scripting.event.EventInstanceManager; import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; -import tools.packets.Wedding; +import tools.packets.WeddingPackets; /** * @@ -40,14 +40,14 @@ public final class WeddingTalkHandler extends AbstractMaplePacketHandler { EventInstanceManager eim = c.getPlayer().getEventInstance(); if(eim != null && !(c.getPlayer().getId() == eim.getIntProperty("groomId") || c.getPlayer().getId() == eim.getIntProperty("brideId"))) { - c.announce(Wedding.OnWeddingProgress(false, 0, 0, (byte) 2)); + c.sendPacket(WeddingPackets.OnWeddingProgress(false, 0, 0, (byte) 2)); } else { - c.announce(Wedding.OnWeddingProgress(true, 0, 0, (byte) 3)); + c.sendPacket(WeddingPackets.OnWeddingProgress(true, 0, 0, (byte) 3)); } } else { - c.announce(Wedding.OnWeddingProgress(true, 0, 0, (byte) 3)); + c.sendPacket(WeddingPackets.OnWeddingProgress(true, 0, 0, (byte) 3)); } - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/WeddingTalkMoreHandler.java b/src/main/java/net/server/channel/handlers/WeddingTalkMoreHandler.java index 00f1d054ec..fd77aacc28 100644 --- a/src/main/java/net/server/channel/handlers/WeddingTalkMoreHandler.java +++ b/src/main/java/net/server/channel/handlers/WeddingTalkMoreHandler.java @@ -25,7 +25,7 @@ import net.AbstractMaplePacketHandler; import scripting.event.EventInstanceManager; import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; -import tools.packets.Wedding; +import tools.packets.WeddingPackets; /** * @@ -41,7 +41,7 @@ public final class WeddingTalkMoreHandler extends AbstractMaplePacketHandler { c.getPlayer().dropMessage(5, "High Priest John: Your blessings have been added to their love. What a noble act for a lovely couple!"); } - c.announce(Wedding.OnWeddingProgress(true, 0, 0, (byte) 3)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(WeddingPackets.OnWeddingProgress(true, 0, 0, (byte) 3)); + c.sendPacket(PacketCreator.enableActions()); } } \ No newline at end of file diff --git a/src/main/java/net/server/channel/handlers/WhisperHandler.java b/src/main/java/net/server/channel/handlers/WhisperHandler.java index 6bb6ab73a1..db0bbf9c29 100644 --- a/src/main/java/net/server/channel/handlers/WhisperHandler.java +++ b/src/main/java/net/server/channel/handlers/WhisperHandler.java @@ -50,7 +50,7 @@ public final class WhisperHandler extends AbstractMaplePacketHandler { MapleCharacter target = c.getWorldServer().getPlayerStorage().getCharacterByName(name); if (target == null) { - c.announce(PacketCreator.getWhisperResult(name, false)); + c.sendPacket(PacketCreator.getWhisperResult(name, false)); return; } @@ -74,15 +74,15 @@ public final class WhisperHandler extends AbstractMaplePacketHandler { private void handleFind(MapleCharacter user, MapleCharacter target, byte flag) { if (user.gmLevel() >= target.gmLevel()) { if (target.getCashShop().isOpened()) { - user.announce(PacketCreator.getFindResult(target, RT_CASH_SHOP, -1, flag)); + user.sendPacket(PacketCreator.getFindResult(target, RT_CASH_SHOP, -1, flag)); } else if (target.getClient().getChannel() == user.getClient().getChannel()) { - user.announce(PacketCreator.getFindResult(target, RT_SAME_CHANNEL, target.getMapId(), flag)); + user.sendPacket(PacketCreator.getFindResult(target, RT_SAME_CHANNEL, target.getMapId(), flag)); } else { - user.announce(PacketCreator.getFindResult(target, RT_DIFFERENT_CHANNEL, target.getClient().getChannel() - 1, flag)); + user.sendPacket(PacketCreator.getFindResult(target, RT_DIFFERENT_CHANNEL, target.getClient().getChannel() - 1, flag)); } } else { // not found for whisper is the same message - user.announce(PacketCreator.getWhisperResult(target.getName(), false)); + user.sendPacket(PacketCreator.getWhisperResult(target.getName(), false)); } } @@ -103,9 +103,9 @@ public final class WhisperHandler extends AbstractMaplePacketHandler { LogHelper.logChat(user.getClient(), "Whisper To " + target.getName(), message); } - target.announce(PacketCreator.getWhisperReceive(user.getName(), user.getClient().getChannel() - 1, user.isGM(), message)); + target.sendPacket(PacketCreator.getWhisperReceive(user.getName(), user.getClient().getChannel() - 1, user.isGM(), message)); boolean hidden = target.isHidden() && target.gmLevel() > user.gmLevel(); - user.announce(PacketCreator.getWhisperResult(target.getName(), !hidden)); + user.sendPacket(PacketCreator.getWhisperResult(target.getName(), !hidden)); } } diff --git a/src/main/java/net/server/coordinator/matchchecker/listener/MatchCheckerGuildCreation.java b/src/main/java/net/server/coordinator/matchchecker/listener/MatchCheckerGuildCreation.java index d6694a841f..944c33d60d 100644 --- a/src/main/java/net/server/coordinator/matchchecker/listener/MatchCheckerGuildCreation.java +++ b/src/main/java/net/server/coordinator/matchchecker/listener/MatchCheckerGuildCreation.java @@ -22,13 +22,14 @@ package net.server.coordinator.matchchecker.listener; import client.MapleCharacter; import config.YamlConfig; import constants.game.GameConstants; +import net.packet.Packet; import net.server.Server; import net.server.coordinator.matchchecker.AbstractMatchCheckerListener; import net.server.coordinator.matchchecker.MatchCheckerListenerRecipe; +import net.server.guild.GuildPackets; import net.server.guild.MapleGuild; import net.server.guild.MapleGuildCharacter; import net.server.world.MapleParty; -import tools.PacketCreator; import java.util.Set; @@ -41,7 +42,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { private static void broadcastGuildCreationDismiss(Set nonLeaderMatchPlayers) { for (MapleCharacter chr : nonLeaderMatchPlayers) { if (chr.isLoggedinWorld()) { - chr.announce(PacketCreator.genericGuildMessage((byte) 0x26)); + chr.sendPacket(GuildPackets.genericGuildMessage((byte) 0x26)); } } } @@ -56,11 +57,11 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { @Override public void onMatchCreated(MapleCharacter leader, Set nonLeaderMatchPlayers, String message) { - byte[] createGuildPacket = PacketCreator.createGuildMessage(leader.getName(), message); + Packet createGuildPacket = GuildPackets.createGuildMessage(leader.getName(), message); for (MapleCharacter chr : nonLeaderMatchPlayers) { if (chr.isLoggedinWorld()) { - chr.announce(createGuildPacket); + chr.sendPacket(createGuildPacket); } } } @@ -112,7 +113,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { int gid = Server.getInstance().createGuild(leader.getId(), message); if (gid == 0) { - leader.announce(PacketCreator.genericGuildMessage((byte) 0x23)); + leader.sendPacket(GuildPackets.genericGuildMessage((byte) 0x23)); broadcastGuildCreationDismiss(matchPlayers); return; } @@ -122,7 +123,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { MapleGuild guild = Server.getInstance().getGuild(leader.getGuildId(), leader.getWorld(), leader); // initialize guild structure Server.getInstance().changeRank(gid, leader.getId(), 1); - leader.announce(PacketCreator.showGuildInfo(leader)); + leader.sendPacket(GuildPackets.showGuildInfo(leader)); leader.dropMessage(1, "You have successfully created a Guild."); for (MapleCharacter chr : matchPlayers) { @@ -136,7 +137,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { Server.getInstance().addGuildMember(mgc, chr); if (chr.isLoggedinWorld()) { - chr.announce(PacketCreator.showGuildInfo(chr)); + chr.sendPacket(GuildPackets.showGuildInfo(chr)); if (cofounder) { chr.dropMessage(1, "You have successfully cofounded a Guild."); @@ -160,7 +161,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { } if (chr.isLoggedinWorld()) { - chr.announce(PacketCreator.genericGuildMessage((byte)0x26)); + chr.sendPacket(GuildPackets.genericGuildMessage((byte)0x26)); } } } @@ -190,7 +191,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { if (chr.isLoggedinWorld()) { chr.message(msg); - chr.announce(PacketCreator.genericGuildMessage((byte)0x26)); + chr.sendPacket(GuildPackets.genericGuildMessage((byte)0x26)); } } } diff --git a/src/main/java/net/server/coordinator/partysearch/MaplePartySearchCoordinator.java b/src/main/java/net/server/coordinator/partysearch/MaplePartySearchCoordinator.java index 9b3f2c6c36..408dfa315c 100644 --- a/src/main/java/net/server/coordinator/partysearch/MaplePartySearchCoordinator.java +++ b/src/main/java/net/server/coordinator/partysearch/MaplePartySearchCoordinator.java @@ -292,7 +292,7 @@ public class MaplePartySearchCoordinator { if (MapleInviteCoordinator.createInvite(InviteType.PARTY, leader, partyid, chr.getId())) { chr.disablePartySearchInvite(leader.getId()); - chr.announce(PacketCreator.partySearchInvite(leader)); + chr.sendPacket(PacketCreator.partySearchInvite(leader)); return true; } else { return false; diff --git a/src/main/java/net/server/guild/GuildPackets.java b/src/main/java/net/server/guild/GuildPackets.java new file mode 100644 index 0000000000..92309848dd --- /dev/null +++ b/src/main/java/net/server/guild/GuildPackets.java @@ -0,0 +1,543 @@ +package net.server.guild; + +import client.MapleCharacter; +import client.MapleClient; +import net.opcodes.SendOpcode; +import net.packet.OutPacket; +import net.packet.Packet; +import net.server.Server; +import tools.PacketCreator; +import tools.Pair; +import tools.StringUtil; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Collection; +import java.util.List; + +public class GuildPackets { + public static Packet showGuildInfo(MapleCharacter chr) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x1A); //signature for showing guild info + if (chr == null) { //show empty guild (used for leaving, expelled) + p.writeByte(0); + return p; + } + MapleGuild g = chr.getClient().getWorldServer().getGuild(chr.getMGC()); + if (g == null) { //failed to read from DB - don't show a guild + p.writeByte(0); + return p; + } + p.writeByte(1); //bInGuild + p.writeInt(g.getId()); + p.writeString(g.getName()); + for (int i = 1; i <= 5; i++) { + p.writeString(g.getRankTitle(i)); + } + Collection members = g.getMembers(); + p.writeByte(members.size()); //then it is the size of all the members + for (MapleGuildCharacter mgc : members) {//and each of their character ids o_O + p.writeInt(mgc.getId()); + } + for (MapleGuildCharacter mgc : members) { + p.writeFixedString(StringUtil.getRightPaddedStr(mgc.getName(), '\0', 13)); + p.writeInt(mgc.getJobId()); + p.writeInt(mgc.getLevel()); + p.writeInt(mgc.getGuildRank()); + p.writeInt(mgc.isOnline() ? 1 : 0); + p.writeInt(g.getSignature()); + p.writeInt(mgc.getAllianceRank()); + } + p.writeInt(g.getCapacity()); + p.writeShort(g.getLogoBG()); + p.writeByte(g.getLogoBGColor()); + p.writeShort(g.getLogo()); + p.writeByte(g.getLogoColor()); + p.writeString(g.getNotice()); + p.writeInt(g.getGP()); + p.writeInt(g.getAllianceId()); + return p; + } + + public static Packet guildMemberOnline(int guildId, int chrId, boolean bOnline) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x3d); + p.writeInt(guildId); + p.writeInt(chrId); + p.writeBool(bOnline); + return p; + } + + public static Packet guildInvite(int guildId, String charName) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x05); + p.writeInt(guildId); + p.writeString(charName); + return p; + } + + public static Packet createGuildMessage(String masterName, String guildName) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x3); + p.writeInt(0); + p.writeString(masterName); + p.writeString(guildName); + return p; + } + + /** + * Gets a Heracle/guild message packet. + *

+ * Possible values for code:
28: guild name already in use
+ * 31: problem in locating players during agreement
33/40: already joined a guild
+ * 35: Cannot make guild
36: problem in player agreement
38: problem during forming guild
+ * 41: max number of players in joining guild
42: character can't be found this channel
+ * 45/48: character not in guild
52: problem in disbanding guild
56: admin cannot make guild
+ * 57: problem in increasing guild size
+ * + * @param code The response code. + * @return The guild message packet. + */ + public static Packet genericGuildMessage(byte code) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(code); + return p; + } + + /** + * Gets a guild message packet appended with target name. + *

+ * 53: player not accepting guild invites
+ * 54: player already managing an invite
55: player denied an invite
+ * + * @param code The response code. + * @param targetName The initial player target of the invitation. + * @return The guild message packet. + */ + public static Packet responseGuildMessage(byte code, String targetName) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(code); + p.writeString(targetName); + return p; + } + + public static Packet newGuildMember(MapleGuildCharacter mgc) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x27); + p.writeInt(mgc.getGuildId()); + p.writeInt(mgc.getId()); + p.writeFixedString(StringUtil.getRightPaddedStr(mgc.getName(), '\0', 13)); + p.writeInt(mgc.getJobId()); + p.writeInt(mgc.getLevel()); + p.writeInt(mgc.getGuildRank()); //should be always 5 but whatevs + p.writeInt(mgc.isOnline() ? 1 : 0); //should always be 1 too + p.writeInt(1); //? could be guild signature, but doesn't seem to matter + p.writeInt(3); + return p; + } + + //someone leaving, mode == 0x2c for leaving, 0x2f for expelled + public static Packet memberLeft(MapleGuildCharacter mgc, boolean bExpelled) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(bExpelled ? 0x2f : 0x2c); + p.writeInt(mgc.getGuildId()); + p.writeInt(mgc.getId()); + p.writeString(mgc.getName()); + return p; + } + + //rank change + public static Packet changeRank(MapleGuildCharacter mgc) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x40); + p.writeInt(mgc.getGuildId()); + p.writeInt(mgc.getId()); + p.writeByte(mgc.getGuildRank()); + return p; + } + + public static Packet guildNotice(int guildId, String notice) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x44); + p.writeInt(guildId); + p.writeString(notice); + return p; + } + + public static Packet guildMemberLevelJobUpdate(MapleGuildCharacter mgc) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x3C); + p.writeInt(mgc.getGuildId()); + p.writeInt(mgc.getId()); + p.writeInt(mgc.getLevel()); + p.writeInt(mgc.getJobId()); + return p; + } + + public static Packet rankTitleChange(int guildId, String[] ranks) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x3E); + p.writeInt(guildId); + for (int i = 0; i < 5; i++) { + p.writeString(ranks[i]); + } + return p; + } + + public static Packet guildDisband(int guildId) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x32); + p.writeInt(guildId); + p.writeByte(1); + return p; + } + + public static Packet guildQuestWaitingNotice(byte channel, int waitingPos) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x4C); + p.writeByte(channel - 1); + p.writeByte(waitingPos); + return p; + } + + public static Packet guildEmblemChange(int guildId, short bg, byte bgcolor, short logo, byte logoColor) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x42); + p.writeInt(guildId); + p.writeShort(bg); + p.writeByte(bgcolor); + p.writeShort(logo); + p.writeByte(logoColor); + return p; + } + + public static Packet guildCapacityChange(int guildId, int capacity) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x3A); + p.writeInt(guildId); + p.writeByte(capacity); + return p; + } + + public static void addThread(final OutPacket p, ResultSet rs) throws SQLException { + p.writeInt(rs.getInt("localthreadid")); + p.writeInt(rs.getInt("postercid")); + p.writeString(rs.getString("name")); + p.writeLong(PacketCreator.getTime(rs.getLong("timestamp"))); + p.writeInt(rs.getInt("icon")); + p.writeInt(rs.getInt("replycount")); + } + + public static Packet BBSThreadList(ResultSet rs, int start) throws SQLException { + OutPacket p = OutPacket.create(SendOpcode.GUILD_BBS_PACKET); + p.writeByte(0x06); + if (!rs.last()) { + p.writeByte(0); + p.writeInt(0); + p.writeInt(0); + return p; + } + int threadCount = rs.getRow(); + if (rs.getInt("localthreadid") == 0) { //has a notice + p.writeByte(1); + addThread(p, rs); + threadCount--; //one thread didn't count (because it's a notice) + } else { + p.writeByte(0); + } + if (!rs.absolute(start + 1)) { //seek to the thread before where we start + rs.first(); //uh, we're trying to start at a place past possible + start = 0; + } + p.writeInt(threadCount); + p.writeInt(Math.min(10, threadCount - start)); + for (int i = 0; i < Math.min(10, threadCount - start); i++) { + addThread(p, rs); + rs.next(); + } + return p; + } + + public static Packet showThread(int localthreadid, ResultSet threadRS, ResultSet repliesRS) throws SQLException, RuntimeException { + OutPacket p = OutPacket.create(SendOpcode.GUILD_BBS_PACKET); + p.writeByte(0x07); + p.writeInt(localthreadid); + p.writeInt(threadRS.getInt("postercid")); + p.writeLong(PacketCreator.getTime(threadRS.getLong("timestamp"))); + p.writeString(threadRS.getString("name")); + p.writeString(threadRS.getString("startpost")); + p.writeInt(threadRS.getInt("icon")); + if (repliesRS != null) { + int replyCount = threadRS.getInt("replycount"); + p.writeInt(replyCount); + int i; + for (i = 0; i < replyCount && repliesRS.next(); i++) { + p.writeInt(repliesRS.getInt("replyid")); + p.writeInt(repliesRS.getInt("postercid")); + p.writeLong(PacketCreator.getTime(repliesRS.getLong("timestamp"))); + p.writeString(repliesRS.getString("content")); + } + if (i != replyCount || repliesRS.next()) { + throw new RuntimeException(String.valueOf(threadRS.getInt("threadid"))); + } + } else { + p.writeInt(0); + } + return p; + } + + public static Packet showGuildRanks(int npcid, ResultSet rs) throws SQLException { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x49); + p.writeInt(npcid); + if (!rs.last()) { //no guilds o.o + p.writeInt(0); + return p; + } + p.writeInt(rs.getRow()); //number of entries + rs.beforeFirst(); + while (rs.next()) { + p.writeString(rs.getString("name")); + p.writeInt(rs.getInt("GP")); + p.writeInt(rs.getInt("logo")); + p.writeInt(rs.getInt("logoColor")); + p.writeInt(rs.getInt("logoBG")); + p.writeInt(rs.getInt("logoBGColor")); + } + return p; + } + + public static Packet showPlayerRanks(int npcid, List> worldRanking) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x49); + p.writeInt(npcid); + if (worldRanking.isEmpty()) { + p.writeInt(0); + return p; + } + p.writeInt(worldRanking.size()); + for (Pair wr : worldRanking) { + p.writeString(wr.getLeft()); + p.writeInt(wr.getRight()); + p.writeInt(0); + p.writeInt(0); + p.writeInt(0); + p.writeInt(0); + } + return p; + } + + public static Packet updateGP(int guildId, int GP) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_OPERATION); + p.writeByte(0x48); + p.writeInt(guildId); + p.writeInt(GP); + return p; + } + + public static void getGuildInfo(OutPacket p, MapleGuild guild) { + p.writeInt(guild.getId()); + p.writeString(guild.getName()); + for (int i = 1; i <= 5; i++) { + p.writeString(guild.getRankTitle(i)); + } + Collection members = guild.getMembers(); + p.writeByte(members.size()); + for (MapleGuildCharacter mgc : members) { + p.writeInt(mgc.getId()); + } + for (MapleGuildCharacter mgc : members) { + p.writeFixedString(StringUtil.getRightPaddedStr(mgc.getName(), '\0', 13)); + p.writeInt(mgc.getJobId()); + p.writeInt(mgc.getLevel()); + p.writeInt(mgc.getGuildRank()); + p.writeInt(mgc.isOnline() ? 1 : 0); + p.writeInt(guild.getSignature()); + p.writeInt(mgc.getAllianceRank()); + } + p.writeInt(guild.getCapacity()); + p.writeShort(guild.getLogoBG()); + p.writeByte(guild.getLogoBGColor()); + p.writeShort(guild.getLogo()); + p.writeByte(guild.getLogoColor()); + p.writeString(guild.getNotice()); + p.writeInt(guild.getGP()); + p.writeInt(guild.getAllianceId()); + } + + public static Packet getAllianceInfo(MapleAlliance alliance) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x0C); + p.writeByte(1); + p.writeInt(alliance.getId()); + p.writeString(alliance.getName()); + for (int i = 1; i <= 5; i++) { + p.writeString(alliance.getRankTitle(i)); + } + p.writeByte(alliance.getGuilds().size()); + p.writeInt(alliance.getCapacity()); // probably capacity + for (Integer guild : alliance.getGuilds()) { + p.writeInt(guild); + } + p.writeString(alliance.getNotice()); + return p; + } + + public static Packet updateAllianceInfo(MapleAlliance alliance, int world) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x0F); + p.writeInt(alliance.getId()); + p.writeString(alliance.getName()); + for (int i = 1; i <= 5; i++) { + p.writeString(alliance.getRankTitle(i)); + } + p.writeByte(alliance.getGuilds().size()); + for (Integer guild : alliance.getGuilds()) { + p.writeInt(guild); + } + p.writeInt(alliance.getCapacity()); // probably capacity + p.writeShort(0); + for (Integer guildid : alliance.getGuilds()) { + getGuildInfo(p, Server.getInstance().getGuild(guildid, world)); + } + return p; + } + + public static Packet getGuildAlliances(MapleAlliance alliance, int worldId) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x0D); + p.writeInt(alliance.getGuilds().size()); + for (Integer guild : alliance.getGuilds()) { + getGuildInfo(p, Server.getInstance().getGuild(guild, worldId)); + } + return p; + } + + public static Packet addGuildToAlliance(MapleAlliance alliance, int newGuild, MapleClient c) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x12); + p.writeInt(alliance.getId()); + p.writeString(alliance.getName()); + for (int i = 1; i <= 5; i++) { + p.writeString(alliance.getRankTitle(i)); + } + p.writeByte(alliance.getGuilds().size()); + for (Integer guild : alliance.getGuilds()) { + p.writeInt(guild); + } + p.writeInt(alliance.getCapacity()); + p.writeString(alliance.getNotice()); + p.writeInt(newGuild); + getGuildInfo(p, Server.getInstance().getGuild(newGuild, c.getWorld(), null)); + return p; + } + + public static Packet allianceMemberOnline(MapleCharacter mc, boolean online) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x0E); + p.writeInt(mc.getGuild().getAllianceId()); + p.writeInt(mc.getGuildId()); + p.writeInt(mc.getId()); + p.writeBool(online); + return p; + } + + public static Packet allianceNotice(int id, String notice) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x1C); + p.writeInt(id); + p.writeString(notice); + return p; + } + + public static Packet changeAllianceRankTitle(int alliance, String[] ranks) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x1A); + p.writeInt(alliance); + for (int i = 0; i < 5; i++) { + p.writeString(ranks[i]); + } + return p; + } + + public static Packet updateAllianceJobLevel(MapleCharacter mc) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x18); + p.writeInt(mc.getGuild().getAllianceId()); + p.writeInt(mc.getGuildId()); + p.writeInt(mc.getId()); + p.writeInt(mc.getLevel()); + p.writeInt(mc.getJob().getId()); + return p; + } + + public static Packet removeGuildFromAlliance(MapleAlliance alliance, int expelledGuild, int worldId) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x10); + p.writeInt(alliance.getId()); + p.writeString(alliance.getName()); + for (int i = 1; i <= 5; i++) { + p.writeString(alliance.getRankTitle(i)); + } + p.writeByte(alliance.getGuilds().size()); + for (Integer guild : alliance.getGuilds()) { + p.writeInt(guild); + } + p.writeInt(alliance.getCapacity()); + p.writeString(alliance.getNotice()); + p.writeInt(expelledGuild); + getGuildInfo(p, Server.getInstance().getGuild(expelledGuild, worldId, null)); + p.writeByte(0x01); + return p; + } + + public static Packet disbandAlliance(int alliance) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x1D); + p.writeInt(alliance); + return p; + } + + public static Packet allianceInvite(int allianceid, MapleCharacter chr) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x03); + p.writeInt(allianceid); + p.writeString(chr.getName()); + p.writeShort(0); + return p; + } + + public static Packet GuildBoss_HealerMove(short nY) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_BOSS_HEALER_MOVE); + p.writeShort(nY); //New Y Position + return p; + } + + public static Packet GuildBoss_PulleyStateChange(byte nState) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_BOSS_PULLEY_STATE_CHANGE); + p.writeByte(nState); + return p; + } + + /** + * Guild Name & Mark update packet, thanks to Arnah (Vertisy) + * + * @param guildName The Guild name, blank for nothing. + */ + public static Packet guildNameChanged(int chrid, String guildName) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_NAME_CHANGED); + p.writeInt(chrid); + p.writeString(guildName); + return p; + } + + public static Packet guildMarkChanged(int chrId, MapleGuild guild) { + OutPacket p = OutPacket.create(SendOpcode.GUILD_MARK_CHANGED); + p.writeInt(chrId); + p.writeShort(guild.getLogoBG()); + p.writeByte(guild.getLogoBGColor()); + p.writeShort(guild.getLogo()); + p.writeByte(guild.getLogoColor()); + return p; + } +} diff --git a/src/main/java/net/server/guild/MapleAlliance.java b/src/main/java/net/server/guild/MapleAlliance.java index 70007d2128..6b46359cc9 100644 --- a/src/main/java/net/server/guild/MapleAlliance.java +++ b/src/main/java/net/server/guild/MapleAlliance.java @@ -23,6 +23,7 @@ package net.server.guild; import client.MapleCharacter; import client.MapleClient; +import net.packet.Packet; import net.server.Server; import net.server.coordinator.world.MapleInviteCoordinator; import net.server.coordinator.world.MapleInviteCoordinator.InviteType; @@ -30,7 +31,6 @@ import net.server.coordinator.world.MapleInviteCoordinator.MapleInviteResult; import net.server.world.MapleParty; import net.server.world.MaplePartyCharacter; import tools.DatabaseConnection; -import tools.PacketCreator; import java.sql.Connection; import java.sql.PreparedStatement; @@ -141,8 +141,8 @@ public class MapleAlliance { Server.getInstance().addAlliance(id, alliance); int worldid = guildMasters.get(0).getWorld(); - Server.getInstance().allianceMessage(id, PacketCreator.updateAllianceInfo(alliance, worldid), -1, -1); - Server.getInstance().allianceMessage(id, PacketCreator.getGuildAlliances(alliance, worldid), -1, -1); // thanks Vcoc for noticing guilds from other alliances being visually stacked here due to this not being updated + Server.getInstance().allianceMessage(id, GuildPackets.updateAllianceInfo(alliance, worldid), -1, -1); + Server.getInstance().allianceMessage(id, GuildPackets.getGuildAlliances(alliance, worldid), -1, -1); // thanks Vcoc for noticing guilds from other alliances being visually stacked here due to this not being updated } catch (Exception e) { e.printStackTrace(); return null; @@ -273,7 +273,7 @@ public class MapleAlliance { ps.executeUpdate(); } - Server.getInstance().allianceMessage(allianceId, PacketCreator.disbandAlliance(allianceId), -1, -1); + Server.getInstance().allianceMessage(allianceId, GuildPackets.disbandAlliance(allianceId), -1, -1); Server.getInstance().disbandAlliance(allianceId); } catch (SQLException sqle) { sqle.printStackTrace(); @@ -298,13 +298,13 @@ public class MapleAlliance { return false; } - srv.allianceMessage(alliance.getId(), PacketCreator.removeGuildFromAlliance(alliance, guildId, worldId), -1, -1); + srv.allianceMessage(alliance.getId(), GuildPackets.removeGuildFromAlliance(alliance, guildId, worldId), -1, -1); srv.removeGuildFromAlliance(alliance.getId(), guildId); removeGuildFromAllianceOnDb(guildId); - srv.allianceMessage(alliance.getId(), PacketCreator.getGuildAlliances(alliance, worldId), -1, -1); - srv.allianceMessage(alliance.getId(), PacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); - srv.guildMessage(guildId, PacketCreator.disbandAlliance(alliance.getId())); + srv.allianceMessage(alliance.getId(), GuildPackets.getGuildAlliances(alliance, worldId), -1, -1); + srv.allianceMessage(alliance.getId(), GuildPackets.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); + srv.guildMessage(guildId, GuildPackets.disbandAlliance(alliance.getId())); alliance.dropMessage("[" + srv.getGuild(guildId, worldId).getName() + "] guild has left the union."); return true; @@ -312,8 +312,8 @@ public class MapleAlliance { public void updateAlliancePackets(MapleCharacter chr) { if (allianceId > 0) { - this.broadcastMessage(PacketCreator.updateAllianceInfo(this, chr.getWorld())); - this.broadcastMessage(PacketCreator.allianceNotice(this.getId(), this.getNotice())); + this.broadcastMessage(GuildPackets.updateAllianceInfo(this, chr.getWorld())); + this.broadcastMessage(GuildPackets.allianceNotice(this.getId(), this.getNotice())); } } @@ -431,7 +431,7 @@ public class MapleAlliance { } } - public void broadcastMessage(byte[] packet) { + public void broadcastMessage(Packet packet) { Server.getInstance().allianceMessage(allianceId, packet, -1, -1); } @@ -448,7 +448,7 @@ public class MapleAlliance { c.getPlayer().dropMessage(5, "The master of the guild that you offered an invitation is currently not online."); } else { if (MapleInviteCoordinator.createInvite(InviteType.ALLIANCE, c.getPlayer(), allianceId, victim.getId())) { - victim.getClient().announce(PacketCreator.allianceInvite(allianceId, c.getPlayer())); + victim.sendPacket(GuildPackets.allianceInvite(allianceId, c.getPlayer())); } else { c.getPlayer().dropMessage(5, "The master of the guild that you offered an invitation is currently managing another invite."); } diff --git a/src/main/java/net/server/guild/MapleGuild.java b/src/main/java/net/server/guild/MapleGuild.java index 5d825ccb64..48f19e0b1e 100644 --- a/src/main/java/net/server/guild/MapleGuild.java +++ b/src/main/java/net/server/guild/MapleGuild.java @@ -24,6 +24,7 @@ package net.server.guild; import client.MapleCharacter; import client.MapleClient; import config.YamlConfig; +import net.packet.Packet; import net.server.PlayerStorage; import net.server.Server; import net.server.audit.locks.MonitoredLockType; @@ -184,7 +185,7 @@ public class MapleGuild { membersLock.lock(); try { - this.broadcast(PacketCreator.guildDisband(this.id)); + this.broadcast(GuildPackets.guildDisband(this.id)); } finally { membersLock.unlock(); } @@ -279,8 +280,8 @@ public class MapleGuild { continue; } - byte[] packet = PacketCreator.guildNameChanged(chr.getId(), this.getName()); - chr.getMap().broadcastMessage(chr, packet); + Packet packet = GuildPackets.guildNameChanged(chr.getId(), this.getName()); + chr.getMap().broadcastPacket(chr, packet); } } @@ -293,8 +294,8 @@ public class MapleGuild { continue; } - byte[] packet = PacketCreator.guildMarkChanged(chr.getId(), this); - chr.getMap().broadcastMessage(chr, packet); + Packet packet = GuildPackets.guildMarkChanged(chr.getId(), this); + chr.getMap().broadcastPacket(chr, packet); } } @@ -307,20 +308,19 @@ public class MapleGuild { continue; } - byte[] packet = PacketCreator.showGuildInfo(chr); - chr.announce(packet); + chr.sendPacket(GuildPackets.showGuildInfo(chr)); } } - public void broadcast(final byte[] packet) { + public void broadcast(Packet packet) { broadcast(packet, -1, BCOp.NONE); } - public void broadcast(final byte[] packet, int exception) { + public void broadcast(Packet packet, int exception) { broadcast(packet, exception, BCOp.NONE); } - public void broadcast(final byte[] packet, int exceptionId, BCOp bcop) { + public void broadcast(Packet packet, int exceptionId, BCOp bcop) { membersLock.lock(); // membersLock awareness thanks to ProjectNano dev team try { synchronized (notifications) { @@ -349,13 +349,13 @@ public class MapleGuild { } } - public void guildMessage(final byte[] serverNotice) { + public void guildMessage(Packet serverNotice) { membersLock.lock(); try { for (MapleGuildCharacter mgc : members) { for (Channel cs : Server.getInstance().getChannelsFromWorld(world)) { if (cs.getPlayerStorage().getCharacterById(mgc.getId()) != null) { - cs.getPlayerStorage().getCharacterById(mgc.getId()).getClient().announce(serverNotice); + cs.getPlayerStorage().getCharacterById(mgc.getId()).sendPacket(serverNotice); break; } } @@ -382,7 +382,7 @@ public class MapleGuild { } } - public void broadcastMessage(byte[] packet) { + public void broadcastMessage(Packet packet) { Server.getInstance().guildMessage(id, packet); } @@ -401,7 +401,7 @@ public class MapleGuild { } } if (bBroadcast) { - this.broadcast(PacketCreator.guildMemberOnline(id, cid, online), cid); + this.broadcast(GuildPackets.guildMemberOnline(id, cid, online), cid); } bDirty = true; } finally { @@ -479,7 +479,7 @@ public class MapleGuild { } } - this.broadcast(PacketCreator.newGuildMember(mgc)); + this.broadcast(GuildPackets.newGuildMember(mgc)); return 1; } finally { membersLock.unlock(); @@ -489,7 +489,7 @@ public class MapleGuild { public void leaveGuild(MapleGuildCharacter mgc) { membersLock.lock(); try { - this.broadcast(PacketCreator.memberLeft(mgc, false)); + this.broadcast(GuildPackets.memberLeft(mgc, false)); members.remove(mgc); bDirty = true; } finally { @@ -505,7 +505,7 @@ public class MapleGuild { while (itr.hasNext()) { mgc = itr.next(); if (mgc.getId() == cid && initiator.getGuildRank() < mgc.getGuildRank()) { - this.broadcast(PacketCreator.memberLeft(mgc, true)); + this.broadcast(GuildPackets.memberLeft(mgc, true)); itr.remove(); bDirty = true; try { @@ -568,7 +568,7 @@ public class MapleGuild { membersLock.lock(); try { - this.broadcast(PacketCreator.changeRank(mgc)); + this.broadcast(GuildPackets.changeRank(mgc)); } finally { membersLock.unlock(); } @@ -580,7 +580,7 @@ public class MapleGuild { membersLock.lock(); try { - this.broadcast(PacketCreator.guildNotice(this.id, notice)); + this.broadcast(GuildPackets.guildNotice(this.id, notice)); } finally { membersLock.unlock(); } @@ -593,7 +593,7 @@ public class MapleGuild { if (mgc.equals(member)) { member.setJobId(mgc.getJobId()); member.setLevel(mgc.getLevel()); - this.broadcast(PacketCreator.guildMemberLevelJobUpdate(mgc)); + this.broadcast(GuildPackets.guildMemberLevelJobUpdate(mgc)); break; } } @@ -624,7 +624,7 @@ public class MapleGuild { membersLock.lock(); try { - this.broadcast(PacketCreator.rankTitleChange(this.id, ranks)); + this.broadcast(GuildPackets.rankTitleChange(this.id, ranks)); } finally { membersLock.unlock(); } @@ -686,7 +686,7 @@ public class MapleGuild { membersLock.lock(); try { - this.broadcast(PacketCreator.guildCapacityChange(this.id, this.capacity)); + this.broadcast(GuildPackets.guildCapacityChange(this.id, this.capacity)); } finally { membersLock.unlock(); } @@ -697,14 +697,14 @@ public class MapleGuild { public void gainGP(int amount) { this.gp += amount; this.writeToDB(false); - this.guildMessage(PacketCreator.updateGP(this.id, this.gp)); + this.guildMessage(GuildPackets.updateGP(this.id, this.gp)); this.guildMessage(PacketCreator.getGPMessage(amount)); } public void removeGP(int amount) { this.gp -= amount; this.writeToDB(false); - this.guildMessage(PacketCreator.updateGP(this.id, this.gp)); + this.guildMessage(GuildPackets.updateGP(this.id, this.gp)); } public static MapleGuildResponse sendInvitation(MapleClient c, String targetName) { @@ -718,7 +718,7 @@ public class MapleGuild { MapleCharacter sender = c.getPlayer(); if (MapleInviteCoordinator.createInvite(InviteType.GUILD, sender, sender.getGuildId(), mc.getId())) { - mc.getClient().announce(PacketCreator.guildInvite(sender.getGuildId(), sender.getName())); + mc.sendPacket(GuildPackets.guildInvite(sender.getGuildId(), sender.getName())); return null; } else { return MapleGuildResponse.MANAGING_INVITE; @@ -743,7 +743,7 @@ public class MapleGuild { } if (mgr != null && sender != null) { - sender.announce(mgr.getPacket(targetName)); + sender.sendPacket(mgr.getPacket(targetName)); } return false; } @@ -766,7 +766,7 @@ public class MapleGuild { try (Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("SELECT `name`, `GP`, `logoBG`, `logoBGColor`, `logo`, `logoColor` FROM guilds ORDER BY `GP` DESC LIMIT 50", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = ps.executeQuery()) { - c.announce(PacketCreator.showGuildRanks(npcid, rs)); + c.sendPacket(GuildPackets.showGuildRanks(npcid, rs)); } catch (SQLException e) { e.printStackTrace(); System.out.println("failed to display guild ranks. " + e); diff --git a/src/main/java/net/server/guild/MapleGuildResponse.java b/src/main/java/net/server/guild/MapleGuildResponse.java index ec59fdba51..548ecea115 100644 --- a/src/main/java/net/server/guild/MapleGuildResponse.java +++ b/src/main/java/net/server/guild/MapleGuildResponse.java @@ -21,7 +21,7 @@ */ package net.server.guild; -import tools.PacketCreator; +import net.packet.Packet; public enum MapleGuildResponse { NOT_IN_CHANNEL(0x2a), @@ -31,17 +31,17 @@ public enum MapleGuildResponse { MANAGING_INVITE(0x36), DENIED_INVITE(0x37); - private int value; + private final int value; - private MapleGuildResponse(int val) { + MapleGuildResponse(int val) { value = val; } - public final byte[] getPacket(String targetName) { + public final Packet getPacket(String targetName) { if (value >= MANAGING_INVITE.value) { - return PacketCreator.responseGuildMessage((byte) value, targetName); + return GuildPackets.responseGuildMessage((byte) value, targetName); } else { - return PacketCreator.genericGuildMessage((byte) value); + return GuildPackets.genericGuildMessage((byte) value); } } } diff --git a/src/main/java/net/server/handlers/CustomPacketHandler.java b/src/main/java/net/server/handlers/CustomPacketHandler.java index 8d00553530..7b69f880a3 100644 --- a/src/main/java/net/server/handlers/CustomPacketHandler.java +++ b/src/main/java/net/server/handlers/CustomPacketHandler.java @@ -30,7 +30,7 @@ public class CustomPacketHandler implements MaplePacketHandler { @Override public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { if (slea.available() > 0 && c.getGMLevel() == 4) {//w/e - c.announce(PacketCreator.customPacket(slea.read((int) slea.available()))); + c.sendPacket(PacketCreator.customPacket(slea.read((int) slea.available()))); } } diff --git a/src/main/java/net/server/handlers/login/AcceptToSHandler.java b/src/main/java/net/server/handlers/login/AcceptToSHandler.java index fe3675ab5f..d6771a0cd9 100644 --- a/src/main/java/net/server/handlers/login/AcceptToSHandler.java +++ b/src/main/java/net/server/handlers/login/AcceptToSHandler.java @@ -23,9 +23,9 @@ public final class AcceptToSHandler extends AbstractMaplePacketHandler { return; } if (c.finishLogin() == 0) { - c.announce(PacketCreator.getAuthSuccess(c)); + c.sendPacket(PacketCreator.getAuthSuccess(c)); } else { - c.announce(PacketCreator.getLoginFailed(9));//shouldn't happen XD + c.sendPacket(PacketCreator.getLoginFailed(9));//shouldn't happen XD } } } diff --git a/src/main/java/net/server/handlers/login/AfterLoginHandler.java b/src/main/java/net/server/handlers/login/AfterLoginHandler.java index 0d7741bf8d..5c66d75284 100644 --- a/src/main/java/net/server/handlers/login/AfterLoginHandler.java +++ b/src/main/java/net/server/handlers/login/AfterLoginHandler.java @@ -38,23 +38,23 @@ public final class AfterLoginHandler extends AbstractMaplePacketHandler { } if (c2 == 1 && c3 == 1) { if (c.getPin() == null || c.getPin().equals("")) { - c.announce(PacketCreator.registerPin()); + c.sendPacket(PacketCreator.registerPin()); } else { - c.announce(PacketCreator.requestPin()); + c.sendPacket(PacketCreator.requestPin()); } } else if (c2 == 1 && c3 == 0) { String pin = slea.readMapleAsciiString(); if (c.checkPin(pin)) { - c.announce(PacketCreator.pinAccepted()); + c.sendPacket(PacketCreator.pinAccepted()); } else { - c.announce(PacketCreator.requestPinAfterFailure()); + c.sendPacket(PacketCreator.requestPinAfterFailure()); } } else if (c2 == 2 && c3 == 0) { String pin = slea.readMapleAsciiString(); if (c.checkPin(pin)) { - c.announce(PacketCreator.registerPin()); + c.sendPacket(PacketCreator.registerPin()); } else { - c.announce(PacketCreator.requestPinAfterFailure()); + c.sendPacket(PacketCreator.requestPinAfterFailure()); } } else if (c2 == 0 && c3 == 5) { SessionCoordinator.getInstance().closeSession(c, null); diff --git a/src/main/java/net/server/handlers/login/CharSelectedHandler.java b/src/main/java/net/server/handlers/login/CharSelectedHandler.java index eba95d5001..d39311c5ad 100644 --- a/src/main/java/net/server/handlers/login/CharSelectedHandler.java +++ b/src/main/java/net/server/handlers/login/CharSelectedHandler.java @@ -61,7 +61,7 @@ public final class CharSelectedHandler extends AbstractMaplePacketHandler { hwid = Hwid.fromHostString(hostString); } catch (IllegalArgumentException e) { log.warn("Invalid host string: {}", hostString, e); - c.announce(PacketCreator.getAfterLoginError(17)); + c.sendPacket(PacketCreator.getAfterLoginError(17)); return; } @@ -70,7 +70,7 @@ public final class CharSelectedHandler extends AbstractMaplePacketHandler { AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); + c.sendPacket(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); return; } @@ -88,13 +88,13 @@ public final class CharSelectedHandler extends AbstractMaplePacketHandler { c.setWorld(server.getCharacterWorld(charId)); World wserv = c.getWorldServer(); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } String[] socket = server.getInetSocket(c, c.getWorld(), c.getChannel()); if(socket == null) { - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } @@ -102,7 +102,7 @@ public final class CharSelectedHandler extends AbstractMaplePacketHandler { c.setCharacterOnSessionTransitionState(charId); try { - c.announce(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); + c.sendPacket(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); } catch (UnknownHostException | NumberFormatException e) { e.printStackTrace(); } diff --git a/src/main/java/net/server/handlers/login/CharSelectedWithPicHandler.java b/src/main/java/net/server/handlers/login/CharSelectedWithPicHandler.java index 66c8842a86..c6eb13ca78 100644 --- a/src/main/java/net/server/handlers/login/CharSelectedWithPicHandler.java +++ b/src/main/java/net/server/handlers/login/CharSelectedWithPicHandler.java @@ -41,7 +41,7 @@ public class CharSelectedWithPicHandler extends AbstractMaplePacketHandler { hwid = Hwid.fromHostString(hostString); } catch (IllegalArgumentException e) { log.warn("Invalid host string: {}", hostString, e); - c.announce(PacketCreator.getAfterLoginError(17)); + c.sendPacket(PacketCreator.getAfterLoginError(17)); return; } @@ -63,19 +63,19 @@ public class CharSelectedWithPicHandler extends AbstractMaplePacketHandler { c.setWorld(server.getCharacterWorld(charId)); World wserv = c.getWorldServer(); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } String[] socket = server.getInetSocket(c, c.getWorld(), c.getChannel()); if(socket == null) { - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); + c.sendPacket(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); return; } @@ -83,12 +83,12 @@ public class CharSelectedWithPicHandler extends AbstractMaplePacketHandler { c.setCharacterOnSessionTransitionState(charId); try { - c.announce(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); + c.sendPacket(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); } catch (UnknownHostException | NumberFormatException e) { e.printStackTrace(); } } else { - c.announce(PacketCreator.wrongPic()); + c.sendPacket(PacketCreator.wrongPic()); } } } diff --git a/src/main/java/net/server/handlers/login/CharlistRequestHandler.java b/src/main/java/net/server/handlers/login/CharlistRequestHandler.java index 99a19caada..d34c7bfa76 100644 --- a/src/main/java/net/server/handlers/login/CharlistRequestHandler.java +++ b/src/main/java/net/server/handlers/login/CharlistRequestHandler.java @@ -38,14 +38,14 @@ public final class CharlistRequestHandler extends AbstractMaplePacketHandler { World wserv = Server.getInstance().getWorld(world); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(PacketCreator.getServerStatus(2)); + c.sendPacket(PacketCreator.getServerStatus(2)); return; } int channel = slea.readByte() + 1; Channel ch = wserv.getChannel(channel); if(ch == null) { - c.announce(PacketCreator.getServerStatus(2)); + c.sendPacket(PacketCreator.getServerStatus(2)); return; } diff --git a/src/main/java/net/server/handlers/login/CheckCharNameHandler.java b/src/main/java/net/server/handlers/login/CheckCharNameHandler.java index b1ff02223a..696c236516 100644 --- a/src/main/java/net/server/handlers/login/CheckCharNameHandler.java +++ b/src/main/java/net/server/handlers/login/CheckCharNameHandler.java @@ -32,6 +32,6 @@ public final class CheckCharNameHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { String name = slea.readMapleAsciiString(); - c.announce(PacketCreator.charNameResponse(name, !MapleCharacter.canCreateChar(name))); + c.sendPacket(PacketCreator.charNameResponse(name, !MapleCharacter.canCreateChar(name))); } } diff --git a/src/main/java/net/server/handlers/login/CreateCharHandler.java b/src/main/java/net/server/handlers/login/CreateCharHandler.java index cce3a4c801..6c3c13f4aa 100644 --- a/src/main/java/net/server/handlers/login/CreateCharHandler.java +++ b/src/main/java/net/server/handlers/login/CreateCharHandler.java @@ -84,12 +84,12 @@ public final class CreateCharHandler extends AbstractMaplePacketHandler { } else if (job == 2) { // Aran status = LegendCreator.createCharacter(c, name, face, hair + haircolor, skincolor, top, bottom, shoes, weapon, gender); } else { - c.announce(PacketCreator.deleteCharResponse(0, 9)); + c.sendPacket(PacketCreator.deleteCharResponse(0, 9)); return; } if (status == -2) { - c.announce(PacketCreator.deleteCharResponse(0, 9)); + c.sendPacket(PacketCreator.deleteCharResponse(0, 9)); } } } \ No newline at end of file diff --git a/src/main/java/net/server/handlers/login/DeleteCharHandler.java b/src/main/java/net/server/handlers/login/DeleteCharHandler.java index 3ad6485439..e1f5626825 100644 --- a/src/main/java/net/server/handlers/login/DeleteCharHandler.java +++ b/src/main/java/net/server/handlers/login/DeleteCharHandler.java @@ -57,12 +57,12 @@ public final class DeleteCharHandler extends AbstractMaplePacketHandler { int guildRank = rs.getInt("guildrank"); int familyId = rs.getInt("familyId"); if (guildId != 0 && guildRank <= 1) { - c.announce(PacketCreator.deleteCharResponse(cid, 0x16)); + c.sendPacket(PacketCreator.deleteCharResponse(cid, 0x16)); return; } else if (familyId != -1) { MapleFamily family = Server.getInstance().getWorld(world).getFamily(familyId); if (family != null && family.getTotalMembers() > 1) { - c.announce(PacketCreator.deleteCharResponse(cid, 0x1D)); + c.sendPacket(PacketCreator.deleteCharResponse(cid, 0x1D)); return; } } @@ -72,23 +72,23 @@ public final class DeleteCharHandler extends AbstractMaplePacketHandler { try (ResultSet rs = ps2.executeQuery()) { rs.next(); if (rs.getInt("rowcount") > 0) { - c.announce(PacketCreator.deleteCharResponse(cid, 0x1A)); + c.sendPacket(PacketCreator.deleteCharResponse(cid, 0x1A)); return; } } } catch (SQLException e) { e.printStackTrace(); - c.announce(PacketCreator.deleteCharResponse(cid, 0x09)); + c.sendPacket(PacketCreator.deleteCharResponse(cid, 0x09)); return; } if (c.deleteCharacter(cid, c.getAccID())) { FilePrinter.print(FilePrinter.DELETED_CHAR + c.getAccountName() + ".txt", c.getAccountName() + " deleted CID: " + cid); - c.announce(PacketCreator.deleteCharResponse(cid, 0)); + c.sendPacket(PacketCreator.deleteCharResponse(cid, 0)); } else { - c.announce(PacketCreator.deleteCharResponse(cid, 0x09)); + c.sendPacket(PacketCreator.deleteCharResponse(cid, 0x09)); } } else { - c.announce(PacketCreator.deleteCharResponse(cid, 0x14)); + c.sendPacket(PacketCreator.deleteCharResponse(cid, 0x14)); } } } diff --git a/src/main/java/net/server/handlers/login/GuestLoginHandler.java b/src/main/java/net/server/handlers/login/GuestLoginHandler.java index 9aede70d00..09979eee8f 100644 --- a/src/main/java/net/server/handlers/login/GuestLoginHandler.java +++ b/src/main/java/net/server/handlers/login/GuestLoginHandler.java @@ -33,7 +33,7 @@ public final class GuestLoginHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { - c.announce(PacketCreator.sendGuestTOS()); + c.sendPacket(PacketCreator.sendGuestTOS()); //System.out.println(slea.toString()); new LoginPasswordHandler().handlePacket(slea, c); } diff --git a/src/main/java/net/server/handlers/login/LoginPasswordHandler.java b/src/main/java/net/server/handlers/login/LoginPasswordHandler.java index af94075058..31594ac886 100644 --- a/src/main/java/net/server/handlers/login/LoginPasswordHandler.java +++ b/src/main/java/net/server/handlers/login/LoginPasswordHandler.java @@ -57,7 +57,7 @@ public final class LoginPasswordHandler implements MaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { String remoteHost = c.getRemoteAddress(); if (remoteHost.contentEquals("null")) { - c.announce(PacketCreator.getLoginFailed(14)); // thanks Alchemist for noting remoteHost could be null + c.sendPacket(PacketCreator.getLoginFailed(14)); // thanks Alchemist for noting remoteHost could be null return; } @@ -106,33 +106,33 @@ public final class LoginPasswordHandler implements MaplePacketHandler { } if (c.hasBannedIP() || c.hasBannedMac()) { - c.announce(PacketCreator.getLoginFailed(3)); + c.sendPacket(PacketCreator.getLoginFailed(3)); return; } Calendar tempban = c.getTempBanCalendarFromDB(); if (tempban != null) { if (tempban.getTimeInMillis() > Calendar.getInstance().getTimeInMillis()) { - c.announce(PacketCreator.getTempBan(tempban.getTimeInMillis(), c.getGReason())); + c.sendPacket(PacketCreator.getTempBan(tempban.getTimeInMillis(), c.getGReason())); return; } } if (loginok == 3) { - c.announce(PacketCreator.getPermBan(c.getGReason()));//crashes but idc :D + c.sendPacket(PacketCreator.getPermBan(c.getGReason()));//crashes but idc :D return; } else if (loginok != 0) { - c.announce(PacketCreator.getLoginFailed(loginok)); + c.sendPacket(PacketCreator.getLoginFailed(loginok)); return; } if (c.finishLogin() == 0) { c.checkChar(c.getAccID()); login(c); } else { - c.announce(PacketCreator.getLoginFailed(7)); + c.sendPacket(PacketCreator.getLoginFailed(7)); } } private static void login(MapleClient c) { - c.announce(PacketCreator.getAuthSuccess(c));//why the fk did I do c.getAccountName()? + c.sendPacket(PacketCreator.getAuthSuccess(c));//why the fk did I do c.getAccountName()? Server.getInstance().registerLoginState(c); } } diff --git a/src/main/java/net/server/handlers/login/RegisterPicHandler.java b/src/main/java/net/server/handlers/login/RegisterPicHandler.java index 1442cb50e6..de7c850d60 100644 --- a/src/main/java/net/server/handlers/login/RegisterPicHandler.java +++ b/src/main/java/net/server/handlers/login/RegisterPicHandler.java @@ -41,7 +41,7 @@ public final class RegisterPicHandler extends AbstractMaplePacketHandler { hwid = Hwid.fromHostString(hostString); } catch (IllegalArgumentException e) { log.warn("Invalid host string: {}", hostString, e); - c.announce(PacketCreator.getAfterLoginError(17)); + c.sendPacket(PacketCreator.getAfterLoginError(17)); return; } @@ -50,7 +50,7 @@ public final class RegisterPicHandler extends AbstractMaplePacketHandler { AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); + c.sendPacket(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); return; } @@ -72,13 +72,13 @@ public final class RegisterPicHandler extends AbstractMaplePacketHandler { c.setWorld(server.getCharacterWorld(charId)); World wserv = c.getWorldServer(); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } String[] socket = server.getInetSocket(c, c.getWorld(), c.getChannel()); if(socket == null) { - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } @@ -86,7 +86,7 @@ public final class RegisterPicHandler extends AbstractMaplePacketHandler { c.setCharacterOnSessionTransitionState(charId); try { - c.announce(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); + c.sendPacket(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); } catch (UnknownHostException e) { e.printStackTrace(); } diff --git a/src/main/java/net/server/handlers/login/RegisterPinHandler.java b/src/main/java/net/server/handlers/login/RegisterPinHandler.java index 4c56774765..1caa92af07 100644 --- a/src/main/java/net/server/handlers/login/RegisterPinHandler.java +++ b/src/main/java/net/server/handlers/login/RegisterPinHandler.java @@ -41,7 +41,7 @@ public final class RegisterPinHandler extends AbstractMaplePacketHandler { String pin = slea.readMapleAsciiString(); if (pin != null) { c.setPin(pin); - c.announce(PacketCreator.pinRegistered()); + c.sendPacket(PacketCreator.pinRegistered()); SessionCoordinator.getInstance().closeSession(c, null); c.updateLoginState(MapleClient.LOGIN_NOTLOGGEDIN); diff --git a/src/main/java/net/server/handlers/login/RelogRequestHandler.java b/src/main/java/net/server/handlers/login/RelogRequestHandler.java index 1f50df5dea..4a5a0c2a8d 100644 --- a/src/main/java/net/server/handlers/login/RelogRequestHandler.java +++ b/src/main/java/net/server/handlers/login/RelogRequestHandler.java @@ -34,6 +34,6 @@ public final class RelogRequestHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { - c.announce(PacketCreator.getRelogResponse()); + c.sendPacket(PacketCreator.getRelogResponse()); } } diff --git a/src/main/java/net/server/handlers/login/ServerStatusRequestHandler.java b/src/main/java/net/server/handlers/login/ServerStatusRequestHandler.java index ad72f23dbe..fe0588600c 100644 --- a/src/main/java/net/server/handlers/login/ServerStatusRequestHandler.java +++ b/src/main/java/net/server/handlers/login/ServerStatusRequestHandler.java @@ -36,9 +36,9 @@ public final class ServerStatusRequestHandler extends AbstractMaplePacketHandler World wserv = Server.getInstance().getWorld(world); if(wserv != null) { int status = wserv.getWorldCapacityStatus(); - c.announce(PacketCreator.getServerStatus(status)); + c.sendPacket(PacketCreator.getServerStatus(status)); } else { - c.announce(PacketCreator.getServerStatus(2)); + c.sendPacket(PacketCreator.getServerStatus(2)); } } } diff --git a/src/main/java/net/server/handlers/login/ServerlistRequestHandler.java b/src/main/java/net/server/handlers/login/ServerlistRequestHandler.java index bf1b7501b6..b71fb74062 100644 --- a/src/main/java/net/server/handlers/login/ServerlistRequestHandler.java +++ b/src/main/java/net/server/handlers/login/ServerlistRequestHandler.java @@ -40,10 +40,10 @@ public final class ServerlistRequestHandler extends AbstractMaplePacketHandler { c.requestedServerlist(worlds.size()); for (World world : worlds) { - c.announce(PacketCreator.getServerList(world.getId(), GameConstants.WORLD_NAMES[world.getId()], world.getFlag(), world.getEventMessage(), world.getChannels())); + c.sendPacket(PacketCreator.getServerList(world.getId(), GameConstants.WORLD_NAMES[world.getId()], world.getFlag(), world.getEventMessage(), world.getChannels())); } - c.announce(PacketCreator.getEndOfServerList()); - c.announce(PacketCreator.selectWorld(0));//too lazy to make a check lol - c.announce(PacketCreator.sendRecommended(server.worldRecommendedList())); + c.sendPacket(PacketCreator.getEndOfServerList()); + c.sendPacket(PacketCreator.selectWorld(0));//too lazy to make a check lol + c.sendPacket(PacketCreator.sendRecommended(server.worldRecommendedList())); } } \ No newline at end of file diff --git a/src/main/java/net/server/handlers/login/SetGenderHandler.java b/src/main/java/net/server/handlers/login/SetGenderHandler.java index 4465f3c3e8..548a302611 100644 --- a/src/main/java/net/server/handlers/login/SetGenderHandler.java +++ b/src/main/java/net/server/handlers/login/SetGenderHandler.java @@ -40,7 +40,7 @@ public class SetGenderHandler extends AbstractMaplePacketHandler { byte confirmed = slea.readByte(); if (confirmed == 0x01) { c.setGender(slea.readByte()); - c.announce(PacketCreator.getAuthSuccess(c)); + c.sendPacket(PacketCreator.getAuthSuccess(c)); Server.getInstance().registerLoginState(c); } else { diff --git a/src/main/java/net/server/handlers/login/ViewAllCharHandler.java b/src/main/java/net/server/handlers/login/ViewAllCharHandler.java index b8f0bcd39e..a31ea3fe3a 100644 --- a/src/main/java/net/server/handlers/login/ViewAllCharHandler.java +++ b/src/main/java/net/server/handlers/login/ViewAllCharHandler.java @@ -37,7 +37,7 @@ public final class ViewAllCharHandler extends AbstractMaplePacketHandler { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { try { if(!c.canRequestCharlist()) { // client breaks if the charlist request pops too soon - c.announce(PacketCreator.showAllCharacter(0, 0)); + c.sendPacket(PacketCreator.showAllCharacter(0, 0)); return; } @@ -62,10 +62,10 @@ public final class ViewAllCharHandler extends AbstractMaplePacketHandler { int charsSize = chrTotal; int unk = charsSize + (3 - charsSize % 3); //rowSize? - c.announce(PacketCreator.showAllCharacter(charsSize, unk)); + c.sendPacket(PacketCreator.showAllCharacter(charsSize, unk)); for (Pair> wchars : worldChars) { - c.announce(PacketCreator.showAllCharacterInfo(wchars.getLeft(), wchars.getRight(), YamlConfig.config.server.ENABLE_PIC && !c.canBypassPic())); + c.sendPacket(PacketCreator.showAllCharacterInfo(wchars.getLeft(), wchars.getRight(), YamlConfig.config.server.ENABLE_PIC && !c.canBypassPic())); } } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/net/server/handlers/login/ViewAllCharRegisterPicHandler.java b/src/main/java/net/server/handlers/login/ViewAllCharRegisterPicHandler.java index a7bde1be57..a4ee26afa5 100644 --- a/src/main/java/net/server/handlers/login/ViewAllCharRegisterPicHandler.java +++ b/src/main/java/net/server/handlers/login/ViewAllCharRegisterPicHandler.java @@ -43,7 +43,7 @@ public final class ViewAllCharRegisterPicHandler extends AbstractMaplePacketHand hwid = Hwid.fromHostString(hostString); } catch (IllegalArgumentException e) { log.warn("Invalid host string: {}", hostString, e); - c.announce(PacketCreator.getAfterLoginError(17)); + c.sendPacket(PacketCreator.getAfterLoginError(17)); return; } @@ -57,7 +57,7 @@ public final class ViewAllCharRegisterPicHandler extends AbstractMaplePacketHand AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); + c.sendPacket(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); return; } @@ -70,7 +70,7 @@ public final class ViewAllCharRegisterPicHandler extends AbstractMaplePacketHand c.setWorld(server.getCharacterWorld(charId)); World wserv = c.getWorldServer(); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } @@ -82,7 +82,7 @@ public final class ViewAllCharRegisterPicHandler extends AbstractMaplePacketHand String[] socket = server.getInetSocket(c, c.getWorld(), channel); if (socket == null) { - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } @@ -90,7 +90,7 @@ public final class ViewAllCharRegisterPicHandler extends AbstractMaplePacketHand c.setCharacterOnSessionTransitionState(charId); try { - c.announce(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); + c.sendPacket(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); } catch (UnknownHostException e) { e.printStackTrace(); } diff --git a/src/main/java/net/server/handlers/login/ViewAllCharSelectedHandler.java b/src/main/java/net/server/handlers/login/ViewAllCharSelectedHandler.java index 24476b5562..8320ff5681 100644 --- a/src/main/java/net/server/handlers/login/ViewAllCharSelectedHandler.java +++ b/src/main/java/net/server/handlers/login/ViewAllCharSelectedHandler.java @@ -63,7 +63,7 @@ public final class ViewAllCharSelectedHandler extends AbstractMaplePacketHandler hwid = Hwid.fromHostString(hostString); } catch (IllegalArgumentException e) { log.warn("Invalid host string: {}", hostString, e); - c.announce(PacketCreator.getAfterLoginError(17)); + c.sendPacket(PacketCreator.getAfterLoginError(17)); return; } @@ -77,7 +77,7 @@ public final class ViewAllCharSelectedHandler extends AbstractMaplePacketHandler AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); + c.sendPacket(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); return; } @@ -91,7 +91,7 @@ public final class ViewAllCharSelectedHandler extends AbstractMaplePacketHandler World wserv = c.getWorldServer(); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } @@ -105,7 +105,7 @@ public final class ViewAllCharSelectedHandler extends AbstractMaplePacketHandler String[] socket = server.getInetSocket(c, c.getWorld(), c.getChannel()); if(socket == null) { - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } @@ -113,7 +113,7 @@ public final class ViewAllCharSelectedHandler extends AbstractMaplePacketHandler c.setCharacterOnSessionTransitionState(charId); try { - c.announce(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); + c.sendPacket(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); } catch (UnknownHostException e) { e.printStackTrace(); } diff --git a/src/main/java/net/server/handlers/login/ViewAllCharSelectedWithPicHandler.java b/src/main/java/net/server/handlers/login/ViewAllCharSelectedWithPicHandler.java index 599bf9f90e..8dfeb6cac3 100644 --- a/src/main/java/net/server/handlers/login/ViewAllCharSelectedWithPicHandler.java +++ b/src/main/java/net/server/handlers/login/ViewAllCharSelectedWithPicHandler.java @@ -44,7 +44,7 @@ public class ViewAllCharSelectedWithPicHandler extends AbstractMaplePacketHandle hwid = Hwid.fromHostString(hostString); } catch (IllegalArgumentException e) { log.warn("Invalid host string: {}", hostString, e); - c.announce(PacketCreator.getAfterLoginError(17)); + c.sendPacket(PacketCreator.getAfterLoginError(17)); return; } @@ -65,7 +65,7 @@ public class ViewAllCharSelectedWithPicHandler extends AbstractMaplePacketHandle c.setWorld(server.getCharacterWorld(charId)); World wserv = c.getWorldServer(); if(wserv == null || wserv.isWorldCapacityFull()) { - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } @@ -75,13 +75,13 @@ public class ViewAllCharSelectedWithPicHandler extends AbstractMaplePacketHandle if (c.checkPic(pic)) { String[] socket = server.getInetSocket(c, c.getWorld(), c.getChannel()); if(socket == null) { - c.announce(PacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); + c.sendPacket(PacketCreator.getAfterLoginError(parseAntiMulticlientError(res))); return; } @@ -89,13 +89,13 @@ public class ViewAllCharSelectedWithPicHandler extends AbstractMaplePacketHandle c.setCharacterOnSessionTransitionState(charId); try { - c.announce(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); + c.sendPacket(PacketCreator.getServerIP(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1]), charId)); } catch (UnknownHostException e) { e.printStackTrace(); } } else { - c.announce(PacketCreator.wrongPic()); + c.sendPacket(PacketCreator.wrongPic()); } } } diff --git a/src/main/java/net/server/world/MapleParty.java b/src/main/java/net/server/world/MapleParty.java index 20091c40b4..e9a05766ea 100644 --- a/src/main/java/net/server/world/MapleParty.java +++ b/src/main/java/net/server/world/MapleParty.java @@ -330,7 +330,7 @@ public class MapleParty { MapleParty party = player.getParty(); if (party == null) { if (player.getLevel() < 10 && !YamlConfig.config.server.USE_PARTY_FOR_STARTERS) { - player.announce(PacketCreator.partyStatusMessage(10)); + player.sendPacket(PacketCreator.partyStatusMessage(10)); return false; } else if (player.getAriantColiseum() != null) { player.dropMessage(5, "You cannot request a party creation while participating the Ariant Battle Arena."); @@ -347,12 +347,12 @@ public class MapleParty { player.updatePartySearchAvailability(false); player.partyOperationUpdate(party, null); - player.announce(PacketCreator.partyCreated(party, partyplayer.getId())); + player.sendPacket(PacketCreator.partyCreated(party, partyplayer.getId())); return true; } else { if (!silentCheck) { - player.announce(PacketCreator.partyStatusMessage(16)); + player.sendPacket(PacketCreator.partyStatusMessage(16)); } return false; @@ -380,15 +380,15 @@ public class MapleParty { return true; } else { if (!silentCheck) { - player.announce(PacketCreator.partyStatusMessage(17)); + player.sendPacket(PacketCreator.partyStatusMessage(17)); } } } else { - player.announce(PacketCreator.serverNotice(5, "You couldn't join the party since it had already been disbanded.")); + player.sendPacket(PacketCreator.serverNotice(5, "You couldn't join the party since it had already been disbanded.")); } } else { if (!silentCheck) { - player.announce(PacketCreator.serverNotice(5, "You can't join the party as you are already in one.")); + player.sendPacket(PacketCreator.serverNotice(5, "You can't join the party as you are already in one.")); } } diff --git a/src/main/java/net/server/world/World.java b/src/main/java/net/server/world/World.java index d7e086c212..b51562a0ec 100644 --- a/src/main/java/net/server/world/World.java +++ b/src/main/java/net/server/world/World.java @@ -29,6 +29,7 @@ import client.MapleCharacter; import client.MapleFamily; import config.YamlConfig; import constants.game.GameConstants; +import net.packet.Packet; import net.server.PlayerStorage; import net.server.Server; import net.server.audit.LockCollector; @@ -43,6 +44,7 @@ import net.server.coordinator.partysearch.MaplePartySearchCoordinator; import net.server.coordinator.world.MapleInviteCoordinator; import net.server.coordinator.world.MapleInviteCoordinator.InviteResult; import net.server.coordinator.world.MapleInviteCoordinator.InviteType; +import net.server.guild.GuildPackets; import net.server.guild.MapleGuild; import net.server.guild.MapleGuildCharacter; import net.server.guild.MapleGuildSummary; @@ -675,10 +677,10 @@ public class World { if (mc.isLoggedinWorld()) { MapleGuild guild = Server.getInstance().getGuild(guildid); if (guild != null) { - mc.getMap().broadcastMessage(mc, PacketCreator.guildNameChanged(cid, guild.getName())); - mc.getMap().broadcastMessage(mc, PacketCreator.guildMarkChanged(cid, guild)); + mc.getMap().broadcastPacket(mc, GuildPackets.guildNameChanged(cid, guild.getName())); + mc.getMap().broadcastPacket(mc, GuildPackets.guildMarkChanged(cid, guild)); } else { - mc.getMap().broadcastMessage(mc, PacketCreator.guildNameChanged(cid, "")); + mc.getMap().broadcastPacket(mc, GuildPackets.guildNameChanged(cid, "")); } } } @@ -686,11 +688,11 @@ public class World { public void changeEmblem(int gid, List affectedPlayers, MapleGuildSummary mgs) { updateGuildSummary(gid, mgs); - sendPacket(affectedPlayers, PacketCreator.guildEmblemChange(gid, mgs.getLogoBG(), mgs.getLogoBGColor(), mgs.getLogo(), mgs.getLogoColor()), -1); + sendPacket(affectedPlayers, GuildPackets.guildEmblemChange(gid, mgs.getLogoBG(), mgs.getLogoBGColor(), mgs.getLogo(), mgs.getLogoColor()), -1); setGuildAndRank(affectedPlayers, -1, -1, -1); //respawn player } - public void sendPacket(List targetIds, final byte[] packet, int exception) { + public void sendPacket(List targetIds, Packet packet, int exception) { MapleCharacter chr; for (int i : targetIds) { if (i == exception) { @@ -698,7 +700,7 @@ public class World { } chr = getPlayerStorage().getCharacterById(i); if (chr != null) { - chr.getClient().announce(packet); + chr.sendPacket(packet); } } } @@ -911,7 +913,7 @@ public class World { chr.setParty(party); chr.setMPC(partychar); } - chr.announce(PacketCreator.updateParty(chr.getClient().getChannel(), party, operation, target)); + chr.sendPacket(PacketCreator.updateParty(chr.getClient().getChannel(), party, operation, target)); } } switch (operation) { @@ -919,7 +921,7 @@ public class World { case EXPEL: MapleCharacter chr = getPlayerStorage().getCharacterById(target.getId()); if (chr != null) { - chr.announce(PacketCreator.updateParty(chr.getClient().getChannel(), party, operation, target)); + chr.sendPacket(PacketCreator.updateParty(chr.getClient().getChannel(), party, operation, target)); chr.setParty(null); chr.setMPC(null); } @@ -1014,7 +1016,7 @@ public class World { if (!(partychar.getName().equals(namefrom))) { MapleCharacter chr = getPlayerStorage().getCharacterByName(partychar.getName()); if (chr != null) { - chr.getClient().announce(PacketCreator.multiChat(namefrom, chattext, 1)); + chr.sendPacket(PacketCreator.multiChat(namefrom, chattext, 1)); } } } @@ -1026,7 +1028,7 @@ public class World { MapleCharacter chr = playerStorage.getCharacterById(characterId); if (chr != null) { if (chr.getBuddylist().containsVisible(cidFrom)) { - chr.getClient().announce(PacketCreator.multiChat(nameFrom, chattext, 0)); + chr.sendPacket(PacketCreator.multiChat(nameFrom, chattext, 0)); } } } @@ -1065,15 +1067,15 @@ public class World { MapleCharacter from = getChannel(fromchannel).getPlayerStorage().getCharacterByName(sender); if (from != null) { if (MapleInviteCoordinator.createInvite(InviteType.MESSENGER, from, messengerid, targetChr.getId())) { - targetChr.getClient().announce(PacketCreator.messengerInvite(sender, messengerid)); - from.getClient().announce(PacketCreator.messengerNote(target, 4, 1)); + targetChr.sendPacket(PacketCreator.messengerInvite(sender, messengerid)); + from.sendPacket(PacketCreator.messengerNote(target, 4, 1)); } else { - from.announce(PacketCreator.messengerChat(sender + " : " + target + " is already managing a Maple Messenger invitation")); + from.sendPacket(PacketCreator.messengerChat(sender + " : " + target + " is already managing a Maple Messenger invitation")); } } } else { MapleCharacter from = getChannel(fromchannel).getPlayerStorage().getCharacterByName(sender); - from.getClient().announce(PacketCreator.messengerChat(sender + " : " + target + " is already using Maple Messenger")); + from.sendPacket(PacketCreator.messengerChat(sender + " : " + target + " is already using Maple Messenger")); } } } @@ -1087,10 +1089,10 @@ public class World { } if (!messengerchar.getName().equals(namefrom)) { MapleCharacter from = getChannel(fromchannel).getPlayerStorage().getCharacterByName(namefrom); - chr.getClient().announce(PacketCreator.addMessengerPlayer(namefrom, from, position, (byte) (fromchannel - 1))); - from.getClient().announce(PacketCreator.addMessengerPlayer(chr.getName(), chr, messengerchar.getPosition(), (byte) (messengerchar.getChannel() - 1))); + chr.sendPacket(PacketCreator.addMessengerPlayer(namefrom, from, position, (byte) (fromchannel - 1))); + from.sendPacket(PacketCreator.addMessengerPlayer(chr.getName(), chr, messengerchar.getPosition(), (byte) (messengerchar.getChannel() - 1))); } else { - chr.getClient().announce(PacketCreator.joinMessenger(messengerchar.getPosition())); + chr.sendPacket(PacketCreator.joinMessenger(messengerchar.getPosition())); } } } @@ -1099,7 +1101,7 @@ public class World { for (MapleMessengerCharacter messengerchar : messenger.getMembers()) { MapleCharacter chr = getPlayerStorage().getCharacterByName(messengerchar.getName()); if (chr != null) { - chr.getClient().announce(PacketCreator.removeMessengerPlayer(position)); + chr.sendPacket(PacketCreator.removeMessengerPlayer(position)); } } } @@ -1112,7 +1114,7 @@ public class World { if (!(messengerchar.getName().equals(namefrom))) { MapleCharacter chr = getPlayerStorage().getCharacterByName(messengerchar.getName()); if (chr != null) { - chr.getClient().announce(PacketCreator.messengerChat(chattext)); + chr.sendPacket(PacketCreator.messengerChat(chattext)); if (to1.equals("")){ to1 = messengerchar.getName(); } else if (to2.equals("")){ @@ -1130,7 +1132,7 @@ public class World { MapleCharacter senderChr = getPlayerStorage().getCharacterByName(sender); if (senderChr != null && senderChr.getMessenger() != null) { if (MapleInviteCoordinator.answerInvite(InviteType.MESSENGER, player.getId(), senderChr.getMessenger().getId(), false).result == InviteResult.DENIED) { - senderChr.getClient().announce(PacketCreator.messengerNote(player.getName(), 5, 0)); + senderChr.sendPacket(PacketCreator.messengerNote(player.getName(), 5, 0)); } } } @@ -1148,7 +1150,7 @@ public class World { if (!(messengerchar.getName().equals(namefrom))) { MapleCharacter chr = ch.getPlayerStorage().getCharacterByName(messengerchar.getName()); if (chr != null) { - chr.getClient().announce(PacketCreator.updateMessengerPlayer(namefrom, getChannel(fromchannel).getPlayerStorage().getCharacterByName(namefrom), position, (byte) (fromchannel - 1))); + chr.sendPacket(PacketCreator.updateMessengerPlayer(namefrom, getChannel(fromchannel).getPlayerStorage().getCharacterByName(namefrom), position, (byte) (fromchannel - 1))); } } } @@ -1214,13 +1216,13 @@ public class World { case ADDED: if (buddylist.contains(cidFrom)) { buddylist.put(new BuddylistEntry(name, "Default Group", cidFrom, channel, true)); - addChar.getClient().announce(PacketCreator.updateBuddyChannel(cidFrom, (byte) (channel - 1))); + addChar.sendPacket(PacketCreator.updateBuddyChannel(cidFrom, (byte) (channel - 1))); } break; case DELETED: if (buddylist.contains(cidFrom)) { buddylist.put(new BuddylistEntry(name, "Default Group", cidFrom, (byte) -1, buddylist.get(cidFrom).isVisible())); - addChar.getClient().announce(PacketCreator.updateBuddyChannel(cidFrom, (byte) -1)); + addChar.sendPacket(PacketCreator.updateBuddyChannel(cidFrom, (byte) -1)); } break; } @@ -1251,7 +1253,7 @@ public class World { mcChannel = (byte) (channel - 1); } chr.getBuddylist().put(ble); - chr.getClient().announce(PacketCreator.updateBuddyChannel(ble.getCharacterId(), mcChannel)); + chr.sendPacket(PacketCreator.updateBuddyChannel(ble.getCharacterId(), mcChannel)); } } } @@ -1721,7 +1723,7 @@ public class World { MapleCharacter chr = players.getCharacterById(chrid); if(chr != null && chr.isLoggedinWorld()) { - chr.announce(PacketCreator.serverMessage(chr.getClient().getChannelServer().getServerMessage())); + chr.sendPacket(PacketCreator.serverMessage(chr.getClient().getChannelServer().getServerMessage())); } } } @@ -1805,9 +1807,9 @@ public class World { } } - public void broadcastPacket(final byte[] data) { + public void broadcastPacket(Packet packet) { for (MapleCharacter chr : players.getAllCharacters()) { - chr.announce(data); + chr.sendPacket(packet); } } diff --git a/src/main/java/scripting/AbstractPlayerInteraction.java b/src/main/java/scripting/AbstractPlayerInteraction.java index dd4a972bec..e4734b8cc1 100644 --- a/src/main/java/scripting/AbstractPlayerInteraction.java +++ b/src/main/java/scripting/AbstractPlayerInteraction.java @@ -527,8 +527,8 @@ public class AbstractPlayerInteraction { getPlayer().addPet(evolved); getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.showPet(c.getPlayer(), evolved, false, false), true); - c.announce(PacketCreator.petStatUpdate(c.getPlayer())); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.petStatUpdate(c.getPlayer())); + c.sendPacket(PacketCreator.enableActions()); chr.getClient().getWorldServer().registerPetHunger(chr, chr.getPetIndex(evolved)); */ @@ -635,7 +635,7 @@ public class AbstractPlayerInteraction { MapleInventoryManipulator.removeById(c, ItemConstants.getInventoryType(id), id, -quantity, true, false); } if (showMessage) { - c.announce(PacketCreator.getShowItemGain(id, quantity, true)); + c.sendPacket(PacketCreator.getShowItemGain(id, quantity, true)); } return item; @@ -650,7 +650,7 @@ public class AbstractPlayerInteraction { } public void playerMessage(int type, String message) { - c.announce(PacketCreator.serverNotice(type, message)); + c.sendPacket(PacketCreator.serverNotice(type, message)); } public void message(String message) { @@ -666,11 +666,11 @@ public class AbstractPlayerInteraction { } public void mapEffect(String path) { - c.announce(PacketCreator.mapEffect(path)); + c.sendPacket(PacketCreator.mapEffect(path)); } public void mapSound(String path) { - c.announce(PacketCreator.mapSound(path)); + c.sendPacket(PacketCreator.mapSound(path)); } public void displayAranIntro() { @@ -699,12 +699,12 @@ public class AbstractPlayerInteraction { } public void showIntro(String path) { - c.announce(PacketCreator.showIntro(path)); + c.sendPacket(PacketCreator.showIntro(path)); } public void showInfo(String path) { - c.announce(PacketCreator.showInfo(path)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.showInfo(path)); + c.sendPacket(PacketCreator.enableActions()); } public void guildMessage(int type, String message) { @@ -754,7 +754,7 @@ public class AbstractPlayerInteraction { } else { MapleInventoryManipulator.removeById(cl, ItemConstants.getInventoryType(id), id, -quantity, true, false); } - cl.announce(PacketCreator.getShowItemGain(id, quantity, true)); + cl.sendPacket(PacketCreator.getShowItemGain(id, quantity, true)); } } @@ -847,7 +847,7 @@ public class AbstractPlayerInteraction { int possesed = iv.countById(id); if (possesed > 0) { MapleInventoryManipulator.removeById(c, ItemConstants.getInventoryType(id), id, possesed, true, false); - chr.announce(PacketCreator.getShowItemGain(id, (short) -possesed, true)); + chr.sendPacket(PacketCreator.getShowItemGain(id, (short) -possesed, true)); } } } @@ -861,13 +861,13 @@ public class AbstractPlayerInteraction { int possessed = cl.getPlayer().getInventory(invType).countById(id); if (possessed > 0) { MapleInventoryManipulator.removeById(cl, ItemConstants.getInventoryType(id), id, possessed, true, false); - cl.announce(PacketCreator.getShowItemGain(id, (short) -possessed, true)); + cl.sendPacket(PacketCreator.getShowItemGain(id, (short) -possessed, true)); } if(invType == MapleInventoryType.EQUIP) { if(cl.getPlayer().getInventory(MapleInventoryType.EQUIPPED).countById(id) > 0) { MapleInventoryManipulator.removeById(cl, MapleInventoryType.EQUIPPED, id, 1, true, false); - cl.announce(PacketCreator.getShowItemGain(id, (short) -1, true)); + cl.sendPacket(PacketCreator.getShowItemGain(id, (short) -1, true)); } } } @@ -881,12 +881,12 @@ public class AbstractPlayerInteraction { } public void showInstruction(String msg, int width, int height) { - c.announce(PacketCreator.sendHint(msg, width, height)); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.sendHint(msg, width, height)); + c.sendPacket(PacketCreator.enableActions()); } public void disableMinimap() { - c.announce(PacketCreator.disableMinimap()); + c.sendPacket(PacketCreator.disableMinimap()); } public boolean isAllReactorState(final int reactorId, final int state) { @@ -904,7 +904,7 @@ public class AbstractPlayerInteraction { public void useItem(int id) { MapleItemInformationProvider.getInstance().getItemEffect(id).applyTo(c.getPlayer()); - c.announce(PacketCreator.getItemMessage(id));//Useful shet :3 + c.sendPacket(PacketCreator.getItemMessage(id));//Useful shet :3 } public void cancelItem(final int id) { @@ -924,7 +924,7 @@ public class AbstractPlayerInteraction { return; } } else if (GameConstants.isAranSkills(skillid)) { - c.announce(PacketCreator.showInfo("Effect/BasicEff.img/AranGetSkill")); + c.sendPacket(PacketCreator.showInfo("Effect/BasicEff.img/AranGetSkill")); } getPlayer().changeSkillLevel(skill, level, masterLevel, expiration); @@ -943,7 +943,7 @@ public class AbstractPlayerInteraction { final Item newItem = MapleItemInformationProvider.getInstance().getEquipById(itemid); newItem.setPosition(slot); c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).addItemFromDB(newItem); - c.announce(PacketCreator.modifyInventory(false, Collections.singletonList(new ModifyInventory(0, newItem)))); + c.sendPacket(PacketCreator.modifyInventory(false, Collections.singletonList(new ModifyInventory(0, newItem)))); } public void spawnNpc(int npcId, Point pos, MapleMap map) { @@ -974,19 +974,19 @@ public class AbstractPlayerInteraction { } public void spawnGuide() { - c.announce(PacketCreator.spawnGuide(true)); + c.sendPacket(PacketCreator.spawnGuide(true)); } public void removeGuide() { - c.announce(PacketCreator.spawnGuide(false)); + c.sendPacket(PacketCreator.spawnGuide(false)); } public void displayGuide(int num) { - c.announce(PacketCreator.showInfo("UI/tutorial.img/" + num)); + c.sendPacket(PacketCreator.showInfo("UI/tutorial.img/" + num)); } public void goDojoUp() { - c.announce(PacketCreator.dojoWarpUp()); + c.sendPacket(PacketCreator.dojoWarpUp()); } public void resetDojoEnergy() { @@ -1000,28 +1000,28 @@ public class AbstractPlayerInteraction { } public void enableActions() { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } public void showEffect(String effect){ - c.announce(PacketCreator.showEffect(effect)); + c.sendPacket(PacketCreator.showEffect(effect)); } public void dojoEnergy() { - c.announce(PacketCreator.getEnergy("energy", getPlayer().getDojoEnergy())); + c.sendPacket(PacketCreator.getEnergy("energy", getPlayer().getDojoEnergy())); } public void talkGuide(String message) { - c.announce(PacketCreator.talkGuide(message)); + c.sendPacket(PacketCreator.talkGuide(message)); } public void guideHint(int hint) { - c.announce(PacketCreator.guideHint(hint)); + c.sendPacket(PacketCreator.guideHint(hint)); } public void updateAreaInfo(Short area, String info) { c.getPlayer().updateAreaInfo(area, info); - c.announce(PacketCreator.enableActions());//idk, nexon does the same :P + c.sendPacket(PacketCreator.enableActions());//idk, nexon does the same :P } public boolean containsAreaInfo(short area, String info) { @@ -1029,25 +1029,25 @@ public class AbstractPlayerInteraction { } public void earnTitle(String msg) { - c.announce(PacketCreator.earnTitleMessage(msg)); + c.sendPacket(PacketCreator.earnTitleMessage(msg)); } public void showInfoText(String msg) { - c.announce(PacketCreator.showInfoText(msg)); + c.sendPacket(PacketCreator.showInfoText(msg)); } public void openUI(byte ui) { - c.announce(PacketCreator.openUI(ui)); + c.sendPacket(PacketCreator.openUI(ui)); } public void lockUI() { - c.announce(PacketCreator.disableUI(true)); - c.announce(PacketCreator.lockUI(true)); + c.sendPacket(PacketCreator.disableUI(true)); + c.sendPacket(PacketCreator.lockUI(true)); } public void unlockUI() { - c.announce(PacketCreator.disableUI(false)); - c.announce(PacketCreator.lockUI(false)); + c.sendPacket(PacketCreator.disableUI(false)); + c.sendPacket(PacketCreator.lockUI(false)); } public void playSound(String sound) { @@ -1183,7 +1183,7 @@ public class AbstractPlayerInteraction { } public void npcTalk(int npcid, String message) { - c.announce(PacketCreator.getNPCTalk(npcid, (byte) 0, message, "00 00", (byte) 0)); + c.sendPacket(PacketCreator.getNPCTalk(npcid, (byte) 0, message, "00 00", (byte) 0)); } public long getCurrentTime() { diff --git a/src/main/java/scripting/event/EventInstanceManager.java b/src/main/java/scripting/event/EventInstanceManager.java index 3a4e6defa8..3528da2a67 100644 --- a/src/main/java/scripting/event/EventInstanceManager.java +++ b/src/main/java/scripting/event/EventInstanceManager.java @@ -282,7 +282,7 @@ public class EventInstanceManager { eventTime = time; for(MapleCharacter chr: getPlayers()) { - chr.announce(PacketCreator.getClock((int) (time / 1000))); + chr.sendPacket(PacketCreator.getClock((int) (time / 1000))); } event_schedule = TimerManager.getInstance().schedule(() -> { @@ -295,7 +295,7 @@ public class EventInstanceManager { } }, time); } - + public void addEventTimer(long time) { if (event_schedule != null) { if (event_schedule.cancel(false)) { @@ -316,23 +316,23 @@ public class EventInstanceManager { startEventTimer(time); } } - + private void dismissEventTimer() { - for(MapleCharacter chr: getPlayers()) { - chr.getClient().announce(PacketCreator.removeClock()); + for (MapleCharacter chr : getPlayers()) { + chr.sendPacket(PacketCreator.removeClock()); } - + event_schedule = null; eventTime = 0; timeStarted = 0; } - + public void stopEventTimer() { - if(event_schedule != null) { + if (event_schedule != null) { event_schedule.cancel(false); event_schedule = null; } - + dismissEventTimer(); } @@ -1262,7 +1262,7 @@ public class EventInstanceManager { } if(gateData != null) { - chr.announce(PacketCreator.environmentChange(gateData.getLeft(), gateData.getRight())); + chr.sendPacket(PacketCreator.environmentChange(gateData.getLeft(), gateData.getRight())); } } diff --git a/src/main/java/scripting/map/MapScriptMethods.java b/src/main/java/scripting/map/MapScriptMethods.java index 6435e9dc88..65e5a0e7f2 100644 --- a/src/main/java/scripting/map/MapScriptMethods.java +++ b/src/main/java/scripting/map/MapScriptMethods.java @@ -40,26 +40,26 @@ public class MapScriptMethods extends AbstractPlayerInteraction { switch (c.getPlayer().getMapId()) { case 913040100: lockUI(); - c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene0")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene0")); break; case 913040101: - c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene1")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene1")); break; case 913040102: - c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene2")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene2")); break; case 913040103: - c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene3")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene3")); break; case 913040104: - c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene4")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene4")); break; case 913040105: - c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene5")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene5")); break; case 913040106: lockUI(); - c.announce(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene6")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene6")); break; } } @@ -68,20 +68,20 @@ public class MapScriptMethods extends AbstractPlayerInteraction { switch (c.getPlayer().getMapId()) { case 914090010: lockUI(); - c.announce(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene0")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene0")); break; case 914090011: - c.announce(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene1" + c.getPlayer().getGender())); + c.sendPacket(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene1" + c.getPlayer().getGender())); break; case 914090012: - c.announce(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene2" + c.getPlayer().getGender())); + c.sendPacket(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene2" + c.getPlayer().getGender())); break; case 914090013: - c.announce(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene3")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene3")); break; case 914090100: lockUI(); - c.announce(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/HandedPoleArm" + c.getPlayer().getGender())); + c.sendPacket(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/HandedPoleArm" + c.getPlayer().getGender())); break; } } @@ -89,30 +89,30 @@ public class MapScriptMethods extends AbstractPlayerInteraction { public void startExplorerExperience() { if (c.getPlayer().getMapId() == 1020100) //Swordman { - c.announce(PacketCreator.showIntro("Effect/Direction3.img/swordman/Scene" + c.getPlayer().getGender())); + c.sendPacket(PacketCreator.showIntro("Effect/Direction3.img/swordman/Scene" + c.getPlayer().getGender())); } else if (c.getPlayer().getMapId() == 1020200) //Magician { - c.announce(PacketCreator.showIntro("Effect/Direction3.img/magician/Scene" + c.getPlayer().getGender())); + c.sendPacket(PacketCreator.showIntro("Effect/Direction3.img/magician/Scene" + c.getPlayer().getGender())); } else if (c.getPlayer().getMapId() == 1020300) //Archer { - c.announce(PacketCreator.showIntro("Effect/Direction3.img/archer/Scene" + c.getPlayer().getGender())); + c.sendPacket(PacketCreator.showIntro("Effect/Direction3.img/archer/Scene" + c.getPlayer().getGender())); } else if (c.getPlayer().getMapId() == 1020400) //Rogue { - c.announce(PacketCreator.showIntro("Effect/Direction3.img/rogue/Scene" + c.getPlayer().getGender())); + c.sendPacket(PacketCreator.showIntro("Effect/Direction3.img/rogue/Scene" + c.getPlayer().getGender())); } else if (c.getPlayer().getMapId() == 1020500) //Pirate { - c.announce(PacketCreator.showIntro("Effect/Direction3.img/pirate/Scene" + c.getPlayer().getGender())); + c.sendPacket(PacketCreator.showIntro("Effect/Direction3.img/pirate/Scene" + c.getPlayer().getGender())); } } public void goAdventure() { lockUI(); - c.announce(PacketCreator.showIntro("Effect/Direction3.img/goAdventure/Scene" + c.getPlayer().getGender())); + c.sendPacket(PacketCreator.showIntro("Effect/Direction3.img/goAdventure/Scene" + c.getPlayer().getGender())); } public void goLith() { lockUI(); - c.announce(PacketCreator.showIntro("Effect/Direction3.img/goLith/Scene" + c.getPlayer().getGender())); + c.sendPacket(PacketCreator.showIntro("Effect/Direction3.img/goLith/Scene" + c.getPlayer().getGender())); } public void explorerQuest(short questid, String questName) { @@ -134,13 +134,13 @@ public class MapScriptMethods extends AbstractPlayerInteraction { if (status.equals(infoex)) { etm.append("Earned the ").append(questName).append(" title!"); smp.append("You have earned the <").append(questName).append(">").append(rewardstring); - getPlayer().announce(PacketCreator.getShowQuestCompletion(quest.getId())); + getPlayer().sendPacket(PacketCreator.getShowQuestCompletion(quest.getId())); } else { - getPlayer().announce(PacketCreator.earnTitleMessage(status + "/" + infoex + " regions explored.")); + getPlayer().sendPacket(PacketCreator.earnTitleMessage(status + "/" + infoex + " regions explored.")); etm.append("Trying for the ").append(questName).append(" title."); smp.append("You made progress on the ").append(questName).append(" title. ").append(status).append("/").append(infoex); } - getPlayer().announce(PacketCreator.earnTitleMessage(etm.toString())); + getPlayer().sendPacket(PacketCreator.earnTitleMessage(etm.toString())); showInfoText(smp.toString()); } @@ -157,11 +157,11 @@ public class MapScriptMethods extends AbstractPlayerInteraction { } String status = Integer.toString(qs.getMedalProgress()); getPlayer().announceUpdateQuest(DelayedQuestUpdate.UPDATE, qs, true); - getPlayer().announce(PacketCreator.earnTitleMessage(status + "/5 Completed")); - getPlayer().announce(PacketCreator.earnTitleMessage("The One Who's Touched the Sky title in progress.")); + getPlayer().sendPacket(PacketCreator.earnTitleMessage(status + "/5 Completed")); + getPlayer().sendPacket(PacketCreator.earnTitleMessage("The One Who's Touched the Sky title in progress.")); if (Integer.toString(qs.getMedalProgress()).equals(qs.getInfoEx(0))) { showInfoText("The One Who's Touched the Sky" + rewardstring); - getPlayer().announce(PacketCreator.getShowQuestCompletion(quest.getId())); + getPlayer().sendPacket(PacketCreator.getShowQuestCompletion(quest.getId())); } else { showInfoText("The One Who's Touched the Sky title in progress. " + status + "/5 Completed"); } diff --git a/src/main/java/scripting/npc/NPCConversationManager.java b/src/main/java/scripting/npc/NPCConversationManager.java index 07886a81fb..dbc7d4db85 100644 --- a/src/main/java/scripting/npc/NPCConversationManager.java +++ b/src/main/java/scripting/npc/NPCConversationManager.java @@ -32,6 +32,7 @@ import constants.string.LanguageConstants; import net.server.Server; import net.server.channel.Channel; import net.server.coordinator.matchchecker.MatchCheckerListenerFactory.MatchCheckerType; +import net.server.guild.GuildPackets; import net.server.guild.MapleAlliance; import net.server.guild.MapleGuild; import net.server.world.MapleParty; @@ -60,7 +61,7 @@ import server.partyquest.Pyramid.PyramidMode; import tools.FilePrinter; import tools.LogHelper; import tools.PacketCreator; -import tools.packets.Wedding; +import tools.packets.WeddingPackets; import java.awt.*; import java.sql.SQLException; @@ -133,23 +134,23 @@ public class NPCConversationManager extends AbstractPlayerInteraction { public void dispose() { NPCScriptManager.getInstance().dispose(this); - getClient().announce(PacketCreator.enableActions()); + getClient().sendPacket(PacketCreator.enableActions()); } public void sendNext(String text) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "00 01", (byte) 0)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 0, text, "00 01", (byte) 0)); } public void sendPrev(String text) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "01 00", (byte) 0)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 0, text, "01 00", (byte) 0)); } public void sendNextPrev(String text) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "01 01", (byte) 0)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 0, text, "01 01", (byte) 0)); } public void sendOk(String text) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "00 00", (byte) 0)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 0, text, "00 00", (byte) 0)); } public void sendDefault() { @@ -157,48 +158,48 @@ public class NPCConversationManager extends AbstractPlayerInteraction { } public void sendYesNo(String text) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 1, text, "", (byte) 0)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 1, text, "", (byte) 0)); } public void sendAcceptDecline(String text) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0x0C, text, "", (byte) 0)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 0x0C, text, "", (byte) 0)); } public void sendSimple(String text) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 4, text, "", (byte) 0)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 4, text, "", (byte) 0)); } public void sendNext(String text, byte speaker) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "00 01", speaker)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 0, text, "00 01", speaker)); } public void sendPrev(String text, byte speaker) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "01 00", speaker)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 0, text, "01 00", speaker)); } public void sendNextPrev(String text, byte speaker) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "01 01", speaker)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 0, text, "01 01", speaker)); } public void sendOk(String text, byte speaker) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0, text, "00 00", speaker)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 0, text, "00 00", speaker)); } public void sendYesNo(String text, byte speaker) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 1, text, "", speaker)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 1, text, "", speaker)); } public void sendAcceptDecline(String text, byte speaker) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 0x0C, text, "", speaker)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 0x0C, text, "", speaker)); } public void sendSimple(String text, byte speaker) { - getClient().announce(PacketCreator.getNPCTalk(npc, (byte) 4, text, "", speaker)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 4, text, "", speaker)); } public void sendStyle(String text, int[] styles) { if (styles.length > 0) { - getClient().announce(PacketCreator.getNPCTalkStyle(npc, text, styles)); + getClient().sendPacket(PacketCreator.getNPCTalkStyle(npc, text, styles)); } else { // thanks Conrad for noticing empty styles crashing players sendOk("Sorry, there are no options of cosmetics available for you here at the moment."); dispose(); @@ -206,11 +207,11 @@ public class NPCConversationManager extends AbstractPlayerInteraction { } public void sendGetNumber(String text, int def, int min, int max) { - getClient().announce(PacketCreator.getNPCTalkNum(npc, text, def, min, max)); + getClient().sendPacket(PacketCreator.getNPCTalkNum(npc, text, def, min, max)); } public void sendGetText(String text) { - getClient().announce(PacketCreator.getNPCTalkText(npc, text, "")); + getClient().sendPacket(PacketCreator.getNPCTalkText(npc, text, "")); } /* @@ -223,7 +224,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { * 6 = Kerning Subway */ public void sendDimensionalMirror(String text) { - getClient().announce(PacketCreator.getDimensionalMirror(text)); + getClient().sendPacket(PacketCreator.getDimensionalMirror(text)); } public void setGetText(String text) { @@ -418,10 +419,10 @@ public class NPCConversationManager extends AbstractPlayerInteraction { MapleAlliance alliance = Server.getInstance().getAlliance(c.getPlayer().getGuild().getAllianceId()); alliance.increaseCapacity(1); - Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.getGuildAlliances(alliance, c.getWorld()), -1, -1); - Server.getInstance().allianceMessage(alliance.getId(), PacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.getGuildAlliances(alliance, c.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1); - c.announce(PacketCreator.updateAllianceInfo(alliance, c.getWorld())); // thanks Vcoc for finding an alliance update to leader issue + c.sendPacket(GuildPackets.updateAllianceInfo(alliance, c.getWorld())); // thanks Vcoc for finding an alliance update to leader issue } public void disbandAlliance(MapleClient c, int allianceId) { @@ -461,7 +462,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { } public void showFredrick() { - c.announce(PacketCreator.getFredrick(getPlayer())); + c.sendPacket(PacketCreator.getFredrick(getPlayer())); } public int partyMembersInMap() { @@ -677,7 +678,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { if (mc != null) { mc.setChallenged(false); mc.changeMap(map, map.getPortal(0)); - mc.announce(PacketCreator.serverNotice(6, LanguageConstants.getMessage(mc, LanguageConstants.CPQEntryLobby))); + mc.sendPacket(PacketCreator.serverNotice(6, LanguageConstants.getMessage(mc, LanguageConstants.CPQEntryLobby))); TimerManager tMan = TimerManager.getInstance(); tMan.schedule(() -> mapClock(3 * 60), 1500); @@ -926,7 +927,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { if (mc != null) { mc.setChallenged(false); mc.changeMap(map, map.getPortal(0)); - mc.announce(PacketCreator.serverNotice(6, LanguageConstants.getMessage(mc, LanguageConstants.CPQEntryLobby))); + mc.sendPacket(PacketCreator.serverNotice(6, LanguageConstants.getMessage(mc, LanguageConstants.CPQEntryLobby))); TimerManager tMan = TimerManager.getInstance(); tMan.schedule(() -> mapClock(3 * 60), 1500); @@ -1070,17 +1071,17 @@ public class NPCConversationManager extends AbstractPlayerInteraction { MapleCharacter chr = marriage.getPlayerById(cid); if (chr != null) { if (chr.getId() == player.getId()) { - player.announce(Wedding.OnWeddingGiftResult((byte) 0xA, marriage.getWishlistItems(groom), marriage.getGiftItems(player.getClient(), groom))); + player.sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0xA, marriage.getWishlistItems(groom), marriage.getGiftItems(player.getClient(), groom))); } else { marriage.setIntProperty("wishlistSelection", groom ? 0 : 1); - player.announce(Wedding.OnWeddingGiftResult((byte) 0x09, marriage.getWishlistItems(groom), marriage.getGiftItems(player.getClient(), groom))); + player.sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0x09, marriage.getWishlistItems(groom), marriage.getGiftItems(player.getClient(), groom))); } } } } public void sendMarriageGifts(List gifts) { - this.getPlayer().announce(Wedding.OnWeddingGiftResult((byte) 0xA, Collections.singletonList(""), gifts)); + this.getPlayer().sendPacket(WeddingPackets.onWeddingGiftResult((byte) 0xA, Collections.singletonList(""), gifts)); } public boolean createMarriageWishlist() { @@ -1096,7 +1097,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { } if (marriage.getProperty(wlKey).contentEquals("")) { - getClient().announce(Wedding.sendWishList()); + getClient().sendPacket(WeddingPackets.sendWishList()); return true; } } diff --git a/src/main/java/scripting/npc/NPCScriptManager.java b/src/main/java/scripting/npc/NPCScriptManager.java index 6e7408ebb1..978beada46 100644 --- a/src/main/java/scripting/npc/NPCScriptManager.java +++ b/src/main/java/scripting/npc/NPCScriptManager.java @@ -151,7 +151,7 @@ public class NPCScriptManager extends AbstractScriptManager { } } } else { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } return true; } catch (final Exception ute) { diff --git a/src/main/java/scripting/portal/PortalPlayerInteraction.java b/src/main/java/scripting/portal/PortalPlayerInteraction.java index 06e20baf5b..b6756e6c22 100644 --- a/src/main/java/scripting/portal/PortalPlayerInteraction.java +++ b/src/main/java/scripting/portal/PortalPlayerInteraction.java @@ -78,6 +78,6 @@ public class PortalPlayerInteraction extends AbstractPlayerInteraction { } public void playPortalSound() { - c.announce(PacketCreator.playPortalSound()); + c.sendPacket(PacketCreator.playPortalSound()); } } \ No newline at end of file diff --git a/src/main/java/server/MapleShop.java b/src/main/java/server/MapleShop.java index 71854b32bb..86e1ff085b 100644 --- a/src/main/java/server/MapleShop.java +++ b/src/main/java/server/MapleShop.java @@ -76,7 +76,7 @@ public class MapleShop { public void sendShop(MapleClient c) { c.getPlayer().setShop(this); - c.announce(PacketCreator.getNPCShop(c, getNpcId(), items)); + c.sendPacket(PacketCreator.getNPCShop(c, getNpcId(), items)); } public void buy(MapleClient c, short slot, int itemId, short quantity) { @@ -103,12 +103,12 @@ public class MapleShop { MapleInventoryManipulator.addById(c, itemId, quantity, "", -1); c.getPlayer().gainMeso(-item.getPrice(), false); } - c.announce(PacketCreator.shopTransaction((byte) 0)); + c.sendPacket(PacketCreator.shopTransaction((byte) 0)); } else - c.announce(PacketCreator.shopTransaction((byte) 3)); + c.sendPacket(PacketCreator.shopTransaction((byte) 3)); } else - c.announce(PacketCreator.shopTransaction((byte) 2)); + c.sendPacket(PacketCreator.shopTransaction((byte) 2)); } else if (item.getPitch() > 0) { int amount = (int)Math.min((float) item.getPitch() * quantity, Integer.MAX_VALUE); @@ -124,9 +124,9 @@ public class MapleShop { MapleInventoryManipulator.addById(c, itemId, quantity, "", -1); MapleInventoryManipulator.removeById(c, MapleInventoryType.ETC, 4310000, amount, false, false); } - c.announce(PacketCreator.shopTransaction((byte) 0)); + c.sendPacket(PacketCreator.shopTransaction((byte) 0)); } else - c.announce(PacketCreator.shopTransaction((byte) 3)); + c.sendPacket(PacketCreator.shopTransaction((byte) 3)); } } else if (c.getPlayer().getInventory(MapleInventoryType.CASH).countById(token) != 0) { @@ -145,11 +145,11 @@ public class MapleShop { } c.getPlayer().gainMeso(diff, false); } else { - c.announce(PacketCreator.shopTransaction((byte) 3)); + c.sendPacket(PacketCreator.shopTransaction((byte) 3)); } - c.announce(PacketCreator.shopTransaction((byte) 0)); + c.sendPacket(PacketCreator.shopTransaction((byte) 0)); } else { - c.announce(PacketCreator.shopTransaction((byte) 2)); + c.sendPacket(PacketCreator.shopTransaction((byte) 2)); } } } @@ -203,9 +203,9 @@ public class MapleShop { if (recvMesos > 0) { c.getPlayer().gainMeso(recvMesos, false); } - c.announce(PacketCreator.shopTransaction((byte) 0x8)); + c.sendPacket(PacketCreator.shopTransaction((byte) 0x8)); } else { - c.announce(PacketCreator.shopTransaction((byte) 0x5)); + c.sendPacket(PacketCreator.shopTransaction((byte) 0x5)); } } @@ -225,9 +225,9 @@ public class MapleShop { item.setQuantity(slotMax); c.getPlayer().forceUpdateItem(item); c.getPlayer().gainMeso(-price, false, true, false); - c.announce(PacketCreator.shopTransaction((byte) 0x8)); + c.sendPacket(PacketCreator.shopTransaction((byte) 0x8)); } else { - c.announce(PacketCreator.shopTransaction((byte) 0x2)); + c.sendPacket(PacketCreator.shopTransaction((byte) 0x2)); } } } diff --git a/src/main/java/server/MapleStatEffect.java b/src/main/java/server/MapleStatEffect.java index 673a598999..0f8d5def92 100644 --- a/src/main/java/server/MapleStatEffect.java +++ b/src/main/java/server/MapleStatEffect.java @@ -31,6 +31,7 @@ import client.status.MonsterStatusEffect; import config.YamlConfig; import constants.inventory.ItemConstants; import constants.skills.*; +import net.packet.Packet; import net.server.Server; import net.server.world.MapleParty; import net.server.world.MaplePartyCharacter; @@ -826,8 +827,8 @@ public class MapleStatEffect { if (absorbMp > 0) { mob.setMp(mob.getMp() - absorbMp); applyto.addMP(absorbMp); - applyto.announce(PacketCreator.showOwnBuffEffect(sourceid, 1)); - applyto.getMap().broadcastMessage(applyto, PacketCreator.showBuffeffect(applyto.getId(), sourceid, 1), false); + applyto.sendPacket(PacketCreator.showOwnBuffEffect(sourceid, 1)); + applyto.getMap().broadcastMessage(applyto, PacketCreator.showBuffEffect(applyto.getId(), sourceid, 1), false); } } break; @@ -875,7 +876,7 @@ public class MapleStatEffect { if (primary) { if (itemConNo != 0) { if (!applyto.getAbstractPlayerInteraction().hasItem(itemCon, itemConNo)) { - applyto.announce(PacketCreator.enableActions()); + applyto.sendPacket(PacketCreator.enableActions()); return false; } MapleInventoryManipulator.removeById(applyto.getClient(), ItemConstants.getInventoryType(itemCon), itemCon, itemConNo, false, true); @@ -899,7 +900,7 @@ public class MapleStatEffect { } */ if (!applyto.applyHpMpChange(hpCon, hpchange, mpchange)) { - applyto.announce(PacketCreator.enableActions()); + applyto.sendPacket(PacketCreator.enableActions()); return false; } @@ -970,7 +971,7 @@ public class MapleStatEffect { applyto.cancelBuffStats(MapleBuffStat.SUMMON); } - applyto.announce(PacketCreator.enableActions()); + applyto.sendPacket(PacketCreator.enableActions()); } applyBuffEffect(applyfrom, applyto, primary); @@ -1108,8 +1109,8 @@ public class MapleStatEffect { affectedc += affectedp.size(); // used for heal for (MapleCharacter affected : affectedp) { applyTo(applyfrom, affected, false, null, useMaxRange, affectedc); - affected.announce(PacketCreator.showOwnBuffEffect(sourceid, 2)); - affected.getMap().broadcastMessage(affected, PacketCreator.showBuffeffect(affected.getId(), sourceid, 2), false); + affected.sendPacket(PacketCreator.showOwnBuffEffect(sourceid, 2)); + affected.getMap().broadcastMessage(affected, PacketCreator.showBuffEffect(affected.getId(), sourceid, 2), false); } } @@ -1182,7 +1183,7 @@ public class MapleStatEffect { public final void applyComboBuff(final MapleCharacter applyto, int combo) { final List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.ARAN_COMBO, combo)); - applyto.announce(PacketCreator.giveBuff(sourceid, 99999, stat)); + applyto.sendPacket(PacketCreator.giveBuff(sourceid, 99999, stat)); final long starttime = Server.getInstance().getCurrentTime(); // final CancelEffectAction cancelAction = new CancelEffectAction(applyto, this, starttime); @@ -1192,7 +1193,7 @@ public class MapleStatEffect { public final void applyBeaconBuff(final MapleCharacter applyto, int objectid) { // thanks Thora & Hyun for reporting an issue with homing beacon autoflagging mobs when changing maps final List> stat = Collections.singletonList(new Pair<>(MapleBuffStat.HOMING_BEACON, objectid)); - applyto.announce(PacketCreator.giveBuff(1, sourceid, stat)); + applyto.sendPacket(PacketCreator.giveBuff(1, sourceid, stat)); final long starttime = Server.getInstance().getCurrentTime(); applyto.registerEffect(this, starttime, Long.MAX_VALUE, false); @@ -1205,9 +1206,9 @@ public class MapleStatEffect { long leftDuration = (starttime + localDuration) - Server.getInstance().getCurrentTime(); if (leftDuration > 0) { if (isDash() || isInfusion()) { - target.announce(PacketCreator.givePirateBuff(activeStats, (skill ? sourceid : -sourceid), (int) leftDuration)); + target.sendPacket(PacketCreator.givePirateBuff(activeStats, (skill ? sourceid : -sourceid), (int) leftDuration)); } else { - target.announce(PacketCreator.giveBuff((skill ? sourceid : -sourceid), (int) leftDuration, activeStats)); + target.sendPacket(PacketCreator.giveBuff((skill ? sourceid : -sourceid), (int) leftDuration, activeStats)); } } } @@ -1260,11 +1261,11 @@ public class MapleStatEffect { } if (primary) { localDuration = alchemistModifyVal(applyfrom, localDuration, false); - applyto.getMap().broadcastMessage(applyto, PacketCreator.showBuffeffect(applyto.getId(), sourceid, 1, (byte) 3), false); + applyto.getMap().broadcastMessage(applyto, PacketCreator.showBuffEffect(applyto.getId(), sourceid, 1, (byte) 3), false); } if (localstatups.size() > 0) { - byte[] buff = null; - byte[] mbuff = null; + Packet buff = null; + Packet mbuff = null; if (this.isActive(applyto)) { buff = PacketCreator.giveBuff((skill ? sourceid : -sourceid), localDuration, localstatups); } @@ -1320,7 +1321,7 @@ public class MapleStatEffect { //Thanks flav for such a simple release! :) //Thanks Conrad, Atoot for noticing summons not using buff icon - applyto.announce(buff); + applyto.sendPacket(buff); } long starttime = Server.getInstance().getCurrentTime(); diff --git a/src/main/java/server/MapleStorage.java b/src/main/java/server/MapleStorage.java index 02b940d2f6..046b2ec154 100644 --- a/src/main/java/server/MapleStorage.java +++ b/src/main/java/server/MapleStorage.java @@ -227,7 +227,7 @@ public class MapleStorage { public void sendStorage(MapleClient c, int npcId) { if (c.getPlayer().getLevel() < 15){ c.getPlayer().dropMessage(1, "You may only use the storage once you have reached level 15."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -248,7 +248,7 @@ public class MapleStorage { } currentNpcid = npcId; - c.announce(PacketCreator.getStorage(npcId, slots, storageItems, meso)); + c.sendPacket(PacketCreator.getStorage(npcId, slots, storageItems, meso)); } finally { lock.unlock(); } @@ -257,7 +257,7 @@ public class MapleStorage { public void sendStored(MapleClient c, MapleInventoryType type) { lock.lock(); try { - c.announce(PacketCreator.storeStorage(slots, type, typeItems.get(type))); + c.sendPacket(PacketCreator.storeStorage(slots, type, typeItems.get(type))); } finally { lock.unlock(); } @@ -266,7 +266,7 @@ public class MapleStorage { public void sendTakenOut(MapleClient c, MapleInventoryType type) { lock.lock(); try { - c.announce(PacketCreator.takeOutStorage(slots, type, typeItems.get(type))); + c.sendPacket(PacketCreator.takeOutStorage(slots, type, typeItems.get(type))); } finally { lock.unlock(); } @@ -283,7 +283,7 @@ public class MapleStorage { typeItems.put(type, new ArrayList<>(items)); } - c.announce(PacketCreator.arrangeStorage(slots, items)); + c.sendPacket(PacketCreator.arrangeStorage(slots, items)); } finally { lock.unlock(); } @@ -301,7 +301,7 @@ public class MapleStorage { } public void sendMeso(MapleClient c) { - c.announce(PacketCreator.mesoStorage(slots, meso)); + c.sendPacket(PacketCreator.mesoStorage(slots, meso)); } public int getStoreFee() { // thanks to GabrielSin diff --git a/src/main/java/server/MapleTrade.java b/src/main/java/server/MapleTrade.java index 71ef61b8b4..7ad5d30e8e 100644 --- a/src/main/java/server/MapleTrade.java +++ b/src/main/java/server/MapleTrade.java @@ -104,7 +104,7 @@ public class MapleTrade { private void lockTrade() { locked.set(true); - partner.getChr().getClient().announce(PacketCreator.getTradeConfirmation()); + partner.getChr().sendPacket(PacketCreator.getTradeConfirmation()); } private void fetchExchangedItems() { @@ -143,7 +143,7 @@ public class MapleTrade { exchangeItems.clear(); } - chr.getClient().announce(PacketCreator.getTradeResult(number, result)); + chr.sendPacket(PacketCreator.getTradeResult(number, result)); } private void cancel(byte result) { @@ -164,7 +164,7 @@ public class MapleTrade { exchangeItems.clear(); } - chr.getClient().announce(PacketCreator.getTradeResult(number, result)); + chr.sendPacket(PacketCreator.getTradeResult(number, result)); } private boolean isLocked() { @@ -186,9 +186,9 @@ public class MapleTrade { if (chr.getMeso() >= meso) { chr.gainMeso(-meso, false, true, false); this.meso += meso; - chr.getClient().announce(PacketCreator.getTradeMesoSet((byte) 0, this.meso)); + chr.sendPacket(PacketCreator.getTradeMesoSet((byte) 0, this.meso)); if (partner != null) { - partner.getChr().getClient().announce(PacketCreator.getTradeMesoSet((byte) 1, this.meso)); + partner.getChr().sendPacket(PacketCreator.getTradeMesoSet((byte) 1, this.meso)); } } else { } @@ -212,9 +212,9 @@ public class MapleTrade { } public void chat(String message) { - chr.getClient().announce(PacketCreator.getTradeChat(chr, message, true)); + chr.sendPacket(PacketCreator.getTradeChat(chr, message, true)); if (partner != null) { - partner.getChr().getClient().announce(PacketCreator.getTradeChat(chr, message, false)); + partner.getChr().sendPacket(PacketCreator.getTradeChat(chr, message, false)); } } @@ -334,7 +334,7 @@ public class MapleTrade { if (local.getChr().getLevel() < 15) { if (local.getChr().getMesosTraded() + local.exchangeMeso > 1000000) { cancelTrade(local.getChr(), TradeResult.NO_RESPONSE); - local.getChr().getClient().announce(PacketCreator.serverNotice(1, "Characters under level 15 may not trade more than 1 million mesos per day.")); + local.getChr().sendPacket(PacketCreator.serverNotice(1, "Characters under level 15 may not trade more than 1 million mesos per day.")); return; } else { local.getChr().addMesosTraded(local.exchangeMeso); @@ -342,7 +342,7 @@ public class MapleTrade { } else if (partner.getChr().getLevel() < 15) { if (partner.getChr().getMesosTraded() + partner.exchangeMeso > 1000000) { cancelTrade(partner.getChr(), TradeResult.NO_RESPONSE); - partner.getChr().getClient().announce(PacketCreator.serverNotice(1, "Characters under level 15 may not trade more than 1 million mesos per day.")); + partner.getChr().sendPacket(PacketCreator.serverNotice(1, "Characters under level 15 may not trade more than 1 million mesos per day.")); return; } else { partner.getChr().addMesosTraded(partner.exchangeMeso); @@ -463,8 +463,8 @@ public class MapleTrade { c2.getTrade().setPartner(c1.getTrade()); c1.getTrade().setPartner(c2.getTrade()); - c1.getClient().announce(PacketCreator.getTradeStart(c1.getClient(), c1.getTrade(), (byte) 0)); - c2.getClient().announce(PacketCreator.tradeInvite(c1)); + c1.sendPacket(PacketCreator.getTradeStart(c1.getClient(), c1.getTrade(), (byte) 0)); + c2.sendPacket(PacketCreator.tradeInvite(c1)); } else { c1.message("The other player is already trading with someone else."); cancelTrade(c1, TradeResult.NO_RESPONSE); @@ -482,8 +482,8 @@ public class MapleTrade { InviteResult res = inviteRes.result; if (res == InviteResult.ACCEPTED) { if (c1.getTrade() != null && c1.getTrade().getPartner() == c2.getTrade() && c2.getTrade() != null && c2.getTrade().getPartner() == c1.getTrade()) { - c2.getClient().announce(PacketCreator.getTradePartnerAdd(c1)); - c1.getClient().announce(PacketCreator.getTradeStart(c1.getClient(), c1.getTrade(), (byte) 1)); + c2.sendPacket(PacketCreator.getTradePartnerAdd(c1)); + c1.sendPacket(PacketCreator.getTradeStart(c1.getClient(), c1.getTrade(), (byte) 1)); c1.getTrade().setFullTrade(true); c2.getTrade().setFullTrade(true); } else { diff --git a/src/main/java/server/events/gm/MapleCoconut.java b/src/main/java/server/events/gm/MapleCoconut.java index 36cabad1d1..46ef960819 100644 --- a/src/main/java/server/events/gm/MapleCoconut.java +++ b/src/main/java/server/events/gm/MapleCoconut.java @@ -66,22 +66,22 @@ public class MapleCoconut extends MapleEvent { } else if (getMapleScore() > getStoryScore()) { for (MapleCharacter chr : map.getCharacters()) { if (chr.getTeam() == 0) { - chr.getClient().announce(PacketCreator.showEffect("event/coconut/victory")); - chr.getClient().announce(PacketCreator.playSound("Coconut/Victory")); + chr.sendPacket(PacketCreator.showEffect("event/coconut/victory")); + chr.sendPacket(PacketCreator.playSound("Coconut/Victory")); } else { - chr.getClient().announce(PacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(PacketCreator.playSound("Coconut/Failed")); + chr.sendPacket(PacketCreator.showEffect("event/coconut/lose")); + chr.sendPacket(PacketCreator.playSound("Coconut/Failed")); } } warpOut(); } else { for (MapleCharacter chr : map.getCharacters()) { if (chr.getTeam() == 1) { - chr.getClient().announce(PacketCreator.showEffect("event/coconut/victory")); - chr.getClient().announce(PacketCreator.playSound("Coconut/Victory")); + chr.sendPacket(PacketCreator.showEffect("event/coconut/victory")); + chr.sendPacket(PacketCreator.playSound("Coconut/Victory")); } else { - chr.getClient().announce(PacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(PacketCreator.playSound("Coconut/Failed")); + chr.sendPacket(PacketCreator.showEffect("event/coconut/lose")); + chr.sendPacket(PacketCreator.playSound("Coconut/Failed")); } } warpOut(); @@ -95,29 +95,29 @@ public class MapleCoconut extends MapleEvent { TimerManager.getInstance().schedule(() -> { if (getMapleScore() == getStoryScore()) { for (MapleCharacter chr : map.getCharacters()) { - chr.getClient().announce(PacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(PacketCreator.playSound("Coconut/Failed")); + chr.sendPacket(PacketCreator.showEffect("event/coconut/lose")); + chr.sendPacket(PacketCreator.playSound("Coconut/Failed")); } warpOut(); } else if (getMapleScore() > getStoryScore()) { for (MapleCharacter chr : map.getCharacters()) { if (chr.getTeam() == 0) { - chr.getClient().announce(PacketCreator.showEffect("event/coconut/victory")); - chr.getClient().announce(PacketCreator.playSound("Coconut/Victory")); + chr.sendPacket(PacketCreator.showEffect("event/coconut/victory")); + chr.sendPacket(PacketCreator.playSound("Coconut/Victory")); } else { - chr.getClient().announce(PacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(PacketCreator.playSound("Coconut/Failed")); + chr.sendPacket(PacketCreator.showEffect("event/coconut/lose")); + chr.sendPacket(PacketCreator.playSound("Coconut/Failed")); } } warpOut(); } else { for (MapleCharacter chr : map.getCharacters()) { if (chr.getTeam() == 1) { - chr.getClient().announce(PacketCreator.showEffect("event/coconut/victory")); - chr.getClient().announce(PacketCreator.playSound("Coconut/Victory")); + chr.sendPacket(PacketCreator.showEffect("event/coconut/victory")); + chr.sendPacket(PacketCreator.playSound("Coconut/Victory")); } else { - chr.getClient().announce(PacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(PacketCreator.playSound("Coconut/Failed")); + chr.sendPacket(PacketCreator.showEffect("event/coconut/lose")); + chr.sendPacket(PacketCreator.playSound("Coconut/Failed")); } } warpOut(); diff --git a/src/main/java/server/events/gm/MapleFitness.java b/src/main/java/server/events/gm/MapleFitness.java index 54eaa554a1..058d9ee057 100644 --- a/src/main/java/server/events/gm/MapleFitness.java +++ b/src/main/java/server/events/gm/MapleFitness.java @@ -49,13 +49,13 @@ public class MapleFitness { public void startFitness() { chr.getMap().startEvent(); - chr.getClient().announce(PacketCreator.getClock(900)); + chr.getClient().sendPacket(PacketCreator.getClock(900)); this.timeStarted = System.currentTimeMillis(); this.time = 900000; checkAndMessage(); chr.getMap().getPortal("join00").setPortalStatus(true); - chr.getClient().announce(PacketCreator.serverNotice(0, "The portal has now opened. Press the up arrow key at the portal to enter.")); + chr.sendPacket(PacketCreator.serverNotice(0, "The portal has now opened. Press the up arrow key at the portal to enter.")); } public boolean isTimerStarted() { @@ -84,29 +84,29 @@ public class MapleFitness { } if (chr.getMap().getId() >= 109040000 && chr.getMap().getId() <= 109040004) { if (getTimeLeft() > 9000 && getTimeLeft() < 11000) { - chr.getClient().announce(PacketCreator.serverNotice(0, "You have 10 sec left. Those of you unable to beat the game, we hope you beat it next time! Great job everyone!! See you later~")); + chr.sendPacket(PacketCreator.serverNotice(0, "You have 10 sec left. Those of you unable to beat the game, we hope you beat it next time! Great job everyone!! See you later~")); } else if (getTimeLeft() > 99000 && getTimeLeft() < 101000) { - chr.getClient().announce(PacketCreator.serverNotice(0, "Alright, you don't have much time remaining. Please hurry up a little!")); + chr.sendPacket(PacketCreator.serverNotice(0, "Alright, you don't have much time remaining. Please hurry up a little!")); } else if (getTimeLeft() > 239000 && getTimeLeft() < 241000) { - chr.getClient().announce(PacketCreator.serverNotice(0, "The 4th stage is the last one for [The Maple Physical Fitness Test]. Please don't give up at the last minute and try your best. The reward is waiting for you at the very top!")); + chr.sendPacket(PacketCreator.serverNotice(0, "The 4th stage is the last one for [The Maple Physical Fitness Test]. Please don't give up at the last minute and try your best. The reward is waiting for you at the very top!")); } else if (getTimeLeft() > 299000 && getTimeLeft() < 301000) { - chr.getClient().announce(PacketCreator.serverNotice(0, "The 3rd stage offers traps where you may see them, but you won't be able to step on them. Please be careful of them as you make your way up.")); + chr.sendPacket(PacketCreator.serverNotice(0, "The 3rd stage offers traps where you may see them, but you won't be able to step on them. Please be careful of them as you make your way up.")); } else if (getTimeLeft() > 359000 && getTimeLeft() < 361000) { - chr.getClient().announce(PacketCreator.serverNotice(0, "For those who have heavy lags, please make sure to move slowly to avoid falling all the way down because of lags.")); + chr.sendPacket(PacketCreator.serverNotice(0, "For those who have heavy lags, please make sure to move slowly to avoid falling all the way down because of lags.")); } else if (getTimeLeft() > 499000 && getTimeLeft() < 501000) { - chr.getClient().announce(PacketCreator.serverNotice(0, "Please remember that if you die during the event, you'll be eliminated from the game. If you're running out of HP, either take a potion or recover HP first before moving on.")); + chr.sendPacket(PacketCreator.serverNotice(0, "Please remember that if you die during the event, you'll be eliminated from the game. If you're running out of HP, either take a potion or recover HP first before moving on.")); } else if (getTimeLeft() > 599000 && getTimeLeft() < 601000) { - chr.getClient().announce(PacketCreator.serverNotice(0, "The most important thing you'll need to know to avoid the bananas thrown by the monkeys is *Timing* Timing is everything in this!")); + chr.sendPacket(PacketCreator.serverNotice(0, "The most important thing you'll need to know to avoid the bananas thrown by the monkeys is *Timing* Timing is everything in this!")); } else if (getTimeLeft() > 659000 && getTimeLeft() < 661000) { - chr.getClient().announce(PacketCreator.serverNotice(0, "The 2nd stage offers monkeys throwing bananas. Please make sure to avoid them by moving along at just the right timing.")); + chr.sendPacket(PacketCreator.serverNotice(0, "The 2nd stage offers monkeys throwing bananas. Please make sure to avoid them by moving along at just the right timing.")); } else if (getTimeLeft() > 699000 && getTimeLeft() < 701000) { - chr.getClient().announce(PacketCreator.serverNotice(0, "Please remember that if you die during the event, you'll be eliminated from the game. You still have plenty of time left, so either take a potion or recover HP first before moving on.")); + chr.sendPacket(PacketCreator.serverNotice(0, "Please remember that if you die during the event, you'll be eliminated from the game. You still have plenty of time left, so either take a potion or recover HP first before moving on.")); } else if (getTimeLeft() > 779000 && getTimeLeft() < 781000) { - chr.getClient().announce(PacketCreator.serverNotice(0, "Everyone that clears [The Maple Physical Fitness Test] on time will be given an item, regardless of the order of finish, so just relax, take your time, and clear the 4 stages.")); + chr.sendPacket(PacketCreator.serverNotice(0, "Everyone that clears [The Maple Physical Fitness Test] on time will be given an item, regardless of the order of finish, so just relax, take your time, and clear the 4 stages.")); } else if (getTimeLeft() > 839000 && getTimeLeft() < 841000) { - chr.getClient().announce(PacketCreator.serverNotice(0, "There may be a heavy lag due to many users at stage 1 all at once. It won't be difficult, so please make sure not to fall down because of heavy lag.")); + chr.sendPacket(PacketCreator.serverNotice(0, "There may be a heavy lag due to many users at stage 1 all at once. It won't be difficult, so please make sure not to fall down because of heavy lag.")); } else if (getTimeLeft() > 869000 && getTimeLeft() < 871000) { - chr.getClient().announce(PacketCreator.serverNotice(0, "[MapleStory Physical Fitness Test] consists of 4 stages, and if you happen to die during the game, you'll be eliminated from the game, so please be careful of that.")); + chr.sendPacket(PacketCreator.serverNotice(0, "[MapleStory Physical Fitness Test] consists of 4 stages, and if you happen to die during the game, you'll be eliminated from the game, so please be careful of that.")); } } else { resetTimes(); diff --git a/src/main/java/server/events/gm/MapleOla.java b/src/main/java/server/events/gm/MapleOla.java index fa51f0e629..ce5c969e10 100644 --- a/src/main/java/server/events/gm/MapleOla.java +++ b/src/main/java/server/events/gm/MapleOla.java @@ -48,12 +48,12 @@ public class MapleOla { public void startOla() { // TODO: Messages chr.getMap().startEvent(); - chr.getClient().announce(PacketCreator.getClock(360)); + chr.sendPacket(PacketCreator.getClock(360)); this.timeStarted = System.currentTimeMillis(); this.time = 360000; chr.getMap().getPortal("join00").setPortalStatus(true); - chr.getClient().announce(PacketCreator.serverNotice(0, "The portal has now opened. Press the up arrow key at the portal to enter.")); + chr.sendPacket(PacketCreator.serverNotice(0, "The portal has now opened. Press the up arrow key at the portal to enter.")); } public boolean isTimerStarted() { diff --git a/src/main/java/server/events/gm/MapleSnowball.java b/src/main/java/server/events/gm/MapleSnowball.java index 528e876775..f315ecfe9c 100644 --- a/src/main/java/server/events/gm/MapleSnowball.java +++ b/src/main/java/server/events/gm/MapleSnowball.java @@ -58,8 +58,8 @@ public class MapleSnowball { for (MapleCharacter chr : characters) { if (chr != null) { - chr.announce(PacketCreator.rollSnowBall(false, 1, map.getSnowball(0), map.getSnowball(1))); - chr.announce(PacketCreator.getClock(600)); + chr.sendPacket(PacketCreator.rollSnowBall(false, 1, map.getSnowball(0), map.getSnowball(1))); + chr.sendPacket(PacketCreator.getClock(600)); } } hittable = true; @@ -67,13 +67,13 @@ public class MapleSnowball { if (map.getSnowball(team).getPosition() > map.getSnowball(team == 0 ? 1 : 0).getPosition()) { for (MapleCharacter chr : characters) { if (chr != null) - chr.announce(PacketCreator.rollSnowBall(false, 3, map.getSnowball(0), map.getSnowball(0))); + chr.sendPacket(PacketCreator.rollSnowBall(false, 3, map.getSnowball(0), map.getSnowball(0))); } winner = true; } else if (map.getSnowball(team == 0 ? 1 : 0).getPosition() > map.getSnowball(team).getPosition()) { for (MapleCharacter chr : characters) { if (chr != null) - chr.announce(PacketCreator.rollSnowBall(false, 4, map.getSnowball(0), map.getSnowball(0))); + chr.sendPacket(PacketCreator.rollSnowBall(false, 4, map.getSnowball(0), map.getSnowball(0))); } winner = true; } //Else @@ -138,7 +138,7 @@ public class MapleSnowball { public void message(int message) { for (MapleCharacter chr : characters) { if (chr != null) - chr.announce(PacketCreator.snowballMessage(team, message)); + chr.sendPacket(PacketCreator.snowballMessage(team, message)); } } diff --git a/src/main/java/server/expeditions/MapleExpedition.java b/src/main/java/server/expeditions/MapleExpedition.java index 1cb82ec854..126277efb5 100644 --- a/src/main/java/server/expeditions/MapleExpedition.java +++ b/src/main/java/server/expeditions/MapleExpedition.java @@ -23,6 +23,7 @@ package server.expeditions; import client.MapleCharacter; +import net.packet.Packet; import net.server.PlayerStorage; import net.server.Server; import net.server.audit.locks.MonitoredLockType; @@ -115,10 +116,10 @@ public class MapleExpedition { public void beginRegistration() { registering = true; - leader.announce(PacketCreator.getClock(type.getRegistrationTime() * 60)); + leader.sendPacket(PacketCreator.getClock(type.getRegistrationTime() * 60)); if (!silent) { startMap.broadcastMessage(leader, PacketCreator.serverNotice(6, "[Expedition] " + leader.getName() + " has been declared the expedition captain. Please register for the expedition."), false); - leader.announce(PacketCreator.serverNotice(6, "[Expedition] You have become the expedition captain. Gather enough people for your team then talk to the NPC to start.")); + leader.sendPacket(PacketCreator.serverNotice(6, "[Expedition] You have become the expedition captain. Gather enough people for your team then talk to the NPC to start.")); } scheduleRegistrationEnd(); } @@ -137,18 +138,18 @@ dispose(false); }, type.getRegistrationTime() * 60 * 1000); } - public void dispose(boolean log){ - broadcastExped(PacketCreator.removeClock()); - - if (schedule != null){ - schedule.cancel(false); - } - if (log && !registering){ - LogHelper.logExpedition(this); - } - } + public void dispose(boolean log) { + broadcastExped(PacketCreator.removeClock()); + + if (schedule != null) { + schedule.cancel(false); + } + if (log && !registering) { + LogHelper.logExpedition(this); + } + } - public void finishRegistration() { + public void finishRegistration() { registering = false; } @@ -178,7 +179,7 @@ dispose(false); } members.put(player.getId(), player.getName()); - player.announce(PacketCreator.getClock((int)(startTime - System.currentTimeMillis()) / 1000)); + player.sendPacket(PacketCreator.getClock((int)(startTime - System.currentTimeMillis()) / 1000)); if (!silent) broadcastExped(PacketCreator.serverNotice(6, "[Expedition] " + player.getName() + " has joined the expedition!")); return "You have registered for the expedition successfully!"; } @@ -195,7 +196,7 @@ dispose(false); } members.put(player.getId(), player.getName()); - player.announce(PacketCreator.getClock((int) (startTime - System.currentTimeMillis()) / 1000)); + player.sendPacket(PacketCreator.getClock((int) (startTime - System.currentTimeMillis()) / 1000)); if (!silent) broadcastExped(PacketCreator.serverNotice(6, "[Expedition] " + player.getName() + " has joined the expedition!")); return 0; //"You have registered for the expedition successfully!"; } @@ -208,15 +209,15 @@ dispose(false); } } - private void broadcastExped(byte[] packet){ + private void broadcastExped(Packet packet){ for (MapleCharacter chr : getActiveMembers()){ - chr.announce(packet); + chr.sendPacket(packet); } } public boolean removeMember(MapleCharacter chr) { if(members.remove(chr.getId()) != null) { - chr.announce(PacketCreator.removeClock()); + chr.sendPacket(PacketCreator.removeClock()); if (!silent) { broadcastExped(PacketCreator.serverNotice(6, "[Expedition] " + chr.getName() + " has left the expedition.")); chr.dropMessage(6, "[Expedition] You have left this expedition."); @@ -237,7 +238,7 @@ dispose(false); MapleCharacter player = startMap.getWorldServer().getPlayerStorage().getCharacterById(cid); if (player != null && player.isLoggedinWorld()) { - player.announce(PacketCreator.removeClock()); + player.sendPacket(PacketCreator.removeClock()); if (!silent) player.dropMessage(6, "[Expedition] You have been banned from this expedition."); if (MapleExpeditionType.ARIANT.equals(type) || MapleExpeditionType.ARIANT1.equals(type) || MapleExpeditionType.ARIANT2.equals(type)) { player.changeMap(980010000); diff --git a/src/main/java/server/life/MapleMonster.java b/src/main/java/server/life/MapleMonster.java index 728ee1cf76..dbf7e71dc0 100644 --- a/src/main/java/server/life/MapleMonster.java +++ b/src/main/java/server/life/MapleMonster.java @@ -26,6 +26,7 @@ import client.status.MonsterStatus; import client.status.MonsterStatusEffect; import config.YamlConfig; import constants.skills.*; +import net.packet.Packet; import net.server.audit.LockCollector; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredReentrantLock; @@ -365,16 +366,16 @@ public class MapleMonster extends AbstractLoadedMapleLife { from.getMap().broadcastBossHpMessage(this, this.hashCode(), makeBossHPBarPacket(), getPosition()); } else if (!isBoss()) { int remainingHP = (int) Math.max(1, hp.get() * 100f / getMaxHp()); - byte[] packet = PacketCreator.showMonsterHP(getObjectId(), remainingHP); + Packet packet = PacketCreator.showMonsterHP(getObjectId(), remainingHP); if (from.getParty() != null) { for (MaplePartyCharacter mpc : from.getParty().getMembers()) { MapleCharacter member = from.getMap().getCharacterById(mpc.getId()); // god bless if (member != null) { - member.announce(packet.clone()); // clone it just in case of crypto + member.sendPacket(packet); } } } else { - from.announce(packet); + from.sendPacket(packet); } } } @@ -1005,7 +1006,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { this.controllerHasPuppet = controllerHasPuppet; } - public byte[] makeBossHPBarPacket() { + public Packet makeBossHPBarPacket() { return PacketCreator.showBossHP(getId(), getHp(), getMaxHp(), getTagColor(), getTagBgColor()); } @@ -1019,9 +1020,9 @@ public class MapleMonster extends AbstractLoadedMapleLife { return; } if (fake) { - client.announce(PacketCreator.spawnFakeMonster(this, 0)); + client.sendPacket(PacketCreator.spawnFakeMonster(this, 0)); } else { - client.announce(PacketCreator.spawnMonster(this, false)); + client.sendPacket(PacketCreator.spawnMonster(this, false)); } if (hasBossHPBar()) { @@ -1031,8 +1032,8 @@ public class MapleMonster extends AbstractLoadedMapleLife { @Override public void sendDestroyData(MapleClient client) { - client.announce(PacketCreator.killMonster(getObjectId(), false)); - client.announce(PacketCreator.killMonster(getObjectId(), true)); + client.sendPacket(PacketCreator.killMonster(getObjectId(), false)); + client.sendPacket(PacketCreator.killMonster(getObjectId(), true)); } @Override @@ -1086,18 +1087,18 @@ public class MapleMonster extends AbstractLoadedMapleLife { } } - private void broadcastMonsterStatusMessage(byte[] packet) { + private void broadcastMonsterStatusMessage(Packet packet) { map.broadcastMessage(packet, getPosition()); MapleCharacter chrController = getActiveController(); if (chrController != null && !chrController.isMapObjectVisible(MapleMonster.this)) { - chrController.announce(packet); + chrController.sendPacket(packet); } } private int broadcastStatusEffect(final MonsterStatusEffect status) { int animationTime = status.getSkill().getAnimationTime(); - byte[] packet = PacketCreator.applyMonsterStatus(getObjectId(), status, null); + Packet packet = PacketCreator.applyMonsterStatus(getObjectId(), status, null); broadcastMonsterStatusMessage(packet); return animationTime; @@ -1172,7 +1173,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { final Runnable cancelTask = () -> { if (isAlive()) { - byte[] packet = PacketCreator.cancelMonsterStatus(getObjectId(), status.getStati()); + Packet packet = PacketCreator.cancelMonsterStatus(getObjectId(), status.getStati()); broadcastMonsterStatusMessage(packet); } @@ -1284,7 +1285,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { public void applyMonsterBuff(final Map stats, final int x, int skillId, long duration, MobSkill skill, final List reflection) { final Runnable cancelTask = () -> { if (isAlive()) { - byte[] packet = PacketCreator.cancelMonsterStatus(getObjectId(), stats); + Packet packet = PacketCreator.cancelMonsterStatus(getObjectId(), stats); broadcastMonsterStatusMessage(packet); statiLock.lock(); @@ -1298,7 +1299,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { } }; final MonsterStatusEffect effect = new MonsterStatusEffect(stats, null, skill, true); - byte[] packet = PacketCreator.applyMonsterStatus(getObjectId(), effect, reflection); + Packet packet = PacketCreator.applyMonsterStatus(getObjectId(), effect, reflection); broadcastMonsterStatusMessage(packet); statiLock.lock(); @@ -1339,7 +1340,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { } if (oldEffect != null) { - byte[] packet = PacketCreator.cancelMonsterStatus(getObjectId(), oldEffect.getStati()); + Packet packet = PacketCreator.cancelMonsterStatus(getObjectId(), oldEffect.getStati()); broadcastMonsterStatusMessage(packet); } } @@ -1884,7 +1885,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { } if (chrController != null) { // this can/should only happen when a hidden gm attacks the monster - if (!this.isFake()) chrController.announce(PacketCreator.stopControllingMonster(this.getObjectId())); + if (!this.isFake()) chrController.sendPacket(PacketCreator.stopControllingMonster(this.getObjectId())); chrController.stopControllingMonster(this); } @@ -2088,7 +2089,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { Maybe Nexon intended to interchange controllers at every attack... else if (chrController != null) { - chrController.announce(PacketCreator.stopControllingMonster(this.getObjectId())); + chrController.sendPacket(PacketCreator.stopControllingMonster(this.getObjectId())); aggroMonsterControl(chrController.getClient(), this, true); } */ @@ -2099,7 +2100,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { } private static void aggroMonsterControl(MapleClient c, MapleMonster mob, boolean immediateAggro) { - c.announce(PacketCreator.controlMonster(mob, false, immediateAggro)); + c.sendPacket(PacketCreator.controlMonster(mob, false, immediateAggro)); } private void aggroRefreshPuppetVisibility(MapleCharacter chrController, MapleSummon puppet) { @@ -2113,15 +2114,15 @@ public class MapleMonster extends AbstractLoadedMapleLife { } for (MapleMonster mob : puppetControlled) { - chrController.announce(PacketCreator.stopControllingMonster(mob.getObjectId())); + chrController.sendPacket(PacketCreator.stopControllingMonster(mob.getObjectId())); } - chrController.announce(PacketCreator.removeSummon(puppet, false)); + chrController.sendPacket(PacketCreator.removeSummon(puppet, false)); MapleClient c = chrController.getClient(); for (MapleMonster mob : puppetControlled) { // thanks BHB for noticing puppets disrupting mobstatuses for bowmans aggroMonsterControl(c, mob, mob.isControllerKnowsAboutAggro()); } - chrController.announce(PacketCreator.spawnSummon(puppet, false)); + chrController.sendPacket(PacketCreator.spawnSummon(puppet, false)); } public void aggroUpdatePuppetVisibility() { @@ -2151,7 +2152,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { if (controllerHasPuppet) { controllerHasPuppet = false; - chrController.announce(PacketCreator.stopControllingMonster(MapleMonster.this.getObjectId())); + chrController.sendPacket(PacketCreator.stopControllingMonster(MapleMonster.this.getObjectId())); aggroMonsterControl(chrController.getClient(), MapleMonster.this, MapleMonster.this.isControllerHasAggro()); } } finally { diff --git a/src/main/java/server/life/MapleNPC.java b/src/main/java/server/life/MapleNPC.java index ef343786b4..718bc326ec 100644 --- a/src/main/java/server/life/MapleNPC.java +++ b/src/main/java/server/life/MapleNPC.java @@ -27,7 +27,7 @@ import server.maps.MapleMapObjectType; import tools.PacketCreator; public class MapleNPC extends AbstractLoadedMapleLife { - private MapleNPCStats stats; + private final MapleNPCStats stats; public MapleNPC(int id, MapleNPCStats stats) { super(id); @@ -44,14 +44,14 @@ public class MapleNPC extends AbstractLoadedMapleLife { @Override public void sendSpawnData(MapleClient client) { - client.announce(PacketCreator.spawnNPC(this)); - client.announce(PacketCreator.spawnNPCRequestController(this, true)); + client.sendPacket(PacketCreator.spawnNPC(this)); + client.sendPacket(PacketCreator.spawnNPCRequestController(this, true)); } @Override public void sendDestroyData(MapleClient client) { - client.announce(PacketCreator.removeNPCController(getObjectId())); - client.announce(PacketCreator.removeNPC(getObjectId())); + client.sendPacket(PacketCreator.removeNPCController(getObjectId())); + client.sendPacket(PacketCreator.removeNPC(getObjectId())); } @Override diff --git a/src/main/java/server/life/MaplePlayerNPC.java b/src/main/java/server/life/MaplePlayerNPC.java index ddd3b852db..cec6d892f4 100644 --- a/src/main/java/server/life/MaplePlayerNPC.java +++ b/src/main/java/server/life/MaplePlayerNPC.java @@ -200,14 +200,14 @@ public class MaplePlayerNPC extends AbstractMapleMapObject { @Override public void sendSpawnData(MapleClient client) { - client.announce(PacketCreator.spawnPlayerNPC(this)); - client.announce(PacketCreator.getPlayerNPC(this)); + client.sendPacket(PacketCreator.spawnPlayerNPC(this)); + client.sendPacket(PacketCreator.getPlayerNPC(this)); } @Override public void sendDestroyData(MapleClient client) { - client.announce(PacketCreator.removeNPCController(this.getObjectId())); - client.announce(PacketCreator.removePlayerNPC(this.getObjectId())); + client.sendPacket(PacketCreator.removeNPCController(this.getObjectId())); + client.sendPacket(PacketCreator.removePlayerNPC(this.getObjectId())); } private static void getRunningMetadata() { diff --git a/src/main/java/server/maps/MapleDoorObject.java b/src/main/java/server/maps/MapleDoorObject.java index 880094dd48..df6d8d6503 100644 --- a/src/main/java/server/maps/MapleDoorObject.java +++ b/src/main/java/server/maps/MapleDoorObject.java @@ -91,7 +91,7 @@ public class MapleDoorObject extends AbstractMapleMapObject { public void warp(final MapleCharacter chr) { MapleParty party = chr.getParty(); if (chr.getId() == ownerId || (party != null && party.getMemberById(ownerId) != null)) { - chr.announce(PacketCreator.playPortalSound()); + chr.sendPacket(PacketCreator.playPortalSound()); if(!inTown() && party == null) { chr.changeMap(to, getLinkedPortalId()); @@ -99,8 +99,8 @@ public class MapleDoorObject extends AbstractMapleMapObject { chr.changeMap(to, getLinkedPortalPosition()); } } else { - chr.getClient().announce(PacketCreator.blockedMessage(6)); - chr.getClient().announce(PacketCreator.enableActions()); + chr.sendPacket(PacketCreator.blockedMessage(6)); + chr.sendPacket(PacketCreator.enableActions()); } } @@ -113,12 +113,12 @@ public class MapleDoorObject extends AbstractMapleMapObject { MapleCharacter chr = client.getPlayer(); if (this.getFrom().getId() == chr.getMapId()) { if (chr.getParty() != null && (this.getOwnerId() == chr.getId() || chr.getParty().getMemberById(this.getOwnerId()) != null)) { - chr.announce(PacketCreator.partyPortal(this.getFrom().getId(), this.getTo().getId(), this.toPosition())); + chr.sendPacket(PacketCreator.partyPortal(this.getFrom().getId(), this.getTo().getId(), this.toPosition())); } - chr.announce(PacketCreator.spawnPortal(this.getFrom().getId(), this.getTo().getId(), this.toPosition())); + chr.sendPacket(PacketCreator.spawnPortal(this.getFrom().getId(), this.getTo().getId(), this.toPosition())); if (!this.inTown()) { - chr.announce(PacketCreator.spawnDoor(this.getOwnerId(), this.getPosition(), launched)); + chr.sendPacket(PacketCreator.spawnDoor(this.getOwnerId(), this.getPosition(), launched)); } } } @@ -129,16 +129,16 @@ public class MapleDoorObject extends AbstractMapleMapObject { if (from.getId() == chr.getMapId()) { MapleParty party = chr.getParty(); if (party != null && (ownerId == chr.getId() || party.getMemberById(ownerId) != null)) { - client.announce(PacketCreator.partyPortal(999999999, 999999999, new Point(-1, -1))); + client.sendPacket(PacketCreator.partyPortal(999999999, 999999999, new Point(-1, -1))); } - client.announce(PacketCreator.removeDoor(ownerId, inTown())); + client.sendPacket(PacketCreator.removeDoor(ownerId, inTown())); } } public void sendDestroyData(MapleClient client, boolean partyUpdate) { if (client != null && from.getId() == client.getPlayer().getMapId()) { - client.announce(PacketCreator.partyPortal(999999999, 999999999, new Point(-1, -1))); - client.announce(PacketCreator.removeDoor(ownerId, inTown())); + client.sendPacket(PacketCreator.partyPortal(999999999, 999999999, new Point(-1, -1))); + client.sendPacket(PacketCreator.removeDoor(ownerId, inTown())); } } diff --git a/src/main/java/server/maps/MapleDragon.java b/src/main/java/server/maps/MapleDragon.java index 6c669daa17..dd2dbded3a 100644 --- a/src/main/java/server/maps/MapleDragon.java +++ b/src/main/java/server/maps/MapleDragon.java @@ -46,7 +46,7 @@ public class MapleDragon extends AbstractAnimatedMapleMapObject { @Override public void sendSpawnData(MapleClient client) { - client.announce(PacketCreator.spawnDragon(this)); + client.sendPacket(PacketCreator.spawnDragon(this)); } @Override @@ -56,7 +56,7 @@ public class MapleDragon extends AbstractAnimatedMapleMapObject { @Override public void sendDestroyData(MapleClient c) { - c.announce(PacketCreator.removeDragon(owner.getId())); + c.sendPacket(PacketCreator.removeDragon(owner.getId())); } public MapleCharacter getOwner() { diff --git a/src/main/java/server/maps/MapleGenericPortal.java b/src/main/java/server/maps/MapleGenericPortal.java index 75d21b5a5d..53329f45a9 100644 --- a/src/main/java/server/maps/MapleGenericPortal.java +++ b/src/main/java/server/maps/MapleGenericPortal.java @@ -156,7 +156,7 @@ public class MapleGenericPortal implements MaplePortal { } } if (!changed) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/server/maps/MapleHiredMerchant.java b/src/main/java/server/maps/MapleHiredMerchant.java index 0bce8bc3ce..7af984f59e 100644 --- a/src/main/java/server/maps/MapleHiredMerchant.java +++ b/src/main/java/server/maps/MapleHiredMerchant.java @@ -31,6 +31,7 @@ import client.inventory.manipulator.MapleInventoryManipulator; import client.inventory.manipulator.MapleKarmaManipulator; import client.processor.npc.FredrickProcessor; import config.YamlConfig; +import net.packet.Packet; import net.server.Server; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; @@ -83,7 +84,7 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { this.map = owner.getMap(); } - public void broadcastToVisitorsThreadsafe(final byte[] packet) { + public void broadcastToVisitorsThreadsafe(Packet packet) { visitorLock.lock(); try { broadcastToVisitors(packet); @@ -92,10 +93,10 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { } } - private void broadcastToVisitors(final byte[] packet) { + private void broadcastToVisitors(Packet packet) { for (MapleCharacter visitor : visitors) { if (visitor != null) { - visitor.getClient().announce(packet); + visitor.sendPacket(packet); } } } @@ -182,8 +183,8 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { if (visitor != null) { visitor.setHiredMerchant(null); - visitor.getClient().announce(PacketCreator.leaveHiredMerchant(i + 1, 0x11)); - visitor.getClient().announce(PacketCreator.hiredMerchantMaintenanceMessage()); + visitor.sendPacket(PacketCreator.leaveHiredMerchant(i + 1, 0x11)); + visitor.sendPacket(PacketCreator.hiredMerchantMaintenanceMessage()); visitors[i] = null; } @@ -197,8 +198,8 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { private void removeOwner(MapleCharacter owner) { if (owner.getHiredMerchant() == this) { - owner.announce(PacketCreator.hiredMerchantOwnerLeave()); - owner.announce(PacketCreator.leaveHiredMerchant(0x00, 0x03)); + owner.sendPacket(PacketCreator.hiredMerchantOwnerLeave()); + owner.sendPacket(PacketCreator.leaveHiredMerchant(0x00, 0x03)); owner.setHiredMerchant(null); } } @@ -220,8 +221,8 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { iitem.setQuantity((short) (shopItem.getItem().getQuantity() * shopItem.getBundles())); if (!MapleInventory.checkSpot(chr, iitem)) { - chr.announce(PacketCreator.serverNotice(1, "Have a slot available on your inventory to claim back the item.")); - chr.announce(PacketCreator.enableActions()); + chr.sendPacket(PacketCreator.serverNotice(1, "Have a slot available on your inventory to claim back the item.")); + chr.sendPacket(PacketCreator.enableActions()); return; } @@ -229,7 +230,7 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { } removeFromSlot(slot); - chr.announce(PacketCreator.updateHiredMerchant(this, chr)); + chr.sendPacket(PacketCreator.updateHiredMerchant(this, chr)); } if (YamlConfig.config.server.USE_ENFORCE_MERCHANT_SAVE) { @@ -263,10 +264,10 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { newItem.setQuantity((short) ((pItem.getItem().getQuantity() * quantity))); if (quantity < 1 || !pItem.isExist() || pItem.getBundles() < quantity) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } else if (newItem.getInventoryType().equals(MapleInventoryType.EQUIP) && newItem.getQuantity() > 1) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -318,12 +319,12 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { } } else { c.getPlayer().dropMessage(1, "Your inventory is full. Please clear a slot before buying this item."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } else { c.getPlayer().dropMessage(1, "You don't have enough mesos to purchase this item."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } try { @@ -461,15 +462,15 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { this.setOpen(false); this.removeAllVisitors(); - chr.announce(PacketCreator.getHiredMerchant(chr, this, false)); + chr.sendPacket(PacketCreator.getHiredMerchant(chr, this, false)); } else if (!this.isOpen()) { - chr.announce(PacketCreator.getMiniRoomError(18)); + chr.sendPacket(PacketCreator.getMiniRoomError(18)); return; } else if (!this.addVisitor(chr)) { - chr.announce(PacketCreator.getMiniRoomError(2)); + chr.sendPacket(PacketCreator.getMiniRoomError(2)); return; } else { - chr.announce(PacketCreator.getHiredMerchant(chr, this, false)); + chr.sendPacket(PacketCreator.getHiredMerchant(chr, this, false)); } chr.setHiredMerchant(this); } finally { @@ -713,7 +714,7 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { @Override public void sendSpawnData(MapleClient client) { - client.announce(PacketCreator.spawnHiredMerchantBox(this)); + client.sendPacket(PacketCreator.spawnHiredMerchantBox(this)); } public class SoldItem { diff --git a/src/main/java/server/maps/MapleKite.java b/src/main/java/server/maps/MapleKite.java index f1fdbc54ed..078e7639c1 100644 --- a/src/main/java/server/maps/MapleKite.java +++ b/src/main/java/server/maps/MapleKite.java @@ -2,24 +2,24 @@ package server.maps; import client.MapleCharacter; import client.MapleClient; +import net.packet.Packet; import tools.PacketCreator; import java.awt.*; public class MapleKite extends AbstractMapleMapObject { + private final Point pos; + private final MapleCharacter owner; + private final String text; + private final int ft; + private final int itemid; - private Point pos; - private MapleCharacter owner; - private String text; - private int ft; - private int itemid; - - public MapleKite(MapleCharacter owner, String text, int itemid) { + public MapleKite(MapleCharacter owner, String text, int itemId) { this.owner = owner; this.pos = owner.getPosition(); this.ft = owner.getFh(); this.text = text; - this.itemid = itemid; + this.itemid = itemId; } @Override @@ -43,19 +43,19 @@ public class MapleKite extends AbstractMapleMapObject { @Override public void sendDestroyData(MapleClient client) { - client.announce(makeDestroyData()); + client.sendPacket(makeDestroyData()); } @Override public void sendSpawnData(MapleClient client) { - client.announce(makeSpawnData()); + client.sendPacket(makeSpawnData()); } - public final byte[] makeSpawnData() { + public final Packet makeSpawnData() { return PacketCreator.spawnKite(getObjectId(), itemid, owner.getName(), text, pos, ft); } - public final byte[] makeDestroyData() { + public final Packet makeDestroyData() { return PacketCreator.removeKite(getObjectId(), 0); } } \ No newline at end of file diff --git a/src/main/java/server/maps/MapleMap.java b/src/main/java/server/maps/MapleMap.java index 2a30648d88..57322bd8ed 100644 --- a/src/main/java/server/maps/MapleMap.java +++ b/src/main/java/server/maps/MapleMap.java @@ -34,6 +34,7 @@ import client.status.MonsterStatusEffect; import config.YamlConfig; import constants.game.GameConstants; import constants.inventory.ItemConstants; +import net.packet.Packet; import net.server.Server; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredReadLock; @@ -74,6 +75,7 @@ import java.util.Map.Entry; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Lock; +import java.util.function.Predicate; public class MapleMap { @@ -199,28 +201,21 @@ public class MapleMap { public int getWorld() { return world; } - - public void broadcastMessage(MapleCharacter source, final byte[] packet) { - chrRLock.lock(); - try { - for (MapleCharacter chr : characters) { - if (chr != source) { - chr.getClient().announce(packet); - } - } - } finally { - chrRLock.unlock(); - } + + public void broadcastPacket(MapleCharacter source, Packet packet) { + broadcastPacket(packet, chr -> chr != source); } - public void broadcastGMMessage(MapleCharacter source, final byte[] packet) { + public void broadcastGMPacket(MapleCharacter source, Packet packet) { + broadcastPacket(packet, chr -> chr != source && chr.gmLevel() >= source.gmLevel()); + } + + private void broadcastPacket(Packet packet, Predicate chrFilter) { chrRLock.lock(); try { - for (MapleCharacter chr : characters) { - if (chr != source && (chr.gmLevel() >= source.gmLevel())) { - chr.getClient().announce(packet); - } - } + characters.stream() + .filter(chrFilter) + .forEach(chr -> chr.sendPacket(packet)); } finally { chrRLock.unlock(); } @@ -230,9 +225,8 @@ public class MapleMap { this.dropsOn = !dropsOn; } - private static double getRangedDistance() { - return(YamlConfig.config.server.USE_MAXRANGE ? Double.POSITIVE_INFINITY : 722500); + return YamlConfig.config.server.USE_MAXRANGE ? Double.POSITIVE_INFINITY : 722500; } public List getMapObjectsInRect(Rectangle box, List types) { @@ -1018,7 +1012,7 @@ public class MapleMap { return count; } - public void pickItemDrop(byte[] pickupPacket, MapleMapItem mdrop) { // mdrop must be already locked and not-pickedup checked at this point + public void pickItemDrop(Packet pickupPacket, MapleMapItem mdrop) { // mdrop must be already locked and not-pickedup checked at this point broadcastMessage(pickupPacket, mdrop.getPosition()); droppedItemCount.decrementAndGet(); @@ -1040,25 +1034,25 @@ public class MapleMap { mdrop.setPartyOwnerId(partyid); - byte[] removePacket = PacketCreator.silentRemoveItemFromMap(mdrop.getObjectId()); - byte[] updatePacket = PacketCreator.updateMapItemObject(mdrop, partyLeaver == null); + Packet removePacket = PacketCreator.silentRemoveItemFromMap(mdrop.getObjectId()); + Packet updatePacket = PacketCreator.updateMapItemObject(mdrop, partyLeaver == null); for (MapleCharacter mc : partyMembers) { if (this.equals(mc.getMap())) { - mc.announce(removePacket); + mc.sendPacket(removePacket); if (mc.needQuestItem(mdrop.getQuest(), mdrop.getItemId())) { - mc.announce(updatePacket); + mc.sendPacket(updatePacket); } } } if (partyLeaver != null) { if (this.equals(partyLeaver.getMap())) { - partyLeaver.announce(removePacket); + partyLeaver.sendPacket(removePacket); if (partyLeaver.needQuestItem(mdrop.getQuest(), mdrop.getItemId())) { - partyLeaver.announce(PacketCreator.updateMapItemObject(mdrop, true)); + partyLeaver.sendPacket(PacketCreator.updateMapItemObject(mdrop, true)); } } } @@ -1081,15 +1075,15 @@ public class MapleMap { continue; } - byte[] removePacket = PacketCreator.silentRemoveItemFromMap(mdrop.getObjectId()); - byte[] updatePacket = PacketCreator.updateMapItemObject(mdrop, true); + Packet removePacket = PacketCreator.silentRemoveItemFromMap(mdrop.getObjectId()); + Packet updatePacket = PacketCreator.updateMapItemObject(mdrop, true); if (newcomer != null) { if (this.equals(newcomer.getMap())) { - newcomer.announce(removePacket); + newcomer.sendPacket(removePacket); if (newcomer.needQuestItem(mdrop.getQuest(), mdrop.getItemId())) { - newcomer.announce(updatePacket); + newcomer.sendPacket(updatePacket); } } } @@ -1108,7 +1102,7 @@ public class MapleMap { if (chr1.needQuestItem(questid, idrop.getItemId())) { mdrop.lockItem(); try { - c.announce(PacketCreator.dropItemFromMapObject(chr1, mdrop, dropper.getPosition(), dropPos, (byte) 1)); + c.sendPacket(PacketCreator.dropItemFromMapObject(chr1, mdrop, dropper.getPosition(), dropPos, (byte) 1)); } finally { mdrop.unlockItem(); } @@ -1127,7 +1121,7 @@ public class MapleMap { spawnAndAddRangedMapObject(mdrop, c -> { mdrop.lockItem(); try { - c.announce(PacketCreator.dropItemFromMapObject(c.getPlayer(), mdrop, dropper.getPosition(), droppos, (byte) 1)); + c.sendPacket(PacketCreator.dropItemFromMapObject(c.getPlayer(), mdrop, dropper.getPosition(), droppos, (byte) 1)); } finally { mdrop.unlockItem(); } @@ -1407,8 +1401,8 @@ public class MapleMap { MapleCharacter character = (MapleCharacter) mmo; if (character.isAlive()) { MapleStatEffect statEffect = mii.getItemEffect(buff); - character.getClient().announce(PacketCreator.showOwnBuffEffect(buff, 1)); - broadcastMessage(character, PacketCreator.showBuffeffect(character.getId(), buff, 1), false); + character.sendPacket(PacketCreator.showOwnBuffEffect(buff, 1)); + broadcastMessage(character, PacketCreator.showBuffEffect(character.getId(), buff, 1), false); statEffect.applyTo(character); } } @@ -1867,7 +1861,7 @@ public class MapleMap { getEventInstance().registerMonster(monster); } - spawnAndAddRangedMapObject(monster, c -> c.announce(PacketCreator.spawnMonster(monster, false))); + spawnAndAddRangedMapObject(monster, c -> c.sendPacket(PacketCreator.spawnMonster(monster, false))); monster.aggroUpdateController(); updateBossSpawn(monster); @@ -1954,7 +1948,7 @@ public class MapleMap { getEventInstance().registerMonster(monster); } - spawnAndAddRangedMapObject(monster, c -> c.announce(PacketCreator.spawnMonster(monster, true)), null); + spawnAndAddRangedMapObject(monster, c -> c.sendPacket(PacketCreator.spawnMonster(monster, true)), null); monster.aggroUpdateController(); updateBossSpawn(monster); @@ -2015,7 +2009,7 @@ public class MapleMap { monster.setPosition(spos); monster.setSpawnEffect(effect); - spawnAndAddRangedMapObject(monster, c -> c.announce(PacketCreator.spawnMonster(monster, true, effect))); + spawnAndAddRangedMapObject(monster, c -> c.sendPacket(PacketCreator.spawnMonster(monster, true, effect))); monster.aggroUpdateController(); updateBossSpawn(monster); @@ -2028,7 +2022,7 @@ public class MapleMap { public void spawnFakeMonster(final MapleMonster monster) { monster.setMap(this); monster.setFake(true); - spawnAndAddRangedMapObject(monster, c -> c.announce(PacketCreator.spawnFakeMonster(monster, 0))); + spawnAndAddRangedMapObject(monster, c -> c.sendPacket(PacketCreator.spawnFakeMonster(monster, 0))); spawnedMonstersOnMap.incrementAndGet(); addSelfDestructive(monster); @@ -2043,7 +2037,7 @@ public class MapleMap { public void spawnReactor(final MapleReactor reactor) { reactor.setMap(this); - spawnAndAddRangedMapObject(reactor, c -> c.announce(reactor.makeSpawnData())); + spawnAndAddRangedMapObject(reactor, c -> c.sendPacket(reactor.makeSpawnData())); } public void spawnDoor(final MapleDoorObject door) { @@ -2069,7 +2063,7 @@ public class MapleMap { public void spawnSummon(final MapleSummon summon) { spawnAndAddRangedMapObject(summon, c -> { if (summon != null) { - c.announce(PacketCreator.spawnSummon(summon, true)); + c.sendPacket(PacketCreator.spawnSummon(summon, true)); } }, null); } @@ -2148,7 +2142,7 @@ public class MapleMap { spawnAndAddRangedMapObject(mdrop, c -> { mdrop.lockItem(); try { - c.announce(PacketCreator.dropItemFromMapObject(c.getPlayer(), mdrop, dropper.getPosition(), droppos, (byte) 1)); + c.sendPacket(PacketCreator.dropItemFromMapObject(c.getPlayer(), mdrop, dropper.getPosition(), droppos, (byte) 1)); } finally { mdrop.unlockItem(); } @@ -2402,7 +2396,7 @@ public class MapleMap { if (mapid == 200090060) { // To Rien int travelTime = getWorldServer().getTransportationTime(1 * 60 * 1000); - chr.announce(PacketCreator.getClock(travelTime / 1000)); + chr.sendPacket(PacketCreator.getClock(travelTime / 1000)); TimerManager.getInstance().schedule(() -> { if (chr.getMapId() == 200090060) { chr.changeMap(140020300, 0); @@ -2410,7 +2404,7 @@ public class MapleMap { }, travelTime); } else if (mapid == 200090070) { // To Lith Harbor int travelTime = getWorldServer().getTransportationTime(1 * 60 * 1000); - chr.announce(PacketCreator.getClock(travelTime / 1000)); + chr.sendPacket(PacketCreator.getClock(travelTime / 1000)); TimerManager.getInstance().schedule(() -> { if (chr.getMapId() == 200090070) { chr.changeMap(104000000, 3); @@ -2418,7 +2412,7 @@ public class MapleMap { }, travelTime); } else if (mapid == 200090030) { // To Ereve (SkyFerry) int travelTime = getWorldServer().getTransportationTime(2 * 60 * 1000); - chr.announce(PacketCreator.getClock(travelTime / 1000)); + chr.sendPacket(PacketCreator.getClock(travelTime / 1000)); TimerManager.getInstance().schedule(() -> { if (chr.getMapId() == 200090030) { chr.changeMap(130000210, 0); @@ -2426,7 +2420,7 @@ public class MapleMap { }, travelTime); } else if (mapid == 200090031) { // To Victoria Island (SkyFerry) int travelTime = getWorldServer().getTransportationTime(2 * 60 * 1000); - chr.announce(PacketCreator.getClock(travelTime / 1000)); + chr.sendPacket(PacketCreator.getClock(travelTime / 1000)); TimerManager.getInstance().schedule(() -> { if (chr.getMapId() == 200090031) { chr.changeMap(101000400, 0); @@ -2434,7 +2428,7 @@ public class MapleMap { }, travelTime); } else if (mapid == 200090021) { // To Orbis (SkyFerry) int travelTime = getWorldServer().getTransportationTime(8 * 60 * 1000); - chr.announce(PacketCreator.getClock(travelTime / 1000)); + chr.sendPacket(PacketCreator.getClock(travelTime / 1000)); TimerManager.getInstance().schedule(() -> { if (chr.getMapId() == 200090021) { chr.changeMap(200000161, 0); @@ -2442,7 +2436,7 @@ public class MapleMap { }, travelTime); } else if (mapid == 200090020) { // To Ereve From Orbis (SkyFerry) int travelTime = getWorldServer().getTransportationTime(8 * 60 * 1000); - chr.announce(PacketCreator.getClock(travelTime / 1000)); + chr.sendPacket(PacketCreator.getClock(travelTime / 1000)); TimerManager.getInstance().schedule(() -> { if (chr.getMapId() == 200090020) { chr.changeMap(130000210, 0); @@ -2455,14 +2449,14 @@ public class MapleMap { } } else if (GameConstants.isAriantColiseumArena(mapid)) { int pqTimer = (10 * 60 * 1000); - chr.announce(PacketCreator.getClock(pqTimer / 1000)); + chr.sendPacket(PacketCreator.getClock(pqTimer / 1000)); } MaplePet[] pets = chr.getPets(); for (MaplePet pet : pets) { if (pet != null) { pet.setPos(getGroundBelow(chr.getPosition())); - chr.announce(PacketCreator.showPet(chr, pet, false, false)); + chr.sendPacket(PacketCreator.showPet(chr, pet, false, false)); } else { break; } @@ -2470,7 +2464,7 @@ public class MapleMap { chr.commitExcludedItems(); // thanks OishiiKawaiiDesu for noticing pet item ignore registry erasing upon changing maps if (chr.getMonsterCarnival() != null) { - chr.getClient().announce(PacketCreator.getClock(chr.getMonsterCarnival().getTimeLeftSeconds())); + chr.sendPacket(PacketCreator.getClock(chr.getMonsterCarnival().getTimeLeftSeconds())); if (isCPQMap()) { int team = -1; int oposition = -1; @@ -2482,7 +2476,7 @@ public class MapleMap { team = 1; oposition = 0; } - chr.getClient().announce(PacketCreator.startMonsterCarnival(chr, team, oposition)); + chr.sendPacket(PacketCreator.startMonsterCarnival(chr, team, oposition)); } } @@ -2490,7 +2484,7 @@ public class MapleMap { if (chr.getChalkboard() != null) { if (!GameConstants.isFreeMarketRoom(mapid)) { - chr.announce(PacketCreator.useChalkboard(chr, false)); // update player's chalkboard when changing maps found thanks to Vcoc + chr.sendPacket(PacketCreator.useChalkboard(chr, false)); // update player's chalkboard when changing maps found thanks to Vcoc } else { chr.setChalkboard(null); } @@ -2498,7 +2492,7 @@ public class MapleMap { if (chr.isHidden()) { broadcastGMSpawnPlayerMapObjectMessage(chr, chr, true); - chr.announce(PacketCreator.getGMEffect(0x10, (byte) 1)); + chr.sendPacket(PacketCreator.getGMEffect(0x10, (byte) 1)); List> dsstat = Collections.singletonList(new Pair<>(MapleBuffStat.DARKSIGHT, 0)); broadcastGMMessage(chr, PacketCreator.giveForeignBuff(chr.getId(), dsstat), false); @@ -2512,11 +2506,11 @@ public class MapleMap { chr.getMap().getPortal("join00").setPortalStatus(false); } if (hasForcedEquip()) { - chr.getClient().announce(PacketCreator.showForcedEquip(-1)); + chr.sendPacket(PacketCreator.showForcedEquip(-1)); } if (specialEquip()) { - chr.getClient().announce(PacketCreator.coconutScore(0, 0)); - chr.getClient().announce(PacketCreator.showForcedEquip(chr.getTeam())); + chr.sendPacket(PacketCreator.coconutScore(0, 0)); + chr.sendPacket(PacketCreator.showForcedEquip(chr.getTeam())); } objectWLock.lock(); try { @@ -2534,9 +2528,9 @@ public class MapleMap { dragon.setPosition(chr.getPosition()); this.addMapObject(dragon); if (chr.isHidden()) { - this.broadcastGMMessage(chr, PacketCreator.spawnDragon(dragon)); + this.broadcastGMPacket(chr, PacketCreator.spawnDragon(dragon)); } else { - this.broadcastMessage(chr, PacketCreator.spawnDragon(dragon)); + this.broadcastPacket(chr, PacketCreator.spawnDragon(dragon)); } } @@ -2550,34 +2544,34 @@ public class MapleMap { if (mapEffect != null) { mapEffect.sendStartData(chr.getClient()); } - chr.getClient().announce(PacketCreator.resetForcedStats()); + chr.sendPacket(PacketCreator.resetForcedStats()); if (mapid == 914000200 || mapid == 914000210 || mapid == 914000220) { - chr.getClient().announce(PacketCreator.aranGodlyStats()); + chr.sendPacket(PacketCreator.aranGodlyStats()); } if (chr.getEventInstance() != null && chr.getEventInstance().isTimerStarted()) { - chr.getClient().announce(PacketCreator.getClock((int) (chr.getEventInstance().getTimeLeft() / 1000))); + chr.sendPacket(PacketCreator.getClock((int) (chr.getEventInstance().getTimeLeft() / 1000))); } if (chr.getFitness() != null && chr.getFitness().isTimerStarted()) { - chr.getClient().announce(PacketCreator.getClock((int) (chr.getFitness().getTimeLeft() / 1000))); + chr.sendPacket(PacketCreator.getClock((int) (chr.getFitness().getTimeLeft() / 1000))); } if (chr.getOla() != null && chr.getOla().isTimerStarted()) { - chr.getClient().announce(PacketCreator.getClock((int) (chr.getOla().getTimeLeft() / 1000))); + chr.sendPacket(PacketCreator.getClock((int) (chr.getOla().getTimeLeft() / 1000))); } if (mapid == 109060000) { - chr.announce(PacketCreator.rollSnowBall(true, 0, null, null)); + chr.sendPacket(PacketCreator.rollSnowBall(true, 0, null, null)); } if (hasClock()) { Calendar cal = Calendar.getInstance(); - chr.getClient().announce((PacketCreator.getClockTime(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)))); + chr.sendPacket(PacketCreator.getClockTime(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND))); } if (hasBoat() > 0) { if (hasBoat() == 1) { - chr.getClient().announce((PacketCreator.boatPacket(true))); + chr.sendPacket((PacketCreator.boatPacket(true))); } else { - chr.getClient().announce(PacketCreator.boatPacket(false)); + chr.sendPacket(PacketCreator.boatPacket(false)); } } @@ -2715,18 +2709,18 @@ public class MapleMap { if (chr.getDragon() != null) { removeMapObject(chr.getDragon()); if (chr.isHidden()) { - this.broadcastGMMessage(chr, PacketCreator.removeDragon(chr.getId())); + this.broadcastGMPacket(chr, PacketCreator.removeDragon(chr.getId())); } else { - this.broadcastMessage(chr, PacketCreator.removeDragon(chr.getId())); + this.broadcastPacket(chr, PacketCreator.removeDragon(chr.getId())); } } } - public void broadcastMessage(final byte[] packet) { + public void broadcastMessage(Packet packet) { broadcastMessage(null, packet, Double.POSITIVE_INFINITY, null); } - public void broadcastGMMessage(final byte[] packet) { + public void broadcastGMMessage(Packet packet) { broadcastGMMessage(null, packet, Double.POSITIVE_INFINITY, null); } @@ -2737,7 +2731,7 @@ public class MapleMap { * @param packet * @param repeatToSource */ - public void broadcastMessage(MapleCharacter source, final byte[] packet, boolean repeatToSource) { + public void broadcastMessage(MapleCharacter source, Packet packet, boolean repeatToSource) { broadcastMessage(repeatToSource ? null : source, packet, Double.POSITIVE_INFINITY, source.getPosition()); } @@ -2749,7 +2743,7 @@ public class MapleMap { * @param repeatToSource * @param ranged */ - public void broadcastMessage(MapleCharacter source, final byte[] packet, boolean repeatToSource, boolean ranged) { + public void broadcastMessage(MapleCharacter source, Packet packet, boolean repeatToSource, boolean ranged) { broadcastMessage(repeatToSource ? null : source, packet, ranged ? getRangedDistance() : Double.POSITIVE_INFINITY, source.getPosition()); } @@ -2759,7 +2753,7 @@ public class MapleMap { * @param packet * @param rangedFrom */ - public void broadcastMessage(final byte[] packet, Point rangedFrom) { + public void broadcastMessage(Packet packet, Point rangedFrom) { broadcastMessage(null, packet, getRangedDistance(), rangedFrom); } @@ -2770,21 +2764,21 @@ public class MapleMap { * @param packet * @param rangedFrom */ - public void broadcastMessage(MapleCharacter source, final byte[] packet, Point rangedFrom) { + public void broadcastMessage(MapleCharacter source, Packet packet, Point rangedFrom) { broadcastMessage(source, packet, getRangedDistance(), rangedFrom); } - private void broadcastMessage(MapleCharacter source, final byte[] packet, double rangeSq, Point rangedFrom) { + private void broadcastMessage(MapleCharacter source, Packet packet, double rangeSq, Point rangedFrom) { chrRLock.lock(); try { for (MapleCharacter chr : characters) { if (chr != source) { if (rangeSq < Double.POSITIVE_INFINITY) { if (rangedFrom.distanceSq(chr.getPosition()) <= rangeSq) { - chr.getClient().announce(packet); + chr.sendPacket(packet); } } else { - chr.getClient().announce(packet); + chr.sendPacket(packet); } } } @@ -2808,15 +2802,15 @@ public class MapleMap { } } - public void broadcastBossHpMessage(MapleMonster mm, int bossHash, final byte[] packet) { + public void broadcastBossHpMessage(MapleMonster mm, int bossHash, Packet packet) { broadcastBossHpMessage(mm, bossHash, null, packet, Double.POSITIVE_INFINITY, null); } - public void broadcastBossHpMessage(MapleMonster mm, int bossHash, final byte[] packet, Point rangedFrom) { + public void broadcastBossHpMessage(MapleMonster mm, int bossHash, Packet packet, Point rangedFrom) { broadcastBossHpMessage(mm, bossHash, null, packet, getRangedDistance(), rangedFrom); } - private void broadcastBossHpMessage(MapleMonster mm, int bossHash, MapleCharacter source, final byte[] packet, double rangeSq, Point rangedFrom) { + private void broadcastBossHpMessage(MapleMonster mm, int bossHash, MapleCharacter source, Packet packet, double rangeSq, Point rangedFrom) { chrRLock.lock(); try { for (MapleCharacter chr : characters) { @@ -2847,14 +2841,14 @@ public class MapleMap { chrRLock.lock(); try { for (MapleCharacter chr : characters) { - final byte[] packet = PacketCreator.dropItemFromMapObject(chr, mdrop, dropperPos, dropPos, mod); + Packet packet = PacketCreator.dropItemFromMapObject(chr, mdrop, dropperPos, dropPos, mod); if (rangeSq < Double.POSITIVE_INFINITY) { if (rangedFrom.distanceSq(chr.getPosition()) <= rangeSq) { - chr.announce(packet); + chr.sendPacket(packet); } } else { - chr.announce(packet); + chr.sendPacket(packet); } } } finally { @@ -2877,14 +2871,14 @@ public class MapleMap { for (MapleCharacter chr : characters) { if (chr.isGM()) { if (chr != source) { - chr.announce(PacketCreator.spawnPlayerMapObject(chr.getClient(), player, enteringField)); + chr.sendPacket(PacketCreator.spawnPlayerMapObject(chr.getClient(), player, enteringField)); } } } } else { for (MapleCharacter chr : characters) { if (chr != source) { - chr.announce(PacketCreator.spawnPlayerMapObject(chr.getClient(), player, enteringField)); + chr.sendPacket(PacketCreator.spawnPlayerMapObject(chr.getClient(), player, enteringField)); } } } @@ -2898,7 +2892,7 @@ public class MapleMap { try { for (MapleCharacter chr : characters) { if (chr != source) { - chr.announce(PacketCreator.updateCharLook(chr.getClient(), player)); + chr.sendPacket(PacketCreator.updateCharLook(chr.getClient(), player)); } } } finally { @@ -3723,21 +3717,21 @@ public class MapleMap { return seats; } - public void broadcastGMMessage(MapleCharacter source, final byte[] packet, boolean repeatToSource) { + public void broadcastGMMessage(MapleCharacter source, Packet packet, boolean repeatToSource) { broadcastGMMessage(repeatToSource ? null : source, packet, Double.POSITIVE_INFINITY, source.getPosition()); } - private void broadcastGMMessage(MapleCharacter source, final byte[] packet, double rangeSq, Point rangedFrom) { + private void broadcastGMMessage(MapleCharacter source, Packet packet, double rangeSq, Point rangedFrom) { chrRLock.lock(); try { for (MapleCharacter chr : characters) { if (chr != source && chr.isGM()) { if (rangeSq < Double.POSITIVE_INFINITY) { if (rangedFrom.distanceSq(chr.getPosition()) <= rangeSq) { - chr.getClient().announce(packet); + chr.sendPacket(packet); } } else { - chr.getClient().announce(packet); + chr.sendPacket(packet); } } } @@ -3746,12 +3740,12 @@ public class MapleMap { } } - public void broadcastNONGMMessage(MapleCharacter source, final byte[] packet, boolean repeatToSource) { + public void broadcastNONGMMessage(MapleCharacter source, Packet packet, boolean repeatToSource) { chrRLock.lock(); try { for (MapleCharacter chr : characters) { if (chr != source && !chr.isGM()) { - chr.getClient().announce(packet); + chr.sendPacket(packet); } } } finally { diff --git a/src/main/java/server/maps/MapleMapEffect.java b/src/main/java/server/maps/MapleMapEffect.java index 0b304f806b..1ff5ff66b2 100644 --- a/src/main/java/server/maps/MapleMapEffect.java +++ b/src/main/java/server/maps/MapleMapEffect.java @@ -22,27 +22,28 @@ package server.maps; import client.MapleClient; +import net.packet.Packet; import tools.PacketCreator; public class MapleMapEffect { - private String msg; - private int itemId; - private boolean active = true; + private final String msg; + private final int itemId; + private final boolean active = true; public MapleMapEffect(String msg, int itemId) { this.msg = msg; this.itemId = itemId; } - public final byte[] makeDestroyData() { + public final Packet makeDestroyData() { return PacketCreator.removeMapEffect(); } - public final byte[] makeStartData() { + public final Packet makeStartData() { return PacketCreator.startMapEffect(msg, itemId, active); } public void sendStartData(MapleClient client) { - client.announce(makeStartData()); + client.sendPacket(makeStartData()); } } diff --git a/src/main/java/server/maps/MapleMapItem.java b/src/main/java/server/maps/MapleMapItem.java index 16f4c231d2..fc95654920 100644 --- a/src/main/java/server/maps/MapleMapItem.java +++ b/src/main/java/server/maps/MapleMapItem.java @@ -41,56 +41,58 @@ public class MapleMapItem extends AbstractMapleMapObject { private Lock itemLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MAP_ITEM); public MapleMapItem(Item item, Point position, MapleMapObject dropper, MapleCharacter owner, MapleClient ownerClient, byte type, boolean playerDrop) { - setPosition(position); - this.item = item; - this.dropper = dropper; + setPosition(position); + this.item = item; + this.dropper = dropper; this.character_ownerid = owner.getId(); this.party_ownerid = owner.getPartyId(); this.partyDrop = this.party_ownerid != -1; this.ownerClient = owner.getClient(); - this.meso = 0; - this.type = type; - this.playerDrop = playerDrop; + this.meso = 0; + this.type = type; + this.playerDrop = playerDrop; } public MapleMapItem(Item item, Point position, MapleMapObject dropper, MapleCharacter owner, MapleClient ownerClient, byte type, boolean playerDrop, int questid) { - setPosition(position); - this.item = item; - this.dropper = dropper; + setPosition(position); + this.item = item; + this.dropper = dropper; this.character_ownerid = owner.getId(); this.party_ownerid = owner.getPartyId(); this.partyDrop = this.party_ownerid != -1; - this.ownerClient = owner.getClient(); + this.ownerClient = owner.getClient(); this.meso = 0; - this.type = type; - this.playerDrop = playerDrop; - this.questid = questid; + this.type = type; + this.playerDrop = playerDrop; + this.questid = questid; } public MapleMapItem(int meso, Point position, MapleMapObject dropper, MapleCharacter owner, MapleClient ownerClient, byte type, boolean playerDrop) { - setPosition(position); - this.item = null; - this.dropper = dropper; - this.character_ownerid = owner.getId(); + setPosition(position); + this.item = null; + this.dropper = dropper; + this.character_ownerid = owner.getId(); this.party_ownerid = owner.getPartyId(); this.partyDrop = this.party_ownerid != -1; this.ownerClient = owner.getClient(); this.meso = meso; - this.type = type; - this.playerDrop = playerDrop; + this.type = type; + this.playerDrop = playerDrop; } public final Item getItem() { - return item; + return item; } public final int getQuest() { - return questid; + return questid; } public final int getItemId() { - if (meso > 0) return meso; - return item.getItemId(); + if (meso > 0) { + return meso; + } + return item.getItemId(); } public final MapleMapObject getDropper() { @@ -203,7 +205,7 @@ public class MapleMapItem extends AbstractMapleMapObject { if (chr.needQuestItem(questid, getItemId())) { this.lockItem(); try { - client.announce(PacketCreator.dropItemFromMapObject(chr, this, null, getPosition(), (byte) 2)); + client.sendPacket(PacketCreator.dropItemFromMapObject(chr, this, null, getPosition(), (byte) 2)); } finally { this.unlockItem(); } @@ -212,6 +214,6 @@ public class MapleMapItem extends AbstractMapleMapObject { @Override public void sendDestroyData(final MapleClient client) { - client.announce(PacketCreator.removeItemFromMap(getObjectId(), 1, 0)); + client.sendPacket(PacketCreator.removeItemFromMap(getObjectId(), 1, 0)); } } \ No newline at end of file diff --git a/src/main/java/server/maps/MapleMiniDungeon.java b/src/main/java/server/maps/MapleMiniDungeon.java index 2fb9ffa62c..6e3868077e 100644 --- a/src/main/java/server/maps/MapleMiniDungeon.java +++ b/src/main/java/server/maps/MapleMiniDungeon.java @@ -53,7 +53,7 @@ public class MapleMiniDungeon { public boolean registerPlayer(MapleCharacter chr) { int time = (int)((expireTime - System.currentTimeMillis()) / 1000); - if(time > 0) chr.getClient().announce(PacketCreator.getClock(time)); + if(time > 0) chr.sendPacket(PacketCreator.getClock(time)); lock.lock(); try { @@ -68,7 +68,7 @@ public class MapleMiniDungeon { } public boolean unregisterPlayer(MapleCharacter chr) { - chr.getClient().announce(PacketCreator.removeClock()); + chr.sendPacket(PacketCreator.removeClock()); lock.lock(); try { diff --git a/src/main/java/server/maps/MapleMiniGame.java b/src/main/java/server/maps/MapleMiniGame.java index 6427bea47c..e211bc1cdc 100644 --- a/src/main/java/server/maps/MapleMiniGame.java +++ b/src/main/java/server/maps/MapleMiniGame.java @@ -23,6 +23,7 @@ package server.maps; import client.MapleCharacter; import client.MapleClient; +import net.packet.Packet; import net.server.Server; import tools.PacketCreator; @@ -107,10 +108,10 @@ public class MapleMiniGame extends AbstractMapleMapObject { MapleCharacter owner = this.getOwner(); if (GameType == MiniGameType.OMOK) { - owner.announce(PacketCreator.getMiniGameNewVisitor(this, challenger, 1)); + owner.sendPacket(PacketCreator.getMiniGameNewVisitor(this, challenger, 1)); owner.getMap().broadcastMessage(PacketCreator.addOmokBox(owner, 2, 0)); } else if (GameType == MiniGameType.MATCH_CARD) { - owner.announce(PacketCreator.getMatchCardNewVisitor(this, challenger, 1)); + owner.sendPacket(PacketCreator.getMatchCardNewVisitor(this, challenger, 1)); owner.getMap().broadcastMessage(PacketCreator.addMatchCardBox(owner, 2, 0)); } } @@ -135,13 +136,13 @@ public class MapleMiniGame extends AbstractMapleMapObject { public void removeVisitor(boolean forceClose, MapleCharacter challenger) { if (visitor == challenger) { if (forceClose) { - visitor.announce(PacketCreator.getMiniGameClose(true, 4)); + visitor.sendPacket(PacketCreator.getMiniGameClose(true, 4)); } challenger.setMiniGame(null); visitor = null; - this.getOwner().getClient().announce(PacketCreator.getMiniGameRemoveVisitor()); + this.getOwner().sendPacket(PacketCreator.getMiniGameRemoveVisitor()); if (GameType == MiniGameType.OMOK) { this.getOwner().getMap().broadcastMessage(PacketCreator.addOmokBox(owner, 1, 0)); } else if (GameType == MiniGameType.MATCH_CARD) { @@ -154,16 +155,16 @@ public class MapleMiniGame extends AbstractMapleMapObject { return visitor == challenger; } - public void broadcastToOwner(final byte[] packet) { + public void broadcastToOwner(Packet packet) { MapleClient c = owner.getClient(); if (c != null) { - c.announce(packet); + c.sendPacket(packet); } } - public void broadcastToVisitor(final byte[] packet) { + public void broadcastToVisitor(Packet packet) { if (visitor != null) { - visitor.getClient().announce(packet); + visitor.sendPacket(packet); } } @@ -384,7 +385,7 @@ public class MapleMiniGame extends AbstractMapleMapObject { return loser; } - public void broadcast(final byte[] packet) { + public void broadcast(Packet packet) { broadcastToOwner(packet); broadcastToVisitor(packet); } @@ -394,11 +395,11 @@ public class MapleMiniGame extends AbstractMapleMapObject { } public void sendOmok(MapleClient c, int type) { - c.announce(PacketCreator.getMiniGame(c, this, isOwner(c.getPlayer()), type)); + c.sendPacket(PacketCreator.getMiniGame(c, this, isOwner(c.getPlayer()), type)); } public void sendMatchCard(MapleClient c, int type) { - c.announce(PacketCreator.getMatchCard(c, this, isOwner(c.getPlayer()), type)); + c.sendPacket(PacketCreator.getMatchCard(c, this, isOwner(c.getPlayer()), type)); } public MapleCharacter getOwner() { diff --git a/src/main/java/server/maps/MapleMist.java b/src/main/java/server/maps/MapleMist.java index 941175e16e..9531bfc25a 100644 --- a/src/main/java/server/maps/MapleMist.java +++ b/src/main/java/server/maps/MapleMist.java @@ -26,6 +26,7 @@ import client.MapleClient; import client.Skill; import client.SkillFactory; import constants.skills.*; +import net.packet.Packet; import server.MapleStatEffect; import server.life.MapleMonster; import server.life.MobSkill; @@ -128,18 +129,18 @@ public class MapleMist extends AbstractMapleMapObject { throw new UnsupportedOperationException(); } - public final byte[] makeDestroyData() { + public final Packet makeDestroyData() { return PacketCreator.removeMist(getObjectId()); } - public final byte[] makeSpawnData() { + public final Packet makeSpawnData() { if (owner != null) { return PacketCreator.spawnMist(getObjectId(), owner.getId(), getSourceSkill().getId(), owner.getSkillLevel(SkillFactory.getSkill(source.getSourceId())), this); } return PacketCreator.spawnMist(getObjectId(), mob.getId(), skill.getSkillId(), skill.getSkillLevel(), this); } - public final byte[] makeFakeSpawnData(int level) { + public final Packet makeFakeSpawnData(int level) { if (owner != null) { return PacketCreator.spawnMist(getObjectId(), owner.getId(), getSourceSkill().getId(), level, this); } @@ -148,12 +149,12 @@ public class MapleMist extends AbstractMapleMapObject { @Override public void sendSpawnData(MapleClient client) { - client.announce(makeSpawnData()); + client.sendPacket(makeSpawnData()); } @Override public void sendDestroyData(MapleClient client) { - client.announce(makeDestroyData()); + client.sendPacket(makeDestroyData()); } public boolean makeChanceResult() { diff --git a/src/main/java/server/maps/MaplePlayerShop.java b/src/main/java/server/maps/MaplePlayerShop.java index 81d912857e..9b6edd44a1 100644 --- a/src/main/java/server/maps/MaplePlayerShop.java +++ b/src/main/java/server/maps/MaplePlayerShop.java @@ -29,6 +29,7 @@ import client.inventory.MapleInventoryType; import client.inventory.manipulator.MapleInventoryManipulator; import client.inventory.manipulator.MapleKarmaManipulator; import net.opcodes.SendOpcode; +import net.packet.Packet; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import server.MapleTrade; @@ -169,13 +170,13 @@ public class MaplePlayerShop extends AbstractMapleMapObject { visitor.setSlot(-1); //absolutely cant remove player slot for late players without dc'ing them... heh for(int j = i; j < 2; j++) { - if(visitors[j] != null) owner.announce(PacketCreator.getPlayerShopRemoveVisitor(j + 1)); + if(visitors[j] != null) owner.sendPacket(PacketCreator.getPlayerShopRemoveVisitor(j + 1)); visitors[j] = visitors[j + 1]; if(visitors[j] != null) visitors[j].setSlot(j); } visitors[2] = null; for(int j = i; j < 2; j++) { - if(visitors[j] != null) owner.announce(PacketCreator.getPlayerShopNewVisitor(visitors[j], j + 1)); + if(visitors[j] != null) owner.sendPacket(PacketCreator.getPlayerShopNewVisitor(visitors[j], j + 1)); } this.broadcastRestoreToVisitors(); @@ -226,8 +227,8 @@ public class MaplePlayerShop extends AbstractMapleMapObject { iitem.setQuantity((short) (shopItem.getItem().getQuantity() * shopItem.getBundles())); if (!MapleInventory.checkSpot(chr, iitem)) { - chr.announce(PacketCreator.serverNotice(1, "Have a slot available on your inventory to claim back the item.")); - chr.announce(PacketCreator.enableActions()); + chr.sendPacket(PacketCreator.serverNotice(1, "Have a slot available on your inventory to claim back the item.")); + chr.sendPacket(PacketCreator.enableActions()); return; } @@ -235,7 +236,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } removeFromSlot(slot); - chr.announce(PacketCreator.getPlayerShopItemUpdate(this)); + chr.sendPacket(PacketCreator.getPlayerShopItemUpdate(this)); } } } @@ -254,10 +255,10 @@ public class MaplePlayerShop extends AbstractMapleMapObject { newItem.setQuantity((short) ((pItem.getItem().getQuantity() * quantity))); if (quantity < 1 || !pItem.isExist() || pItem.getBundles() < quantity) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } else if (newItem.getInventoryType().equals(MapleInventoryType.EQUIP) && newItem.getQuantity() > 1) { - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } @@ -270,7 +271,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { if (c.getPlayer().getMeso() >= price) { if (!owner.canHoldMeso(price)) { // thanks Rohenn for noticing owner hold check misplaced c.getPlayer().dropMessage(1, "Transaction failed since the shop owner can't hold any more mesos."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } @@ -280,7 +281,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { owner.gainMeso(price, true); SoldItem soldItem = new SoldItem(c.getPlayer().getName(), pItem.getItem().getItemId(), quantity, price); - owner.announce(PacketCreator.getPlayerShopOwnerUpdate(soldItem, item)); + owner.sendPacket(PacketCreator.getPlayerShopOwnerUpdate(soldItem, item)); synchronized (sold) { sold.add(soldItem); @@ -298,12 +299,12 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } } else { c.getPlayer().dropMessage(1, "Your inventory is full. Please clear a slot before buying this item."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } } else { c.getPlayer().dropMessage(1, "You don't have enough mesos to purchase this item."); - c.announce(PacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } @@ -317,12 +318,12 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } } - public void broadcastToVisitors(final byte[] packet) { + public void broadcastToVisitors(Packet packet) { visitorLock.lock(); try { for (int i = 0; i < 3; i++) { if (visitors[i] != null) { - visitors[i].getClient().announce(packet); + visitors[i].sendPacket(packet); } } } finally { @@ -335,13 +336,13 @@ public class MaplePlayerShop extends AbstractMapleMapObject { try { for (int i = 0; i < 3; i++) { if (visitors[i] != null) { - visitors[i].getClient().announce(PacketCreator.getPlayerShopRemoveVisitor(i + 1)); + visitors[i].sendPacket(PacketCreator.getPlayerShopRemoveVisitor(i + 1)); } } for (int i = 0; i < 3; i++) { if (visitors[i] != null) { - visitors[i].getClient().announce(PacketCreator.getPlayerShop(this, false)); + visitors[i].sendPacket(PacketCreator.getPlayerShop(this, false)); } } @@ -359,7 +360,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { try { for (int i = 0; i < 3; i++) { if (visitors[i] != null) { - visitors[i].getClient().announce(PacketCreator.shopErrorMessage(10, 1)); + visitors[i].sendPacket(PacketCreator.shopErrorMessage(10, 1)); visitorList.add(visitors[i]); } } @@ -385,10 +386,10 @@ public class MaplePlayerShop extends AbstractMapleMapObject { return mplew.getPacket(); } - public void broadcast(final byte[] packet) { + public void broadcast(Packet packet) { MapleClient client = owner.getClient(); if (client != null) { - client.announce(packet); + client.sendPacket(packet); } broadcastToVisitors(packet); } @@ -447,7 +448,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { public void sendShop(MapleClient c) { visitorLock.lock(); try { - c.announce(PacketCreator.getPlayerShop(this, isOwner(c.getPlayer()))); + c.sendPacket(PacketCreator.getPlayerShop(this, isOwner(c.getPlayer()))); } finally { visitorLock.unlock(); } @@ -512,7 +513,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } if(target != null) { - target.getClient().announce(PacketCreator.shopErrorMessage(5, 1)); + target.sendPacket(PacketCreator.shopErrorMessage(5, 1)); removeVisitor(target); } } @@ -572,12 +573,12 @@ public class MaplePlayerShop extends AbstractMapleMapObject { @Override public void sendDestroyData(MapleClient client) { - client.announce(PacketCreator.removePlayerShopBox(this)); + client.sendPacket(PacketCreator.removePlayerShopBox(this)); } @Override public void sendSpawnData(MapleClient client) { - client.announce(PacketCreator.updatePlayerShopBox(this)); + client.sendPacket(PacketCreator.updatePlayerShopBox(this)); } @Override diff --git a/src/main/java/server/maps/MapleReactor.java b/src/main/java/server/maps/MapleReactor.java index d821ded0f8..99e9098584 100644 --- a/src/main/java/server/maps/MapleReactor.java +++ b/src/main/java/server/maps/MapleReactor.java @@ -23,6 +23,7 @@ package server.maps; import client.MapleClient; import config.YamlConfig; +import net.packet.Packet; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import net.server.services.task.channel.OverallService; @@ -166,21 +167,21 @@ public class MapleReactor extends AbstractMapleMapObject { @Override public void sendDestroyData(MapleClient client) { - client.announce(makeDestroyData()); + client.sendPacket(makeDestroyData()); } - public final byte[] makeDestroyData() { + public final Packet makeDestroyData() { return PacketCreator.destroyReactor(this); } @Override public void sendSpawnData(MapleClient client) { if (this.isAlive()) { - client.announce(makeSpawnData()); + client.sendPacket(makeSpawnData()); } } - public final byte[] makeSpawnData() { + public final Packet makeSpawnData() { return PacketCreator.spawnReactor(this); } diff --git a/src/main/java/server/maps/MapleSummon.java b/src/main/java/server/maps/MapleSummon.java index 714235f838..ec1f7de170 100644 --- a/src/main/java/server/maps/MapleSummon.java +++ b/src/main/java/server/maps/MapleSummon.java @@ -50,12 +50,12 @@ public class MapleSummon extends AbstractAnimatedMapleMapObject { @Override public void sendSpawnData(MapleClient client) { - client.announce(PacketCreator.spawnSummon(this, false)); + client.sendPacket(PacketCreator.spawnSummon(this, false)); } @Override public void sendDestroyData(MapleClient client) { - client.announce(PacketCreator.removeSummon(this, true)); + client.sendPacket(PacketCreator.removeSummon(this, true)); } public MapleCharacter getOwner() { diff --git a/src/main/java/server/minigame/MapleRockPaperScissor.java b/src/main/java/server/minigame/MapleRockPaperScissor.java index 86b5b183b4..5cf1d19e84 100644 --- a/src/main/java/server/minigame/MapleRockPaperScissor.java +++ b/src/main/java/server/minigame/MapleRockPaperScissor.java @@ -18,7 +18,7 @@ public class MapleRockPaperScissor{ private boolean win = false; public MapleRockPaperScissor(final MapleClient c, final byte mode){ - c.announce(PacketCreator.rpsMode((byte) (9 + mode))); + c.sendPacket(PacketCreator.rpsMode((byte) (9 + mode))); if(mode == 0){ c.getPlayer().gainMeso(-1000, true, true, true); } @@ -28,14 +28,14 @@ public class MapleRockPaperScissor{ if(ableAnswer && !win && answer >= 0 && answer <= 2){ final int response = Randomizer.nextInt(3); if(response == answer){ - c.announce(PacketCreator.rpsSelection((byte) response, (byte) round)); + c.sendPacket(PacketCreator.rpsSelection((byte) response, (byte) round)); // dont do anything. they can still answer once a draw }else if((answer == 0 && response == 2) || (answer == 1 && response == 0) || (answer == 2 && response == 1)){ // they win - c.announce(PacketCreator.rpsSelection((byte) response, (byte) (round + 1))); + c.sendPacket(PacketCreator.rpsSelection((byte) response, (byte) (round + 1))); ableAnswer = false; win = true; }else{ // they lose - c.announce(PacketCreator.rpsSelection((byte) response, (byte) -1)); + c.sendPacket(PacketCreator.rpsSelection((byte) response, (byte) -1)); ableAnswer = false; } return true; @@ -47,7 +47,7 @@ public class MapleRockPaperScissor{ public final boolean timeOut(final MapleClient c){ if(ableAnswer && !win){ ableAnswer = false; - c.announce(PacketCreator.rpsMode((byte) 0x0A)); + c.sendPacket(PacketCreator.rpsMode((byte) 0x0A)); return true; } reward(c); @@ -60,7 +60,7 @@ public class MapleRockPaperScissor{ if(round < 10){ win = false; ableAnswer = true; - c.announce(PacketCreator.rpsMode((byte) 0x0C)); + c.sendPacket(PacketCreator.rpsMode((byte) 0x0C)); return true; } else { round = 10; @@ -79,6 +79,6 @@ public class MapleRockPaperScissor{ public final void dispose(final MapleClient c){ reward(c); - c.announce(PacketCreator.rpsMode((byte) 0x0D)); + c.sendPacket(PacketCreator.rpsMode((byte) 0x0D)); } } diff --git a/src/main/java/server/movement/AbsoluteLifeMovement.java b/src/main/java/server/movement/AbsoluteLifeMovement.java index ba4273e8b8..219b0aea8a 100644 --- a/src/main/java/server/movement/AbsoluteLifeMovement.java +++ b/src/main/java/server/movement/AbsoluteLifeMovement.java @@ -21,8 +21,9 @@ */ package server.movement; -import java.awt.Point; -import tools.data.output.LittleEndianWriter; +import net.packet.OutPacket; + +import java.awt.*; public class AbsoluteLifeMovement extends AbstractLifeMovement { private Point pixelsPerSecond; @@ -49,14 +50,12 @@ public class AbsoluteLifeMovement extends AbstractLifeMovement { } @Override - public void serialize(LittleEndianWriter lew) { - lew.write(getType()); - lew.writeShort(getPosition().x); - lew.writeShort(getPosition().y); - lew.writeShort(pixelsPerSecond.x); - lew.writeShort(pixelsPerSecond.y); - lew.writeShort(fh); - lew.write(getNewstate()); - lew.writeShort(getDuration()); + public void serialize(OutPacket p) { + p.writeByte(getType()); + p.writePos(getPosition()); + p.writePos(pixelsPerSecond); + p.writeShort(fh); + p.writeByte(getNewstate()); + p.writeShort(getDuration()); } } diff --git a/src/main/java/server/movement/ChairMovement.java b/src/main/java/server/movement/ChairMovement.java index 3e8eb1b053..d561fb7cf8 100644 --- a/src/main/java/server/movement/ChairMovement.java +++ b/src/main/java/server/movement/ChairMovement.java @@ -21,8 +21,9 @@ */ package server.movement; -import java.awt.Point; -import tools.data.output.LittleEndianWriter; +import net.packet.OutPacket; + +import java.awt.*; public class ChairMovement extends AbstractLifeMovement { private int fh; @@ -40,13 +41,12 @@ public class ChairMovement extends AbstractLifeMovement { } @Override - public void serialize(LittleEndianWriter lew) { - lew.write(getType()); - lew.writeShort(getPosition().x); - lew.writeShort(getPosition().y); - lew.writeShort(fh); - lew.write(getNewstate()); - lew.writeShort(getDuration()); + public void serialize(OutPacket p) { + p.writeByte(getType()); + p.writePos(getPosition()); + p.writeShort(fh); + p.writeByte(getNewstate()); + p.writeShort(getDuration()); } } diff --git a/src/main/java/server/movement/ChangeEquip.java b/src/main/java/server/movement/ChangeEquip.java index b9708b7cb9..32c7fc0dd8 100644 --- a/src/main/java/server/movement/ChangeEquip.java +++ b/src/main/java/server/movement/ChangeEquip.java @@ -21,20 +21,21 @@ */ package server.movement; -import java.awt.Point; -import tools.data.output.LittleEndianWriter; +import net.packet.OutPacket; + +import java.awt.*; public class ChangeEquip implements LifeMovementFragment { - private int wui; + private final int wui; public ChangeEquip(int wui) { this.wui = wui; } @Override - public void serialize(LittleEndianWriter lew) { - lew.write(10); - lew.write(wui); + public void serialize(OutPacket p) { + p.writeByte(10); + p.writeByte(wui); } @Override diff --git a/src/main/java/server/movement/JumpDownMovement.java b/src/main/java/server/movement/JumpDownMovement.java index b60f6c19d4..41fe96eaa9 100644 --- a/src/main/java/server/movement/JumpDownMovement.java +++ b/src/main/java/server/movement/JumpDownMovement.java @@ -21,8 +21,9 @@ */ package server.movement; -import java.awt.Point; -import tools.data.output.LittleEndianWriter; +import net.packet.OutPacket; + +import java.awt.*; public class JumpDownMovement extends AbstractLifeMovement { private Point pixelsPerSecond; @@ -58,15 +59,13 @@ public class JumpDownMovement extends AbstractLifeMovement { } @Override - public void serialize(LittleEndianWriter lew) { - lew.write(getType()); - lew.writeShort(getPosition().x); - lew.writeShort(getPosition().y); - lew.writeShort(pixelsPerSecond.x); - lew.writeShort(pixelsPerSecond.y); - lew.writeShort(fh); - lew.writeShort(originFh); - lew.write(getNewstate()); - lew.writeShort(getDuration()); + public void serialize(OutPacket p) { + p.writeByte(getType()); + p.writePos(getPosition()); + p.writePos(pixelsPerSecond); + p.writeShort(fh); + p.writeShort(originFh); + p.writeByte(getNewstate()); + p.writeShort(getDuration()); } } diff --git a/src/main/java/server/movement/LifeMovementFragment.java b/src/main/java/server/movement/LifeMovementFragment.java index cded87b7c8..12f57c3d09 100644 --- a/src/main/java/server/movement/LifeMovementFragment.java +++ b/src/main/java/server/movement/LifeMovementFragment.java @@ -21,10 +21,11 @@ */ package server.movement; -import java.awt.Point; -import tools.data.output.LittleEndianWriter; +import net.packet.OutPacket; + +import java.awt.*; public interface LifeMovementFragment { - void serialize(LittleEndianWriter lew); + void serialize(OutPacket p); Point getPosition(); } diff --git a/src/main/java/server/movement/RelativeLifeMovement.java b/src/main/java/server/movement/RelativeLifeMovement.java index 64283e647f..0e5e55cb01 100644 --- a/src/main/java/server/movement/RelativeLifeMovement.java +++ b/src/main/java/server/movement/RelativeLifeMovement.java @@ -21,8 +21,9 @@ */ package server.movement; -import java.awt.Point; -import tools.data.output.LittleEndianWriter; +import net.packet.OutPacket; + +import java.awt.*; public class RelativeLifeMovement extends AbstractLifeMovement { public RelativeLifeMovement(int type, Point position, int duration, int newstate) { @@ -30,11 +31,10 @@ public class RelativeLifeMovement extends AbstractLifeMovement { } @Override - public void serialize(LittleEndianWriter lew) { - lew.write(getType()); - lew.writeShort(getPosition().x); - lew.writeShort(getPosition().y); - lew.write(getNewstate()); - lew.writeShort(getDuration()); + public void serialize(OutPacket p) { + p.writeByte(getType()); + p.writePos(getPosition()); + p.writeByte(getNewstate()); + p.writeShort(getDuration()); } } diff --git a/src/main/java/server/movement/TeleportMovement.java b/src/main/java/server/movement/TeleportMovement.java index 2d70d72cf1..5be0903f72 100644 --- a/src/main/java/server/movement/TeleportMovement.java +++ b/src/main/java/server/movement/TeleportMovement.java @@ -20,8 +20,9 @@ */ package server.movement; -import java.awt.Point; -import tools.data.output.LittleEndianWriter; +import net.packet.OutPacket; + +import java.awt.*; public class TeleportMovement extends AbsoluteLifeMovement { @@ -30,12 +31,10 @@ public class TeleportMovement extends AbsoluteLifeMovement { } @Override - public void serialize(LittleEndianWriter lew) { - lew.write(getType()); - lew.writeShort(getPosition().x); - lew.writeShort(getPosition().y); - lew.writeShort(getPixelsPerSecond().x); - lew.writeShort(getPixelsPerSecond().y); - lew.write(getNewstate()); + public void serialize(OutPacket p) { + p.writeByte(getType()); + p.writePos(getPosition()); + p.writePos(getPixelsPerSecond()); + p.writeByte(getNewstate()); } } diff --git a/src/main/java/server/partyquest/AriantColiseum.java b/src/main/java/server/partyquest/AriantColiseum.java index 735a2d2ad1..9f0a385906 100644 --- a/src/main/java/server/partyquest/AriantColiseum.java +++ b/src/main/java/server/partyquest/AriantColiseum.java @@ -76,7 +76,7 @@ public class AriantColiseum { } for (MapleCharacter mc : players) { - mc.announce(PacketCreator.updateAriantPQRanking(score)); + mc.sendPacket(PacketCreator.updateAriantPQRanking(score)); } setAriantScoreBoard(TimerManager.getInstance().schedule(() -> showArenaResults(), pqTimerBoard)); @@ -144,7 +144,7 @@ public class AriantColiseum { private void broadcastAriantScoreUpdate() { if (scoreDirty) { for (MapleCharacter chr : score.keySet()) { - chr.announce(PacketCreator.updateAriantPQRanking(score)); + chr.sendPacket(PacketCreator.updateAriantPQRanking(score)); } scoreDirty = false; } diff --git a/src/main/java/server/partyquest/MonsterCarnival.java b/src/main/java/server/partyquest/MonsterCarnival.java index 3151a47d9a..f31e506a40 100644 --- a/src/main/java/server/partyquest/MonsterCarnival.java +++ b/src/main/java/server/partyquest/MonsterCarnival.java @@ -374,12 +374,12 @@ public class MonsterCarnival { MapleCharacter mc = mpc.getPlayer(); if (mc != null) { if (redWin) { - mc.getClient().announce(PacketCreator.showEffect("quest/carnival/win")); - mc.getClient().announce(PacketCreator.playSound("MobCarnival/Win")); + mc.sendPacket(PacketCreator.showEffect("quest/carnival/win")); + mc.sendPacket(PacketCreator.playSound("MobCarnival/Win")); mc.dispelDebuffs(); } else { - mc.getClient().announce(PacketCreator.showEffect("quest/carnival/lose")); - mc.getClient().announce(PacketCreator.playSound("MobCarnival/Lose")); + mc.sendPacket(PacketCreator.showEffect("quest/carnival/lose")); + mc.sendPacket(PacketCreator.playSound("MobCarnival/Lose")); mc.dispelDebuffs(); } } @@ -388,12 +388,12 @@ public class MonsterCarnival { MapleCharacter mc = mpc.getPlayer(); if (mc != null) { if (!redWin) { - mc.getClient().announce(PacketCreator.showEffect("quest/carnival/win")); - mc.getClient().announce(PacketCreator.playSound("MobCarnival/Win")); + mc.sendPacket(PacketCreator.showEffect("quest/carnival/win")); + mc.sendPacket(PacketCreator.playSound("MobCarnival/Win")); mc.dispelDebuffs(); } else { - mc.getClient().announce(PacketCreator.showEffect("quest/carnival/lose")); - mc.getClient().announce(PacketCreator.playSound("MobCarnival/Lose")); + mc.sendPacket(PacketCreator.showEffect("quest/carnival/lose")); + mc.sendPacket(PacketCreator.playSound("MobCarnival/Lose")); mc.dispelDebuffs(); } } diff --git a/src/main/java/server/partyquest/MonsterCarnivalParty.java b/src/main/java/server/partyquest/MonsterCarnivalParty.java index 7058163bc2..c76294f3e6 100644 --- a/src/main/java/server/partyquest/MonsterCarnivalParty.java +++ b/src/main/java/server/partyquest/MonsterCarnivalParty.java @@ -112,7 +112,7 @@ public class MonsterCarnivalParty { final String effect = winner ? "quest/carnival/win" : "quest/carnival/lose"; for (final MapleCharacter chr : members) { - chr.announce(PacketCreator.showEffect(effect)); + chr.sendPacket(PacketCreator.showEffect(effect)); } } diff --git a/src/main/java/server/partyquest/Pyramid.java b/src/main/java/server/partyquest/Pyramid.java index ff737cb9d4..9fa46ac2a6 100644 --- a/src/main/java/server/partyquest/Pyramid.java +++ b/src/main/java/server/partyquest/Pyramid.java @@ -151,8 +151,8 @@ public class Pyramid extends PartyQuest { public void broadcastInfo(String info, int amount) { for (MapleCharacter chr : getParticipants()) { - chr.announce(PacketCreator.getEnergy("massacre_" + info, amount)); - chr.announce(PacketCreator.pyramidGauge(count)); + chr.sendPacket(PacketCreator.getEnergy("massacre_" + info, amount)); + chr.sendPacket(PacketCreator.pyramidGauge(count)); } } @@ -177,7 +177,7 @@ public class Pyramid extends PartyQuest { skill++; MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); for (MapleCharacter chr : getParticipants()) { - chr.announce(PacketCreator.getEnergy("massacre_skill", skill)); + chr.sendPacket(PacketCreator.getEnergy("massacre_skill", skill)); ii.getItemEffect(2022586).applyTo(chr); } } else if (buffcount == 2 && total >= 1000) { @@ -185,7 +185,7 @@ public class Pyramid extends PartyQuest { skill++; MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); for (MapleCharacter chr : getParticipants()) { - chr.announce(PacketCreator.getEnergy("massacre_skill", skill)); + chr.sendPacket(PacketCreator.getEnergy("massacre_skill", skill)); ii.getItemEffect(2022587).applyTo(chr); } } else if (buffcount == 3 && total >= 1500) { @@ -196,7 +196,7 @@ public class Pyramid extends PartyQuest { skill++; MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); for (MapleCharacter chr : getParticipants()) { - chr.announce(PacketCreator.getEnergy("massacre_skill", skill)); + chr.sendPacket(PacketCreator.getEnergy("massacre_skill", skill)); ii.getItemEffect(2022588).applyTo(chr); } } else if (buffcount == 5 && total >= 2500) { @@ -229,7 +229,7 @@ public class Pyramid extends PartyQuest { exp += ((kill * 2) + (cool * 10)); } - chr.announce(PacketCreator.pyramidScore(rank, exp)); + chr.sendPacket(PacketCreator.pyramidScore(rank, exp)); chr.gainExp(exp, true, true); } } diff --git a/src/main/java/server/quest/MapleQuest.java b/src/main/java/server/quest/MapleQuest.java index 6dbacf6e2c..0a1fa61b09 100644 --- a/src/main/java/server/quest/MapleQuest.java +++ b/src/main/java/server/quest/MapleQuest.java @@ -315,7 +315,7 @@ public class MapleQuest { return false; } if (timeLimit > 0) { - chr.announce(PacketCreator.removeQuestTimeLimit(id)); + chr.sendPacket(PacketCreator.removeQuestTimeLimit(id)); } MapleQuestStatus newStatus = new MapleQuestStatus(this, MapleQuestStatus.Status.NOT_STARTED); newStatus.setForfeited(chr.getQuest(this).getForfeited() + 1); @@ -361,7 +361,7 @@ public class MapleQuest { public boolean forceComplete(MapleCharacter chr, int npc) { if (timeLimit > 0) { - chr.announce(PacketCreator.removeQuestTimeLimit(id)); + chr.sendPacket(PacketCreator.removeQuestTimeLimit(id)); } MapleQuestStatus newStatus = new MapleQuestStatus(this, MapleQuestStatus.Status.COMPLETED, npc); @@ -370,7 +370,7 @@ public class MapleQuest { newStatus.setCompletionTime(System.currentTimeMillis()); chr.updateQuestStatus(newStatus); - chr.announce(PacketCreator.showSpecialEffect(9)); // Quest completion + chr.sendPacket(PacketCreator.showSpecialEffect(9)); // Quest completion chr.getMap().broadcastMessage(chr, PacketCreator.showForeignEffect(chr.getId(), 9), false); //use 9 instead of 12 for both return true; } diff --git a/src/main/java/server/quest/actions/ItemAction.java b/src/main/java/server/quest/actions/ItemAction.java index 3cb5f02afc..84757d42bc 100644 --- a/src/main/java/server/quest/actions/ItemAction.java +++ b/src/main/java/server/quest/actions/ItemAction.java @@ -143,14 +143,14 @@ public class ItemAction extends MapleQuestAction { } MapleInventoryManipulator.removeById(chr.getClient(), type, itemid, quantity, true, false); - chr.announce(PacketCreator.getShowItemGain(itemid, (short) count, true)); + chr.sendPacket(PacketCreator.getShowItemGain(itemid, (short) count, true)); } for(ItemData iEntry: giveItem) { int itemid = iEntry.getId(), count = iEntry.getCount(), period = iEntry.getPeriod(); // thanks Vcoc for noticing quest milestone item not getting removed from inventory after a while MapleInventoryManipulator.addById(chr.getClient(), itemid, (short) count, "", -1, period > 0 ? (System.currentTimeMillis() + period * 60 * 1000) : -1); - chr.announce(PacketCreator.getShowItemGain(itemid, (short) count, true)); + chr.sendPacket(PacketCreator.getShowItemGain(itemid, (short) count, true)); } } diff --git a/src/main/java/server/quest/actions/NextQuestAction.java b/src/main/java/server/quest/actions/NextQuestAction.java index b4598e9c4c..dffece4878 100644 --- a/src/main/java/server/quest/actions/NextQuestAction.java +++ b/src/main/java/server/quest/actions/NextQuestAction.java @@ -50,6 +50,6 @@ public class NextQuestAction extends MapleQuestAction { @Override public void run(MapleCharacter chr, Integer extSelection) { MapleQuestStatus status = chr.getQuest(MapleQuest.getInstance(questID)); - chr.announce(PacketCreator.updateQuestFinish((short) questID, status.getNpc(), (short) nextQuest)); + chr.sendPacket(PacketCreator.updateQuestFinish((short) questID, status.getNpc(), (short) nextQuest)); } } diff --git a/src/main/java/tools/PacketCreator.java b/src/main/java/tools/PacketCreator.java index e3e0430b9f..fa0d8fe580 100644 --- a/src/main/java/tools/PacketCreator.java +++ b/src/main/java/tools/PacketCreator.java @@ -38,6 +38,7 @@ import constants.skills.Corsair; import constants.skills.ThunderBreaker; import net.encryption.InitializationVector; import net.opcodes.SendOpcode; +import net.packet.ByteBufOutPacket; import net.packet.OutPacket; import net.packet.Packet; import net.server.PlayerCoolDownValueHolder; @@ -48,7 +49,6 @@ import net.server.channel.handlers.SummonDamageHandler.SummonAttackEntry; import net.server.channel.handlers.WhisperHandler; import net.server.guild.MapleAlliance; import net.server.guild.MapleGuild; -import net.server.guild.MapleGuildCharacter; import net.server.guild.MapleGuildSummary; import net.server.world.MapleParty; import net.server.world.MaplePartyCharacter; @@ -67,8 +67,6 @@ import server.maps.*; import server.maps.MapleMiniGame.MiniGameResult; import server.movement.LifeMovementFragment; import tools.data.input.SeekableLittleEndianAccessor; -import tools.data.output.LittleEndianWriter; -import tools.data.output.MaplePacketLittleEndianWriter; import java.awt.*; import java.net.InetAddress; @@ -90,7 +88,7 @@ public class PacketCreator { public final static long ZERO_TIME = 94354848000000000L;//00 40 E0 FD 3B 37 4F 01 private final static long PERMANENT = 150841440000000000L; // 00 C0 9B 90 7D E5 17 02 - private static long getTime(long utcTimestamp) { + public static long getTime(long utcTimestamp) { if (utcTimestamp < 0 && utcTimestamp >= -3) { if (utcTimestamp == -1) { return DEFAULT_TIME; //high number ll @@ -104,16 +102,15 @@ public class PacketCreator { return utcTimestamp * 10000 + FT_UT_OFFSET; } - public static byte[] showHpHealed(int cid, int amount) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(0x0A); //Type - mplew.write(amount); - return mplew.getPacket(); + public static Packet showHpHealed(int cid, int amount) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_FOREIGN_EFFECT); + p.writeInt(cid); + p.writeByte(0x0A); //Type + p.writeByte(amount); + return p; } - private static void addRemainingSkillInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + private static void addRemainingSkillInfo(final OutPacket p, MapleCharacter chr) { int[] remainingSp = chr.getRemainingSps(); int effectiveLength = 0; for (int j : remainingSp) { @@ -122,133 +119,133 @@ public class PacketCreator { } } - mplew.write(effectiveLength); + p.writeByte(effectiveLength); for (int i = 0; i < remainingSp.length; i++) { if (remainingSp[i] > 0) { - mplew.write(i + 1); - mplew.write(remainingSp[i]); + p.writeByte(i + 1); + p.writeByte(remainingSp[i]); } } } - private static void addCharStats(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.writeInt(chr.getId()); // character id - mplew.writeAsciiString(StringUtil.getRightPaddedStr(chr.getName(), '\0', 13)); - mplew.write(chr.getGender()); // gender (0 = male, 1 = female) - mplew.write(chr.getSkinColor().getId()); // skin color - mplew.writeInt(chr.getFace()); // face - mplew.writeInt(chr.getHair()); // hair + private static void addCharStats(OutPacket p, MapleCharacter chr) { + p.writeInt(chr.getId()); // character id + p.writeFixedString(StringUtil.getRightPaddedStr(chr.getName(), '\0', 13)); + p.writeByte(chr.getGender()); // gender (0 = male, 1 = female) + p.writeByte(chr.getSkinColor().getId()); // skin color + p.writeInt(chr.getFace()); // face + p.writeInt(chr.getHair()); // hair for (int i = 0; i < 3; i++) { MaplePet pet = chr.getPet(i); if (pet != null) //Checked GMS.. and your pets stay when going into the cash shop. { - mplew.writeLong(pet.getUniqueId()); + p.writeLong(pet.getUniqueId()); } else { - mplew.writeLong(0); + p.writeLong(0); } } - mplew.write(chr.getLevel()); // level - mplew.writeShort(chr.getJob().getId()); // job - mplew.writeShort(chr.getStr()); // str - mplew.writeShort(chr.getDex()); // dex - mplew.writeShort(chr.getInt()); // int - mplew.writeShort(chr.getLuk()); // luk - mplew.writeShort(chr.getHp()); // hp (?) - mplew.writeShort(chr.getClientMaxHp()); // maxhp - mplew.writeShort(chr.getMp()); // mp (?) - mplew.writeShort(chr.getClientMaxMp()); // maxmp - mplew.writeShort(chr.getRemainingAp()); // remaining ap + p.writeByte(chr.getLevel()); // level + p.writeShort(chr.getJob().getId()); // job + p.writeShort(chr.getStr()); // str + p.writeShort(chr.getDex()); // dex + p.writeShort(chr.getInt()); // int + p.writeShort(chr.getLuk()); // luk + p.writeShort(chr.getHp()); // hp (?) + p.writeShort(chr.getClientMaxHp()); // maxhp + p.writeShort(chr.getMp()); // mp (?) + p.writeShort(chr.getClientMaxMp()); // maxmp + p.writeShort(chr.getRemainingAp()); // remaining ap if (GameConstants.hasSPTable(chr.getJob())) { - addRemainingSkillInfo(mplew, chr); + addRemainingSkillInfo(p, chr); } else { - mplew.writeShort(chr.getRemainingSp()); // remaining sp + p.writeShort(chr.getRemainingSp()); // remaining sp } - mplew.writeInt(chr.getExp()); // current exp - mplew.writeShort(chr.getFame()); // fame - mplew.writeInt(chr.getGachaExp()); //Gacha Exp - mplew.writeInt(chr.getMapId()); // current map id - mplew.write(chr.getInitialSpawnpoint()); // spawnpoint - mplew.writeInt(0); + p.writeInt(chr.getExp()); // current exp + p.writeShort(chr.getFame()); // fame + p.writeInt(chr.getGachaExp()); //Gacha Exp + p.writeInt(chr.getMapId()); // current map id + p.writeByte(chr.getInitialSpawnpoint()); // spawnpoint + p.writeInt(0); } - protected static void addCharLook(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr, boolean mega) { - mplew.write(chr.getGender()); - mplew.write(chr.getSkinColor().getId()); // skin color - mplew.writeInt(chr.getFace()); // face - mplew.write(mega ? 0 : 1); - mplew.writeInt(chr.getHair()); // hair - addCharEquips(mplew, chr); + protected static void addCharLook(final OutPacket p, MapleCharacter chr, boolean mega) { + p.writeByte(chr.getGender()); + p.writeByte(chr.getSkinColor().getId()); // skin color + p.writeInt(chr.getFace()); // face + p.writeBool(!mega); + p.writeInt(chr.getHair()); // hair + addCharEquips(p, chr); } - private static void addCharacterInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.writeLong(-1); - mplew.write(0); - addCharStats(mplew, chr); - mplew.write(chr.getBuddylist().getCapacity()); + private static void addCharacterInfo(OutPacket p, MapleCharacter chr) { + p.writeLong(-1); + p.writeByte(0); + addCharStats(p, chr); + p.writeByte(chr.getBuddylist().getCapacity()); if (chr.getLinkedName() == null) { - mplew.write(0); + p.writeByte(0); } else { - mplew.write(1); - mplew.writeMapleAsciiString(chr.getLinkedName()); + p.writeByte(1); + p.writeString(chr.getLinkedName()); } - mplew.writeInt(chr.getMeso()); - addInventoryInfo(mplew, chr); - addSkillInfo(mplew, chr); - addQuestInfo(mplew, chr); - addMiniGameInfo(mplew, chr); - addRingInfo(mplew, chr); - addTeleportInfo(mplew, chr); - addMonsterBookInfo(mplew, chr); - addNewYearInfo(mplew, chr); - addAreaInfo(mplew, chr);//assuming it stayed here xd - mplew.writeShort(0); + p.writeInt(chr.getMeso()); + addInventoryInfo(p, chr); + addSkillInfo(p, chr); + addQuestInfo(p, chr); + addMiniGameInfo(p, chr); + addRingInfo(p, chr); + addTeleportInfo(p, chr); + addMonsterBookInfo(p, chr); + addNewYearInfo(p, chr); + addAreaInfo(p, chr);//assuming it stayed here xd + p.writeShort(0); } - private static void addNewYearInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + private static void addNewYearInfo(OutPacket p, MapleCharacter chr) { Set received = chr.getReceivedNewYearRecords(); - mplew.writeShort(received.size()); + p.writeShort(received.size()); for (NewYearCardRecord nyc : received) { - encodeNewYearCard(nyc, mplew); + encodeNewYearCard(nyc, p); } } - private static void addTeleportInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + private static void addTeleportInfo(OutPacket p, MapleCharacter chr) { final List tele = chr.getTrockMaps(); final List viptele = chr.getVipTrockMaps(); for (int i = 0; i < 5; i++) { - mplew.writeInt(tele.get(i)); + p.writeInt(tele.get(i)); } for (int i = 0; i < 10; i++) { - mplew.writeInt(viptele.get(i)); + p.writeInt(viptele.get(i)); } } - private static void addMiniGameInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.writeShort(0); + private static void addMiniGameInfo(OutPacket p, MapleCharacter chr) { + p.writeShort(0); /*for (int m = size; m > 0; m--) {//nexon does this :P - mplew.writeInt(0); - mplew.writeInt(0); - mplew.writeInt(0); - mplew.writeInt(0); - mplew.writeInt(0); + p.writeInt(0); + p.writeInt(0); + p.writeInt(0); + p.writeInt(0); + p.writeInt(0); }*/ } - private static void addAreaInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + private static void addAreaInfo(OutPacket p, MapleCharacter chr) { Map areaInfos = chr.getAreaInfos(); - mplew.writeShort(areaInfos.size()); + p.writeShort(areaInfos.size()); for (Short area : areaInfos.keySet()) { - mplew.writeShort(area); - mplew.writeMapleAsciiString(areaInfos.get(area)); + p.writeShort(area); + p.writeString(areaInfos.get(area)); } } - private static void addCharEquips(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + private static void addCharEquips(final OutPacket p, MapleCharacter chr) { MapleInventory equip = chr.getInventory(MapleInventoryType.EQUIPPED); Collection ii = MapleItemInformationProvider.getInstance().canWearEquipment(chr, equip.list()); Map myEquip = new LinkedHashMap<>(); @@ -268,51 +265,50 @@ public class PacketCreator { } } for (Entry entry : myEquip.entrySet()) { - mplew.write(entry.getKey()); - mplew.writeInt(entry.getValue()); + p.writeByte(entry.getKey()); + p.writeInt(entry.getValue()); } - mplew.write(0xFF); + p.writeByte(0xFF); for (Entry entry : maskedEquip.entrySet()) { - mplew.write(entry.getKey()); - mplew.writeInt(entry.getValue()); + p.writeByte(entry.getKey()); + p.writeInt(entry.getValue()); } - mplew.write(0xFF); + p.writeByte(0xFF); Item cWeapon = equip.getItem((short) -111); - mplew.writeInt(cWeapon != null ? cWeapon.getItemId() : 0); + p.writeInt(cWeapon != null ? cWeapon.getItemId() : 0); for (int i = 0; i < 3; i++) { if (chr.getPet(i) != null) { - mplew.writeInt(chr.getPet(i).getItemId()); + p.writeInt(chr.getPet(i).getItemId()); } else { - mplew.writeInt(0); + p.writeInt(0); } } } - public static byte[] setExtraPendantSlot(boolean toggleExtraSlot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_EXTRA_PENDANT_SLOT.getValue()); - mplew.writeBool(toggleExtraSlot); - return mplew.getPacket(); + public static Packet setExtraPendantSlot(boolean toggleExtraSlot) { + final OutPacket p = OutPacket.create(SendOpcode.SET_EXTRA_PENDANT_SLOT); + p.writeBool(toggleExtraSlot); + return p; } - private static void addCharEntry(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr, boolean viewall) { - addCharStats(mplew, chr); - addCharLook(mplew, chr, false); + private static void addCharEntry(OutPacket p, MapleCharacter chr, boolean viewall) { + addCharStats(p, chr); + addCharLook(p, chr, false); if (!viewall) { - mplew.write(0); + p.writeByte(0); } if (chr.isGM() || chr.isGmJob()) { // thanks Daddy Egg (Ubaware), resinate for noticing GM jobs crashing on non-GM players account - mplew.write(0); + p.writeByte(0); return; } - mplew.write(1); // world rank enabled (next 4 ints are not sent if disabled) Short?? - mplew.writeInt(chr.getRank()); // world rank - mplew.writeInt(chr.getRankMove()); // move (negative is downwards) - mplew.writeInt(chr.getJobRank()); // job rank - mplew.writeInt(chr.getJobRankMove()); // move (negative is downwards) + p.writeByte(1); // world rank enabled (next 4 ints are not sent if disabled) Short?? + p.writeInt(chr.getRank()); // world rank + p.writeInt(chr.getRankMove()); // move (negative is downwards) + p.writeInt(chr.getJobRank()); // job rank + p.writeInt(chr.getJobRankMove()); // move (negative is downwards) } - private static void addQuestInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + private static void addQuestInfo(OutPacket p, MapleCharacter chr) { List started = chr.getStartedQuests(); int startedSize = 0; for (MapleQuestStatus qs : started) { @@ -321,35 +317,35 @@ public class PacketCreator { } startedSize++; } - mplew.writeShort(startedSize); + p.writeShort(startedSize); for (MapleQuestStatus qs : started) { - mplew.writeShort(qs.getQuest().getId()); - mplew.writeMapleAsciiString(qs.getProgressData()); + p.writeShort(qs.getQuest().getId()); + p.writeString(qs.getProgressData()); short infoNumber = qs.getInfoNumber(); if (infoNumber > 0) { MapleQuestStatus iqs = chr.getQuest(infoNumber); - mplew.writeShort(infoNumber); - mplew.writeMapleAsciiString(iqs.getProgressData()); + p.writeShort(infoNumber); + p.writeString(iqs.getProgressData()); } } List completed = chr.getCompletedQuests(); - mplew.writeShort(completed.size()); + p.writeShort(completed.size()); for (MapleQuestStatus qs : completed) { - mplew.writeShort(qs.getQuest().getId()); - mplew.writeLong(getTime(qs.getCompletionTime())); + p.writeShort(qs.getQuest().getId()); + p.writeLong(getTime(qs.getCompletionTime())); } } - private static void addExpirationTime(final MaplePacketLittleEndianWriter mplew, long time) { - mplew.writeLong(getTime(time)); // offset expiration time issue found thanks to Thora + private static void addExpirationTime(final OutPacket p, long time) { + p.writeLong(getTime(time)); // offset expiration time issue found thanks to Thora } - private static void addItemInfo(final MaplePacketLittleEndianWriter mplew, Item item) { - addItemInfo(mplew, item, false); + private static void addItemInfo(OutPacket p, Item item) { + addItemInfo(p, item, false); } - protected static void addItemInfo(final MaplePacketLittleEndianWriter mplew, Item item, boolean zeroPosition) { + protected static void addItemInfo(final OutPacket p, Item item, boolean zeroPosition) { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); boolean isCash = ii.isCash(item.getItemId()); boolean isPet = item.getPetId() > -1; @@ -366,65 +362,65 @@ public class PacketCreator { if (pos < 0) { pos *= -1; } - mplew.writeShort(pos > 100 ? pos - 100 : pos); + p.writeShort(pos > 100 ? pos - 100 : pos); } else { - mplew.write(pos); + p.writeByte(pos); } } - mplew.write(itemType); - mplew.writeInt(item.getItemId()); - mplew.writeBool(isCash); + p.writeByte(itemType); + p.writeInt(item.getItemId()); + p.writeBool(isCash); if (isCash) { - mplew.writeLong(isPet ? item.getPetId() : isRing ? equip.getRingId() : item.getCashId()); + p.writeLong(isPet ? item.getPetId() : isRing ? equip.getRingId() : item.getCashId()); } - addExpirationTime(mplew, item.getExpiration()); + addExpirationTime(p, item.getExpiration()); if (isPet) { MaplePet pet = item.getPet(); - mplew.writeAsciiString(StringUtil.getRightPaddedStr(pet.getName(), '\0', 13)); - mplew.write(pet.getLevel()); - mplew.writeShort(pet.getCloseness()); - mplew.write(pet.getFullness()); - addExpirationTime(mplew, item.getExpiration()); - mplew.writeInt(pet.getPetFlag()); /* pet flags noticed by lrenex & Spoon */ + p.writeFixedString(StringUtil.getRightPaddedStr(pet.getName(), '\0', 13)); + p.writeByte(pet.getLevel()); + p.writeShort(pet.getCloseness()); + p.writeByte(pet.getFullness()); + addExpirationTime(p, item.getExpiration()); + p.writeInt(pet.getPetFlag()); /* pet flags noticed by lrenex & Spoon */ - mplew.write(new byte[]{(byte) 0x50, (byte) 0x46}); //wonder what this is - mplew.writeInt(0); + p.writeBytes(new byte[]{(byte) 0x50, (byte) 0x46}); //wonder what this is + p.writeInt(0); return; } if (equip == null) { - mplew.writeShort(item.getQuantity()); - mplew.writeMapleAsciiString(item.getOwner()); - mplew.writeShort(item.getFlag()); // flag + p.writeShort(item.getQuantity()); + p.writeString(item.getOwner()); + p.writeShort(item.getFlag()); // flag if (ItemConstants.isRechargeable(item.getItemId())) { - mplew.writeInt(2); - mplew.write(new byte[]{(byte) 0x54, 0, 0, (byte) 0x34}); + p.writeInt(2); + p.writeBytes(new byte[]{(byte) 0x54, 0, 0, (byte) 0x34}); } return; } - mplew.write(equip.getUpgradeSlots()); // upgrade slots - mplew.write(equip.getLevel()); // level - mplew.writeShort(equip.getStr()); // str - mplew.writeShort(equip.getDex()); // dex - mplew.writeShort(equip.getInt()); // int - mplew.writeShort(equip.getLuk()); // luk - mplew.writeShort(equip.getHp()); // hp - mplew.writeShort(equip.getMp()); // mp - mplew.writeShort(equip.getWatk()); // watk - mplew.writeShort(equip.getMatk()); // matk - mplew.writeShort(equip.getWdef()); // wdef - mplew.writeShort(equip.getMdef()); // mdef - mplew.writeShort(equip.getAcc()); // accuracy - mplew.writeShort(equip.getAvoid()); // avoid - mplew.writeShort(equip.getHands()); // hands - mplew.writeShort(equip.getSpeed()); // speed - mplew.writeShort(equip.getJump()); // jump - mplew.writeMapleAsciiString(equip.getOwner()); // owner name - mplew.writeShort(equip.getFlag()); //Item Flags + p.writeByte(equip.getUpgradeSlots()); // upgrade slots + p.writeByte(equip.getLevel()); // level + p.writeShort(equip.getStr()); // str + p.writeShort(equip.getDex()); // dex + p.writeShort(equip.getInt()); // int + p.writeShort(equip.getLuk()); // luk + p.writeShort(equip.getHp()); // hp + p.writeShort(equip.getMp()); // mp + p.writeShort(equip.getWatk()); // watk + p.writeShort(equip.getMatk()); // matk + p.writeShort(equip.getWdef()); // wdef + p.writeShort(equip.getMdef()); // mdef + p.writeShort(equip.getAcc()); // accuracy + p.writeShort(equip.getAvoid()); // avoid + p.writeShort(equip.getHands()); // hands + p.writeShort(equip.getSpeed()); // speed + p.writeShort(equip.getJump()); // jump + p.writeString(equip.getOwner()); // owner name + p.writeShort(equip.getFlag()); //Item Flags if (isCash) { for (int i = 0; i < 10; i++) { - mplew.write(0x40); + p.writeByte(0x40); } } else { int itemLevel = equip.getItemLevel(); @@ -432,22 +428,22 @@ public class PacketCreator { long expNibble = (ExpTable.getExpNeededForLevel(ii.getEquipLevelReq(item.getItemId())) * equip.getItemExp()); expNibble /= ExpTable.getEquipExpNeededForLevel(itemLevel); - mplew.write(0); - mplew.write(itemLevel); //Item Level - mplew.writeInt((int) expNibble); - mplew.writeInt(equip.getVicious()); //WTF NEXON ARE YOU SERIOUS? - mplew.writeLong(0); + p.writeByte(0); + p.writeByte(itemLevel); //Item Level + p.writeInt((int) expNibble); + p.writeInt(equip.getVicious()); //WTF NEXON ARE YOU SERIOUS? + p.writeLong(0); } - mplew.writeLong(getTime(-2)); - mplew.writeInt(-1); + p.writeLong(getTime(-2)); + p.writeInt(-1); } - private static void addInventoryInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + private static void addInventoryInfo(OutPacket p, MapleCharacter chr) { for (byte i = 1; i <= 5; i++) { - mplew.write(chr.getInventory(MapleInventoryType.getByType(i)).getSlotLimit()); + p.writeByte(chr.getInventory(MapleInventoryType.getByType(i)).getSlotLimit()); } - mplew.writeLong(getTime(-2)); + p.writeLong(getTime(-2)); MapleInventory iv = chr.getInventory(MapleInventoryType.EQUIPPED); Collection equippedC = iv.list(); List equipped = new ArrayList<>(equippedC.size()); @@ -460,36 +456,36 @@ public class PacketCreator { } } for (Item item : equipped) { // equipped doesn't actually need sorting, thanks Pllsz - addItemInfo(mplew, item); + addItemInfo(p, item); } - mplew.writeShort(0); // start of equip cash + p.writeShort(0); // start of equip cash for (Item item : equippedCash) { - addItemInfo(mplew, item); + addItemInfo(p, item); } - mplew.writeShort(0); // start of equip inventory + p.writeShort(0); // start of equip inventory for (Item item : chr.getInventory(MapleInventoryType.EQUIP).list()) { - addItemInfo(mplew, item); + addItemInfo(p, item); } - mplew.writeInt(0); + p.writeInt(0); for (Item item : chr.getInventory(MapleInventoryType.USE).list()) { - addItemInfo(mplew, item); + addItemInfo(p, item); } - mplew.write(0); + p.writeByte(0); for (Item item : chr.getInventory(MapleInventoryType.SETUP).list()) { - addItemInfo(mplew, item); + addItemInfo(p, item); } - mplew.write(0); + p.writeByte(0); for (Item item : chr.getInventory(MapleInventoryType.ETC).list()) { - addItemInfo(mplew, item); + addItemInfo(p, item); } - mplew.write(0); + p.writeByte(0); for (Item item : chr.getInventory(MapleInventoryType.CASH).list()) { - addItemInfo(mplew, item); + addItemInfo(p, item); } } - private static void addSkillInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.write(0); // start of skills + private static void addSkillInfo(OutPacket p, MapleCharacter chr) { + p.writeByte(0); // start of skills Map skills = chr.getSkills(); int skillsSize = skills.size(); // We don't want to include any hidden skill in this, so subtract them from the size list and ignore them. @@ -498,48 +494,47 @@ public class PacketCreator { skillsSize--; } } - mplew.writeShort(skillsSize); + p.writeShort(skillsSize); for (Entry skill : skills.entrySet()) { if (GameConstants.isHiddenSkills(skill.getKey().getId())) { continue; } - mplew.writeInt(skill.getKey().getId()); - mplew.writeInt(skill.getValue().skillevel); - addExpirationTime(mplew, skill.getValue().expiration); + p.writeInt(skill.getKey().getId()); + p.writeInt(skill.getValue().skillevel); + addExpirationTime(p, skill.getValue().expiration); if (skill.getKey().isFourthJob()) { - mplew.writeInt(skill.getValue().masterlevel); + p.writeInt(skill.getValue().masterlevel); } } - mplew.writeShort(chr.getAllCooldowns().size()); + p.writeShort(chr.getAllCooldowns().size()); for (PlayerCoolDownValueHolder cooling : chr.getAllCooldowns()) { - mplew.writeInt(cooling.skillId); + p.writeInt(cooling.skillId); int timeLeft = (int) (cooling.length + cooling.startTime - System.currentTimeMillis()); - mplew.writeShort(timeLeft / 1000); + p.writeShort(timeLeft / 1000); } } - private static void addMonsterBookInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.writeInt(chr.getMonsterBookCover()); // cover - mplew.write(0); + private static void addMonsterBookInfo(OutPacket p, MapleCharacter chr) { + p.writeInt(chr.getMonsterBookCover()); // cover + p.writeByte(0); Map cards = chr.getMonsterBook().getCards(); - mplew.writeShort(cards.size()); + p.writeShort(cards.size()); for (Entry all : cards.entrySet()) { - mplew.writeShort(all.getKey() % 10000); // Id - mplew.write(all.getValue()); // Level + p.writeShort(all.getKey() % 10000); // Id + p.writeByte(all.getValue()); // Level } } - public static byte[] sendGuestTOS() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUEST_ID_LOGIN.getValue()); - mplew.writeShort(0x100); - mplew.writeInt(Randomizer.nextInt(999999)); - mplew.writeLong(0); - mplew.writeLong(getTime(-2)); - mplew.writeLong(getTime(System.currentTimeMillis())); - mplew.writeInt(0); - mplew.writeMapleAsciiString("http://maplesolaxia.com"); - return mplew.getPacket(); + public static Packet sendGuestTOS() { + final OutPacket p = OutPacket.create(SendOpcode.GUEST_ID_LOGIN); + p.writeShort(0x100); + p.writeInt(Randomizer.nextInt(999999)); + p.writeLong(0); + p.writeLong(getTime(-2)); + p.writeLong(getTime(System.currentTimeMillis())); + p.writeInt(0); + p.writeString("http://maplesolaxia.com"); + return p; } /** @@ -550,16 +545,16 @@ public class PacketCreator { * @param recvIv the IV in use by the server for receiving * @return */ - public static byte[] getHello(short mapleVersion, InitializationVector sendIv, InitializationVector recvIv) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); - mplew.writeShort(0x0E); - mplew.writeShort(mapleVersion); - mplew.writeShort(1); - mplew.write(49); - mplew.write(recvIv.getBytes()); - mplew.write(sendIv.getBytes()); - mplew.write(8); - return mplew.getPacket(); + public static Packet getHello(short mapleVersion, InitializationVector sendIv, InitializationVector recvIv) { + OutPacket p = new ByteBufOutPacket(); + p.writeShort(0x0E); + p.writeShort(mapleVersion); + p.writeShort(1); + p.writeByte(49); + p.writeBytes(recvIv.getBytes()); + p.writeBytes(sendIv.getBytes()); + p.writeByte(8); + return p; } /** @@ -567,10 +562,8 @@ public class PacketCreator { * * @return The packet. */ - public static byte[] getPing() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(2); - mplew.writeShort(SendOpcode.PING.getValue()); - return mplew.getPacket(); + public static Packet getPing() { + return OutPacket.create(SendOpcode.PING); } /** @@ -591,13 +584,12 @@ public class PacketCreator { * @param reason The reason logging in failed. * @return The login failed packet. */ - public static byte[] getLoginFailed(int reason) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); - mplew.writeShort(SendOpcode.LOGIN_STATUS.getValue()); - mplew.write(reason); - mplew.write(0); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet getLoginFailed(int reason) { + OutPacket p = OutPacket.create(SendOpcode.LOGIN_STATUS); + p.writeByte(reason); + p.writeByte(0); + p.writeInt(0); + return p; } /** @@ -620,49 +612,42 @@ public class PacketCreator { * @param reason The reason logging in failed. * @return The login failed packet. */ - public static byte[] getAfterLoginError(int reason) {//same as above o.o - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); - mplew.writeShort(SendOpcode.SELECT_CHARACTER_BY_VAC.getValue()); - mplew.writeShort(reason);//using other types than stated above = CRASH - return mplew.getPacket(); + public static Packet getAfterLoginError(int reason) {//same as above o.o + OutPacket p = OutPacket.create(SendOpcode.SELECT_CHARACTER_BY_VAC); + p.writeShort(reason);//using other types than stated above = CRASH + return p; } - public static byte[] sendPolice() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAKE_GM_NOTICE.getValue()); - mplew.write(0);//doesn't even matter what value - return mplew.getPacket(); + public static Packet sendPolice() { + final OutPacket p = OutPacket.create(SendOpcode.FAKE_GM_NOTICE); + p.writeByte(0);//doesn't even matter what value + return p; } - public static byte[] sendPolice(String text) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DATA_CRC_CHECK_FAILED.getValue()); - mplew.writeMapleAsciiString(text); - return mplew.getPacket(); + public static Packet sendPolice(String text) { + final OutPacket p = OutPacket.create(SendOpcode.DATA_CRC_CHECK_FAILED); + p.writeString(text); + return p; } - public static byte[] getPermBan(byte reason) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.LOGIN_STATUS.getValue()); - mplew.write(2); // Account is banned - mplew.write(0); - mplew.writeInt(0); - mplew.write(0); - mplew.writeLong(getTime(-1)); - - return mplew.getPacket(); + public static Packet getPermBan(byte reason) { + final OutPacket p = OutPacket.create(SendOpcode.LOGIN_STATUS); + p.writeByte(2); // Account is banned + p.writeByte(0); + p.writeInt(0); + p.writeByte(0); + p.writeLong(getTime(-1)); + return p; } - public static byte[] getTempBan(long timestampTill, byte reason) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(17); - mplew.writeShort(SendOpcode.LOGIN_STATUS.getValue()); - mplew.write(2); - mplew.write(0); - mplew.writeInt(0); - mplew.write(reason); - mplew.writeLong(getTime(timestampTill)); // Tempban date is handled as a 64-bit long, number of 100NS intervals since 1/1/1601. Lulz. - - return mplew.getPacket(); + public static Packet getTempBan(long timestampTill, byte reason) { + OutPacket p = OutPacket.create(SendOpcode.LOGIN_STATUS); + p.writeByte(2); + p.writeByte(0); + p.writeInt(0); + p.writeByte(reason); + p.writeLong(getTime(timestampTill)); // Tempban date is handled as a 64-bit long, number of 100NS intervals since 1/1/1601. Lulz. + return p; } /** @@ -671,35 +656,34 @@ public class PacketCreator { * @param c * @return the successful authentication packet */ - public static byte[] getAuthSuccess(MapleClient c) { + public static Packet getAuthSuccess(MapleClient c) { Server.getInstance().loadAccountCharacters(c); // locks the login session until data is recovered from the cache or the DB. Server.getInstance().loadAccountStorages(c); - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.LOGIN_STATUS.getValue()); - mplew.writeInt(0); - mplew.writeShort(0); - mplew.writeInt(c.getAccID()); - mplew.write(c.getGender()); + final OutPacket p = OutPacket.create(SendOpcode.LOGIN_STATUS); + p.writeInt(0); + p.writeShort(0); + p.writeInt(c.getAccID()); + p.writeByte(c.getGender()); boolean canFly = Server.getInstance().canFly(c.getAccID()); - mplew.writeBool((YamlConfig.config.server.USE_ENFORCE_ADMIN_ACCOUNT || canFly) && c.getGMLevel() > 1); // thanks Steve(kaito1410) for pointing the GM account boolean here - mplew.write(((YamlConfig.config.server.USE_ENFORCE_ADMIN_ACCOUNT || canFly) && c.getGMLevel() > 1) ? 0x80 : 0); // Admin Byte. 0x80,0x40,0x20.. Rubbish. - mplew.write(0); // Country Code. + p.writeBool((YamlConfig.config.server.USE_ENFORCE_ADMIN_ACCOUNT || canFly) && c.getGMLevel() > 1); // thanks Steve(kaito1410) for pointing the GM account boolean here + p.writeByte(((YamlConfig.config.server.USE_ENFORCE_ADMIN_ACCOUNT || canFly) && c.getGMLevel() > 1) ? 0x80 : 0); // Admin Byte. 0x80,0x40,0x20.. Rubbish. + p.writeByte(0); // Country Code. - mplew.writeMapleAsciiString(c.getAccountName()); - mplew.write(0); + p.writeString(c.getAccountName()); + p.writeByte(0); - mplew.write(0); // IsQuietBan - mplew.writeLong(0);//IsQuietBanTimeStamp - mplew.writeLong(0); //CreationTimeStamp + p.writeByte(0); // IsQuietBan + p.writeLong(0);//IsQuietBanTimeStamp + p.writeLong(0); //CreationTimeStamp - mplew.writeInt(1); // 1: Remove the "Select the world you want to play in" + p.writeInt(1); // 1: Remove the "Select the world you want to play in" - mplew.write(YamlConfig.config.server.ENABLE_PIN && !c.canBypassPin() ? 0 : 1); // 0 = Pin-System Enabled, 1 = Disabled - mplew.write(YamlConfig.config.server.ENABLE_PIC && !c.canBypassPic() ? (c.getPic() == null || c.getPic().equals("") ? 0 : 1) : 2); // 0 = Register PIC, 1 = Ask for PIC, 2 = Disabled + p.writeByte(YamlConfig.config.server.ENABLE_PIN && !c.canBypassPin() ? 0 : 1); // 0 = Pin-System Enabled, 1 = Disabled + p.writeByte(YamlConfig.config.server.ENABLE_PIC && !c.canBypassPic() ? (c.getPic() == null || c.getPic().equals("") ? 0 : 1) : 2); // 0 = Register PIC, 1 = Ask for PIC, 2 = Disabled - return mplew.getPacket(); + return p; } /** @@ -712,41 +696,38 @@ public class PacketCreator { * @param mode The mode. * @return */ - private static byte[] pinOperation(byte mode) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.CHECK_PINCODE.getValue()); - mplew.write(mode); - return mplew.getPacket(); + private static Packet pinOperation(byte mode) { + OutPacket p = OutPacket.create(SendOpcode.CHECK_PINCODE); + p.writeByte(mode); + return p; } - public static byte[] pinRegistered() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.UPDATE_PINCODE.getValue()); - mplew.write(0); - return mplew.getPacket(); + public static Packet pinRegistered() { + OutPacket p = OutPacket.create(SendOpcode.UPDATE_PINCODE); + p.writeByte(0); + return p; } - public static byte[] requestPin() { + public static Packet requestPin() { return pinOperation((byte) 4); } - public static byte[] requestPinAfterFailure() { + public static Packet requestPinAfterFailure() { return pinOperation((byte) 2); } - public static byte[] registerPin() { + public static Packet registerPin() { return pinOperation((byte) 1); } - public static byte[] pinAccepted() { + public static Packet pinAccepted() { return pinOperation((byte) 0); } - public static byte[] wrongPic() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.CHECK_SPW_RESULT.getValue()); - mplew.write(0); - return mplew.getPacket(); + public static Packet wrongPic() { + OutPacket p = OutPacket.create(SendOpcode.CHECK_SPW_RESULT); + p.writeByte(0); + return p; } /** @@ -759,30 +740,29 @@ public class PacketCreator { * @param channelLoad Load of the channel - 1200 seems to be max. * @return The server info packet. */ - public static byte[] getServerList(int serverId, String serverName, int flag, String eventmsg, List channelLoad) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SERVERLIST.getValue()); - mplew.write(serverId); - mplew.writeMapleAsciiString(serverName); - mplew.write(flag); - mplew.writeMapleAsciiString(eventmsg); - mplew.write(100); // rate modifier, don't ask O.O! - mplew.write(0); // event xp * 2.6 O.O! - mplew.write(100); // rate modifier, don't ask O.O! - mplew.write(0); // drop rate * 2.6 - mplew.write(0); - mplew.write(channelLoad.size()); + public static Packet getServerList(int serverId, String serverName, int flag, String eventmsg, List channelLoad) { + final OutPacket p = OutPacket.create(SendOpcode.SERVERLIST); + p.writeByte(serverId); + p.writeString(serverName); + p.writeByte(flag); + p.writeString(eventmsg); + p.writeByte(100); // rate modifier, don't ask O.O! + p.writeByte(0); // event xp * 2.6 O.O! + p.writeByte(100); // rate modifier, don't ask O.O! + p.writeByte(0); // drop rate * 2.6 + p.writeByte(0); + p.writeByte(channelLoad.size()); for (Channel ch : channelLoad) { - mplew.writeMapleAsciiString(serverName + "-" + ch.getId()); - mplew.writeInt(ch.getChannelCapacity()); + p.writeString(serverName + "-" + ch.getId()); + p.writeInt(ch.getChannelCapacity()); // thanks GabrielSin for this channel packet structure part - mplew.write(1);// nWorldID - mplew.write(ch.getId() - 1);// nChannelID - mplew.writeBool(false);// bAdultChannel + p.writeByte(1);// nWorldID + p.writeByte(ch.getId() - 1);// nChannelID + p.writeBool(false);// bAdultChannel } - mplew.writeShort(0); - return mplew.getPacket(); + p.writeShort(0); + return p; } /** @@ -790,11 +770,10 @@ public class PacketCreator { * * @return The end of server list packet. */ - public static byte[] getEndOfServerList() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.SERVERLIST.getValue()); - mplew.write(0xFF); - return mplew.getPacket(); + public static Packet getEndOfServerList() { + OutPacket p = OutPacket.create(SendOpcode.SERVERLIST); + p.writeByte(0xFF); + return p; } /** @@ -806,11 +785,10 @@ public class PacketCreator { * @param status The server status. * @return The server status packet. */ - public static byte[] getServerStatus(int status) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.SERVERSTATUS.getValue()); - mplew.writeShort(status); - return mplew.getPacket(); + public static Packet getServerStatus(int status) { + OutPacket p = OutPacket.create(SendOpcode.SERVERSTATUS); + p.writeShort(status); + return p; } /** @@ -821,16 +799,15 @@ public class PacketCreator { * @param clientId The ID of the client. * @return The server IP packet. */ - public static byte[] getServerIP(InetAddress inetAddr, int port, int clientId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SERVER_IP.getValue()); - mplew.writeShort(0); + public static Packet getServerIP(InetAddress inetAddr, int port, int clientId) { + final OutPacket p = OutPacket.create(SendOpcode.SERVER_IP); + p.writeShort(0); byte[] addr = inetAddr.getAddress(); - mplew.write(addr); - mplew.writeShort(port); - mplew.writeInt(clientId); - mplew.write(new byte[]{0, 0, 0, 0, 0}); - return mplew.getPacket(); + p.writeBytes(addr); + p.writeShort(port); + p.writeInt(clientId); + p.writeBytes(new byte[]{0, 0, 0, 0, 0}); + return p; } /** @@ -840,14 +817,13 @@ public class PacketCreator { * @param port The port the channel is on. * @return The server IP packet. */ - public static byte[] getChannelChange(InetAddress inetAddr, int port) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CHANGE_CHANNEL.getValue()); - mplew.write(1); + public static Packet getChannelChange(InetAddress inetAddr, int port) { + final OutPacket p = OutPacket.create(SendOpcode.CHANGE_CHANNEL); + p.writeByte(1); byte[] addr = inetAddr.getAddress(); - mplew.write(addr); - mplew.writeShort(port); - return mplew.getPacket(); + p.writeBytes(addr); + p.writeShort(port); + return p; } /** @@ -873,27 +849,25 @@ public class PacketCreator { *
17: Wrong gateway or personal info
*
21: Verify account via email
*/ - public static byte[] getCharList(MapleClient c, int serverId, int status) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CHARLIST.getValue()); - mplew.write(status); + public static Packet getCharList(MapleClient c, int serverId, int status) { + final OutPacket p = OutPacket.create(SendOpcode.CHARLIST); + p.writeByte(status); List chars = c.loadCharacters(serverId); - mplew.write((byte) chars.size()); + p.writeByte((byte) chars.size()); for (MapleCharacter chr : chars) { - addCharEntry(mplew, chr, false); + addCharEntry(p, chr, false); } - mplew.write(YamlConfig.config.server.ENABLE_PIC && !c.canBypassPic() ? (c.getPic() == null || c.getPic().equals("") ? 0 : 1) : 2); - mplew.writeInt(YamlConfig.config.server.COLLECTIVE_CHARSLOT ? chars.size() + c.getAvailableCharacterSlots() : c.getCharacterSlots()); - return mplew.getPacket(); + p.writeByte(YamlConfig.config.server.ENABLE_PIC && !c.canBypassPic() ? (c.getPic() == null || c.getPic().equals("") ? 0 : 1) : 2); + p.writeInt(YamlConfig.config.server.COLLECTIVE_CHARSLOT ? chars.size() + c.getAvailableCharacterSlots() : c.getCharacterSlots()); + return p; } - public static byte[] enableTV() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.ENABLE_TV.getValue()); - mplew.writeInt(0); - mplew.write(0); - return mplew.getPacket(); + public static Packet enableTV() { + OutPacket p = OutPacket.create(SendOpcode.ENABLE_TV); + p.writeInt(0); + p.writeByte(0); + return p; } /** @@ -901,10 +875,8 @@ public class PacketCreator { * * @return The Remove TV Packet */ - public static byte[] removeTV() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(2); - mplew.writeShort(SendOpcode.REMOVE_TV.getValue()); - return mplew.getPacket(); + public static Packet removeTV() { + return OutPacket.create(SendOpcode.REMOVE_TV); } /** @@ -916,30 +888,29 @@ public class PacketCreator { * @param partner The partner shown with chr * @return the SEND_TV packet */ - public static byte[] sendTV(MapleCharacter chr, List messages, int type, MapleCharacter partner) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SEND_TV.getValue()); - mplew.write(partner != null ? 3 : 1); - mplew.write(type); //Heart = 2 Star = 1 Normal = 0 - addCharLook(mplew, chr, false); - mplew.writeMapleAsciiString(chr.getName()); + public static Packet sendTV(MapleCharacter chr, List messages, int type, MapleCharacter partner) { + final OutPacket p = OutPacket.create(SendOpcode.SEND_TV); + p.writeByte(partner != null ? 3 : 1); + p.writeByte(type); //Heart = 2 Star = 1 Normal = 0 + addCharLook(p, chr, false); + p.writeString(chr.getName()); if (partner != null) { - mplew.writeMapleAsciiString(partner.getName()); + p.writeString(partner.getName()); } else { - mplew.writeShort(0); + p.writeShort(0); } for (int i = 0; i < messages.size(); i++) { if (i == 4 && messages.get(4).length() > 15) { - mplew.writeMapleAsciiString(messages.get(4).substring(0, 15)); + p.writeString(messages.get(4).substring(0, 15)); } else { - mplew.writeMapleAsciiString(messages.get(i)); + p.writeString(messages.get(i)); } } - mplew.writeInt(1337); // time limit shit lol 'Your thing still start in blah blah seconds' + p.writeInt(1337); // time limit shit lol 'Your thing still start in blah blah seconds' if (partner != null) { - addCharLook(mplew, partner, false); + addCharLook(p, partner, false); } - return mplew.getPacket(); + return p; } /** @@ -948,19 +919,18 @@ public class PacketCreator { * @param chr The character to get info about. * @return The character info packet. */ - public static byte[] getCharInfo(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_FIELD.getValue()); - mplew.writeInt(chr.getClient().getChannel() - 1); - mplew.write(1); - mplew.write(1); - mplew.writeShort(0); + public static Packet getCharInfo(MapleCharacter chr) { + final OutPacket p = OutPacket.create(SendOpcode.SET_FIELD); + p.writeInt(chr.getClient().getChannel() - 1); + p.writeByte(1); + p.writeByte(1); + p.writeShort(0); for (int i = 0; i < 3; i++) { - mplew.writeInt(Randomizer.nextInt()); + p.writeInt(Randomizer.nextInt()); } - addCharacterInfo(mplew, chr); - mplew.writeLong(getTime(System.currentTimeMillis())); - return mplew.getPacket(); + addCharacterInfo(p, chr); + p.writeLong(getTime(System.currentTimeMillis())); + return p; } /** @@ -968,7 +938,7 @@ public class PacketCreator { * * @return The empty stat update packet. */ - public static byte[] enableActions() { + public static Packet enableActions() { return updatePlayerStats(EMPTY_STATUPDATE, true, null); } @@ -980,10 +950,9 @@ public class PacketCreator { * @param chr The update target. * @return The stat update packet. */ - public static byte[] updatePlayerStats(List> stats, boolean enableActions, MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STAT_CHANGED.getValue()); - mplew.write(enableActions ? 1 : 0); + public static Packet updatePlayerStats(List> stats, boolean enableActions, MapleCharacter chr) { + OutPacket p = OutPacket.create(SendOpcode.STAT_CHANGED); + p.writeBool(enableActions); int updateMask = 0; for (Pair statupdate : stats) { updateMask |= statupdate.getLeft().getValue(); @@ -996,31 +965,31 @@ public class PacketCreator { return (val1 < val2 ? -1 : (val1 == val2 ? 0 : 1)); }); } - mplew.writeInt(updateMask); + p.writeInt(updateMask); for (Pair statupdate : mystats) { if (statupdate.getLeft().getValue() >= 1) { if (statupdate.getLeft().getValue() == 0x1) { - mplew.write(statupdate.getRight().byteValue()); + p.writeByte(statupdate.getRight().byteValue()); } else if (statupdate.getLeft().getValue() <= 0x4) { - mplew.writeInt(statupdate.getRight()); + p.writeInt(statupdate.getRight()); } else if (statupdate.getLeft().getValue() < 0x20) { - mplew.write(statupdate.getRight().shortValue()); + p.writeByte(statupdate.getRight().shortValue()); } else if (statupdate.getLeft().getValue() == 0x8000) { if (GameConstants.hasSPTable(chr.getJob())) { - addRemainingSkillInfo(mplew, chr); + addRemainingSkillInfo(p, chr); } else { - mplew.writeShort(statupdate.getRight().shortValue()); + p.writeShort(statupdate.getRight().shortValue()); } } else if (statupdate.getLeft().getValue() < 0xFFFF) { - mplew.writeShort(statupdate.getRight().shortValue()); + p.writeShort(statupdate.getRight().shortValue()); } else if (statupdate.getLeft().getValue() == 0x20000) { - mplew.writeShort(statupdate.getRight().shortValue()); + p.writeShort(statupdate.getRight().shortValue()); } else { - mplew.writeInt(statupdate.getRight()); + p.writeInt(statupdate.getRight()); } } } - return mplew.getPacket(); + return p; } /** @@ -1031,39 +1000,37 @@ public class PacketCreator { * @param chr The character warping to to * @return The map change packet. */ - public static byte[] getWarpToMap(MapleMap to, int spawnPoint, MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_FIELD.getValue()); - mplew.writeInt(chr.getClient().getChannel() - 1); - mplew.writeInt(0);//updated - mplew.write(0);//updated - mplew.writeInt(to.getId()); - mplew.write(spawnPoint); - mplew.writeShort(chr.getHp()); - mplew.writeBool(chr.isChasing()); + public static Packet getWarpToMap(MapleMap to, int spawnPoint, MapleCharacter chr) { + final OutPacket p = OutPacket.create(SendOpcode.SET_FIELD); + p.writeInt(chr.getClient().getChannel() - 1); + p.writeInt(0);//updated + p.writeByte(0);//updated + p.writeInt(to.getId()); + p.writeByte(spawnPoint); + p.writeShort(chr.getHp()); + p.writeBool(chr.isChasing()); if (chr.isChasing()) { chr.setChasing(false); - mplew.writeInt(chr.getPosition().x); - mplew.writeInt(chr.getPosition().y); + p.writeInt(chr.getPosition().x); + p.writeInt(chr.getPosition().y); } - mplew.writeLong(getTime(Server.getInstance().getCurrentTime())); - return mplew.getPacket(); + p.writeLong(getTime(Server.getInstance().getCurrentTime())); + return p; } - public static byte[] getWarpToMap(MapleMap to, int spawnPoint, Point spawnPosition, MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_FIELD.getValue()); - mplew.writeInt(chr.getClient().getChannel() - 1); - mplew.writeInt(0);//updated - mplew.write(0);//updated - mplew.writeInt(to.getId()); - mplew.write(spawnPoint); - mplew.writeShort(chr.getHp()); - mplew.writeBool(true); - mplew.writeInt(spawnPosition.x); // spawn position placement thanks to Arnah (Vertisy) - mplew.writeInt(spawnPosition.y); - mplew.writeLong(getTime(Server.getInstance().getCurrentTime())); - return mplew.getPacket(); + public static Packet getWarpToMap(MapleMap to, int spawnPoint, Point spawnPosition, MapleCharacter chr) { + final OutPacket p = OutPacket.create(SendOpcode.SET_FIELD); + p.writeInt(chr.getClient().getChannel() - 1); + p.writeInt(0);//updated + p.writeByte(0);//updated + p.writeInt(to.getId()); + p.writeByte(spawnPoint); + p.writeShort(chr.getHp()); + p.writeBool(true); + p.writeInt(spawnPosition.x); // spawn position placement thanks to Arnah (Vertisy) + p.writeInt(spawnPosition.y); + p.writeLong(getTime(Server.getInstance().getCurrentTime())); + return p; } /** @@ -1074,13 +1041,12 @@ public class PacketCreator { * @param pos Where to put the portal. * @return The portal spawn packet. */ - public static byte[] spawnPortal(int townId, int targetId, Point pos) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(14); - mplew.writeShort(SendOpcode.SPAWN_PORTAL.getValue()); - mplew.writeInt(townId); - mplew.writeInt(targetId); - mplew.writePos(pos); - return mplew.getPacket(); + public static Packet spawnPortal(int townId, int targetId, Point pos) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_PORTAL); + p.writeInt(townId); + p.writeInt(targetId); + p.writePos(pos); + return p; } /** @@ -1091,34 +1057,33 @@ public class PacketCreator { * @param launched Already deployed the door. * @return The remove door packet. */ - public static byte[] spawnDoor(int ownerid, Point pos, boolean launched) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); - mplew.writeShort(SendOpcode.SPAWN_DOOR.getValue()); - mplew.writeBool(launched); - mplew.writeInt(ownerid); - mplew.writePos(pos); - return mplew.getPacket(); + public static Packet spawnDoor(int ownerid, Point pos, boolean launched) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_DOOR); + p.writeBool(launched); + p.writeInt(ownerid); + p.writePos(pos); + return p; } /** * Gets a packet to remove a door. * - * @param ownerid The door's owner ID. + * @param ownerId The door's owner ID. * @param town * @return The remove door packet. */ - public static byte[] removeDoor(int ownerid, boolean town) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(10); + public static Packet removeDoor(int ownerId, boolean town) { + final OutPacket p; if (town) { - mplew.writeShort(SendOpcode.SPAWN_PORTAL.getValue()); - mplew.writeInt(999999999); - mplew.writeInt(999999999); + p = OutPacket.create(SendOpcode.SPAWN_PORTAL); + p.writeInt(999999999); + p.writeInt(999999999); } else { - mplew.writeShort(SendOpcode.REMOVE_DOOR.getValue()); - mplew.write(0); - mplew.writeInt(ownerid); + p = OutPacket.create(SendOpcode.REMOVE_DOOR); + p.writeByte(0); + p.writeInt(ownerId); } - return mplew.getPacket(); + return p; } /** @@ -1129,21 +1094,20 @@ public class PacketCreator { * @param animated Animated spawn? * @return The spawn packet for the map object. */ - public static byte[] spawnSummon(MapleSummon summon, boolean animated) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(25); - mplew.writeShort(SendOpcode.SPAWN_SPECIAL_MAPOBJECT.getValue()); - mplew.writeInt(summon.getOwner().getId()); - mplew.writeInt(summon.getObjectId()); - mplew.writeInt(summon.getSkill()); - mplew.write(0x0A); //v83 - mplew.write(summon.getSkillLevel()); - mplew.writePos(summon.getPosition()); - mplew.write(summon.getStance()); //bMoveAction & foothold, found thanks to Rien dev team - mplew.writeShort(0); - mplew.write(summon.getMovementType().getValue()); // 0 = don't move, 1 = follow (4th mage summons?), 2/4 = only tele follow, 3 = bird follow - mplew.write(summon.isPuppet() ? 0 : 1); // 0 and the summon can't attack - but puppets don't attack with 1 either ^.- - mplew.write(animated ? 0 : 1); - return mplew.getPacket(); + public static Packet spawnSummon(MapleSummon summon, boolean animated) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_SPECIAL_MAPOBJECT); + p.writeInt(summon.getOwner().getId()); + p.writeInt(summon.getObjectId()); + p.writeInt(summon.getSkill()); + p.writeByte(0x0A); //v83 + p.writeByte(summon.getSkillLevel()); + p.writePos(summon.getPosition()); + p.writeByte(summon.getStance()); //bMoveAction & foothold, found thanks to Rien dev team + p.writeShort(0); + p.writeByte(summon.getMovementType().getValue()); // 0 = don't move, 1 = follow (4th mage summons?), 2/4 = only tele follow, 3 = bird follow + p.writeBool(!summon.isPuppet()); // 0 and the summon can't attack - but puppets don't attack with 1 either ^.- + p.writeBool(!animated); + return p; } /** @@ -1153,39 +1117,34 @@ public class PacketCreator { * @param animated Animated removal? * @return The packet removing the object. */ - public static byte[] removeSummon(MapleSummon summon, boolean animated) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); - mplew.writeShort(SendOpcode.REMOVE_SPECIAL_MAPOBJECT.getValue()); - mplew.writeInt(summon.getOwner().getId()); - mplew.writeInt(summon.getObjectId()); - mplew.write(animated ? 4 : 1); // ? - return mplew.getPacket(); + public static Packet removeSummon(MapleSummon summon, boolean animated) { + OutPacket p = OutPacket.create(SendOpcode.REMOVE_SPECIAL_MAPOBJECT); + p.writeInt(summon.getOwner().getId()); + p.writeInt(summon.getObjectId()); + p.writeByte(animated ? 4 : 1); // ? + return p; } - public static byte[] spawnKite(int oid, int itemid, String name, String msg, Point pos, int ft) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_KITE.getValue()); - mplew.writeInt(oid); - mplew.writeInt(itemid); - mplew.writeMapleAsciiString(msg); - mplew.writeMapleAsciiString(name); - mplew.writeShort(pos.x); - mplew.writeShort(ft); - return mplew.getPacket(); + public static Packet spawnKite(int objId, int itemId, String name, String msg, Point pos, int ft) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_KITE); + p.writeInt(objId); + p.writeInt(itemId); + p.writeString(msg); + p.writeString(name); + p.writeShort(pos.x); + p.writeShort(ft); + return p; } - public static byte[] removeKite(int objectid, int animationType) { // thanks to Arnah (Vertisy) - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.REMOVE_KITE.getValue()); - mplew.write(animationType); // 0 is 10/10, 1 just vanishes - mplew.writeInt(objectid); - return mplew.getPacket(); + public static Packet removeKite(int objId, int animationType) { // thanks to Arnah (Vertisy) + OutPacket p = OutPacket.create(SendOpcode.REMOVE_KITE); + p.writeByte(animationType); // 0 is 10/10, 1 just vanishes + p.writeInt(objId); + return p; } - public static byte[] sendCannotSpawnKite() { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANNOT_SPAWN_KITE.getValue()); - return mplew.getPacket(); + public static Packet sendCannotSpawnKite() { + return OutPacket.create(SendOpcode.CANNOT_SPAWN_KITE); } /** @@ -1193,11 +1152,10 @@ public class PacketCreator { * * @return The relog response packet. */ - public static byte[] getRelogResponse() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.RELOG_RESPONSE.getValue()); - mplew.write(1);//1 O.O Must be more types ): - return mplew.getPacket(); + public static Packet getRelogResponse() { + OutPacket p = OutPacket.create(SendOpcode.RELOG_RESPONSE); + p.writeByte(1);//1 O.O Must be more types ): + return p; } /** @@ -1206,7 +1164,7 @@ public class PacketCreator { * @param message The message to convey. * @return The server message packet. */ - public static byte[] serverMessage(String message) { + public static Packet serverMessage(String message) { return serverMessage(4, (byte) 0, message, true, false, 0); } @@ -1221,7 +1179,7 @@ public class PacketCreator { * @param message The message to convey. * @return The server notice packet. */ - public static byte[] serverNotice(int type, String message) { + public static Packet serverNotice(int type, String message) { return serverMessage(type, (byte) 0, message, false, false, 0); } @@ -1237,15 +1195,15 @@ public class PacketCreator { * @param message The message to convey. * @return The server notice packet. */ - public static byte[] serverNotice(int type, String message, int npc) { + public static Packet serverNotice(int type, String message, int npc) { return serverMessage(type, 0, message, false, false, npc); } - public static byte[] serverNotice(int type, int channel, String message) { + public static Packet serverNotice(int type, int channel, String message) { return serverMessage(type, channel, message, false, false, 0); } - public static byte[] serverNotice(int type, int channel, String message, boolean smegaEar) { + public static Packet serverNotice(int type, int channel, String message, boolean smegaEar) { return serverMessage(type, channel, message, false, smegaEar, 0); } @@ -1262,23 +1220,22 @@ public class PacketCreator { * @param servermessage Is this a scrolling ticker? * @return The server notice packet. */ - private static byte[] serverMessage(int type, int channel, String message, boolean servermessage, boolean megaEar, int npc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SERVERMESSAGE.getValue()); - mplew.write(type); + private static Packet serverMessage(int type, int channel, String message, boolean servermessage, boolean megaEar, int npc) { + OutPacket p = OutPacket.create(SendOpcode.SERVERMESSAGE); + p.writeByte(type); if (servermessage) { - mplew.write(1); + p.writeByte(1); } - mplew.writeMapleAsciiString(message); + p.writeString(message); if (type == 3) { - mplew.write(channel - 1); // channel - mplew.writeBool(megaEar); + p.writeByte(channel - 1); // channel + p.writeBool(megaEar); } else if (type == 6) { - mplew.writeInt(0); + p.writeInt(0); } else if (type == 7) { // npc - mplew.writeInt(npc); + p.writeInt(npc); } - return mplew.getPacket(); + return p; } /** @@ -1292,29 +1249,27 @@ public class PacketCreator { * @param ear Whether or not the ear is shown for whisper. * @return */ - public static byte[] getAvatarMega(MapleCharacter chr, String medal, int channel, int itemId, List message, boolean ear) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_AVATAR_MEGAPHONE.getValue()); - mplew.writeInt(itemId); - mplew.writeMapleAsciiString(medal + chr.getName()); + public static Packet getAvatarMega(MapleCharacter chr, String medal, int channel, int itemId, List message, boolean ear) { + final OutPacket p = OutPacket.create(SendOpcode.SET_AVATAR_MEGAPHONE); + p.writeInt(itemId); + p.writeString(medal + chr.getName()); for (String s : message) { - mplew.writeMapleAsciiString(s); + p.writeString(s); } - mplew.writeInt(channel - 1); // channel - mplew.writeBool(ear); - addCharLook(mplew, chr, true); - return mplew.getPacket(); + p.writeInt(channel - 1); // channel + p.writeBool(ear); + addCharLook(p, chr, true); + return p; } /* * Sends a packet to remove the tiger megaphone * @return */ - public static byte[] byeAvatarMega() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CLEAR_AVATAR_MEGAPHONE.getValue()); - mplew.write(1); - return mplew.getPacket(); + public static Packet byeAvatarMega() { + final OutPacket p = OutPacket.create(SendOpcode.CLEAR_AVATAR_MEGAPHONE); + p.writeByte(1); + return p; } /** @@ -1325,54 +1280,43 @@ public class PacketCreator { * @param player * @return */ - public static byte[] gachaponMessage(Item item, String town, MapleCharacter player) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SERVERMESSAGE.getValue()); - mplew.write(0x0B); - mplew.writeMapleAsciiString(player.getName() + " : got a(n)"); - mplew.writeInt(0); //random? - mplew.writeMapleAsciiString(town); - addItemInfo(mplew, item, true); - return mplew.getPacket(); + public static Packet gachaponMessage(Item item, String town, MapleCharacter player) { + final OutPacket p = OutPacket.create(SendOpcode.SERVERMESSAGE); + p.writeByte(0x0B); + p.writeString(player.getName() + " : got a(n)"); + p.writeInt(0); //random? + p.writeString(town); + addItemInfo(p, item, true); + return p; } - public static byte[] spawnNPC(MapleNPC life) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(24); - mplew.writeShort(SendOpcode.SPAWN_NPC.getValue()); - mplew.writeInt(life.getObjectId()); - mplew.writeInt(life.getId()); - mplew.writeShort(life.getPosition().x); - mplew.writeShort(life.getCy()); - if (life.getF() == 1) { - mplew.write(0); - } else { - mplew.write(1); - } - mplew.writeShort(life.getFh()); - mplew.writeShort(life.getRx0()); - mplew.writeShort(life.getRx1()); - mplew.write(1); - return mplew.getPacket(); + public static Packet spawnNPC(MapleNPC life) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_NPC); + p.writeInt(life.getObjectId()); + p.writeInt(life.getId()); + p.writeShort(life.getPosition().x); + p.writeShort(life.getCy()); + p.writeBool(life.getF() != 1); + p.writeShort(life.getFh()); + p.writeShort(life.getRx0()); + p.writeShort(life.getRx1()); + p.writeByte(1); + return p; } - public static byte[] spawnNPCRequestController(MapleNPC life, boolean MiniMap) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(23); - mplew.writeShort(SendOpcode.SPAWN_NPC_REQUEST_CONTROLLER.getValue()); - mplew.write(1); - mplew.writeInt(life.getObjectId()); - mplew.writeInt(life.getId()); - mplew.writeShort(life.getPosition().x); - mplew.writeShort(life.getCy()); - if (life.getF() == 1) { - mplew.write(0); - } else { - mplew.write(1); - } - mplew.writeShort(life.getFh()); - mplew.writeShort(life.getRx0()); - mplew.writeShort(life.getRx1()); - mplew.writeBool(MiniMap); - return mplew.getPacket(); + public static Packet spawnNPCRequestController(MapleNPC life, boolean miniMap) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_NPC_REQUEST_CONTROLLER); + p.writeByte(1); + p.writeInt(life.getObjectId()); + p.writeInt(life.getId()); + p.writeShort(life.getPosition().x); + p.writeShort(life.getCy()); + p.writeBool(life.getF() != 1); + p.writeShort(life.getFh()); + p.writeShort(life.getRx0()); + p.writeShort(life.getRx1()); + p.writeBool(miniMap); + return p; } /** @@ -1382,7 +1326,7 @@ public class PacketCreator { * @param newSpawn Is it a new spawn? * @return The spawn monster packet. */ - public static byte[] spawnMonster(MapleMonster life, boolean newSpawn) { + public static Packet spawnMonster(MapleMonster life, boolean newSpawn) { return spawnMonsterInternal(life, false, newSpawn, false, 0, false); } @@ -1394,7 +1338,7 @@ public class PacketCreator { * @param effect The spawn effect. * @return The spawn monster packet. */ - public static byte[] spawnMonster(MapleMonster life, boolean newSpawn, int effect) { + public static Packet spawnMonster(MapleMonster life, boolean newSpawn, int effect) { return spawnMonsterInternal(life, false, newSpawn, false, effect, false); } @@ -1406,7 +1350,7 @@ public class PacketCreator { * @param aggro Aggressive monster? * @return The monster control packet. */ - public static byte[] controlMonster(MapleMonster life, boolean newSpawn, boolean aggro) { + public static Packet controlMonster(MapleMonster life, boolean newSpawn, boolean aggro) { return spawnMonsterInternal(life, true, newSpawn, aggro, 0, false); } @@ -1416,12 +1360,11 @@ public class PacketCreator { * @param life * @return */ - public static byte[] removeMonsterInvisibility(MapleMonster life) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); - mplew.write(1); - mplew.writeInt(life.getObjectId()); - return mplew.getPacket(); + public static Packet removeMonsterInvisibility(MapleMonster life) { + final OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL); + p.writeByte(1); + p.writeInt(life.getObjectId()); + return p; } /** @@ -1430,68 +1373,64 @@ public class PacketCreator { * @param life * @return */ - public static byte[] makeMonsterInvisible(MapleMonster life) { + public static Packet makeMonsterInvisible(MapleMonster life) { return spawnMonsterInternal(life, true, false, false, 0, true); } - private static void encodeParentlessMobSpawnEffect(MaplePacketLittleEndianWriter mplew, boolean newSpawn, int effect) { + private static void encodeParentlessMobSpawnEffect(OutPacket p, boolean newSpawn, int effect) { if (effect > 0) { - mplew.write(effect); - mplew.write(0); - mplew.writeShort(0); + p.writeByte(effect); + p.writeByte(0); + p.writeShort(0); if (effect == 15) { - mplew.write(0); + p.writeByte(0); } } - mplew.write(newSpawn ? -2 : -1); + p.writeByte(newSpawn ? -2 : -1); } - private static void encodeTemporary(MaplePacketLittleEndianWriter mplew, Map stati) { - int pCounter = -1, mCounter = -1; + private static void encodeTemporary(OutPacket p, Map stati) { + int pCounter = -1; + int mCounter = -1; stati = stati.entrySet() // to patch some status crashing players .stream() .filter(e -> !(e.getKey().equals(MonsterStatus.WATK) || e.getKey().equals(MonsterStatus.WDEF))) .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue())); - writeLongEncodeTemporaryMask(mplew, stati.keySet()); // packet structure mapped thanks to Eric + writeLongEncodeTemporaryMask(p, stati.keySet()); // packet structure mapped thanks to Eric for (Entry s : stati.entrySet()) { MonsterStatusEffect mse = s.getValue(); - mplew.writeShort(mse.getStati().get(s.getKey())); + p.writeShort(mse.getStati().get(s.getKey())); MobSkill mobSkill = mse.getMobSkill(); if (mobSkill != null) { - mplew.writeShort(mobSkill.getSkillId()); - mplew.writeShort(mobSkill.getSkillLevel()); + p.writeShort(mobSkill.getSkillId()); + p.writeShort(mobSkill.getSkillLevel()); switch (s.getKey()) { - case WEAPON_REFLECT: - pCounter = mobSkill.getX(); - break; - - case MAGIC_REFLECT: - mCounter = mobSkill.getY(); - break; + case WEAPON_REFLECT -> pCounter = mobSkill.getX(); + case MAGIC_REFLECT -> mCounter = mobSkill.getY(); } } else { Skill skill = mse.getSkill(); - mplew.writeInt(skill != null ? skill.getId() : 0); + p.writeInt(skill != null ? skill.getId() : 0); } - mplew.writeShort(-1); // duration + p.writeShort(-1); // duration } // reflect packet structure found thanks to Arnah (Vertisy) - if (pCounter != -1) { - mplew.writeInt(pCounter);// wPCounter_ - } - if (mCounter != -1) { - mplew.writeInt(mCounter);// wMCounter_ - } - if (pCounter != -1 || mCounter != -1) { - mplew.writeInt(100);// nCounterProb_ - } + if (pCounter != -1) { + p.writeInt(pCounter);// wPCounter_ + } + if (mCounter != -1) { + p.writeInt(mCounter);// wMCounter_ + } + if (pCounter != -1 || mCounter != -1) { + p.writeInt(100);// nCounterProb_ + } } /** @@ -1504,34 +1443,36 @@ public class PacketCreator { * @param effect The spawn effect to use. * @return The spawn/control packet. */ - private static byte[] spawnMonsterInternal(MapleMonster life, boolean requestController, boolean newSpawn, boolean aggro, int effect, boolean makeInvis) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + private static Packet spawnMonsterInternal(MapleMonster life, boolean requestController, boolean newSpawn, boolean aggro, int effect, boolean makeInvis) { if (makeInvis) { - mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); - mplew.write(0); - mplew.writeInt(life.getObjectId()); - return mplew.getPacket(); - } - if (requestController) { - mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); - mplew.write(aggro ? 2 : 1); - } else { - mplew.writeShort(SendOpcode.SPAWN_MONSTER.getValue()); - } - mplew.writeInt(life.getObjectId()); - mplew.write(life.getController() == null ? 5 : 1); - mplew.writeInt(life.getId()); - - if (requestController) { - encodeTemporary(mplew, life.getStati()); // thanks shot for noticing encode temporary buffs missing - } else { - mplew.skip(16); + OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL); + p.writeByte(0); + p.writeInt(life.getObjectId()); + return p; } - mplew.writePos(life.getPosition()); - mplew.write(life.getStance()); - mplew.writeShort(0); //Origin FH //life.getStartFh() - mplew.writeShort(life.getFh()); + final OutPacket p; + if (requestController) { + p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL); + p.writeByte(aggro ? 2 : 1); + } else { + p = OutPacket.create(SendOpcode.SPAWN_MONSTER); + } + + p.writeInt(life.getObjectId()); + p.writeByte(life.getController() == null ? 5 : 1); + p.writeInt(life.getId()); + + if (requestController) { + encodeTemporary(p, life.getStati()); // thanks shot for noticing encode temporary buffs missing + } else { + p.skip(16); + } + + p.writePos(life.getPosition()); + p.writeByte(life.getStance()); + p.writeShort(0); //Origin FH //life.getStartFh() + p.writeShort(life.getFh()); /** @@ -1545,18 +1486,18 @@ public class PacketCreator { if (life.getParentMobOid() != 0) { MapleMonster parentMob = life.getMap().getMonsterByOid(life.getParentMobOid()); if (parentMob != null && parentMob.isAlive()) { - mplew.write(effect != 0 ? effect : -3); - mplew.writeInt(life.getParentMobOid()); + p.writeByte(effect != 0 ? effect : -3); + p.writeInt(life.getParentMobOid()); } else { - encodeParentlessMobSpawnEffect(mplew, newSpawn, effect); + encodeParentlessMobSpawnEffect(p, newSpawn, effect); } } else { - encodeParentlessMobSpawnEffect(mplew, newSpawn, effect); + encodeParentlessMobSpawnEffect(p, newSpawn, effect); } - mplew.write(life.getTeam()); - mplew.writeInt(0); // getItemEffect - return mplew.getPacket(); + p.writeByte(life.getTeam()); + p.writeInt(0); // getItemEffect + return p; } /** @@ -1566,27 +1507,26 @@ public class PacketCreator { * @param effect The effect to show when spawning. * @return The packet to spawn the mob as non-targettable. */ - public static byte[] spawnFakeMonster(MapleMonster life, int effect) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); - mplew.write(1); - mplew.writeInt(life.getObjectId()); - mplew.write(5); - mplew.writeInt(life.getId()); - encodeTemporary(mplew, life.getStati()); - mplew.writePos(life.getPosition()); - mplew.write(life.getStance()); - mplew.writeShort(0);//life.getStartFh() - mplew.writeShort(life.getFh()); + public static Packet spawnFakeMonster(MapleMonster life, int effect) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL); + p.writeByte(1); + p.writeInt(life.getObjectId()); + p.writeByte(5); + p.writeInt(life.getId()); + encodeTemporary(p, life.getStati()); + p.writePos(life.getPosition()); + p.writeByte(life.getStance()); + p.writeShort(0);//life.getStartFh() + p.writeShort(life.getFh()); if (effect > 0) { - mplew.write(effect); - mplew.write(0); - mplew.writeShort(0); + p.writeByte(effect); + p.writeByte(0); + p.writeShort(0); } - mplew.writeShort(-2); - mplew.write(life.getTeam()); - mplew.writeInt(0); - return mplew.getPacket(); + p.writeShort(-2); + p.writeByte(life.getTeam()); + p.writeInt(0); + return p; } /** @@ -1595,20 +1535,19 @@ public class PacketCreator { * @param life The mob to make targettable. * @return The packet to make the mob targettable. */ - public static byte[] makeMonsterReal(MapleMonster life) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_MONSTER.getValue()); - mplew.writeInt(life.getObjectId()); - mplew.write(5); - mplew.writeInt(life.getId()); - encodeTemporary(mplew, life.getStati()); - mplew.writePos(life.getPosition()); - mplew.write(life.getStance()); - mplew.writeShort(0);//life.getStartFh() - mplew.writeShort(life.getFh()); - mplew.writeShort(-1); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet makeMonsterReal(MapleMonster life) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER); + p.writeInt(life.getObjectId()); + p.writeByte(5); + p.writeInt(life.getId()); + encodeTemporary(p, life.getStati()); + p.writePos(life.getPosition()); + p.writeByte(life.getStance()); + p.writeShort(0);//life.getStartFh() + p.writeShort(life.getFh()); + p.writeShort(-1); + p.writeInt(0); + return p; } /** @@ -1617,12 +1556,11 @@ public class PacketCreator { * @param oid The ObjectID of the monster to stop controlling. * @return The stop control monster packet. */ - public static byte[] stopControllingMonster(int oid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.SPAWN_MONSTER_CONTROL.getValue()); - mplew.write(0); - mplew.writeInt(oid); - return mplew.getPacket(); + public static Packet stopControllingMonster(int oid) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL); + p.writeByte(0); + p.writeInt(oid); + return p; } /** @@ -1634,7 +1572,7 @@ public class PacketCreator { * @param useSkills Can the monster use skills? * @return The move response packet. */ - public static byte[] moveMonsterResponse(int objectid, short moveid, int currentMp, boolean useSkills) { + public static Packet moveMonsterResponse(int objectid, short moveid, int currentMp, boolean useSkills) { return moveMonsterResponse(objectid, moveid, currentMp, useSkills, 0, 0); } @@ -1650,16 +1588,15 @@ public class PacketCreator { * @return The move response packet. */ - public static byte[] moveMonsterResponse(int objectid, short moveid, int currentMp, boolean useSkills, int skillId, int skillLevel) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(13); - mplew.writeShort(SendOpcode.MOVE_MONSTER_RESPONSE.getValue()); - mplew.writeInt(objectid); - mplew.writeShort(moveid); - mplew.writeBool(useSkills); - mplew.writeShort(currentMp); - mplew.write(skillId); - mplew.write(skillLevel); - return mplew.getPacket(); + public static Packet moveMonsterResponse(int objectid, short moveid, int currentMp, boolean useSkills, int skillId, int skillLevel) { + OutPacket p = OutPacket.create(SendOpcode.MOVE_MONSTER_RESPONSE); + p.writeInt(objectid); + p.writeShort(moveid); + p.writeBool(useSkills); + p.writeShort(currentMp); + p.writeByte(skillId); + p.writeByte(skillLevel); + return p; } /** @@ -1671,14 +1608,13 @@ public class PacketCreator { * @param show * @return The general chat packet. */ - public static byte[] getChatText(int cidfrom, String text, boolean gm, int show) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CHATTEXT.getValue()); - mplew.writeInt(cidfrom); - mplew.writeBool(gm); - mplew.writeMapleAsciiString(text); - mplew.write(show); - return mplew.getPacket(); + public static Packet getChatText(int cidfrom, String text, boolean gm, int show) { + final OutPacket p = OutPacket.create(SendOpcode.CHATTEXT); + p.writeInt(cidfrom); + p.writeBool(gm); + p.writeString(text); + p.writeByte(show); + return p; } /** @@ -1689,27 +1625,26 @@ public class PacketCreator { * @param white White text or yellow? * @return The exp gained packet. */ - public static byte[] getShowExpGain(int gain, int equip, int party, boolean inChat, boolean white) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(3); // 3 = exp, 4 = fame, 5 = mesos, 6 = guildpoints - mplew.writeBool(white); - mplew.writeInt(gain); - mplew.writeBool(inChat); - mplew.writeInt(0); // bonus event exp - mplew.write(0); // third monster kill event - mplew.write(0); // RIP byte, this is always a 0 - mplew.writeInt(0); //wedding bonus + public static Packet getShowExpGain(int gain, int equip, int party, boolean inChat, boolean white) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(3); // 3 = exp, 4 = fame, 5 = mesos, 6 = guildpoints + p.writeBool(white); + p.writeInt(gain); + p.writeBool(inChat); + p.writeInt(0); // bonus event exp + p.writeByte(0); // third monster kill event + p.writeByte(0); // RIP byte, this is always a 0 + p.writeInt(0); //wedding bonus if (inChat) { // quest bonus rate stuff - mplew.write(0); + p.writeByte(0); } - mplew.write(0); //0 = party bonus, 100 = 1x Bonus EXP, 200 = 2x Bonus EXP - mplew.writeInt(party); // party bonus - mplew.writeInt(equip); //equip bonus - mplew.writeInt(0); //Internet Cafe Bonus - mplew.writeInt(0); //Rainbow Week Bonus - return mplew.getPacket(); + p.writeByte(0); //0 = party bonus, 100 = 1x Bonus EXP, 200 = 2x Bonus EXP + p.writeInt(party); // party bonus + p.writeInt(equip); //equip bonus + p.writeInt(0); //Internet Cafe Bonus + p.writeInt(0); //Rainbow Week Bonus + return p; } /** @@ -1718,12 +1653,11 @@ public class PacketCreator { * @param gain How many fame gained. * @return The meso gain packet. */ - public static byte[] getShowFameGain(int gain) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(4); - mplew.writeInt(gain); - return mplew.getPacket(); + public static Packet getShowFameGain(int gain) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(4); + p.writeInt(gain); + return p; } /** @@ -1732,7 +1666,7 @@ public class PacketCreator { * @param gain How many mesos gained. * @return The meso gain packet. */ - public static byte[] getShowMesoGain(int gain) { + public static Packet getShowMesoGain(int gain) { return getShowMesoGain(gain, false); } @@ -1743,18 +1677,17 @@ public class PacketCreator { * @param inChat Show in the chat window? * @return The meso gain packet. */ - public static byte[] getShowMesoGain(int gain, boolean inChat) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); + public static Packet getShowMesoGain(int gain, boolean inChat) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); if (!inChat) { - mplew.write(0); - mplew.writeShort(1); //v83 + p.writeByte(0); + p.writeShort(1); //v83 } else { - mplew.write(5); + p.writeByte(5); } - mplew.writeInt(gain); - mplew.writeShort(0); - return mplew.getPacket(); + p.writeInt(gain); + p.writeShort(0); + return p; } /** @@ -1764,7 +1697,7 @@ public class PacketCreator { * @param quantity How many items gained. * @return The item gain packet. */ - public static byte[] getShowItemGain(int itemId, short quantity) { + public static Packet getShowItemGain(int itemId, short quantity) { return getShowItemGain(itemId, quantity, false); } @@ -1776,125 +1709,98 @@ public class PacketCreator { * @param inChat Show in the chat window? * @return The item gain packet. */ - public static byte[] getShowItemGain(int itemId, short quantity, boolean inChat) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + public static Packet getShowItemGain(int itemId, short quantity, boolean inChat) { + final OutPacket p; if (inChat) { - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(3); - mplew.write(1); - mplew.writeInt(itemId); - mplew.writeInt(quantity); + p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(3); + p.writeByte(1); + p.writeInt(itemId); + p.writeInt(quantity); } else { - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.writeShort(0); - mplew.writeInt(itemId); - mplew.writeInt(quantity); - mplew.writeInt(0); - mplew.writeInt(0); + p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeShort(0); + p.writeInt(itemId); + p.writeInt(quantity); + p.writeInt(0); + p.writeInt(0); } - return mplew.getPacket(); + return p; } - public static byte[] killMonster(int oid, boolean animation) { - return killMonster(oid, animation ? 1 : 0); + public static Packet killMonster(int objId, boolean animation) { + return killMonster(objId, animation ? 1 : 0); } /** * Gets a packet telling the client that a monster was killed. * - * @param oid The objectID of the killed monster. + * @param objId The objectID of the killed monster. * @param animation 0 = dissapear, 1 = fade out, 2+ = special * @return The kill monster packet. */ - public static byte[] killMonster(int oid, int animation) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.KILL_MONSTER.getValue()); - mplew.writeInt(oid); - mplew.write(animation); - mplew.write(animation); - return mplew.getPacket(); + public static Packet killMonster(int objId, int animation) { + OutPacket p = OutPacket.create(SendOpcode.KILL_MONSTER); + p.writeInt(objId); + p.writeByte(animation); + p.writeByte(animation); + return p; } - public static byte[] updateMapItemObject(MapleMapItem drop, boolean giveOwnership) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DROP_ITEM_FROM_MAPOBJECT.getValue()); - mplew.write(2); - mplew.writeInt(drop.getObjectId()); - mplew.writeBool(drop.getMeso() > 0); - mplew.writeInt(drop.getItemId()); - mplew.writeInt(giveOwnership ? 0 : -1); - mplew.write(drop.hasExpiredOwnershipTime() ? 2 : drop.getDropType()); - mplew.writePos(drop.getPosition()); - mplew.writeInt(giveOwnership ? 0 : -1); + public static Packet updateMapItemObject(MapleMapItem drop, boolean giveOwnership) { + OutPacket p = OutPacket.create(SendOpcode.DROP_ITEM_FROM_MAPOBJECT); + p.writeByte(2); + p.writeInt(drop.getObjectId()); + p.writeBool(drop.getMeso() > 0); + p.writeInt(drop.getItemId()); + p.writeInt(giveOwnership ? 0 : -1); + p.writeByte(drop.hasExpiredOwnershipTime() ? 2 : drop.getDropType()); + p.writePos(drop.getPosition()); + p.writeInt(giveOwnership ? 0 : -1); if (drop.getMeso() == 0) { - addExpirationTime(mplew, drop.getItem().getExpiration()); + addExpirationTime(p, drop.getItem().getExpiration()); } - mplew.write(drop.isPlayerDrop() ? 0 : 1); - return mplew.getPacket(); + p.writeBool(!drop.isPlayerDrop()); + return p; } - public static byte[] dropItemFromMapObject(MapleCharacter player, MapleMapItem drop, Point dropfrom, Point dropto, byte mod) { + public static Packet dropItemFromMapObject(MapleCharacter player, MapleMapItem drop, Point dropfrom, Point dropto, byte mod) { int dropType = drop.getDropType(); if (drop.hasClientsideOwnership(player) && dropType < 3) { dropType = 2; } - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DROP_ITEM_FROM_MAPOBJECT.getValue()); - mplew.write(mod); - mplew.writeInt(drop.getObjectId()); - mplew.writeBool(drop.getMeso() > 0); // 1 mesos, 0 item, 2 and above all item meso bag, - mplew.writeInt(drop.getItemId()); // drop object ID - mplew.writeInt(drop.getClientsideOwnerId()); // owner charid/partyid :) - mplew.write(dropType); // 0 = timeout for non-owner, 1 = timeout for non-owner's party, 2 = FFA, 3 = explosive/FFA - mplew.writePos(dropto); - mplew.writeInt(drop.getDropper().getObjectId()); // dropper oid, found thanks to Li Jixue + OutPacket p = OutPacket.create(SendOpcode.DROP_ITEM_FROM_MAPOBJECT); + p.writeByte(mod); + p.writeInt(drop.getObjectId()); + p.writeBool(drop.getMeso() > 0); // 1 mesos, 0 item, 2 and above all item meso bag, + p.writeInt(drop.getItemId()); // drop object ID + p.writeInt(drop.getClientsideOwnerId()); // owner charid/partyid :) + p.writeByte(dropType); // 0 = timeout for non-owner, 1 = timeout for non-owner's party, 2 = FFA, 3 = explosive/FFA + p.writePos(dropto); + p.writeInt(drop.getDropper().getObjectId()); // dropper oid, found thanks to Li Jixue if (mod != 2) { - mplew.writePos(dropfrom); - mplew.writeShort(0);//Fh? + p.writePos(dropfrom); + p.writeShort(0);//Fh? } if (drop.getMeso() == 0) { - addExpirationTime(mplew, drop.getItem().getExpiration()); + addExpirationTime(p, drop.getItem().getExpiration()); } - mplew.write(drop.isPlayerDrop() ? 0 : 1); //pet EQP pickup - return mplew.getPacket(); + p.writeByte(drop.isPlayerDrop() ? 0 : 1); //pet EQP pickup + return p; } - /** - * Guild Name & Mark update packet, thanks to Arnah (Vertisy) - * - * @param guildName The Guild name, blank for nothing. - */ - public static byte[] guildNameChanged(int chrid, String guildName) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_NAME_CHANGED.getValue()); - mplew.writeInt(chrid); - mplew.writeMapleAsciiString(guildName); - return mplew.getPacket(); - } - - public static byte[] guildMarkChanged(int chrid, MapleGuild guild) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_MARK_CHANGED.getValue()); - mplew.writeInt(chrid); - mplew.writeShort(guild.getLogoBG()); - mplew.write(guild.getLogoBGColor()); - mplew.writeShort(guild.getLogo()); - mplew.write(guild.getLogoColor()); - return mplew.getPacket(); - } - - private static void writeForeignBuffs(MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.writeInt(0); - mplew.writeShort(0); //v83 - mplew.write(0xFC); - mplew.write(1); + private static void writeForeignBuffs(OutPacket p, MapleCharacter chr) { + p.writeInt(0); + p.writeShort(0); //v83 + p.writeByte(0xFC); + p.writeByte(1); if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) { - mplew.writeInt(2); + p.writeInt(2); } else { - mplew.writeInt(0); + p.writeInt(0); } long buffmask = 0; Integer buffvalue = null; @@ -1914,63 +1820,63 @@ public class PacketCreator { if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) { buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.MORPH)); } - mplew.writeInt((int) ((buffmask >> 32) & 0xffffffffL)); + p.writeInt((int) ((buffmask >> 32) & 0xffffffffL)); if (buffvalue != null) { if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) { //TEST - mplew.writeShort(buffvalue); + p.writeShort(buffvalue); } else { - mplew.write(buffvalue.byteValue()); + p.writeByte(buffvalue.byteValue()); } } - mplew.writeInt((int) (buffmask & 0xffffffffL)); + p.writeInt((int) (buffmask & 0xffffffffL)); // Energy Charge - mplew.writeInt(chr.getEnergyBar() == 15000 ? 1 : 0); - mplew.writeShort(0); - mplew.skip(4); + p.writeInt(chr.getEnergyBar() == 15000 ? 1 : 0); + p.writeShort(0); + p.skip(4); boolean dashBuff = chr.getBuffedValue(MapleBuffStat.DASH) != null; // Dash Speed - mplew.writeInt(dashBuff ? 1 << 24 : 0); - mplew.skip(11); - mplew.writeShort(0); + p.writeInt(dashBuff ? 1 << 24 : 0); + p.skip(11); + p.writeShort(0); // Dash Jump - mplew.skip(9); - mplew.writeInt(dashBuff ? 1 << 24 : 0); - mplew.writeShort(0); - mplew.write(0); + p.skip(9); + p.writeInt(dashBuff ? 1 << 24 : 0); + p.writeShort(0); + p.writeByte(0); // Monster Riding Integer bv = chr.getBuffedValue(MapleBuffStat.MONSTER_RIDING); if (bv != null) { MapleMount mount = chr.getMount(); if (mount != null) { - mplew.writeInt(mount.getItemId()); - mplew.writeInt(mount.getSkillId()); + p.writeInt(mount.getItemId()); + p.writeInt(mount.getSkillId()); } else { - mplew.writeLong(0); + p.writeLong(0); } } else { - mplew.writeLong(0); + p.writeLong(0); } int CHAR_MAGIC_SPAWN = Randomizer.nextInt(); // skill references found thanks to Rien dev team - mplew.writeInt(CHAR_MAGIC_SPAWN); + p.writeInt(CHAR_MAGIC_SPAWN); // Speed Infusion - mplew.skip(8); - mplew.writeInt(CHAR_MAGIC_SPAWN); - mplew.write(0); - mplew.writeInt(CHAR_MAGIC_SPAWN); - mplew.writeShort(0); + p.skip(8); + p.writeInt(CHAR_MAGIC_SPAWN); + p.writeByte(0); + p.writeInt(CHAR_MAGIC_SPAWN); + p.writeShort(0); // Homing Beacon - mplew.skip(9); - mplew.writeInt(CHAR_MAGIC_SPAWN); - mplew.writeInt(0); + p.skip(9); + p.writeInt(CHAR_MAGIC_SPAWN); + p.writeInt(0); // Zombify - mplew.skip(9); - mplew.writeInt(CHAR_MAGIC_SPAWN); - mplew.writeShort(0); - mplew.writeShort(0); + p.skip(9); + p.writeInt(CHAR_MAGIC_SPAWN); + p.writeShort(0); + p.writeShort(0); } /** @@ -1981,140 +1887,138 @@ public class PacketCreator { * @param enteringField Whether the character to spawn is not yet present in the map or already is. * @return The spawn player packet. */ - public static byte[] spawnPlayerMapObject(MapleClient target, MapleCharacter chr, boolean enteringField) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_PLAYER.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(chr.getLevel()); //v83 - mplew.writeMapleAsciiString(chr.getName()); + public static Packet spawnPlayerMapObject(MapleClient target, MapleCharacter chr, boolean enteringField) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_PLAYER); + p.writeInt(chr.getId()); + p.writeByte(chr.getLevel()); //v83 + p.writeString(chr.getName()); if (chr.getGuildId() < 1) { - mplew.writeMapleAsciiString(""); - mplew.write(new byte[6]); + p.writeString(""); + p.writeBytes(new byte[6]); } else { MapleGuildSummary gs = chr.getClient().getWorldServer().getGuildSummary(chr.getGuildId(), chr.getWorld()); if (gs != null) { - mplew.writeMapleAsciiString(gs.getName()); - mplew.writeShort(gs.getLogoBG()); - mplew.write(gs.getLogoBGColor()); - mplew.writeShort(gs.getLogo()); - mplew.write(gs.getLogoColor()); + p.writeString(gs.getName()); + p.writeShort(gs.getLogoBG()); + p.writeByte(gs.getLogoBGColor()); + p.writeShort(gs.getLogo()); + p.writeByte(gs.getLogoColor()); } else { - mplew.writeMapleAsciiString(""); - mplew.write(new byte[6]); + p.writeString(""); + p.writeBytes(new byte[6]); } } - writeForeignBuffs(mplew, chr); + writeForeignBuffs(p, chr); - mplew.writeShort(chr.getJob().getId()); + p.writeShort(chr.getJob().getId()); - /* replace "mplew.writeShort(chr.getJob().getId())" with this snippet for 3rd person FJ animation on all classes + /* replace "p.writeShort(chr.getJob().getId())" with this snippet for 3rd person FJ animation on all classes if (chr.getJob().isA(MapleJob.HERMIT) || chr.getJob().isA(MapleJob.DAWNWARRIOR2) || chr.getJob().isA(MapleJob.NIGHTWALKER2)) { - mplew.writeShort(chr.getJob().getId()); + p.writeShort(chr.getJob().getId()); } else { - mplew.writeShort(412); + p.writeShort(412); }*/ - addCharLook(mplew, chr, false); - mplew.writeInt(chr.getInventory(MapleInventoryType.CASH).countById(5110000)); - mplew.writeInt(chr.getItemEffect()); - mplew.writeInt(ItemConstants.getInventoryType(chr.getChair()) == MapleInventoryType.SETUP ? chr.getChair() : 0); + addCharLook(p, chr, false); + p.writeInt(chr.getInventory(MapleInventoryType.CASH).countById(5110000)); + p.writeInt(chr.getItemEffect()); + p.writeInt(ItemConstants.getInventoryType(chr.getChair()) == MapleInventoryType.SETUP ? chr.getChair() : 0); if (enteringField) { Point spawnPos = new Point(chr.getPosition()); spawnPos.y -= 42; - mplew.writePos(spawnPos); - mplew.write(6); + p.writePos(spawnPos); + p.writeByte(6); } else { - mplew.writePos(chr.getPosition()); - mplew.write(chr.getStance()); + p.writePos(chr.getPosition()); + p.writeByte(chr.getStance()); } - mplew.writeShort(0);//chr.getFh() - mplew.write(0); + p.writeShort(0);//chr.getFh() + p.writeByte(0); MaplePet[] pet = chr.getPets(); for (int i = 0; i < 3; i++) { if (pet[i] != null) { - addPetInfo(mplew, pet[i], false); + addPetInfo(p, pet[i], false); } } - mplew.write(0); //end of pets + p.writeByte(0); //end of pets if (chr.getMount() == null) { - mplew.writeInt(1); // mob level - mplew.writeLong(0); // mob exp + tiredness + p.writeInt(1); // mob level + p.writeLong(0); // mob exp + tiredness } else { - mplew.writeInt(chr.getMount().getLevel()); - mplew.writeInt(chr.getMount().getExp()); - mplew.writeInt(chr.getMount().getTiredness()); + p.writeInt(chr.getMount().getLevel()); + p.writeInt(chr.getMount().getExp()); + p.writeInt(chr.getMount().getTiredness()); } MaplePlayerShop mps = chr.getPlayerShop(); if (mps != null && mps.isOwner(chr)) { if (mps.hasFreeSlot()) { - addAnnounceBox(mplew, mps, mps.getVisitors().length); + addAnnounceBox(p, mps, mps.getVisitors().length); } else { - addAnnounceBox(mplew, mps, 1); + addAnnounceBox(p, mps, 1); } } else { MapleMiniGame miniGame = chr.getMiniGame(); if (miniGame != null && miniGame.isOwner(chr)) { if (miniGame.hasFreeSlot()) { - addAnnounceBox(mplew, miniGame, 1, 0); + addAnnounceBox(p, miniGame, 1, 0); } else { - addAnnounceBox(mplew, miniGame, 2, miniGame.isMatchInProgress() ? 1 : 0); + addAnnounceBox(p, miniGame, 2, miniGame.isMatchInProgress() ? 1 : 0); } } else { - mplew.write(0); + p.writeByte(0); } } if (chr.getChalkboard() != null) { - mplew.write(1); - mplew.writeMapleAsciiString(chr.getChalkboard()); + p.writeByte(1); + p.writeString(chr.getChalkboard()); } else { - mplew.write(0); + p.writeByte(0); } - addRingLook(mplew, chr, true); // crush - addRingLook(mplew, chr, false); // friendship - addMarriageRingLook(target, mplew, chr); - encodeNewYearCardInfo(mplew, chr); // new year seems to crash sometimes... - mplew.write(0); - mplew.write(0); - mplew.write(chr.getTeam());//only needed in specific fields - return mplew.getPacket(); + addRingLook(p, chr, true); // crush + addRingLook(p, chr, false); // friendship + addMarriageRingLook(target, p, chr); + encodeNewYearCardInfo(p, chr); // new year seems to crash sometimes... + p.writeByte(0); + p.writeByte(0); + p.writeByte(chr.getTeam());//only needed in specific fields + return p; } - private static void encodeNewYearCardInfo(MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + private static void encodeNewYearCardInfo(OutPacket p, MapleCharacter chr) { Set newyears = chr.getReceivedNewYearRecords(); if (!newyears.isEmpty()) { - mplew.write(1); + p.writeByte(1); - mplew.writeInt(newyears.size()); + p.writeInt(newyears.size()); for (NewYearCardRecord nyc : newyears) { - mplew.writeInt(nyc.getId()); + p.writeInt(nyc.getId()); } } else { - mplew.write(0); + p.writeByte(0); } } - public static byte[] onNewYearCardRes(MapleCharacter user, int cardId, int mode, int msg) { + public static Packet onNewYearCardRes(MapleCharacter user, int cardId, int mode, int msg) { NewYearCardRecord newyear = user.getNewYearRecord(cardId); return onNewYearCardRes(user, newyear, mode, msg); } - public static byte[] onNewYearCardRes(MapleCharacter user, NewYearCardRecord newyear, int mode, int msg) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NEW_YEAR_CARD_RES.getValue()); - mplew.write(mode); + public static Packet onNewYearCardRes(MapleCharacter user, NewYearCardRecord newyear, int mode, int msg) { + OutPacket p = OutPacket.create(SendOpcode.NEW_YEAR_CARD_RES); + p.writeByte(mode); switch (mode) { case 4: // Successfully sent a New Year Card\r\n to %s. case 6: // Successfully received a New Year Card. - encodeNewYearCard(newyear, mplew); + encodeNewYearCard(newyear, p); break; case 8: // Successfully deleted a New Year Card. - mplew.writeInt(newyear.getId()); + p.writeInt(newyear.getId()); break; case 5: // Nexon's stupid and makes 4 modes do the same operation.. @@ -2129,53 +2033,53 @@ public class PacketCreator { // 0x15: An error occured during DB operation. // 0x16: An unknown error occured ! // 0xF: You cannot send a card to yourself ! - mplew.write(msg); + p.writeByte(msg); break; case 0xA: // GetUnreceivedList_Done int nSN = 1; - mplew.writeInt(nSN); + p.writeInt(nSN); if ((nSN - 1) <= 98 && nSN > 0) {//lol nexon are you kidding for (int i = 0; i < nSN; i++) { - mplew.writeInt(newyear.getId()); - mplew.writeInt(newyear.getSenderId()); - mplew.writeMapleAsciiString(newyear.getSenderName()); + p.writeInt(newyear.getId()); + p.writeInt(newyear.getSenderId()); + p.writeString(newyear.getSenderName()); } } break; case 0xC: // NotiArrived - mplew.writeInt(newyear.getId()); - mplew.writeMapleAsciiString(newyear.getSenderName()); + p.writeInt(newyear.getId()); + p.writeString(newyear.getSenderName()); break; case 0xD: // BroadCast_AddCardInfo - mplew.writeInt(newyear.getId()); - mplew.writeInt(user.getId()); + p.writeInt(newyear.getId()); + p.writeInt(user.getId()); break; case 0xE: // BroadCast_RemoveCardInfo - mplew.writeInt(newyear.getId()); + p.writeInt(newyear.getId()); break; } - return mplew.getPacket(); + return p; } - private static void encodeNewYearCard(NewYearCardRecord newyear, MaplePacketLittleEndianWriter mplew) { - mplew.writeInt(newyear.getId()); - mplew.writeInt(newyear.getSenderId()); - mplew.writeMapleAsciiString(newyear.getSenderName()); - mplew.writeBool(newyear.isSenderCardDiscarded()); - mplew.writeLong(newyear.getDateSent()); - mplew.writeInt(newyear.getReceiverId()); - mplew.writeMapleAsciiString(newyear.getReceiverName()); - mplew.writeBool(newyear.isReceiverCardDiscarded()); - mplew.writeBool(newyear.isReceiverCardReceived()); - mplew.writeLong(newyear.getDateReceived()); - mplew.writeMapleAsciiString(newyear.getMessage()); + private static void encodeNewYearCard(NewYearCardRecord newyear, OutPacket p) { + p.writeInt(newyear.getId()); + p.writeInt(newyear.getSenderId()); + p.writeString(newyear.getSenderName()); + p.writeBool(newyear.isSenderCardDiscarded()); + p.writeLong(newyear.getDateSent()); + p.writeInt(newyear.getReceiverId()); + p.writeString(newyear.getReceiverName()); + p.writeBool(newyear.isReceiverCardDiscarded()); + p.writeBool(newyear.isReceiverCardReceived()); + p.writeLong(newyear.getDateReceived()); + p.writeString(newyear.getMessage()); } - private static void addRingLook(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr, boolean crush) { + private static void addRingLook(final OutPacket p, MapleCharacter chr, boolean crush) { List rings; if (crush) { rings = chr.getCrushRings(); @@ -2187,277 +2091,263 @@ public class PacketCreator { if (ring.equipped()) { if (yes == false) { yes = true; - mplew.write(1); + p.writeByte(1); } - mplew.writeInt(ring.getRingId()); - mplew.writeInt(0); - mplew.writeInt(ring.getPartnerRingId()); - mplew.writeInt(0); - mplew.writeInt(ring.getItemId()); + p.writeInt(ring.getRingId()); + p.writeInt(0); + p.writeInt(ring.getPartnerRingId()); + p.writeInt(0); + p.writeInt(ring.getItemId()); } } if (yes == false) { - mplew.write(0); + p.writeByte(0); } } - private static void addMarriageRingLook(MapleClient target, final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { + private static void addMarriageRingLook(MapleClient target, final OutPacket p, MapleCharacter chr) { MapleRing ring = chr.getMarriageRing(); if (ring == null || !ring.equipped()) { - mplew.write(0); + p.writeByte(0); } else { - mplew.write(1); + p.writeByte(1); MapleCharacter targetChr = target.getPlayer(); if (targetChr != null && targetChr.getPartnerId() == chr.getId()) { - mplew.writeInt(0); - mplew.writeInt(0); + p.writeInt(0); + p.writeInt(0); } else { - mplew.writeInt(chr.getId()); - mplew.writeInt(ring.getPartnerChrId()); + p.writeInt(chr.getId()); + p.writeInt(ring.getPartnerChrId()); } - mplew.writeInt(ring.getItemId()); + p.writeInt(ring.getItemId()); } } /** * Adds a announcement box to an existing MaplePacketLittleEndianWriter. * - * @param mplew The MaplePacketLittleEndianWriter to add an announcement box + * @param p The MaplePacketLittleEndianWriter to add an announcement box * to. * @param shop The shop to announce. */ - private static void addAnnounceBox(final MaplePacketLittleEndianWriter mplew, MaplePlayerShop shop, int availability) { - mplew.write(4); - mplew.writeInt(shop.getObjectId()); - mplew.writeMapleAsciiString(shop.getDescription()); - mplew.write(0); - mplew.write(0); - mplew.write(1); - mplew.write(availability); - mplew.write(0); + private static void addAnnounceBox(final OutPacket p, MaplePlayerShop shop, int availability) { + p.writeByte(4); + p.writeInt(shop.getObjectId()); + p.writeString(shop.getDescription()); + p.writeByte(0); + p.writeByte(0); + p.writeByte(1); + p.writeByte(availability); + p.writeByte(0); } - private static void addAnnounceBox(final MaplePacketLittleEndianWriter mplew, MapleMiniGame game, int ammount, int joinable) { - mplew.write(game.getGameType().getValue()); - mplew.writeInt(game.getObjectId()); // gameid/shopid - mplew.writeMapleAsciiString(game.getDescription()); // desc - mplew.writeBool(!game.getPassword().isEmpty()); // password here, thanks GabrielSin - mplew.write(game.getPieceType()); - mplew.write(ammount); - mplew.write(2); //player capacity - mplew.write(joinable); + private static void addAnnounceBox(final OutPacket p, MapleMiniGame game, int ammount, int joinable) { + p.writeByte(game.getGameType().getValue()); + p.writeInt(game.getObjectId()); // gameid/shopid + p.writeString(game.getDescription()); // desc + p.writeBool(!game.getPassword().isEmpty()); // password here, thanks GabrielSin + p.writeByte(game.getPieceType()); + p.writeByte(ammount); + p.writeByte(2); //player capacity + p.writeByte(joinable); } - private static void updateHiredMerchantBoxInfo(MaplePacketLittleEndianWriter mplew, MapleHiredMerchant hm) { + private static void updateHiredMerchantBoxInfo(OutPacket p, MapleHiredMerchant hm) { byte[] roomInfo = hm.getShopRoomInfo(); - mplew.write(5); - mplew.writeInt(hm.getObjectId()); - mplew.writeMapleAsciiString(hm.getDescription()); - mplew.write(hm.getItemId() % 100); - mplew.write(roomInfo); // visitor capacity here, thanks GabrielSin + p.writeByte(5); + p.writeInt(hm.getObjectId()); + p.writeString(hm.getDescription()); + p.writeByte(hm.getItemId() % 100); + p.writeBytes(roomInfo); // visitor capacity here, thanks GabrielSin } - public static byte[] updateHiredMerchantBox(MapleHiredMerchant hm) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_HIRED_MERCHANT.getValue()); - mplew.writeInt(hm.getOwnerId()); - - updateHiredMerchantBoxInfo(mplew, hm); - return mplew.getPacket(); + public static Packet updateHiredMerchantBox(MapleHiredMerchant hm) { + final OutPacket p = OutPacket.create(SendOpcode.UPDATE_HIRED_MERCHANT); + p.writeInt(hm.getOwnerId()); + updateHiredMerchantBoxInfo(p, hm); + return p; } - private static void updatePlayerShopBoxInfo(final MaplePacketLittleEndianWriter mplew, MaplePlayerShop shop) { + private static void updatePlayerShopBoxInfo(OutPacket p, MaplePlayerShop shop) { byte[] roomInfo = shop.getShopRoomInfo(); - mplew.write(4); - mplew.writeInt(shop.getObjectId()); - mplew.writeMapleAsciiString(shop.getDescription()); - mplew.write(0); // pw - mplew.write(shop.getItemId() % 100); - mplew.write(roomInfo[0]); // curPlayers - mplew.write(roomInfo[1]); // maxPlayers - mplew.write(0); + p.writeByte(4); + p.writeInt(shop.getObjectId()); + p.writeString(shop.getDescription()); + p.writeByte(0); // pw + p.writeByte(shop.getItemId() % 100); + p.writeByte(roomInfo[0]); // curPlayers + p.writeByte(roomInfo[1]); // maxPlayers + p.writeByte(0); } - public static byte[] updatePlayerShopBox(MaplePlayerShop shop) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); - mplew.writeInt(shop.getOwner().getId()); - - updatePlayerShopBoxInfo(mplew, shop); - return mplew.getPacket(); + public static Packet updatePlayerShopBox(MaplePlayerShop shop) { + final OutPacket p = OutPacket.create(SendOpcode.UPDATE_CHAR_BOX); + p.writeInt(shop.getOwner().getId()); + updatePlayerShopBoxInfo(p, shop); + return p; } - public static byte[] removePlayerShopBox(MaplePlayerShop shop) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); - mplew.writeInt(shop.getOwner().getId()); - mplew.write(0); - return mplew.getPacket(); + public static Packet removePlayerShopBox(MaplePlayerShop shop) { + OutPacket p = OutPacket.create(SendOpcode.UPDATE_CHAR_BOX); + p.writeInt(shop.getOwner().getId()); + p.writeByte(0); + return p; } - public static byte[] facialExpression(MapleCharacter from, int expression) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(10); - mplew.writeShort(SendOpcode.FACIAL_EXPRESSION.getValue()); - mplew.writeInt(from.getId()); - mplew.writeInt(expression); - return mplew.getPacket(); + public static Packet facialExpression(MapleCharacter from, int expression) { + OutPacket p = OutPacket.create(SendOpcode.FACIAL_EXPRESSION); + p.writeInt(from.getId()); + p.writeInt(expression); + return p; } - private static void rebroadcastMovementList(LittleEndianWriter lew, SeekableLittleEndianAccessor slea, long movementDataLength) { + private static void rebroadcastMovementList(OutPacket op, SeekableLittleEndianAccessor slea, long movementDataLength) { //movement command length is sent by client, probably not a big issue? (could be calculated on server) //if multiple write/reads are slow, could use (and cache?) a byte[] buffer for (long i = 0; i < movementDataLength; i++) { - lew.write(slea.readByte()); + op.writeByte(slea.readByte()); } } - private static void serializeMovementList(LittleEndianWriter lew, List moves) { - lew.write(moves.size()); + private static void serializeMovementList(OutPacket p, List moves) { + p.writeByte(moves.size()); for (LifeMovementFragment move : moves) { - move.serialize(lew); + move.serialize(p); } } - public static byte[] movePlayer(int cid, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MOVE_PLAYER.getValue()); - mplew.writeInt(cid); - mplew.writeInt(0); - rebroadcastMovementList(mplew, movementSlea, movementDataLength); - return mplew.getPacket(); + public static Packet movePlayer(int chrId, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { + OutPacket p = OutPacket.create(SendOpcode.MOVE_PLAYER); + p.writeInt(chrId); + p.writeInt(0); + rebroadcastMovementList(p, movementSlea, movementDataLength); + return p; } - public static byte[] moveSummon(int cid, int oid, Point startPos, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MOVE_SUMMON.getValue()); - mplew.writeInt(cid); - mplew.writeInt(oid); - mplew.writePos(startPos); - rebroadcastMovementList(mplew, movementSlea, movementDataLength); - return mplew.getPacket(); + public static Packet moveSummon(int cid, int oid, Point startPos, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { + final OutPacket p = OutPacket.create(SendOpcode.MOVE_SUMMON); + p.writeInt(cid); + p.writeInt(oid); + p.writePos(startPos); + rebroadcastMovementList(p, movementSlea, movementDataLength); + return p; } - public static byte[] moveMonster(int oid, boolean skillPossible, int skill, int skillId, int skillLevel, int pOption, Point startPos, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MOVE_MONSTER.getValue()); - mplew.writeInt(oid); - mplew.write(0); - mplew.writeBool(skillPossible); - mplew.write(skill); - mplew.write(skillId); - mplew.write(skillLevel); - mplew.writeShort(pOption); - mplew.writePos(startPos); - rebroadcastMovementList(mplew, movementSlea, movementDataLength); - return mplew.getPacket(); + public static Packet moveMonster(int oid, boolean skillPossible, int skill, int skillId, int skillLevel, int pOption, Point startPos, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { + final OutPacket p = OutPacket.create(SendOpcode.MOVE_MONSTER); + p.writeInt(oid); + p.writeByte(0); + p.writeBool(skillPossible); + p.writeByte(skill); + p.writeByte(skillId); + p.writeByte(skillLevel); + p.writeShort(pOption); + p.writePos(startPos); + rebroadcastMovementList(p, movementSlea, movementDataLength); + return p; } - public static byte[] summonAttack(int cid, int summonOid, byte direction, List allDamage) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + public static Packet summonAttack(int cid, int summonOid, byte direction, List allDamage) { + OutPacket p = OutPacket.create(SendOpcode.SUMMON_ATTACK); //b2 00 29 f7 00 00 9a a3 04 00 c8 04 01 94 a3 04 00 06 ff 2b 00 - mplew.writeShort(SendOpcode.SUMMON_ATTACK.getValue()); - mplew.writeInt(cid); - mplew.writeInt(summonOid); - mplew.write(0); // char level - mplew.write(direction); - mplew.write(allDamage.size()); + p.writeInt(cid); + p.writeInt(summonOid); + p.writeByte(0); // char level + p.writeByte(direction); + p.writeByte(allDamage.size()); for (SummonAttackEntry attackEntry : allDamage) { - mplew.writeInt(attackEntry.getMonsterOid()); // oid - mplew.write(6); // who knows - mplew.writeInt(attackEntry.getDamage()); // damage + p.writeInt(attackEntry.getMonsterOid()); // oid + p.writeByte(6); // who knows + p.writeInt(attackEntry.getDamage()); // damage } - return mplew.getPacket(); + return p; } /* - public static byte[] summonAttack(int cid, int summonSkillId, byte direction, List allDamage) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + public static Packet summonAttack(int cid, int summonSkillId, byte direction, List allDamage) { + OutPacket p = OutPacket.create(SendOpcode); //b2 00 29 f7 00 00 9a a3 04 00 c8 04 01 94 a3 04 00 06 ff 2b 00 - mplew.writeShort(SendOpcode.SUMMON_ATTACK.getValue()); - mplew.writeInt(cid); - mplew.writeInt(summonSkillId); - mplew.write(direction); - mplew.write(4); - mplew.write(allDamage.size()); + SUMMON_ATTACK); + p.writeInt(cid); + p.writeInt(summonSkillId); + p.writeByte(direction); + p.writeByte(4); + p.writeByte(allDamage.size()); for (SummonAttackEntry attackEntry : allDamage) { - mplew.writeInt(attackEntry.getMonsterOid()); // oid - mplew.write(6); // who knows - mplew.writeInt(attackEntry.getDamage()); // damage + p.writeInt(attackEntry.getMonsterOid()); // oid + p.writeByte(6); // who knows + p.writeInt(attackEntry.getDamage()); // damage } - return mplew.getPacket(); + return p; } */ - public static byte[] closeRangeAttack(MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, Map> damage, int speed, int direction, int display) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CLOSE_RANGE_ATTACK.getValue()); - addAttackBody(mplew, chr, skill, skilllevel, stance, numAttackedAndDamage, 0, damage, speed, direction, display); - return mplew.getPacket(); + public static Packet closeRangeAttack(MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, Map> damage, int speed, int direction, int display) { + final OutPacket p = OutPacket.create(SendOpcode.CLOSE_RANGE_ATTACK); + addAttackBody(p, chr, skill, skilllevel, stance, numAttackedAndDamage, 0, damage, speed, direction, display); + return p; } - public static byte[] rangedAttack(MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, int projectile, Map> damage, int speed, int direction, int display) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.RANGED_ATTACK.getValue()); - addAttackBody(mplew, chr, skill, skilllevel, stance, numAttackedAndDamage, projectile, damage, speed, direction, display); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet rangedAttack(MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, int projectile, Map> damage, int speed, int direction, int display) { + final OutPacket p = OutPacket.create(SendOpcode.RANGED_ATTACK); + addAttackBody(p, chr, skill, skilllevel, stance, numAttackedAndDamage, projectile, damage, speed, direction, display); + p.writeInt(0); + return p; } - public static byte[] magicAttack(MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, Map> damage, int charge, int speed, int direction, int display) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAGIC_ATTACK.getValue()); - addAttackBody(mplew, chr, skill, skilllevel, stance, numAttackedAndDamage, 0, damage, speed, direction, display); + public static Packet magicAttack(MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, Map> damage, int charge, int speed, int direction, int display) { + final OutPacket p = OutPacket.create(SendOpcode.MAGIC_ATTACK); + addAttackBody(p, chr, skill, skilllevel, stance, numAttackedAndDamage, 0, damage, speed, direction, display); if (charge != -1) { - mplew.writeInt(charge); + p.writeInt(charge); } - return mplew.getPacket(); + return p; } - private static void addAttackBody(LittleEndianWriter lew, MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, int projectile, Map> damage, int speed, int direction, int display) { - lew.writeInt(chr.getId()); - lew.write(numAttackedAndDamage); - lew.write(0x5B);//? - lew.write(skilllevel); + private static void addAttackBody(OutPacket p, MapleCharacter chr, int skill, int skilllevel, int stance, int numAttackedAndDamage, int projectile, Map> damage, int speed, int direction, int display) { + p.writeInt(chr.getId()); + p.writeByte(numAttackedAndDamage); + p.writeByte(0x5B);//? + p.writeByte(skilllevel); if (skilllevel > 0) { - lew.writeInt(skill); + p.writeInt(skill); } - lew.write(display); - lew.write(direction); - lew.write(stance); - lew.write(speed); - lew.write(0x0A); - lew.writeInt(projectile); + p.writeByte(display); + p.writeByte(direction); + p.writeByte(stance); + p.writeByte(speed); + p.writeByte(0x0A); + p.writeInt(projectile); for (Integer oned : damage.keySet()) { List onedList = damage.get(oned); if (onedList != null) { - lew.writeInt(oned); - lew.write(0x0); + p.writeInt(oned); + p.writeByte(0x0); if (skill == 4211006) { - lew.write(onedList.size()); + p.writeByte(onedList.size()); } for (Integer eachd : onedList) { - lew.writeInt(eachd); + p.writeInt(eachd); } } } } - public static byte[] throwGrenade(int cid, Point p, int keyDown, int skillId, int skillLevel) { // packets found thanks to GabrielSin - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.THROW_GRENADE.getValue()); - mplew.writeInt(cid); - mplew.writeInt(p.x); - mplew.writeInt(p.y); - mplew.writeInt(keyDown); - mplew.writeInt(skillId); - mplew.writeInt(skillLevel); - return mplew.getPacket(); + public static Packet throwGrenade(int cid, Point pos, int keyDown, int skillId, int skillLevel) { // packets found thanks to GabrielSin + OutPacket p = OutPacket.create(SendOpcode.THROW_GRENADE); + p.writeInt(cid); + p.writeInt(pos.x); + p.writeInt(pos.y); + p.writeInt(keyDown); + p.writeInt(skillId); + p.writeInt(skillLevel); + return p; } // someone thought it was a good idea to handle floating point representation through packets ROFL @@ -2465,29 +2355,28 @@ public class PacketCreator { return (int) (Double.doubleToLongBits(d) >> 48); } - public static byte[] getNPCShop(MapleClient c, int sid, List items) { + public static Packet getNPCShop(MapleClient c, int sid, List items) { MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.OPEN_NPC_SHOP.getValue()); - mplew.writeInt(sid); - mplew.writeShort(items.size()); // item count + final OutPacket p = OutPacket.create(SendOpcode.OPEN_NPC_SHOP); + p.writeInt(sid); + p.writeShort(items.size()); // item count for (MapleShopItem item : items) { - mplew.writeInt(item.getItemId()); - mplew.writeInt(item.getPrice()); - mplew.writeInt(item.getPrice() == 0 ? item.getPitch() : 0); //Perfect Pitch - mplew.writeInt(0); //Can be used x minutes after purchase - mplew.writeInt(0); //Hmm + p.writeInt(item.getItemId()); + p.writeInt(item.getPrice()); + p.writeInt(item.getPrice() == 0 ? item.getPitch() : 0); //Perfect Pitch + p.writeInt(0); //Can be used x minutes after purchase + p.writeInt(0); //Hmm if (!ItemConstants.isRechargeable(item.getItemId())) { - mplew.writeShort(1); // stacksize o.o - mplew.writeShort(item.getBuyable()); + p.writeShort(1); // stacksize o.o + p.writeShort(item.getBuyable()); } else { - mplew.writeShort(0); - mplew.writeInt(0); - mplew.writeShort(doubleToShortBits(ii.getUnitPrice(item.getItemId()))); - mplew.writeShort(ii.getSlotMax(c, item.getItemId())); + p.writeShort(0); + p.writeInt(0); + p.writeShort(doubleToShortBits(ii.getUnitPrice(item.getItemId()))); + p.writeShort(ii.getSlotMax(c, item.getItemId())); } } - return mplew.getPacket(); + return p; } /* 00 = / @@ -2501,43 +2390,40 @@ public class PacketCreator { * 0D = You need more items * 0E = CRASH; LENGTH NEEDS TO BE LONGER :O */ - public static byte[] shopTransaction(byte code) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.CONFIRM_SHOP_TRANSACTION.getValue()); - mplew.write(code); - return mplew.getPacket(); + public static Packet shopTransaction(byte code) { + OutPacket p = OutPacket.create(SendOpcode.CONFIRM_SHOP_TRANSACTION); + p.writeByte(code); + return p; } - public static byte[] updateInventorySlotLimit(int type, int newLimit) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.INVENTORY_GROW.getValue()); - mplew.write(type); - mplew.write(newLimit); - return mplew.getPacket(); + public static Packet updateInventorySlotLimit(int type, int newLimit) { + final OutPacket p = OutPacket.create(SendOpcode.INVENTORY_GROW); + p.writeByte(type); + p.writeByte(newLimit); + return p; } - public static byte[] modifyInventory(boolean updateTick, final List mods) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.INVENTORY_OPERATION.getValue()); - mplew.writeBool(updateTick); - mplew.write(mods.size()); - //mplew.write(0); v104 :) + public static Packet modifyInventory(boolean updateTick, final List mods) { + OutPacket p = OutPacket.create(SendOpcode.INVENTORY_OPERATION); + p.writeBool(updateTick); + p.writeByte(mods.size()); + //p.writeByte(0); v104 :) int addMovement = -1; for (ModifyInventory mod : mods) { - mplew.write(mod.getMode()); - mplew.write(mod.getInventoryType()); - mplew.writeShort(mod.getMode() == 2 ? mod.getOldPosition() : mod.getPosition()); + p.writeByte(mod.getMode()); + p.writeByte(mod.getInventoryType()); + p.writeShort(mod.getMode() == 2 ? mod.getOldPosition() : mod.getPosition()); switch (mod.getMode()) { case 0: {//add item - addItemInfo(mplew, mod.getItem(), true); + addItemInfo(p, mod.getItem(), true); break; } case 1: {//update quantity - mplew.writeShort(mod.getQuantity()); + p.writeShort(mod.getQuantity()); break; } case 2: {//move - mplew.writeShort(mod.getPosition()); + p.writeShort(mod.getPosition()); if (mod.getPosition() < 0 || mod.getOldPosition() < 0) { addMovement = mod.getOldPosition() < 0 ? 1 : 2; } @@ -2553,92 +2439,84 @@ public class PacketCreator { mod.clear(); } if (addMovement > -1) { - mplew.write(addMovement); + p.writeByte(addMovement); } - return mplew.getPacket(); + return p; } - public static byte[] getScrollEffect(int chr, ScrollResult scrollSuccess, boolean legendarySpirit, boolean whiteScroll) { // thanks to Rien dev team - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_SCROLL_EFFECT.getValue()); - mplew.writeInt(chr); - mplew.writeBool(scrollSuccess == ScrollResult.SUCCESS); - mplew.writeBool(scrollSuccess == ScrollResult.CURSE); - mplew.writeBool(legendarySpirit); - mplew.writeBool(whiteScroll); - return mplew.getPacket(); + public static Packet getScrollEffect(int chr, ScrollResult scrollSuccess, boolean legendarySpirit, boolean whiteScroll) { // thanks to Rien dev team + OutPacket p = OutPacket.create(SendOpcode.SHOW_SCROLL_EFFECT); + p.writeInt(chr); + p.writeBool(scrollSuccess == ScrollResult.SUCCESS); + p.writeBool(scrollSuccess == ScrollResult.CURSE); + p.writeBool(legendarySpirit); + p.writeBool(whiteScroll); + return p; } - public static byte[] removePlayerFromMap(int cid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.REMOVE_PLAYER_FROM_MAP.getValue()); - mplew.writeInt(cid); - return mplew.getPacket(); + public static Packet removePlayerFromMap(int chrId) { + OutPacket p = OutPacket.create(SendOpcode.REMOVE_PLAYER_FROM_MAP); + p.writeInt(chrId); + return p; } - public static byte[] catchMessage(int message) { // not done, I guess - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BRIDLE_MOB_CATCH_FAIL.getValue()); - mplew.write(message); // 1 = too strong, 2 = Elemental Rock - mplew.writeInt(0);//Maybe itemid? - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet catchMessage(int message) { // not done, I guess + final OutPacket p = OutPacket.create(SendOpcode.BRIDLE_MOB_CATCH_FAIL); + p.writeByte(message); // 1 = too strong, 2 = Elemental Rock + p.writeInt(0);//Maybe itemid? + p.writeInt(0); + return p; } - public static byte[] showAllCharacter(int chars, int unk) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); - mplew.writeShort(SendOpcode.VIEW_ALL_CHAR.getValue()); - mplew.write(chars > 0 ? 1 : 5); // 2: already connected to server, 3 : unk error (view-all-characters), 5 : cannot find any - mplew.writeInt(chars); - mplew.writeInt(unk); - return mplew.getPacket(); + public static Packet showAllCharacter(int chars, int unk) { + OutPacket p = OutPacket.create(SendOpcode.VIEW_ALL_CHAR); + p.writeByte(chars > 0 ? 1 : 5); // 2: already connected to server, 3 : unk error (view-all-characters), 5 : cannot find any + p.writeInt(chars); + p.writeInt(unk); + return p; } - public static byte[] showAriantScoreBoard() { // thanks lrenex for pointing match's end scoreboard packet - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ARIANT_ARENA_SHOW_RESULT.getValue()); - return mplew.getPacket(); + public static Packet showAriantScoreBoard() { // thanks lrenex for pointing match's end scoreboard packet + return OutPacket.create(SendOpcode.ARIANT_ARENA_SHOW_RESULT); } - public static byte[] updateAriantPQRanking(final MapleCharacter chr, final int score) { + public static Packet updateAriantPQRanking(final MapleCharacter chr, final int score) { return updateAriantPQRanking(new LinkedHashMap() {{ put(chr, score); }}); } - public static byte[] updateAriantPQRanking(Map playerScore) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ARIANT_ARENA_USER_SCORE.getValue()); - mplew.write(playerScore.size()); + public static Packet updateAriantPQRanking(Map playerScore) { + OutPacket p = OutPacket.create(SendOpcode.ARIANT_ARENA_USER_SCORE); + p.writeByte(playerScore.size()); for (Entry e : playerScore.entrySet()) { - mplew.writeMapleAsciiString(e.getKey().getName()); - mplew.writeInt(e.getValue()); + p.writeString(e.getKey().getName()); + p.writeInt(e.getValue()); } - return mplew.getPacket(); + return p; } - public static byte[] updateWitchTowerScore(int score) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.WITCH_TOWER_SCORE_UPDATE.getValue()); - mplew.write(score); - return mplew.getPacket(); + public static Packet updateWitchTowerScore(int score) { + OutPacket p = OutPacket.create(SendOpcode.WITCH_TOWER_SCORE_UPDATE); + p.writeByte(score); + return p; } - public static byte[] silentRemoveItemFromMap(int oid) { - return removeItemFromMap(oid, 1, 0); + public static Packet silentRemoveItemFromMap(int objId) { + return removeItemFromMap(objId, 1, 0); } /** * animation: 0 - expire
1 - without animation
2 - pickup
4 - * explode
cid is ignored for 0 and 1 * - * @param oid + * @param objId * @param animation - * @param cid + * @param chrId * @return */ - public static byte[] removeItemFromMap(int oid, int animation, int cid) { - return removeItemFromMap(oid, animation, cid, false, 0); + public static Packet removeItemFromMap(int objId, int animation, int chrId) { + return removeItemFromMap(objId, animation, chrId, false, 0); } /** @@ -2646,112 +2524,104 @@ public class PacketCreator { * explode
cid is ignored for 0 and 1.

Flagging pet as true * will make a pet pick up the item. * - * @param oid + * @param objId * @param animation - * @param cid + * @param chrId * @param pet * @param slot * @return */ - public static byte[] removeItemFromMap(int oid, int animation, int cid, boolean pet, int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.REMOVE_ITEM_FROM_MAP.getValue()); - mplew.write(animation); // expire - mplew.writeInt(oid); + public static Packet removeItemFromMap(int objId, int animation, int chrId, boolean pet, int slot) { + OutPacket p = OutPacket.create(SendOpcode.REMOVE_ITEM_FROM_MAP); + p.writeByte(animation); // expire + p.writeInt(objId); if (animation >= 2) { - mplew.writeInt(cid); + p.writeInt(chrId); if (pet) { - mplew.write(slot); + p.writeByte(slot); } } - return mplew.getPacket(); + return p; } - public static byte[] updateCharLook(MapleClient target, MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_CHAR_LOOK.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(1); - addCharLook(mplew, chr, false); - addRingLook(mplew, chr, true); - addRingLook(mplew, chr, false); - addMarriageRingLook(target, mplew, chr); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet updateCharLook(MapleClient target, MapleCharacter chr) { + OutPacket p = OutPacket.create(SendOpcode.UPDATE_CHAR_LOOK); + p.writeInt(chr.getId()); + p.writeByte(1); + addCharLook(p, chr, false); + addRingLook(p, chr, true); + addRingLook(p, chr, false); + addMarriageRingLook(target, p, chr); + p.writeInt(0); + return p; } - public static byte[] damagePlayer(int skill, int monsteridfrom, int cid, int damage, int fake, int direction, boolean pgmr, int pgmr_1, boolean is_pg, int oid, int pos_x, int pos_y) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DAMAGE_PLAYER.getValue()); - mplew.writeInt(cid); - mplew.write(skill); + public static Packet damagePlayer(int skill, int monsteridfrom, int cid, int damage, int fake, int direction, boolean pgmr, int pgmr_1, boolean is_pg, int oid, int pos_x, int pos_y) { + final OutPacket p = OutPacket.create(SendOpcode.DAMAGE_PLAYER); + p.writeInt(cid); + p.writeByte(skill); if (skill == -3) { - mplew.writeInt(0); + p.writeInt(0); } - mplew.writeInt(damage); + p.writeInt(damage); if (skill != -4) { - mplew.writeInt(monsteridfrom); - mplew.write(direction); + p.writeInt(monsteridfrom); + p.writeByte(direction); if (pgmr) { - mplew.write(pgmr_1); - mplew.write(is_pg ? 1 : 0); - mplew.writeInt(oid); - mplew.write(6); - mplew.writeShort(pos_x); - mplew.writeShort(pos_y); - mplew.write(0); + p.writeByte(pgmr_1); + p.writeByte(is_pg ? 1 : 0); + p.writeInt(oid); + p.writeByte(6); + p.writeShort(pos_x); + p.writeShort(pos_y); + p.writeByte(0); } else { - mplew.writeShort(0); + p.writeShort(0); } - mplew.writeInt(damage); + p.writeInt(damage); if (fake > 0) { - mplew.writeInt(fake); + p.writeInt(fake); } } else { - mplew.writeInt(damage); + p.writeInt(damage); } - return mplew.getPacket(); + return p; } - public static byte[] sendMapleLifeCharacterInfo() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAPLELIFE_RESULT.getValue()); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet sendMapleLifeCharacterInfo() { + final OutPacket p = OutPacket.create(SendOpcode.MAPLELIFE_RESULT); + p.writeInt(0); + return p; } - public static byte[] sendMapleLifeNameError() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAPLELIFE_RESULT.getValue()); - mplew.writeInt(2); - mplew.writeInt(3); - mplew.write(0); - return mplew.getPacket(); + public static Packet sendMapleLifeNameError() { + OutPacket p = OutPacket.create(SendOpcode.MAPLELIFE_RESULT); + p.writeInt(2); + p.writeInt(3); + p.writeByte(0); + return p; } - public static byte[] sendMapleLifeError(int code) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAPLELIFE_ERROR.getValue()); - mplew.write(0); - mplew.writeInt(code); - return mplew.getPacket(); + public static Packet sendMapleLifeError(int code) { + OutPacket p = OutPacket.create(SendOpcode.MAPLELIFE_ERROR); + p.writeByte(0); + p.writeInt(code); + return p; } - public static byte[] charNameResponse(String charname, boolean nameUsed) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CHAR_NAME_RESPONSE.getValue()); - mplew.writeMapleAsciiString(charname); - mplew.write(nameUsed ? 1 : 0); - return mplew.getPacket(); + public static Packet charNameResponse(String charname, boolean nameUsed) { + final OutPacket p = OutPacket.create(SendOpcode.CHAR_NAME_RESPONSE); + p.writeString(charname); + p.writeByte(nameUsed ? 1 : 0); + return p; } - public static byte[] addNewCharEntry(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ADD_NEW_CHAR_ENTRY.getValue()); - mplew.write(0); - addCharEntry(mplew, chr, false); - return mplew.getPacket(); + public static Packet addNewCharEntry(MapleCharacter chr) { + final OutPacket p = OutPacket.create(SendOpcode.ADD_NEW_CHAR_ENTRY); + p.writeByte(0); + addCharEntry(p, chr, false); + return p; } /** @@ -2771,30 +2641,27 @@ public class PacketCreator { * @param state * @return */ - public static byte[] deleteCharResponse(int cid, int state) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DELETE_CHAR_RESPONSE.getValue()); - mplew.writeInt(cid); - mplew.write(state); - return mplew.getPacket(); + public static Packet deleteCharResponse(int cid, int state) { + final OutPacket p = OutPacket.create(SendOpcode.DELETE_CHAR_RESPONSE); + p.writeInt(cid); + p.writeByte(state); + return p; } - public static byte[] selectWorld(int world) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.LAST_CONNECTED_WORLD.getValue()); - mplew.writeInt(world);//According to GMS, it should be the world that contains the most characters (most active) - return mplew.getPacket(); + public static Packet selectWorld(int world) { + final OutPacket p = OutPacket.create(SendOpcode.LAST_CONNECTED_WORLD); + p.writeInt(world);//According to GMS, it should be the world that contains the most characters (most active) + return p; } - public static byte[] sendRecommended(List> worlds) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.RECOMMENDED_WORLD_MESSAGE.getValue()); - mplew.write(worlds.size());//size + public static Packet sendRecommended(List> worlds) { + final OutPacket p = OutPacket.create(SendOpcode.RECOMMENDED_WORLD_MESSAGE); + p.writeByte(worlds.size());//size for (Pair world : worlds) { - mplew.writeInt(world.getLeft()); - mplew.writeMapleAsciiString(world.getRight()); + p.writeInt(world.getLeft()); + p.writeString(world.getRight()); } - return mplew.getPacket(); + return p; } /** @@ -2802,15 +2669,14 @@ public class PacketCreator { * @param isSelf * @return */ - public static byte[] charInfo(MapleCharacter chr) { + public static Packet charInfo(MapleCharacter chr) { //3D 00 0A 43 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CHAR_INFO.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(chr.getLevel()); - mplew.writeShort(chr.getJob().getId()); - mplew.writeShort(chr.getFame()); - mplew.write(chr.getMarriageRing() != null ? 1 : 0); + final OutPacket p = OutPacket.create(SendOpcode.CHAR_INFO); + p.writeInt(chr.getId()); + p.writeByte(chr.getLevel()); + p.writeShort(chr.getJob().getId()); + p.writeShort(chr.getFame()); + p.writeByte(chr.getMarriageRing() != null ? 1 : 0); String guildName = ""; String allianceName = ""; if (chr.getGuildId() > 0) { @@ -2822,52 +2688,52 @@ public class PacketCreator { allianceName = alliance.getName(); } } - mplew.writeMapleAsciiString(guildName); - mplew.writeMapleAsciiString(allianceName); // does not seem to work - mplew.write(0); // pMedalInfo, thanks to Arnah (Vertisy) + p.writeString(guildName); + p.writeString(allianceName); // does not seem to work + p.writeByte(0); // pMedalInfo, thanks to Arnah (Vertisy) MaplePet[] pets = chr.getPets(); Item inv = chr.getInventory(MapleInventoryType.EQUIPPED).getItem((short) -114); for (int i = 0; i < 3; i++) { if (pets[i] != null) { - mplew.write(pets[i].getUniqueId()); - mplew.writeInt(pets[i].getItemId()); // petid - mplew.writeMapleAsciiString(pets[i].getName()); - mplew.write(pets[i].getLevel()); // pet level - mplew.writeShort(pets[i].getCloseness()); // pet closeness - mplew.write(pets[i].getFullness()); // pet fullness - mplew.writeShort(0); - mplew.writeInt(inv != null ? inv.getItemId() : 0); + p.writeByte(pets[i].getUniqueId()); + p.writeInt(pets[i].getItemId()); // petid + p.writeString(pets[i].getName()); + p.writeByte(pets[i].getLevel()); // pet level + p.writeShort(pets[i].getCloseness()); // pet closeness + p.writeByte(pets[i].getFullness()); // pet fullness + p.writeShort(0); + p.writeInt(inv != null ? inv.getItemId() : 0); } } - mplew.write(0); //end of pets + p.writeByte(0); //end of pets Item mount; //mounts can potentially crash the client if the player's level is not properly checked if (chr.getMount() != null && (mount = chr.getInventory(MapleInventoryType.EQUIPPED).getItem((short) -18)) != null && MapleItemInformationProvider.getInstance().getEquipLevelReq(mount.getItemId()) <= chr.getLevel()) { MapleMount mmount = chr.getMount(); - mplew.write(mmount.getId()); //mount - mplew.writeInt(mmount.getLevel()); //level - mplew.writeInt(mmount.getExp()); //exp - mplew.writeInt(mmount.getTiredness()); //tiredness + p.writeByte(mmount.getId()); //mount + p.writeInt(mmount.getLevel()); //level + p.writeInt(mmount.getExp()); //exp + p.writeInt(mmount.getTiredness()); //tiredness } else { - mplew.write(0); + p.writeByte(0); } - mplew.write(chr.getCashShop().getWishList().size()); + p.writeByte(chr.getCashShop().getWishList().size()); for (int sn : chr.getCashShop().getWishList()) { - mplew.writeInt(sn); + p.writeInt(sn); } MonsterBook book = chr.getMonsterBook(); - mplew.writeInt(book.getBookLevel()); - mplew.writeInt(book.getNormalCard()); - mplew.writeInt(book.getSpecialCard()); - mplew.writeInt(book.getTotalCards()); - mplew.writeInt(chr.getMonsterBookCover() > 0 ? MapleItemInformationProvider.getInstance().getCardMobId(chr.getMonsterBookCover()) : 0); + p.writeInt(book.getBookLevel()); + p.writeInt(book.getNormalCard()); + p.writeInt(book.getSpecialCard()); + p.writeInt(book.getTotalCards()); + p.writeInt(chr.getMonsterBookCover() > 0 ? MapleItemInformationProvider.getInstance().getCardMobId(chr.getMonsterBookCover()) : 0); Item medal = chr.getInventory(MapleInventoryType.EQUIPPED).getItem((short) -49); if (medal != null) { - mplew.writeInt(medal.getItemId()); + p.writeInt(medal.getItemId()); } else { - mplew.writeInt(0); + p.writeInt(0); } ArrayList medalQuests = new ArrayList<>(); List completed = chr.getCompletedQuests(); @@ -2878,11 +2744,11 @@ public class PacketCreator { } Collections.sort(medalQuests); - mplew.writeShort(medalQuests.size()); + p.writeShort(medalQuests.size()); for (Short s : medalQuests) { - mplew.writeShort(s); + p.writeShort(s); } - return mplew.getPacket(); + return p; } /** @@ -2896,27 +2762,26 @@ public class PacketCreator { * @return */ //1F 00 00 00 00 00 03 00 00 40 00 00 00 E0 00 00 00 00 00 00 00 00 E0 01 8E AA 4F 00 00 C2 EB 0B E0 01 8E AA 4F 00 00 C2 EB 0B 0C 00 8E AA 4F 00 00 C2 EB 0B 44 02 8E AA 4F 00 00 C2 EB 0B 44 02 8E AA 4F 00 00 C2 EB 0B 00 00 E0 7A 1D 00 8E AA 4F 00 00 00 00 00 00 00 00 03 - public static byte[] giveBuff(int buffid, int bufflength, List> statups) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_BUFF.getValue()); + public static Packet giveBuff(int buffid, int bufflength, List> statups) { + final OutPacket p = OutPacket.create(SendOpcode.GIVE_BUFF); boolean special = false; - writeLongMask(mplew, statups); + writeLongMask(p, statups); for (Pair statup : statups) { if (statup.getLeft().equals(MapleBuffStat.MONSTER_RIDING) || statup.getLeft().equals(MapleBuffStat.HOMING_BEACON)) { special = true; } - mplew.writeShort(statup.getRight().shortValue()); - mplew.writeInt(buffid); - mplew.writeInt(bufflength); + p.writeShort(statup.getRight().shortValue()); + p.writeInt(buffid); + p.writeInt(bufflength); } - mplew.writeInt(0); - mplew.write(0); - mplew.writeInt(statups.get(0).getRight()); //Homing beacon ... + p.writeInt(0); + p.writeByte(0); + p.writeInt(statups.get(0).getRight()); //Homing beacon ... if (special) { - mplew.skip(3); + p.skip(3); } - return mplew.getPacket(); + return p; } /** @@ -2925,44 +2790,42 @@ public class PacketCreator { * @param mount * @return */ - public static byte[] showMonsterRiding(int cid, MapleMount mount) { //Gtfo with this, this is just giveForeignBuff - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - mplew.writeLong(MapleBuffStat.MONSTER_RIDING.getValue()); - mplew.writeLong(0); - mplew.writeShort(0); - mplew.writeInt(mount.getItemId()); - mplew.writeInt(mount.getSkillId()); - mplew.writeInt(0); //Server Tick value. - mplew.writeShort(0); - mplew.write(0); //Times you have been buffed - return mplew.getPacket(); + public static Packet showMonsterRiding(int cid, MapleMount mount) { //Gtfo with this, this is just giveForeignBuff + final OutPacket p = OutPacket.create(SendOpcode.GIVE_FOREIGN_BUFF); + p.writeInt(cid); + p.writeLong(MapleBuffStat.MONSTER_RIDING.getValue()); + p.writeLong(0); + p.writeShort(0); + p.writeInt(mount.getItemId()); + p.writeInt(mount.getSkillId()); + p.writeInt(0); //Server Tick value. + p.writeShort(0); + p.writeByte(0); //Times you have been buffed + return p; } - /* mplew.writeInt(cid); + /* p.writeInt(cid); writeLongMask(mplew, statups); for (Pair statup : statups) { if (morph) { - mplew.writeInt(statup.getRight().intValue()); + p.writeInt(statup.getRight().intValue()); } else { - mplew.writeShort(statup.getRight().shortValue()); + p.writeShort(statup.getRight().shortValue()); } } - mplew.writeShort(0); - mplew.write(0);*/ + p.writeShort(0); + p.writeByte(0);*/ /** * @param c * @param quest * @return */ - public static byte[] forfeitQuest(short quest) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(1); - mplew.writeShort(quest); - mplew.write(0); - return mplew.getPacket(); + public static Packet forfeitQuest(short quest) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(1); + p.writeShort(quest); + p.writeByte(0); + return p; } /** @@ -2970,14 +2833,13 @@ public class PacketCreator { * @param quest * @return */ - public static byte[] completeQuest(short quest, long time) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(1); - mplew.writeShort(quest); - mplew.write(2); - mplew.writeLong(getTime(time)); - return mplew.getPacket(); + public static Packet completeQuest(short quest, long time) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(1); + p.writeShort(quest); + p.writeByte(2); + p.writeLong(getTime(time)); + return p; } /** @@ -2988,54 +2850,50 @@ public class PacketCreator { * @return */ - public static byte[] updateQuestInfo(short quest, int npc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); - mplew.write(8); //0x0A in v95 - mplew.writeShort(quest); - mplew.writeInt(npc); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet updateQuestInfo(short quest, int npc) { + final OutPacket p = OutPacket.create(SendOpcode.UPDATE_QUEST_INFO); + p.writeByte(8); //0x0A in v95 + p.writeShort(quest); + p.writeInt(npc); + p.writeInt(0); + return p; } - public static byte[] addQuestTimeLimit(final short quest, final int time) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); - mplew.write(6); - mplew.writeShort(1);//Size but meh, when will there be 2 at the same time? And it won't even replace the old one :) - mplew.writeShort(quest); - mplew.writeInt(time); - return mplew.getPacket(); + public static Packet addQuestTimeLimit(final short quest, final int time) { + final OutPacket p = OutPacket.create(SendOpcode.UPDATE_QUEST_INFO); + p.writeByte(6); + p.writeShort(1);//Size but meh, when will there be 2 at the same time? And it won't even replace the old one :) + p.writeShort(quest); + p.writeInt(time); + return p; } - public static byte[] removeQuestTimeLimit(final short quest) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); - mplew.write(7); - mplew.writeShort(1);//Position - mplew.writeShort(quest); - return mplew.getPacket(); + public static Packet removeQuestTimeLimit(final short quest) { + final OutPacket p = OutPacket.create(SendOpcode.UPDATE_QUEST_INFO); + p.writeByte(7); + p.writeShort(1);//Position + p.writeShort(quest); + return p; } - public static byte[] updateQuest(MapleCharacter chr, MapleQuestStatus qs, boolean infoUpdate) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(1); + public static Packet updateQuest(MapleCharacter chr, MapleQuestStatus qs, boolean infoUpdate) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(1); if (infoUpdate) { MapleQuestStatus iqs = chr.getQuest(qs.getInfoNumber()); - mplew.writeShort(iqs.getQuestID()); - mplew.write(1); - mplew.writeMapleAsciiString(iqs.getProgressData()); + p.writeShort(iqs.getQuestID()); + p.writeByte(1); + p.writeString(iqs.getProgressData()); } else { - mplew.writeShort(qs.getQuest().getId()); - mplew.write(qs.getStatus().getId()); - mplew.writeMapleAsciiString(qs.getProgressData()); + p.writeShort(qs.getQuest().getId()); + p.writeByte(qs.getStatus().getId()); + p.writeString(qs.getProgressData()); } - mplew.skip(5); - return mplew.getPacket(); + p.skip(5); + return p; } - private static void writeLongMaskD(final MaplePacketLittleEndianWriter mplew, List> statups) { + private static void writeLongMaskD(final OutPacket p, List> statups) { long firstmask = 0; long secondmask = 0; for (Pair statup : statups) { @@ -3045,93 +2903,85 @@ public class PacketCreator { secondmask |= statup.getLeft().getValue(); } } - mplew.writeLong(firstmask); - mplew.writeLong(secondmask); + p.writeLong(firstmask); + p.writeLong(secondmask); } - public static byte[] giveDebuff(List> statups, MobSkill skill) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_BUFF.getValue()); - writeLongMaskD(mplew, statups); + public static Packet giveDebuff(List> statups, MobSkill skill) { + final OutPacket p = OutPacket.create(SendOpcode.GIVE_BUFF); + writeLongMaskD(p, statups); for (Pair statup : statups) { - mplew.writeShort(statup.getRight().shortValue()); - mplew.writeShort(skill.getSkillId()); - mplew.writeShort(skill.getSkillLevel()); - mplew.writeInt((int) skill.getDuration()); + p.writeShort(statup.getRight().shortValue()); + p.writeShort(skill.getSkillId()); + p.writeShort(skill.getSkillLevel()); + p.writeInt((int) skill.getDuration()); } - mplew.writeShort(0); // ??? wk charges have 600 here o.o - mplew.writeShort(900);//Delay - mplew.write(1); - return mplew.getPacket(); + p.writeShort(0); // ??? wk charges have 600 here o.o + p.writeShort(900);//Delay + p.writeByte(1); + return p; } - public static byte[] giveForeignDebuff(int cid, List> statups, MobSkill skill) { + public static Packet giveForeignDebuff(int chrId, List> statups, MobSkill skill) { // Poison damage visibility and missing diseases status visibility, extended through map transitions thanks to Ronan - - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMaskD(mplew, statups); + OutPacket p = OutPacket.create(SendOpcode.GIVE_FOREIGN_BUFF); + p.writeInt(chrId); + writeLongMaskD(p, statups); for (Pair statup : statups) { if (statup.getLeft() == MapleDisease.POISON) { - mplew.writeShort(statup.getRight().shortValue()); + p.writeShort(statup.getRight().shortValue()); } - mplew.writeShort(skill.getSkillId()); - mplew.writeShort(skill.getSkillLevel()); + p.writeShort(skill.getSkillId()); + p.writeShort(skill.getSkillLevel()); } - mplew.writeShort(0); // same as give_buff - mplew.writeShort(900);//Delay - return mplew.getPacket(); + p.writeShort(0); // same as give_buff + p.writeShort(900);//Delay + return p; } - public static byte[] cancelForeignFirstDebuff(int cid, long mask) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - mplew.writeLong(mask); - mplew.writeLong(0); - return mplew.getPacket(); + public static Packet cancelForeignFirstDebuff(int cid, long mask) { + final OutPacket p = OutPacket.create(SendOpcode.CANCEL_FOREIGN_BUFF); + p.writeInt(cid); + p.writeLong(mask); + p.writeLong(0); + return p; } - public static byte[] cancelForeignDebuff(int cid, long mask) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - mplew.writeLong(0); - mplew.writeLong(mask); - return mplew.getPacket(); + public static Packet cancelForeignDebuff(int cid, long mask) { + final OutPacket p = OutPacket.create(SendOpcode.CANCEL_FOREIGN_BUFF); + p.writeInt(cid); + p.writeLong(0); + p.writeLong(mask); + return p; } - public static byte[] giveForeignBuff(int cid, List> statups) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMask(mplew, statups); + public static Packet giveForeignBuff(int chrId, List> statups) { + OutPacket p = OutPacket.create(SendOpcode.GIVE_FOREIGN_BUFF); + p.writeInt(chrId); + writeLongMask(p, statups); for (Pair statup : statups) { - mplew.writeShort(statup.getRight().shortValue()); + p.writeShort(statup.getRight().shortValue()); } - mplew.writeInt(0); - mplew.writeShort(0); - return mplew.getPacket(); + p.writeInt(0); + p.writeShort(0); + return p; } - public static byte[] cancelForeignBuff(int cid, List statups) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMaskFromList(mplew, statups); - return mplew.getPacket(); + public static Packet cancelForeignBuff(int chrId, List statups) { + OutPacket p = OutPacket.create(SendOpcode.CANCEL_FOREIGN_BUFF); + p.writeInt(chrId); + writeLongMaskFromList(p, statups); + return p; } - public static byte[] cancelBuff(List statups) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_BUFF.getValue()); - writeLongMaskFromList(mplew, statups); - mplew.write(1);//? - return mplew.getPacket(); + public static Packet cancelBuff(List statups) { + OutPacket p = OutPacket.create(SendOpcode.CANCEL_BUFF); + writeLongMaskFromList(p, statups); + p.writeByte(1);//? + return p; } - private static void writeLongMask(final MaplePacketLittleEndianWriter mplew, List> statups) { + private static void writeLongMask(final OutPacket p, List> statups) { long firstmask = 0; long secondmask = 0; for (Pair statup : statups) { @@ -3141,11 +2991,11 @@ public class PacketCreator { secondmask |= statup.getLeft().getValue(); } } - mplew.writeLong(firstmask); - mplew.writeLong(secondmask); + p.writeLong(firstmask); + p.writeLong(secondmask); } - private static void writeLongMaskFromList(final MaplePacketLittleEndianWriter mplew, List statups) { + private static void writeLongMaskFromList(OutPacket p, List statups) { long firstmask = 0; long secondmask = 0; for (MapleBuffStat statup : statups) { @@ -3155,11 +3005,11 @@ public class PacketCreator { secondmask |= statup.getValue(); } } - mplew.writeLong(firstmask); - mplew.writeLong(secondmask); + p.writeLong(firstmask); + p.writeLong(secondmask); } - private static void writeLongEncodeTemporaryMask(final MaplePacketLittleEndianWriter mplew, Collection stati) { + private static void writeLongEncodeTemporaryMask(final OutPacket p, Collection stati) { int[] masks = new int[4]; for (MonsterStatus statup : stati) { @@ -3170,190 +3020,173 @@ public class PacketCreator { } for (int mask : masks) { - mplew.writeInt(mask); + p.writeInt(mask); } } - public static byte[] cancelDebuff(long mask) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(19); - mplew.writeShort(SendOpcode.CANCEL_BUFF.getValue()); - mplew.writeLong(0); - mplew.writeLong(mask); - mplew.write(0); - return mplew.getPacket(); + public static Packet cancelDebuff(long mask) { + OutPacket p = OutPacket.create(SendOpcode.CANCEL_BUFF); + p.writeLong(0); + p.writeLong(mask); + p.writeByte(0); + return p; } - private static void writeLongMaskSlowD(final MaplePacketLittleEndianWriter mplew) { - mplew.writeInt(0); - mplew.writeInt(2048); - mplew.writeLong(0); + private static void writeLongMaskSlowD(final OutPacket p) { + p.writeInt(0); + p.writeInt(2048); + p.writeLong(0); } - public static byte[] giveForeignSlowDebuff(int cid, List> statups, MobSkill skill) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMaskSlowD(mplew); + public static Packet giveForeignSlowDebuff(int chrId, List> statups, MobSkill skill) { + OutPacket p = OutPacket.create(SendOpcode.GIVE_FOREIGN_BUFF); + p.writeInt(chrId); + writeLongMaskSlowD(p); for (Pair statup : statups) { if (statup.getLeft() == MapleDisease.POISON) { - mplew.writeShort(statup.getRight().shortValue()); + p.writeShort(statup.getRight().shortValue()); } - mplew.writeShort(skill.getSkillId()); - mplew.writeShort(skill.getSkillLevel()); + p.writeShort(skill.getSkillId()); + p.writeShort(skill.getSkillLevel()); } - mplew.writeShort(0); // same as give_buff - mplew.writeShort(900);//Delay - return mplew.getPacket(); + p.writeShort(0); // same as give_buff + p.writeShort(900);//Delay + return p; } - public static byte[] cancelForeignSlowDebuff(int cid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMaskSlowD(mplew); - return mplew.getPacket(); + public static Packet cancelForeignSlowDebuff(int chrId) { + final OutPacket p = OutPacket.create(SendOpcode.CANCEL_FOREIGN_BUFF); + p.writeInt(chrId); + writeLongMaskSlowD(p); + return p; } - private static void writeLongMaskChair(final MaplePacketLittleEndianWriter mplew) { - mplew.writeInt(0); - mplew.writeInt(262144); - mplew.writeLong(0); + private static void writeLongMaskChair(OutPacket p) { + p.writeInt(0); + p.writeInt(262144); + p.writeLong(0); } - public static byte[] giveForeignChairSkillEffect(int cid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMaskChair(mplew); + public static Packet giveForeignChairSkillEffect(int cid) { + final OutPacket p = OutPacket.create(SendOpcode.GIVE_FOREIGN_BUFF); + p.writeInt(cid); + writeLongMaskChair(p); - mplew.writeShort(0); - mplew.writeShort(0); - mplew.writeShort(100); - mplew.writeShort(1); + p.writeShort(0); + p.writeShort(0); + p.writeShort(100); + p.writeShort(1); - mplew.writeShort(0); - mplew.writeShort(900); + p.writeShort(0); + p.writeShort(900); - mplew.skip(7); + p.skip(7); - return mplew.getPacket(); + return p; } // packet found thanks to Ronan - public static byte[] giveForeignWKChargeEffect(int cid, int buffid, List> statups) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(19); - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMask(mplew, statups); - mplew.writeInt(buffid); - mplew.writeShort(600); - mplew.writeShort(1000);//Delay - mplew.write(1); - - return mplew.getPacket(); + public static Packet giveForeignWKChargeEffect(int cid, int buffid, List> statups) { + OutPacket p = OutPacket.create(SendOpcode.GIVE_FOREIGN_BUFF); + p.writeInt(cid); + writeLongMask(p, statups); + p.writeInt(buffid); + p.writeShort(600); + p.writeShort(1000);//Delay + p.writeByte(1); + return p; } - public static byte[] cancelForeignChairSkillEffect(int cid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(19); - mplew.writeShort(SendOpcode.CANCEL_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMaskChair(mplew); - - return mplew.getPacket(); + public static Packet cancelForeignChairSkillEffect(int chrId) { + OutPacket p = OutPacket.create(SendOpcode.CANCEL_FOREIGN_BUFF); + p.writeInt(chrId); + writeLongMaskChair(p); + return p; } - public static byte[] getPlayerShopChat(MapleCharacter chr, String chat, boolean owner) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.CHAT.getCode()); - mplew.write(PlayerInteractionHandler.Action.CHAT_THING.getCode()); - mplew.write(owner ? 0 : 1); - mplew.writeMapleAsciiString(chr.getName() + " : " + chat); - return mplew.getPacket(); + public static Packet getPlayerShopChat(MapleCharacter chr, String chat, boolean owner) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.CHAT.getCode()); + p.writeByte(PlayerInteractionHandler.Action.CHAT_THING.getCode()); + p.writeBool(!owner); + p.writeString(chr.getName() + " : " + chat); + return p; } - public static byte[] getPlayerShopNewVisitor(MapleCharacter chr, int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); - mplew.write(slot); - addCharLook(mplew, chr, false); - mplew.writeMapleAsciiString(chr.getName()); - return mplew.getPacket(); + public static Packet getPlayerShopNewVisitor(MapleCharacter chr, int slot) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.VISIT.getCode()); + p.writeByte(slot); + addCharLook(p, chr, false); + p.writeString(chr.getName()); + return p; } - public static byte[] getPlayerShopRemoveVisitor(int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); + public static Packet getPlayerShopRemoveVisitor(int slot) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.EXIT.getCode()); if (slot != 0) { - mplew.writeShort(slot); + p.writeShort(slot); } - return mplew.getPacket(); + return p; } - public static byte[] getTradePartnerAdd(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); - mplew.write(1); - addCharLook(mplew, chr, false); - mplew.writeMapleAsciiString(chr.getName()); - return mplew.getPacket(); + public static Packet getTradePartnerAdd(MapleCharacter chr) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.VISIT.getCode()); + p.writeByte(1); + addCharLook(p, chr, false); + p.writeString(chr.getName()); + return p; } - public static byte[] tradeInvite(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.INVITE.getCode()); - mplew.write(3); - mplew.writeMapleAsciiString(chr.getName()); - mplew.write(new byte[]{(byte) 0xB7, (byte) 0x50, 0, 0}); - return mplew.getPacket(); + public static Packet tradeInvite(MapleCharacter chr) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.INVITE.getCode()); + p.writeByte(3); + p.writeString(chr.getName()); + p.writeBytes(new byte[]{(byte) 0xB7, (byte) 0x50, 0, 0}); + return p; } - public static byte[] getTradeMesoSet(byte number, int meso) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.SET_MESO.getCode()); - mplew.write(number); - mplew.writeInt(meso); - return mplew.getPacket(); + public static Packet getTradeMesoSet(byte number, int meso) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.SET_MESO.getCode()); + p.writeByte(number); + p.writeInt(meso); + return p; } - public static byte[] getTradeItemAdd(byte number, Item item) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.SET_ITEMS.getCode()); - mplew.write(number); - mplew.write(item.getPosition()); - addItemInfo(mplew, item, true); - return mplew.getPacket(); + public static Packet getTradeItemAdd(byte number, Item item) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.SET_ITEMS.getCode()); + p.writeByte(number); + p.writeByte(item.getPosition()); + addItemInfo(p, item, true); + return p; } - public static byte[] getPlayerShopItemUpdate(MaplePlayerShop shop) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.UPDATE_MERCHANT.getCode()); - mplew.write(shop.getItems().size()); + public static Packet getPlayerShopItemUpdate(MaplePlayerShop shop) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.UPDATE_MERCHANT.getCode()); + p.writeByte(shop.getItems().size()); for (MaplePlayerShopItem item : shop.getItems()) { - mplew.writeShort(item.getBundles()); - mplew.writeShort(item.getItem().getQuantity()); - mplew.writeInt(item.getPrice()); - addItemInfo(mplew, item.getItem(), true); + p.writeShort(item.getBundles()); + p.writeShort(item.getItem().getQuantity()); + p.writeInt(item.getPrice()); + addItemInfo(p, item.getItem(), true); } - return mplew.getPacket(); + return p; } - public static byte[] getPlayerShopOwnerUpdate(MaplePlayerShop.SoldItem item, int position) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.UPDATE_PLAYERSHOP.getCode()); - mplew.write(position); - mplew.writeShort(item.getQuantity()); - mplew.writeMapleAsciiString(item.getBuyer()); + public static Packet getPlayerShopOwnerUpdate(MaplePlayerShop.SoldItem item, int position) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.UPDATE_PLAYERSHOP.getCode()); + p.writeByte(position); + p.writeShort(item.getQuantity()); + p.writeString(item.getBuyer()); - return mplew.getPacket(); + return p; } /** @@ -3362,77 +3195,74 @@ public class PacketCreator { * @param owner * @return */ - public static byte[] getPlayerShop(MaplePlayerShop shop, boolean owner) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(4); - mplew.write(4); - mplew.write(owner ? 0 : 1); + public static Packet getPlayerShop(MaplePlayerShop shop, boolean owner) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.ROOM.getCode()); + p.writeByte(4); + p.writeByte(4); + p.writeByte(owner ? 0 : 1); if (owner) { List sold = shop.getSold(); - mplew.write(sold.size()); + p.writeByte(sold.size()); for (MaplePlayerShop.SoldItem s : sold) { - mplew.writeInt(s.getItemId()); - mplew.writeShort(s.getQuantity()); - mplew.writeInt(s.getMesos()); - mplew.writeMapleAsciiString(s.getBuyer()); + p.writeInt(s.getItemId()); + p.writeShort(s.getQuantity()); + p.writeInt(s.getMesos()); + p.writeString(s.getBuyer()); } } else { - mplew.write(0); + p.writeByte(0); } - addCharLook(mplew, shop.getOwner(), false); - mplew.writeMapleAsciiString(shop.getOwner().getName()); + addCharLook(p, shop.getOwner(), false); + p.writeString(shop.getOwner().getName()); MapleCharacter[] visitors = shop.getVisitors(); for (int i = 0; i < 3; i++) { if (visitors[i] != null) { - mplew.write(i + 1); - addCharLook(mplew, visitors[i], false); - mplew.writeMapleAsciiString(visitors[i].getName()); + p.writeByte(i + 1); + addCharLook(p, visitors[i], false); + p.writeString(visitors[i].getName()); } } - mplew.write(0xFF); - mplew.writeMapleAsciiString(shop.getDescription()); + p.writeByte(0xFF); + p.writeString(shop.getDescription()); List items = shop.getItems(); - mplew.write(0x10); //TODO SLOTS, which is 16 for most stores...slotMax - mplew.write(items.size()); + p.writeByte(0x10); //TODO SLOTS, which is 16 for most stores...slotMax + p.writeByte(items.size()); for (MaplePlayerShopItem item : items) { - mplew.writeShort(item.getBundles()); - mplew.writeShort(item.getItem().getQuantity()); - mplew.writeInt(item.getPrice()); - addItemInfo(mplew, item.getItem(), true); + p.writeShort(item.getBundles()); + p.writeShort(item.getItem().getQuantity()); + p.writeInt(item.getPrice()); + addItemInfo(p, item.getItem(), true); } - return mplew.getPacket(); + return p; } - public static byte[] getTradeStart(MapleClient c, MapleTrade trade, byte number) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(3); - mplew.write(2); - mplew.write(number); + public static Packet getTradeStart(MapleClient c, MapleTrade trade, byte number) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.ROOM.getCode()); + p.writeByte(3); + p.writeByte(2); + p.writeByte(number); if (number == 1) { - mplew.write(0); - addCharLook(mplew, trade.getPartner().getChr(), false); - mplew.writeMapleAsciiString(trade.getPartner().getChr().getName()); + p.writeByte(0); + addCharLook(p, trade.getPartner().getChr(), false); + p.writeString(trade.getPartner().getChr().getName()); } - mplew.write(number); - addCharLook(mplew, c.getPlayer(), false); - mplew.writeMapleAsciiString(c.getPlayer().getName()); - mplew.write(0xFF); - return mplew.getPacket(); + p.writeByte(number); + addCharLook(p, c.getPlayer(), false); + p.writeString(c.getPlayer().getName()); + p.writeByte(0xFF); + return p; } - public static byte[] getTradeConfirmation() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.CONFIRM.getCode()); - return mplew.getPacket(); + public static Packet getTradeConfirmation() { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.CONFIRM.getCode()); + return p; } /** @@ -3445,13 +3275,12 @@ public class PacketCreator { * @param operation * @return */ - public static byte[] getTradeResult(byte number, byte operation) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); - mplew.write(number); - mplew.write(operation); - return mplew.getPacket(); + public static Packet getTradeResult(byte number, byte operation) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.EXIT.getCode()); + p.writeByte(number); + p.writeByte(operation); + return p; } /** @@ -3466,259 +3295,238 @@ public class PacketCreator { * @param speaker * @return */ - public static byte[] getNPCTalk(int npc, byte msgType, String talk, String endBytes, byte speaker) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(4); // ? - mplew.writeInt(npc); - mplew.write(msgType); - mplew.write(speaker); - mplew.writeMapleAsciiString(talk); - mplew.write(HexTool.getByteArrayFromHexString(endBytes)); - return mplew.getPacket(); + public static Packet getNPCTalk(int npc, byte msgType, String talk, String endBytes, byte speaker) { + final OutPacket p = OutPacket.create(SendOpcode.NPC_TALK); + p.writeByte(4); // ? + p.writeInt(npc); + p.writeByte(msgType); + p.writeByte(speaker); + p.writeString(talk); + p.writeBytes(HexTool.getByteArrayFromHexString(endBytes)); + return p; } - public static byte[] getDimensionalMirror(String talk) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(4); // ? - mplew.writeInt(9010022); - mplew.write(0x0E); - mplew.write(0); - mplew.writeInt(0); - mplew.writeMapleAsciiString(talk); - return mplew.getPacket(); + public static Packet getDimensionalMirror(String talk) { + final OutPacket p = OutPacket.create(SendOpcode.NPC_TALK); + p.writeByte(4); // ? + p.writeInt(9010022); + p.writeByte(0x0E); + p.writeByte(0); + p.writeInt(0); + p.writeString(talk); + return p; } - public static byte[] getNPCTalkStyle(int npc, String talk, int[] styles) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(4); // ? - mplew.writeInt(npc); - mplew.write(7); - mplew.write(0); //speaker - mplew.writeMapleAsciiString(talk); - mplew.write(styles.length); + public static Packet getNPCTalkStyle(int npc, String talk, int[] styles) { + final OutPacket p = OutPacket.create(SendOpcode.NPC_TALK); + p.writeByte(4); // ? + p.writeInt(npc); + p.writeByte(7); + p.writeByte(0); //speaker + p.writeString(talk); + p.writeByte(styles.length); for (int style : styles) { - mplew.writeInt(style); + p.writeInt(style); } - return mplew.getPacket(); + return p; } - public static byte[] getNPCTalkNum(int npc, String talk, int def, int min, int max) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(4); // ? - mplew.writeInt(npc); - mplew.write(3); - mplew.write(0); //speaker - mplew.writeMapleAsciiString(talk); - mplew.writeInt(def); - mplew.writeInt(min); - mplew.writeInt(max); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet getNPCTalkNum(int npc, String talk, int def, int min, int max) { + final OutPacket p = OutPacket.create(SendOpcode.NPC_TALK); + p.writeByte(4); // ? + p.writeInt(npc); + p.writeByte(3); + p.writeByte(0); //speaker + p.writeString(talk); + p.writeInt(def); + p.writeInt(min); + p.writeInt(max); + p.writeInt(0); + return p; } - public static byte[] getNPCTalkText(int npc, String talk, String def) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(4); // Doesn't matter - mplew.writeInt(npc); - mplew.write(2); - mplew.write(0); //speaker - mplew.writeMapleAsciiString(talk); - mplew.writeMapleAsciiString(def);//:D - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet getNPCTalkText(int npc, String talk, String def) { + final OutPacket p = OutPacket.create(SendOpcode.NPC_TALK); + p.writeByte(4); // Doesn't matter + p.writeInt(npc); + p.writeByte(2); + p.writeByte(0); //speaker + p.writeString(talk); + p.writeString(def);//:D + p.writeInt(0); + return p; } // NPC Quiz packets thanks to Eric - public static byte[] OnAskQuiz(int nSpeakerTypeID, int nSpeakerTemplateID, int nResCode, String sTitle, String sProblemText, String sHintText, int nMinInput, int nMaxInput, int tRemainInitialQuiz) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(nSpeakerTypeID); - mplew.writeInt(nSpeakerTemplateID); - mplew.write(0x6); - mplew.write(0); - mplew.write(nResCode); + public static Packet OnAskQuiz(int nSpeakerTypeID, int nSpeakerTemplateID, int nResCode, String sTitle, String sProblemText, String sHintText, int nMinInput, int nMaxInput, int tRemainInitialQuiz) { + OutPacket p = OutPacket.create(SendOpcode.NPC_TALK); + p.writeByte(nSpeakerTypeID); + p.writeInt(nSpeakerTemplateID); + p.writeByte(0x6); + p.writeByte(0); + p.writeByte(nResCode); if (nResCode == 0x0) {//fail has no bytes <3 - mplew.writeMapleAsciiString(sTitle); - mplew.writeMapleAsciiString(sProblemText); - mplew.writeMapleAsciiString(sHintText); - mplew.writeShort(nMinInput); - mplew.writeShort(nMaxInput); - mplew.writeInt(tRemainInitialQuiz); + p.writeString(sTitle); + p.writeString(sProblemText); + p.writeString(sHintText); + p.writeShort(nMinInput); + p.writeShort(nMaxInput); + p.writeInt(tRemainInitialQuiz); } - return mplew.getPacket(); + return p; } - public static byte[] OnAskSpeedQuiz(int nSpeakerTypeID, int nSpeakerTemplateID, int nResCode, int nType, int dwAnswer, int nCorrect, int nRemain, int tRemainInitialQuiz) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NPC_TALK.getValue()); - mplew.write(nSpeakerTypeID); - mplew.writeInt(nSpeakerTemplateID); - mplew.write(0x7); - mplew.write(0); - mplew.write(nResCode); + public static Packet OnAskSpeedQuiz(int nSpeakerTypeID, int nSpeakerTemplateID, int nResCode, int nType, int dwAnswer, int nCorrect, int nRemain, int tRemainInitialQuiz) { + OutPacket p = OutPacket.create(SendOpcode.NPC_TALK); + p.writeByte(nSpeakerTypeID); + p.writeInt(nSpeakerTemplateID); + p.writeByte(0x7); + p.writeByte(0); + p.writeByte(nResCode); if (nResCode == 0x0) {//fail has no bytes <3 - mplew.writeInt(nType); - mplew.writeInt(dwAnswer); - mplew.writeInt(nCorrect); - mplew.writeInt(nRemain); - mplew.writeInt(tRemainInitialQuiz); + p.writeInt(nType); + p.writeInt(dwAnswer); + p.writeInt(nCorrect); + p.writeInt(nRemain); + p.writeInt(tRemainInitialQuiz); } - return mplew.getPacket(); + return p; } - public static byte[] showBuffeffect(int cid, int skillid, int effectid) { - return showBuffeffect(cid, skillid, effectid, (byte) 3); + public static Packet showBuffEffect(int chrId, int skillId, int effectId) { + return showBuffEffect(chrId, skillId, effectId, (byte) 3); } - public static byte[] showBuffeffect(int cid, int skillid, int effectid, byte direction) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(effectid); //buff level - mplew.writeInt(skillid); - mplew.write(direction); - mplew.write(1); - mplew.writeLong(0); - return mplew.getPacket(); + public static Packet showBuffEffect(int chrId, int skillId, int effectId, byte direction) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_FOREIGN_EFFECT); + p.writeInt(chrId); + p.writeByte(effectId); //buff level + p.writeInt(skillId); + p.writeByte(direction); + p.writeByte(1); + p.writeLong(0); + return p; } - public static byte[] showBuffeffect(int cid, int skillid, int skilllv, int effectid, byte direction) { // updated packet structure found thanks to Rien dev team - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(effectid); - mplew.writeInt(skillid); - mplew.write(0); - mplew.write(skilllv); - mplew.write(direction); - - return mplew.getPacket(); + public static Packet showBuffEffect(int chrId, int skillId, int skillLv, int effectId, byte direction) { // updated packet structure found thanks to Rien dev team + OutPacket p = OutPacket.create(SendOpcode.SHOW_FOREIGN_EFFECT); + p.writeInt(chrId); + p.writeByte(effectId); + p.writeInt(skillId); + p.writeByte(0); + p.writeByte(skillLv); + p.writeByte(direction); + return p; } - public static byte[] showOwnBuffEffect(int skillid, int effectid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(effectid); - mplew.writeInt(skillid); - mplew.write(0xA9); - mplew.write(1); - return mplew.getPacket(); + public static Packet showOwnBuffEffect(int skillId, int effectId) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(effectId); + p.writeInt(skillId); + p.writeByte(0xA9); + p.writeByte(1); + return p; } - public static byte[] showOwnBerserk(int skilllevel, boolean Berserk) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(1); - mplew.writeInt(1320006); - mplew.write(0xA9); - mplew.write(skilllevel); - mplew.write(Berserk ? 1 : 0); - return mplew.getPacket(); + public static Packet showOwnBerserk(int skilllevel, boolean Berserk) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(1); + p.writeInt(1320006); + p.writeByte(0xA9); + p.writeByte(skilllevel); + p.writeByte(Berserk ? 1 : 0); + return p; } - public static byte[] showBerserk(int cid, int skilllevel, boolean Berserk) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(1); - mplew.writeInt(1320006); - mplew.write(0xA9); - mplew.write(skilllevel); - mplew.write(Berserk ? 1 : 0); - return mplew.getPacket(); + public static Packet showBerserk(int chrId, int skillLv, boolean berserk) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_FOREIGN_EFFECT); + p.writeInt(chrId); + p.writeByte(1); + p.writeInt(1320006); + p.writeByte(0xA9); + p.writeByte(skillLv); + p.writeBool(berserk); + return p; } - public static byte[] updateSkill(int skillid, int level, int masterlevel, long expiration) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_SKILLS.getValue()); - mplew.write(1); - mplew.writeShort(1); - mplew.writeInt(skillid); - mplew.writeInt(level); - mplew.writeInt(masterlevel); - addExpirationTime(mplew, expiration); - mplew.write(4); - return mplew.getPacket(); + public static Packet updateSkill(int skillId, int level, int masterlevel, long expiration) { + OutPacket p = OutPacket.create(SendOpcode.UPDATE_SKILLS); + p.writeByte(1); + p.writeShort(1); + p.writeInt(skillId); + p.writeInt(level); + p.writeInt(masterlevel); + addExpirationTime(p, expiration); + p.writeByte(4); + return p; } - public static byte[] getShowQuestCompletion(int id) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.QUEST_CLEAR.getValue()); - mplew.writeShort(id); - return mplew.getPacket(); + public static Packet getShowQuestCompletion(int id) { + final OutPacket p = OutPacket.create(SendOpcode.QUEST_CLEAR); + p.writeShort(id); + return p; } - public static byte[] getKeymap(Map keybindings) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.KEYMAP.getValue()); - mplew.write(0); + public static Packet getKeymap(Map keybindings) { + final OutPacket p = OutPacket.create(SendOpcode.KEYMAP); + p.writeByte(0); for (int x = 0; x < 90; x++) { MapleKeyBinding binding = keybindings.get(x); if (binding != null) { - mplew.write(binding.getType()); - mplew.writeInt(binding.getAction()); + p.writeByte(binding.getType()); + p.writeInt(binding.getAction()); } else { - mplew.write(0); - mplew.writeInt(0); + p.writeByte(0); + p.writeInt(0); } } - return mplew.getPacket(); + return p; } - public static byte[] QuickslotMappedInit(MapleQuickslotBinding pQuickslot) { - final MaplePacketLittleEndianWriter pOutPacket = new MaplePacketLittleEndianWriter(); - - pOutPacket.writeShort(SendOpcode.QUICKSLOT_INIT.getValue()); - pQuickslot.Encode(pOutPacket); - - return pOutPacket.getPacket(); + public static Packet QuickslotMappedInit(MapleQuickslotBinding pQuickslot) { + OutPacket p = OutPacket.create(SendOpcode.QUICKSLOT_INIT); + pQuickslot.encode(p); + return p; } - public static byte[] getInventoryFull() { + public static Packet getInventoryFull() { return modifyInventory(true, Collections.emptyList()); } - public static byte[] getShowInventoryFull() { + public static Packet getShowInventoryFull() { return getShowInventoryStatus(0xff); } - public static byte[] showItemUnavailable() { + public static Packet showItemUnavailable() { return getShowInventoryStatus(0xfe); } - public static byte[] getShowInventoryStatus(int mode) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(0); - mplew.write(mode); - mplew.writeInt(0); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet getShowInventoryStatus(int mode) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(0); + p.writeByte(mode); + p.writeInt(0); + p.writeInt(0); + return p; } - public static byte[] getStorage(int npcId, byte slots, Collection items, int meso) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STORAGE.getValue()); - mplew.write(0x16); - mplew.writeInt(npcId); - mplew.write(slots); - mplew.writeShort(0x7E); - mplew.writeShort(0); - mplew.writeInt(0); - mplew.writeInt(meso); - mplew.writeShort(0); - mplew.write((byte) items.size()); + public static Packet getStorage(int npcId, byte slots, Collection items, int meso) { + final OutPacket p = OutPacket.create(SendOpcode.STORAGE); + p.writeByte(0x16); + p.writeInt(npcId); + p.writeByte(slots); + p.writeShort(0x7E); + p.writeShort(0); + p.writeInt(0); + p.writeInt(meso); + p.writeShort(0); + p.writeByte((byte) items.size()); for (Item item : items) { - addItemInfo(mplew, item, true); + addItemInfo(p, item, true); } - mplew.writeShort(0); - mplew.write(0); - return mplew.getPacket(); + p.writeShort(0); + p.writeByte(0); + return p; } /* @@ -3726,69 +3534,63 @@ public class PacketCreator { * 0x0B = You do not have enough mesos * 0x0C = One-Of-A-Kind error */ - public static byte[] getStorageError(byte i) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STORAGE.getValue()); - mplew.write(i); - return mplew.getPacket(); + public static Packet getStorageError(byte i) { + final OutPacket p = OutPacket.create(SendOpcode.STORAGE); + p.writeByte(i); + return p; } - public static byte[] mesoStorage(byte slots, int meso) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STORAGE.getValue()); - mplew.write(0x13); - mplew.write(slots); - mplew.writeShort(2); - mplew.writeShort(0); - mplew.writeInt(0); - mplew.writeInt(meso); - return mplew.getPacket(); + public static Packet mesoStorage(byte slots, int meso) { + final OutPacket p = OutPacket.create(SendOpcode.STORAGE); + p.writeByte(0x13); + p.writeByte(slots); + p.writeShort(2); + p.writeShort(0); + p.writeInt(0); + p.writeInt(meso); + return p; } - public static byte[] storeStorage(byte slots, MapleInventoryType type, Collection items) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STORAGE.getValue()); - mplew.write(0xD); - mplew.write(slots); - mplew.writeShort(type.getBitfieldEncoding()); - mplew.writeShort(0); - mplew.writeInt(0); - mplew.write(items.size()); + public static Packet storeStorage(byte slots, MapleInventoryType type, Collection items) { + final OutPacket p = OutPacket.create(SendOpcode.STORAGE); + p.writeByte(0xD); + p.writeByte(slots); + p.writeShort(type.getBitfieldEncoding()); + p.writeShort(0); + p.writeInt(0); + p.writeByte(items.size()); for (Item item : items) { - addItemInfo(mplew, item, true); + addItemInfo(p, item, true); } - return mplew.getPacket(); + return p; } - public static byte[] takeOutStorage(byte slots, MapleInventoryType type, Collection items) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STORAGE.getValue()); - mplew.write(0x9); - mplew.write(slots); - mplew.writeShort(type.getBitfieldEncoding()); - mplew.writeShort(0); - mplew.writeInt(0); - mplew.write(items.size()); + public static Packet takeOutStorage(byte slots, MapleInventoryType type, Collection items) { + final OutPacket p = OutPacket.create(SendOpcode.STORAGE); + p.writeByte(0x9); + p.writeByte(slots); + p.writeShort(type.getBitfieldEncoding()); + p.writeShort(0); + p.writeInt(0); + p.writeByte(items.size()); for (Item item : items) { - addItemInfo(mplew, item, true); + addItemInfo(p, item, true); } - return mplew.getPacket(); + return p; } - public static byte[] arrangeStorage(byte slots, Collection items) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - - mplew.writeShort(SendOpcode.STORAGE.getValue()); - mplew.write(0xF); - mplew.write(slots); - mplew.write(124); - mplew.skip(10); - mplew.write(items.size()); + public static Packet arrangeStorage(byte slots, Collection items) { + OutPacket p = OutPacket.create(SendOpcode.STORAGE); + p.writeByte(0xF); + p.writeByte(slots); + p.writeByte(124); + p.skip(10); + p.writeByte(items.size()); for (Item item : items) { - addItemInfo(mplew, item, true); + addItemInfo(p, item, true); } - mplew.write(0); - return mplew.getPacket(); + p.writeByte(0); + return p; } /** @@ -3796,24 +3598,22 @@ public class PacketCreator { * @param remhppercentage * @return */ - public static byte[] showMonsterHP(int oid, int remhppercentage) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_MONSTER_HP.getValue()); - mplew.writeInt(oid); - mplew.write(remhppercentage); - return mplew.getPacket(); + public static Packet showMonsterHP(int oid, int remhppercentage) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_MONSTER_HP); + p.writeInt(oid); + p.writeByte(remhppercentage); + return p; } - public static byte[] showBossHP(int oid, int currHP, int maxHP, byte tagColor, byte tagBgColor) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(5); - mplew.writeInt(oid); - mplew.writeInt(currHP); - mplew.writeInt(maxHP); - mplew.write(tagColor); - mplew.write(tagBgColor); - return mplew.getPacket(); + public static Packet showBossHP(int oid, int currHP, int maxHP, byte tagColor, byte tagBgColor) { + final OutPacket p = OutPacket.create(SendOpcode.FIELD_EFFECT); + p.writeByte(5); + p.writeInt(oid); + p.writeInt(currHP); + p.writeInt(maxHP); + p.writeByte(tagColor); + p.writeByte(tagBgColor); + return p; } private static Pair normalizedCustomMaxHP(long currHP, long maxHP) { @@ -3832,29 +3632,27 @@ public class PacketCreator { return new Pair<>(sendHP, sendMaxHP); } - public static byte[] customShowBossHP(byte call, int oid, long currHP, long maxHP, byte tagColor, byte tagBgColor) { + public static Packet customShowBossHP(byte call, int oid, long currHP, long maxHP, byte tagColor, byte tagBgColor) { Pair customHP = normalizedCustomMaxHP(currHP, maxHP); - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(call); - mplew.writeInt(oid); - mplew.writeInt(customHP.left); - mplew.writeInt(customHP.right); - mplew.write(tagColor); - mplew.write(tagBgColor); - return mplew.getPacket(); + final OutPacket p = OutPacket.create(SendOpcode.FIELD_EFFECT); + p.writeByte(call); + p.writeInt(oid); + p.writeInt(customHP.left); + p.writeInt(customHP.right); + p.writeByte(tagColor); + p.writeByte(tagBgColor); + return p; } - public static byte[] giveFameResponse(int mode, String charname, int newfame) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAME_RESPONSE.getValue()); - mplew.write(0); - mplew.writeMapleAsciiString(charname); - mplew.write(mode); - mplew.writeShort(newfame); - mplew.writeShort(0); - return mplew.getPacket(); + public static Packet giveFameResponse(int mode, String charname, int newfame) { + final OutPacket p = OutPacket.create(SendOpcode.FAME_RESPONSE); + p.writeByte(0); + p.writeString(charname); + p.writeByte(mode); + p.writeShort(newfame); + p.writeShort(0); + return p; } /** @@ -3868,27 +3666,24 @@ public class PacketCreator { * @param status * @return */ - public static byte[] giveFameErrorResponse(int status) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAME_RESPONSE.getValue()); - mplew.write(status); - return mplew.getPacket(); + public static Packet giveFameErrorResponse(int status) { + final OutPacket p = OutPacket.create(SendOpcode.FAME_RESPONSE); + p.writeByte(status); + return p; } - public static byte[] receiveFame(int mode, String charnameFrom) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAME_RESPONSE.getValue()); - mplew.write(5); - mplew.writeMapleAsciiString(charnameFrom); - mplew.write(mode); - return mplew.getPacket(); + public static Packet receiveFame(int mode, String charnameFrom) { + final OutPacket p = OutPacket.create(SendOpcode.FAME_RESPONSE); + p.writeByte(5); + p.writeString(charnameFrom); + p.writeByte(mode); + return p; } - public static byte[] partyCreated(MapleParty party, int partycharid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); - mplew.write(8); - mplew.writeInt(party.getId()); + public static Packet partyCreated(MapleParty party, int partycharid) { + final OutPacket p = OutPacket.create(SendOpcode.PARTY_OPERATION); + p.writeByte(8); + p.writeInt(party.getId()); Map partyDoors = party.getDoors(); if (partyDoors.size() > 0) { @@ -3896,43 +3691,41 @@ public class PacketCreator { if (door != null) { MapleDoorObject mdo = door.getAreaDoor(); - mplew.writeInt(mdo.getTo().getId()); - mplew.writeInt(mdo.getFrom().getId()); - mplew.writeInt(mdo.getPosition().x); - mplew.writeInt(mdo.getPosition().y); + p.writeInt(mdo.getTo().getId()); + p.writeInt(mdo.getFrom().getId()); + p.writeInt(mdo.getPosition().x); + p.writeInt(mdo.getPosition().y); } else { - mplew.writeInt(999999999); - mplew.writeInt(999999999); - mplew.writeInt(0); - mplew.writeInt(0); + p.writeInt(999999999); + p.writeInt(999999999); + p.writeInt(0); + p.writeInt(0); } } else { - mplew.writeInt(999999999); - mplew.writeInt(999999999); - mplew.writeInt(0); - mplew.writeInt(0); + p.writeInt(999999999); + p.writeInt(999999999); + p.writeInt(0); + p.writeInt(0); } - return mplew.getPacket(); + return p; } - public static byte[] partyInvite(MapleCharacter from) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); - mplew.write(4); - mplew.writeInt(from.getParty().getId()); - mplew.writeMapleAsciiString(from.getName()); - mplew.write(0); - return mplew.getPacket(); + public static Packet partyInvite(MapleCharacter from) { + final OutPacket p = OutPacket.create(SendOpcode.PARTY_OPERATION); + p.writeByte(4); + p.writeInt(from.getParty().getId()); + p.writeString(from.getName()); + p.writeByte(0); + return p; } - public static byte[] partySearchInvite(MapleCharacter from) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); - mplew.write(4); - mplew.writeInt(from.getParty().getId()); - mplew.writeMapleAsciiString("PS: " + from.getName()); - mplew.write(0); - return mplew.getPacket(); + public static Packet partySearchInvite(MapleCharacter from) { + final OutPacket p = OutPacket.create(SendOpcode.PARTY_OPERATION); + p.writeByte(4); + p.writeInt(from.getParty().getId()); + p.writeString("PS: " + from.getName()); + p.writeByte(0); + return p; } /** @@ -3948,11 +3741,10 @@ public class PacketCreator { * @param message * @return */ - public static byte[] partyStatusMessage(int message) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); - mplew.write(message); - return mplew.getPacket(); + public static Packet partyStatusMessage(int message) { + final OutPacket p = OutPacket.create(SendOpcode.PARTY_OPERATION); + p.writeByte(message); + return p; } /** @@ -3963,44 +3755,43 @@ public class PacketCreator { * @param charname * @return */ - public static byte[] partyStatusMessage(int message, String charname) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); - mplew.write(message); - mplew.writeMapleAsciiString(charname); - return mplew.getPacket(); + public static Packet partyStatusMessage(int message, String charname) { + final OutPacket p = OutPacket.create(SendOpcode.PARTY_OPERATION); + p.writeByte(message); + p.writeString(charname); + return p; } - private static void addPartyStatus(int forchannel, MapleParty party, LittleEndianWriter lew, boolean leaving) { + private static void addPartyStatus(int forchannel, MapleParty party, OutPacket p, boolean leaving) { List partymembers = new ArrayList<>(party.getMembers()); while (partymembers.size() < 6) { partymembers.add(new MaplePartyCharacter()); } for (MaplePartyCharacter partychar : partymembers) { - lew.writeInt(partychar.getId()); + p.writeInt(partychar.getId()); } for (MaplePartyCharacter partychar : partymembers) { - lew.writeAsciiString(getRightPaddedStr(partychar.getName(), '\0', 13)); + p.writeFixedString(getRightPaddedStr(partychar.getName(), '\0', 13)); } for (MaplePartyCharacter partychar : partymembers) { - lew.writeInt(partychar.getJobId()); + p.writeInt(partychar.getJobId()); } for (MaplePartyCharacter partychar : partymembers) { - lew.writeInt(partychar.getLevel()); + p.writeInt(partychar.getLevel()); } for (MaplePartyCharacter partychar : partymembers) { if (partychar.isOnline()) { - lew.writeInt(partychar.getChannel() - 1); + p.writeInt(partychar.getChannel() - 1); } else { - lew.writeInt(-2); + p.writeInt(-2); } } - lew.writeInt(party.getLeader().getId()); + p.writeInt(party.getLeader().getId()); for (MaplePartyCharacter partychar : partymembers) { if (partychar.getChannel() == forchannel) { - lew.writeInt(partychar.getMapId()); + p.writeInt(partychar.getMapId()); } else { - lew.writeInt(0); + p.writeInt(0); } } @@ -4011,93 +3802,90 @@ public class PacketCreator { MapleDoor door = partyDoors.get(partychar.getId()); if (door != null) { MapleDoorObject mdo = door.getTownDoor(); - lew.writeInt(mdo.getTown().getId()); - lew.writeInt(mdo.getArea().getId()); - lew.writeInt(mdo.getPosition().x); - lew.writeInt(mdo.getPosition().y); + p.writeInt(mdo.getTown().getId()); + p.writeInt(mdo.getArea().getId()); + p.writeInt(mdo.getPosition().x); + p.writeInt(mdo.getPosition().y); } else { - lew.writeInt(999999999); - lew.writeInt(999999999); - lew.writeInt(0); - lew.writeInt(0); + p.writeInt(999999999); + p.writeInt(999999999); + p.writeInt(0); + p.writeInt(0); } } else { - lew.writeInt(999999999); - lew.writeInt(999999999); - lew.writeInt(0); - lew.writeInt(0); + p.writeInt(999999999); + p.writeInt(999999999); + p.writeInt(0); + p.writeInt(0); } } else { - lew.writeInt(999999999); - lew.writeInt(999999999); - lew.writeInt(0); - lew.writeInt(0); + p.writeInt(999999999); + p.writeInt(999999999); + p.writeInt(0); + p.writeInt(0); } } } - public static byte[] updateParty(int forChannel, MapleParty party, PartyOperation op, MaplePartyCharacter target) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); + public static Packet updateParty(int forChannel, MapleParty party, PartyOperation op, MaplePartyCharacter target) { + final OutPacket p = OutPacket.create(SendOpcode.PARTY_OPERATION); switch (op) { case DISBAND: case EXPEL: case LEAVE: - mplew.write(0x0C); - mplew.writeInt(party.getId()); - mplew.writeInt(target.getId()); + p.writeByte(0x0C); + p.writeInt(party.getId()); + p.writeInt(target.getId()); if (op == PartyOperation.DISBAND) { - mplew.write(0); - mplew.writeInt(party.getId()); + p.writeByte(0); + p.writeInt(party.getId()); } else { - mplew.write(1); + p.writeByte(1); if (op == PartyOperation.EXPEL) { - mplew.write(1); + p.writeByte(1); } else { - mplew.write(0); + p.writeByte(0); } - mplew.writeMapleAsciiString(target.getName()); - addPartyStatus(forChannel, party, mplew, false); + p.writeString(target.getName()); + addPartyStatus(forChannel, party, p, false); } break; case JOIN: - mplew.write(0xF); - mplew.writeInt(party.getId()); - mplew.writeMapleAsciiString(target.getName()); - addPartyStatus(forChannel, party, mplew, false); + p.writeByte(0xF); + p.writeInt(party.getId()); + p.writeString(target.getName()); + addPartyStatus(forChannel, party, p, false); break; case SILENT_UPDATE: case LOG_ONOFF: - mplew.write(0x7); - mplew.writeInt(party.getId()); - addPartyStatus(forChannel, party, mplew, false); + p.writeByte(0x7); + p.writeInt(party.getId()); + addPartyStatus(forChannel, party, p, false); break; case CHANGE_LEADER: - mplew.write(0x1B); - mplew.writeInt(target.getId()); - mplew.write(0); + p.writeByte(0x1B); + p.writeInt(target.getId()); + p.writeByte(0); break; } - return mplew.getPacket(); + return p; } - public static byte[] partyPortal(int townId, int targetId, Point position) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARTY_OPERATION.getValue()); - mplew.writeShort(0x23); - mplew.writeInt(townId); - mplew.writeInt(targetId); - mplew.writePos(position); - return mplew.getPacket(); + public static Packet partyPortal(int townId, int targetId, Point position) { + final OutPacket p = OutPacket.create(SendOpcode.PARTY_OPERATION); + p.writeShort(0x23); + p.writeInt(townId); + p.writeInt(targetId); + p.writePos(position); + return p; } - public static byte[] updatePartyMemberHP(int cid, int curhp, int maxhp) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_PARTYMEMBER_HP.getValue()); - mplew.writeInt(cid); - mplew.writeInt(curhp); - mplew.writeInt(maxhp); - return mplew.getPacket(); + public static Packet updatePartyMemberHP(int cid, int curhp, int maxhp) { + final OutPacket p = OutPacket.create(SendOpcode.UPDATE_PARTYMEMBER_HP); + p.writeInt(cid); + p.writeInt(curhp); + p.writeInt(maxhp); + return p; } /** @@ -4108,16 +3896,15 @@ public class PacketCreator { * @param mode * @return */ - public static byte[] multiChat(String name, String chattext, int mode) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MULTICHAT.getValue()); - mplew.write(mode); - mplew.writeMapleAsciiString(name); - mplew.writeMapleAsciiString(chattext); - return mplew.getPacket(); + public static Packet multiChat(String name, String chattext, int mode) { + OutPacket p = OutPacket.create(SendOpcode.MULTICHAT); + p.writeByte(mode); + p.writeString(name); + p.writeString(chattext); + return p; } - private static void writeIntMask(final MaplePacketLittleEndianWriter mplew, Map stats) { + private static void writeIntMask(OutPacket p, Map stats) { int firstmask = 0; int secondmask = 0; for (MonsterStatus stat : stats.keySet()) { @@ -4127,719 +3914,342 @@ public class PacketCreator { secondmask |= stat.getValue(); } } - mplew.writeInt(firstmask); - mplew.writeInt(secondmask); + p.writeInt(firstmask); + p.writeInt(secondmask); } - public static byte[] applyMonsterStatus(final int oid, final MonsterStatusEffect mse, final List reflection) { + public static Packet applyMonsterStatus(final int oid, final MonsterStatusEffect mse, final List reflection) { Map stati = mse.getStati(); - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.APPLY_MONSTER_STATUS.getValue()); - mplew.writeInt(oid); - mplew.writeLong(0); - writeIntMask(mplew, stati); + final OutPacket p = OutPacket.create(SendOpcode.APPLY_MONSTER_STATUS); + p.writeInt(oid); + p.writeLong(0); + writeIntMask(p, stati); for (Map.Entry stat : stati.entrySet()) { - mplew.writeShort(stat.getValue()); + p.writeShort(stat.getValue()); if (mse.isMonsterSkill()) { - mplew.writeShort(mse.getMobSkill().getSkillId()); - mplew.writeShort(mse.getMobSkill().getSkillLevel()); + p.writeShort(mse.getMobSkill().getSkillId()); + p.writeShort(mse.getMobSkill().getSkillLevel()); } else { - mplew.writeInt(mse.getSkill().getId()); + p.writeInt(mse.getSkill().getId()); } - mplew.writeShort(-1); // might actually be the buffTime but it's not displayed anywhere + p.writeShort(-1); // might actually be the buffTime but it's not displayed anywhere } int size = stati.size(); // size if (reflection != null) { for (Integer ref : reflection) { - mplew.writeInt(ref); + p.writeInt(ref); } if (reflection.size() > 0) { size /= 2; // This gives 2 buffs per reflection but it's really one buff } } - mplew.write(size); // size - mplew.writeInt(0); - return mplew.getPacket(); + p.writeByte(size); // size + p.writeInt(0); + return p; } - public static byte[] cancelMonsterStatus(int oid, Map stats) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_MONSTER_STATUS.getValue()); - mplew.writeInt(oid); - mplew.writeLong(0); - writeIntMask(mplew, stats); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet cancelMonsterStatus(int oid, Map stats) { + final OutPacket p = OutPacket.create(SendOpcode.CANCEL_MONSTER_STATUS); + p.writeInt(oid); + p.writeLong(0); + writeIntMask(p, stats); + p.writeInt(0); + return p; } - public static byte[] getClock(int time) { // time in seconds - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CLOCK.getValue()); - mplew.write(2); // clock type. if you send 3 here you have to send another byte (which does not matter at all) before the timestamp - mplew.writeInt(time); - return mplew.getPacket(); + public static Packet getClock(int time) { // time in seconds + OutPacket p = OutPacket.create(SendOpcode.CLOCK); + p.writeByte(2); // clock type. if you send 3 here you have to send another byte (which does not matter at all) before the timestamp + p.writeInt(time); + return p; } - public static byte[] getClockTime(int hour, int min, int sec) { // Current Time - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CLOCK.getValue()); - mplew.write(1); //Clock-Type - mplew.write(hour); - mplew.write(min); - mplew.write(sec); - return mplew.getPacket(); + public static Packet getClockTime(int hour, int min, int sec) { // Current Time + OutPacket p = OutPacket.create(SendOpcode.CLOCK); + p.writeByte(1); //Clock-Type + p.writeByte(hour); + p.writeByte(min); + p.writeByte(sec); + return p; } - public static byte[] removeClock() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STOP_CLOCK.getValue()); - mplew.write(0); - return mplew.getPacket(); + public static Packet removeClock() { + final OutPacket p = OutPacket.create(SendOpcode.STOP_CLOCK); + p.writeByte(0); + return p; } - public static byte[] spawnMist(int oid, int ownerCid, int skill, int level, MapleMist mist) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_MIST.getValue()); - mplew.writeInt(oid); - mplew.writeInt(mist.isMobMist() ? 0 : mist.isPoisonMist() ? 1 : mist.isRecoveryMist() ? 4 : 2); // mob mist = 0, player poison = 1, smokescreen = 2, unknown = 3, recovery = 4 - mplew.writeInt(ownerCid); - mplew.writeInt(skill); - mplew.write(level); - mplew.writeShort(mist.getSkillDelay()); // Skill delay - mplew.writeInt(mist.getBox().x); - mplew.writeInt(mist.getBox().y); - mplew.writeInt(mist.getBox().x + mist.getBox().width); - mplew.writeInt(mist.getBox().y + mist.getBox().height); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet spawnMist(int objId, int ownerChrId, int skill, int level, MapleMist mist) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_MIST); + p.writeInt(objId); + p.writeInt(mist.isMobMist() ? 0 : mist.isPoisonMist() ? 1 : mist.isRecoveryMist() ? 4 : 2); // mob mist = 0, player poison = 1, smokescreen = 2, unknown = 3, recovery = 4 + p.writeInt(ownerChrId); + p.writeInt(skill); + p.writeByte(level); + p.writeShort(mist.getSkillDelay()); // Skill delay + p.writeInt(mist.getBox().x); + p.writeInt(mist.getBox().y); + p.writeInt(mist.getBox().x + mist.getBox().width); + p.writeInt(mist.getBox().y + mist.getBox().height); + p.writeInt(0); + return p; } - public static byte[] removeMist(int oid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.REMOVE_MIST.getValue()); - mplew.writeInt(oid); - return mplew.getPacket(); + public static Packet removeMist(int objId) { + OutPacket p = OutPacket.create(SendOpcode.REMOVE_MIST); + p.writeInt(objId); + return p; } - public static byte[] damageSummon(int cid, int oid, int damage, int monsterIdFrom) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DAMAGE_SUMMON.getValue()); - mplew.writeInt(cid); - mplew.writeInt(oid); - mplew.write(12); - mplew.writeInt(damage); // damage display doesn't seem to work... - mplew.writeInt(monsterIdFrom); - mplew.write(0); - return mplew.getPacket(); + public static Packet damageSummon(int cid, int oid, int damage, int monsterIdFrom) { + final OutPacket p = OutPacket.create(SendOpcode.DAMAGE_SUMMON); + p.writeInt(cid); + p.writeInt(oid); + p.writeByte(12); + p.writeInt(damage); // damage display doesn't seem to work... + p.writeInt(monsterIdFrom); + p.writeByte(0); + return p; } - public static byte[] damageMonster(int oid, int damage) { + public static Packet damageMonster(int oid, int damage) { return damageMonster(oid, damage, 0, 0); } - public static byte[] healMonster(int oid, int heal, int curhp, int maxhp) { + public static Packet healMonster(int oid, int heal, int curhp, int maxhp) { return damageMonster(oid, -heal, curhp, maxhp); } - private static byte[] damageMonster(int oid, int damage, int curhp, int maxhp) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DAMAGE_MONSTER.getValue()); - mplew.writeInt(oid); - mplew.write(0); - mplew.writeInt(damage); - mplew.writeInt(curhp); - mplew.writeInt(maxhp); - return mplew.getPacket(); + private static Packet damageMonster(int oid, int damage, int curhp, int maxhp) { + final OutPacket p = OutPacket.create(SendOpcode.DAMAGE_MONSTER); + p.writeInt(oid); + p.writeByte(0); + p.writeInt(damage); + p.writeInt(curhp); + p.writeInt(maxhp); + return p; } - public static byte[] updateBuddylist(Collection buddylist) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); - mplew.write(7); - mplew.write(buddylist.size()); + public static Packet updateBuddylist(Collection buddylist) { + OutPacket p = OutPacket.create(SendOpcode.BUDDYLIST); + p.writeByte(7); + p.writeByte(buddylist.size()); for (BuddylistEntry buddy : buddylist) { if (buddy.isVisible()) { - mplew.writeInt(buddy.getCharacterId()); // cid - mplew.writeAsciiString(getRightPaddedStr(buddy.getName(), '\0', 13)); - mplew.write(0); // opposite status - mplew.writeInt(buddy.getChannel() - 1); - mplew.writeAsciiString(getRightPaddedStr(buddy.getGroup(), '\0', 13)); - mplew.writeInt(0);//mapid? + p.writeInt(buddy.getCharacterId()); // cid + p.writeFixedString(getRightPaddedStr(buddy.getName(), '\0', 13)); + p.writeByte(0); // opposite status + p.writeInt(buddy.getChannel() - 1); + p.writeFixedString(getRightPaddedStr(buddy.getGroup(), '\0', 13)); + p.writeInt(0);//mapid? } } for (int x = 0; x < buddylist.size(); x++) { - mplew.writeInt(0);//mapid? + p.writeInt(0);//mapid? } - return mplew.getPacket(); + return p; } - public static byte[] buddylistMessage(byte message) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); - mplew.write(message); - return mplew.getPacket(); + public static Packet buddylistMessage(byte message) { + final OutPacket p = OutPacket.create(SendOpcode.BUDDYLIST); + p.writeByte(message); + return p; } - public static byte[] requestBuddylistAdd(int cidFrom, int cid, String nameFrom) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); - mplew.write(9); - mplew.writeInt(cidFrom); - mplew.writeMapleAsciiString(nameFrom); - mplew.writeInt(cidFrom); - mplew.writeAsciiString(getRightPaddedStr(nameFrom, '\0', 11)); - mplew.write(0x09); - mplew.write(0xf0); - mplew.write(0x01); - mplew.writeInt(0x0f); - mplew.writeNullTerminatedAsciiString("Default Group"); - mplew.writeInt(cid); - return mplew.getPacket(); + public static Packet requestBuddylistAdd(int chrIdFrom, int chrId, String nameFrom) { + OutPacket p = OutPacket.create(SendOpcode.BUDDYLIST); + p.writeByte(9); + p.writeInt(chrIdFrom); + p.writeString(nameFrom); + p.writeInt(chrIdFrom); + p.writeFixedString(getRightPaddedStr(nameFrom, '\0', 11)); + p.writeByte(0x09); + p.writeByte(0xf0); + p.writeByte(0x01); + p.writeInt(0x0f); + p.writeFixedString("Default Group"); + p.writeByte(0); + p.writeInt(chrId); + return p; } - public static byte[] updateBuddyChannel(int characterid, int channel) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); - mplew.write(0x14); - mplew.writeInt(characterid); - mplew.write(0); - mplew.writeInt(channel); - return mplew.getPacket(); + public static Packet updateBuddyChannel(int characterid, int channel) { + final OutPacket p = OutPacket.create(SendOpcode.BUDDYLIST); + p.writeByte(0x14); + p.writeInt(characterid); + p.writeByte(0); + p.writeInt(channel); + return p; } - public static byte[] itemEffect(int characterid, int itemid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_EFFECT.getValue()); - mplew.writeInt(characterid); - mplew.writeInt(itemid); - return mplew.getPacket(); + public static Packet itemEffect(int characterid, int itemid) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_EFFECT); + p.writeInt(characterid); + p.writeInt(itemid); + return p; } - public static byte[] updateBuddyCapacity(int capacity) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BUDDYLIST.getValue()); - mplew.write(0x15); - mplew.write(capacity); - return mplew.getPacket(); + public static Packet updateBuddyCapacity(int capacity) { + final OutPacket p = OutPacket.create(SendOpcode.BUDDYLIST); + p.writeByte(0x15); + p.writeByte(capacity); + return p; } - public static byte[] showChair(int characterid, int itemid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_CHAIR.getValue()); - mplew.writeInt(characterid); - mplew.writeInt(itemid); - return mplew.getPacket(); + public static Packet showChair(int characterid, int itemid) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_CHAIR); + p.writeInt(characterid); + p.writeInt(itemid); + return p; } - public static byte[] cancelChair(int id) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_CHAIR.getValue()); + public static Packet cancelChair(int id) { + final OutPacket p = OutPacket.create(SendOpcode.CANCEL_CHAIR); if (id < 0) { - mplew.write(0); + p.writeByte(0); } else { - mplew.write(1); - mplew.writeShort(id); + p.writeByte(1); + p.writeShort(id); } - return mplew.getPacket(); + return p; } // is there a way to spawn reactors non-animated? - public static byte[] spawnReactor(MapleReactor reactor) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - Point pos = reactor.getPosition(); - mplew.writeShort(SendOpcode.REACTOR_SPAWN.getValue()); - mplew.writeInt(reactor.getObjectId()); - mplew.writeInt(reactor.getId()); - mplew.write(reactor.getState()); - mplew.writePos(pos); - mplew.write(0); - mplew.writeShort(0); - return mplew.getPacket(); + public static Packet spawnReactor(MapleReactor reactor) { + OutPacket p = OutPacket.create(SendOpcode.REACTOR_SPAWN); + p.writeInt(reactor.getObjectId()); + p.writeInt(reactor.getId()); + p.writeByte(reactor.getState()); + p.writePos(reactor.getPosition()); + p.writeByte(0); + p.writeShort(0); + return p; } // is there a way to trigger reactors without performing the hit animation? - public static byte[] triggerReactor(MapleReactor reactor, int stance) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - Point pos = reactor.getPosition(); - mplew.writeShort(SendOpcode.REACTOR_HIT.getValue()); - mplew.writeInt(reactor.getObjectId()); - mplew.write(reactor.getState()); - mplew.writePos(pos); - mplew.write(stance); - mplew.writeShort(0); - mplew.write(5); // frame delay, set to 5 since there doesn't appear to be a fixed formula for it - return mplew.getPacket(); + public static Packet triggerReactor(MapleReactor reactor, int stance) { + OutPacket p = OutPacket.create(SendOpcode.REACTOR_HIT); + p.writeInt(reactor.getObjectId()); + p.writeByte(reactor.getState()); + p.writePos(reactor.getPosition()); + p.writeByte(stance); + p.writeShort(0); + p.writeByte(5); // frame delay, set to 5 since there doesn't appear to be a fixed formula for it + return p; } - public static byte[] destroyReactor(MapleReactor reactor) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - Point pos = reactor.getPosition(); - mplew.writeShort(SendOpcode.REACTOR_DESTROY.getValue()); - mplew.writeInt(reactor.getObjectId()); - mplew.write(reactor.getState()); - mplew.writePos(pos); - return mplew.getPacket(); + public static Packet destroyReactor(MapleReactor reactor) { + OutPacket p = OutPacket.create(SendOpcode.REACTOR_DESTROY); + p.writeInt(reactor.getObjectId()); + p.writeByte(reactor.getState()); + p.writePos(reactor.getPosition()); + return p; } - public static byte[] musicChange(String song) { + public static Packet musicChange(String song) { return environmentChange(song, 6); } - public static byte[] showEffect(String effect) { + public static Packet showEffect(String effect) { return environmentChange(effect, 3); } - public static byte[] playSound(String sound) { + public static Packet playSound(String sound) { return environmentChange(sound, 4); } - public static byte[] environmentChange(String env, int mode) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(mode); - mplew.writeMapleAsciiString(env); - return mplew.getPacket(); + public static Packet environmentChange(String env, int mode) { + OutPacket p = OutPacket.create(SendOpcode.FIELD_EFFECT); + p.writeByte(mode); + p.writeString(env); + return p; } - public static byte[] environmentMove(String env, int mode) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - - mplew.writeShort(SendOpcode.FIELD_OBSTACLE_ONOFF.getValue()); - mplew.writeMapleAsciiString(env); - mplew.writeInt(mode); // 0: stop and back to start, 1: move - - return mplew.getPacket(); + public static Packet environmentMove(String env, int mode) { + OutPacket p = OutPacket.create(SendOpcode.FIELD_OBSTACLE_ONOFF); + p.writeString(env); + p.writeInt(mode); // 0: stop and back to start, 1: move + return p; } - public static byte[] environmentMoveList(Set> envList) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_OBSTACLE_ONOFF_LIST.getValue()); - mplew.writeInt(envList.size()); + public static Packet environmentMoveList(Set> envList) { + OutPacket p = OutPacket.create(SendOpcode.FIELD_OBSTACLE_ONOFF_LIST); + p.writeInt(envList.size()); for (Entry envMove : envList) { - mplew.writeMapleAsciiString(envMove.getKey()); - mplew.writeInt(envMove.getValue()); + p.writeString(envMove.getKey()); + p.writeInt(envMove.getValue()); } - return mplew.getPacket(); + return p; } - public static byte[] environmentMoveReset() { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_OBSTACLE_ALL_RESET.getValue()); - return mplew.getPacket(); + public static Packet environmentMoveReset() { + return OutPacket.create(SendOpcode.FIELD_OBSTACLE_ALL_RESET); } - public static byte[] startMapEffect(String msg, int itemid, boolean active) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BLOW_WEATHER.getValue()); - mplew.write(active ? 0 : 1); - mplew.writeInt(itemid); + public static Packet startMapEffect(String msg, int itemId, boolean active) { + OutPacket p = OutPacket.create(SendOpcode.BLOW_WEATHER); + p.writeBool(!active); + p.writeInt(itemId); if (active) { - mplew.writeMapleAsciiString(msg); + p.writeString(msg); } - return mplew.getPacket(); + return p; } - public static byte[] removeMapEffect() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BLOW_WEATHER.getValue()); - mplew.write(0); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet removeMapEffect() { + OutPacket p = OutPacket.create(SendOpcode.BLOW_WEATHER); + p.writeByte(0); + p.writeInt(0); + return p; } - public static byte[] mapEffect(String path) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(3); - mplew.writeMapleAsciiString(path); - return mplew.getPacket(); + public static Packet mapEffect(String path) { + final OutPacket p = OutPacket.create(SendOpcode.FIELD_EFFECT); + p.writeByte(3); + p.writeString(path); + return p; } - public static byte[] mapSound(String path) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(4); - mplew.writeMapleAsciiString(path); - return mplew.getPacket(); + public static Packet mapSound(String path) { + final OutPacket p = OutPacket.create(SendOpcode.FIELD_EFFECT); + p.writeByte(4); + p.writeString(path); + return p; } - public static byte[] showGuildInfo(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x1A); //signature for showing guild info - if (chr == null) { //show empty guild (used for leaving, expelled) - mplew.write(0); - return mplew.getPacket(); - } - MapleGuild g = chr.getClient().getWorldServer().getGuild(chr.getMGC()); - if (g == null) { //failed to read from DB - don't show a guild - mplew.write(0); - return mplew.getPacket(); - } - mplew.write(1); //bInGuild - mplew.writeInt(g.getId()); - mplew.writeMapleAsciiString(g.getName()); - for (int i = 1; i <= 5; i++) { - mplew.writeMapleAsciiString(g.getRankTitle(i)); - } - Collection members = g.getMembers(); - mplew.write(members.size()); //then it is the size of all the members - for (MapleGuildCharacter mgc : members) {//and each of their character ids o_O - mplew.writeInt(mgc.getId()); - } - for (MapleGuildCharacter mgc : members) { - mplew.writeAsciiString(getRightPaddedStr(mgc.getName(), '\0', 13)); - mplew.writeInt(mgc.getJobId()); - mplew.writeInt(mgc.getLevel()); - mplew.writeInt(mgc.getGuildRank()); - mplew.writeInt(mgc.isOnline() ? 1 : 0); - mplew.writeInt(g.getSignature()); - mplew.writeInt(mgc.getAllianceRank()); - } - mplew.writeInt(g.getCapacity()); - mplew.writeShort(g.getLogoBG()); - mplew.write(g.getLogoBGColor()); - mplew.writeShort(g.getLogo()); - mplew.write(g.getLogoColor()); - mplew.writeMapleAsciiString(g.getNotice()); - mplew.writeInt(g.getGP()); - mplew.writeInt(g.getAllianceId()); - return mplew.getPacket(); + public static Packet skillEffect(MapleCharacter from, int skillId, int level, byte flags, int speed, byte direction) { + final OutPacket p = OutPacket.create(SendOpcode.SKILL_EFFECT); + p.writeInt(from.getId()); + p.writeInt(skillId); + p.writeByte(level); + p.writeByte(flags); + p.writeByte(speed); + p.writeByte(direction); //Mmmk + return p; } - public static byte[] guildMemberOnline(int gid, int cid, boolean bOnline) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x3d); - mplew.writeInt(gid); - mplew.writeInt(cid); - mplew.write(bOnline ? 1 : 0); - return mplew.getPacket(); + public static Packet skillCancel(MapleCharacter from, int skillId) { + final OutPacket p = OutPacket.create(SendOpcode.CANCEL_SKILL_EFFECT); + p.writeInt(from.getId()); + p.writeInt(skillId); + return p; } - public static byte[] guildInvite(int gid, String charName) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x05); - mplew.writeInt(gid); - mplew.writeMapleAsciiString(charName); - return mplew.getPacket(); + public static Packet catchMonster(int mobOid, byte success) { // updated packet structure found thanks to Rien dev team + final OutPacket p = OutPacket.create(SendOpcode.CATCH_MONSTER); + p.writeInt(mobOid); + p.writeByte(success); + return p; } - public static byte[] createGuildMessage(String masterName, String guildName) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x3); - mplew.writeInt(0); - mplew.writeMapleAsciiString(masterName); - mplew.writeMapleAsciiString(guildName); - return mplew.getPacket(); - } - - /** - * Gets a Heracle/guild message packet. - *

- * Possible values for code:
28: guild name already in use
- * 31: problem in locating players during agreement
33/40: already joined a guild
- * 35: Cannot make guild
36: problem in player agreement
38: problem during forming guild
- * 41: max number of players in joining guild
42: character can't be found this channel
- * 45/48: character not in guild
52: problem in disbanding guild
56: admin cannot make guild
- * 57: problem in increasing guild size
- * - * @param code The response code. - * @return The guild message packet. - */ - public static byte[] genericGuildMessage(byte code) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(code); - return mplew.getPacket(); - } - - /** - * Gets a guild message packet appended with target name. - *

- * 53: player not accepting guild invites
- * 54: player already managing an invite
55: player denied an invite
- * - * @param code The response code. - * @param targetName The initial player target of the invitation. - * @return The guild message packet. - */ - public static byte[] responseGuildMessage(byte code, String targetName) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(code); - mplew.writeMapleAsciiString(targetName); - return mplew.getPacket(); - } - - public static byte[] newGuildMember(MapleGuildCharacter mgc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x27); - mplew.writeInt(mgc.getGuildId()); - mplew.writeInt(mgc.getId()); - mplew.writeAsciiString(getRightPaddedStr(mgc.getName(), '\0', 13)); - mplew.writeInt(mgc.getJobId()); - mplew.writeInt(mgc.getLevel()); - mplew.writeInt(mgc.getGuildRank()); //should be always 5 but whatevs - mplew.writeInt(mgc.isOnline() ? 1 : 0); //should always be 1 too - mplew.writeInt(1); //? could be guild signature, but doesn't seem to matter - mplew.writeInt(3); - return mplew.getPacket(); - } - - //someone leaving, mode == 0x2c for leaving, 0x2f for expelled - public static byte[] memberLeft(MapleGuildCharacter mgc, boolean bExpelled) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(bExpelled ? 0x2f : 0x2c); - mplew.writeInt(mgc.getGuildId()); - mplew.writeInt(mgc.getId()); - mplew.writeMapleAsciiString(mgc.getName()); - return mplew.getPacket(); - } - - //rank change - public static byte[] changeRank(MapleGuildCharacter mgc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x40); - mplew.writeInt(mgc.getGuildId()); - mplew.writeInt(mgc.getId()); - mplew.write(mgc.getGuildRank()); - return mplew.getPacket(); - } - - public static byte[] guildNotice(int gid, String notice) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x44); - mplew.writeInt(gid); - mplew.writeMapleAsciiString(notice); - return mplew.getPacket(); - } - - public static byte[] guildMemberLevelJobUpdate(MapleGuildCharacter mgc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x3C); - mplew.writeInt(mgc.getGuildId()); - mplew.writeInt(mgc.getId()); - mplew.writeInt(mgc.getLevel()); - mplew.writeInt(mgc.getJobId()); - return mplew.getPacket(); - } - - public static byte[] rankTitleChange(int gid, String[] ranks) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x3E); - mplew.writeInt(gid); - for (int i = 0; i < 5; i++) { - mplew.writeMapleAsciiString(ranks[i]); - } - return mplew.getPacket(); - } - - public static byte[] guildDisband(int gid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x32); - mplew.writeInt(gid); - mplew.write(1); - return mplew.getPacket(); - } - - public static byte[] guildQuestWaitingNotice(byte channel, int waitingPos) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x4C); - mplew.write(channel - 1); - mplew.write(waitingPos); - return mplew.getPacket(); - } - - public static byte[] guildEmblemChange(int gid, short bg, byte bgcolor, short logo, byte logocolor) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x42); - mplew.writeInt(gid); - mplew.writeShort(bg); - mplew.write(bgcolor); - mplew.writeShort(logo); - mplew.write(logocolor); - return mplew.getPacket(); - } - - public static byte[] guildCapacityChange(int gid, int capacity) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x3A); - mplew.writeInt(gid); - mplew.write(capacity); - return mplew.getPacket(); - } - - public static void addThread(final MaplePacketLittleEndianWriter mplew, ResultSet rs) throws SQLException { - mplew.writeInt(rs.getInt("localthreadid")); - mplew.writeInt(rs.getInt("postercid")); - mplew.writeMapleAsciiString(rs.getString("name")); - mplew.writeLong(getTime(rs.getLong("timestamp"))); - mplew.writeInt(rs.getInt("icon")); - mplew.writeInt(rs.getInt("replycount")); - } - - public static byte[] BBSThreadList(ResultSet rs, int start) throws SQLException { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_BBS_PACKET.getValue()); - mplew.write(0x06); - if (!rs.last()) { - mplew.write(0); - mplew.writeInt(0); - mplew.writeInt(0); - return mplew.getPacket(); - } - int threadCount = rs.getRow(); - if (rs.getInt("localthreadid") == 0) { //has a notice - mplew.write(1); - addThread(mplew, rs); - threadCount--; //one thread didn't count (because it's a notice) - } else { - mplew.write(0); - } - if (!rs.absolute(start + 1)) { //seek to the thread before where we start - rs.first(); //uh, we're trying to start at a place past possible - start = 0; - } - mplew.writeInt(threadCount); - mplew.writeInt(Math.min(10, threadCount - start)); - for (int i = 0; i < Math.min(10, threadCount - start); i++) { - addThread(mplew, rs); - rs.next(); - } - return mplew.getPacket(); - } - - public static byte[] showThread(int localthreadid, ResultSet threadRS, ResultSet repliesRS) throws SQLException, RuntimeException { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_BBS_PACKET.getValue()); - mplew.write(0x07); - mplew.writeInt(localthreadid); - mplew.writeInt(threadRS.getInt("postercid")); - mplew.writeLong(getTime(threadRS.getLong("timestamp"))); - mplew.writeMapleAsciiString(threadRS.getString("name")); - mplew.writeMapleAsciiString(threadRS.getString("startpost")); - mplew.writeInt(threadRS.getInt("icon")); - if (repliesRS != null) { - int replyCount = threadRS.getInt("replycount"); - mplew.writeInt(replyCount); - int i; - for (i = 0; i < replyCount && repliesRS.next(); i++) { - mplew.writeInt(repliesRS.getInt("replyid")); - mplew.writeInt(repliesRS.getInt("postercid")); - mplew.writeLong(getTime(repliesRS.getLong("timestamp"))); - mplew.writeMapleAsciiString(repliesRS.getString("content")); - } - if (i != replyCount || repliesRS.next()) { - throw new RuntimeException(String.valueOf(threadRS.getInt("threadid"))); - } - } else { - mplew.writeInt(0); - } - return mplew.getPacket(); - } - - public static byte[] showGuildRanks(int npcid, ResultSet rs) throws SQLException { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x49); - mplew.writeInt(npcid); - if (!rs.last()) { //no guilds o.o - mplew.writeInt(0); - return mplew.getPacket(); - } - mplew.writeInt(rs.getRow()); //number of entries - rs.beforeFirst(); - while (rs.next()) { - mplew.writeMapleAsciiString(rs.getString("name")); - mplew.writeInt(rs.getInt("GP")); - mplew.writeInt(rs.getInt("logo")); - mplew.writeInt(rs.getInt("logoColor")); - mplew.writeInt(rs.getInt("logoBG")); - mplew.writeInt(rs.getInt("logoBGColor")); - } - return mplew.getPacket(); - } - - public static byte[] showPlayerRanks(int npcid, List> worldRanking) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x49); - mplew.writeInt(npcid); - if (worldRanking.isEmpty()) { - mplew.writeInt(0); - return mplew.getPacket(); - } - mplew.writeInt(worldRanking.size()); - for (Pair wr : worldRanking) { - mplew.writeMapleAsciiString(wr.getLeft()); - mplew.writeInt(wr.getRight()); - mplew.writeInt(0); - mplew.writeInt(0); - mplew.writeInt(0); - mplew.writeInt(0); - } - return mplew.getPacket(); - } - - public static byte[] updateGP(int gid, int GP) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_OPERATION.getValue()); - mplew.write(0x48); - mplew.writeInt(gid); - mplew.writeInt(GP); - return mplew.getPacket(); - } - - public static byte[] skillEffect(MapleCharacter from, int skillId, int level, byte flags, int speed, byte direction) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SKILL_EFFECT.getValue()); - mplew.writeInt(from.getId()); - mplew.writeInt(skillId); - mplew.write(level); - mplew.write(flags); - mplew.write(speed); - mplew.write(direction); //Mmmk - return mplew.getPacket(); - } - - public static byte[] skillCancel(MapleCharacter from, int skillId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_SKILL_EFFECT.getValue()); - mplew.writeInt(from.getId()); - mplew.writeInt(skillId); - return mplew.getPacket(); - } - - public static byte[] catchMonster(int mobOid, byte success) { // updated packet structure found thanks to Rien dev team - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CATCH_MONSTER.getValue()); - mplew.writeInt(mobOid); - mplew.write(success); - return mplew.getPacket(); - } - - public static byte[] catchMonster(int mobOid, int itemid, byte success) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CATCH_MONSTER_WITH_ITEM.getValue()); - mplew.writeInt(mobOid); - mplew.writeInt(itemid); - mplew.write(success); - return mplew.getPacket(); + public static Packet catchMonster(int mobOid, int itemid, byte success) { + final OutPacket p = OutPacket.create(SendOpcode.CATCH_MONSTER_WITH_ITEM); + p.writeInt(mobOid); + p.writeInt(itemid); + p.writeByte(success); + return p; } /** @@ -4850,7 +4260,7 @@ public class PacketCreator { * @param height How long the box is going to be. * @return The player hint packet. */ - public static byte[] sendHint(String hint, int width, int height) { + public static Packet sendHint(String hint, int width, int height) { if (width < 1) { width = hint.length() * 10; if (width < 40) { @@ -4860,423 +4270,388 @@ public class PacketCreator { if (height < 5) { height = 5; } - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_HINT.getValue()); - mplew.writeMapleAsciiString(hint); - mplew.writeShort(width); - mplew.writeShort(height); - mplew.write(1); - return mplew.getPacket(); + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_HINT); + p.writeString(hint); + p.writeShort(width); + p.writeShort(height); + p.writeByte(1); + return p; } - public static byte[] messengerInvite(String from, int messengerid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(0x03); - mplew.writeMapleAsciiString(from); - mplew.write(0); - mplew.writeInt(messengerid); - mplew.write(0); - return mplew.getPacket(); + public static Packet messengerInvite(String from, int messengerid) { + final OutPacket p = OutPacket.create(SendOpcode.MESSENGER); + p.writeByte(0x03); + p.writeString(from); + p.writeByte(0); + p.writeInt(messengerid); + p.writeByte(0); + return p; } /* - public static byte[] sendSpouseChat(MapleCharacter partner, String msg) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPOUSE_CHAT.getValue()); - mplew.writeMapleAsciiString(partner.getName()); - mplew.writeMapleAsciiString(msg); - return mplew.getPacket(); + public static Packet sendSpouseChat(MapleCharacter partner, String msg) { + OutPacket p = OutPacket.create(SendOpcode); + SPOUSE_CHAT); + p.writeString(partner.getName()); + p.writeString(msg); + return p; } */ - public static byte[] OnCoupleMessage(String fiance, String text, boolean spouse) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPOUSE_CHAT.getValue()); - mplew.write(spouse ? 5 : 4); // v2 = CInPacket::Decode1(a1) - 4; + public static Packet OnCoupleMessage(String fiance, String text, boolean spouse) { + OutPacket p = OutPacket.create(SendOpcode.SPOUSE_CHAT); + p.writeByte(spouse ? 5 : 4); // v2 = CInPacket::Decode1(a1) - 4; if (spouse) { // if ( v2 ) { - mplew.writeMapleAsciiString(fiance); + p.writeString(fiance); } - mplew.write(spouse ? 5 : 1); - mplew.writeMapleAsciiString(text); - return mplew.getPacket(); + p.writeByte(spouse ? 5 : 1); + p.writeString(text); + return p; } - public static byte[] addMessengerPlayer(String from, MapleCharacter chr, int position, int channel) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(0x00); - mplew.write(position); - addCharLook(mplew, chr, true); - mplew.writeMapleAsciiString(from); - mplew.write(channel); - mplew.write(0x00); - return mplew.getPacket(); + public static Packet addMessengerPlayer(String from, MapleCharacter chr, int position, int channel) { + final OutPacket p = OutPacket.create(SendOpcode.MESSENGER); + p.writeByte(0x00); + p.writeByte(position); + addCharLook(p, chr, true); + p.writeString(from); + p.writeByte(channel); + p.writeByte(0x00); + return p; } - public static byte[] removeMessengerPlayer(int position) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(0x02); - mplew.write(position); - return mplew.getPacket(); + public static Packet removeMessengerPlayer(int position) { + final OutPacket p = OutPacket.create(SendOpcode.MESSENGER); + p.writeByte(0x02); + p.writeByte(position); + return p; } - public static byte[] updateMessengerPlayer(String from, MapleCharacter chr, int position, int channel) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(0x07); - mplew.write(position); - addCharLook(mplew, chr, true); - mplew.writeMapleAsciiString(from); - mplew.write(channel); - mplew.write(0x00); - return mplew.getPacket(); + public static Packet updateMessengerPlayer(String from, MapleCharacter chr, int position, int channel) { + final OutPacket p = OutPacket.create(SendOpcode.MESSENGER); + p.writeByte(0x07); + p.writeByte(position); + addCharLook(p, chr, true); + p.writeString(from); + p.writeByte(channel); + p.writeByte(0x00); + return p; } - public static byte[] joinMessenger(int position) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(0x01); - mplew.write(position); - return mplew.getPacket(); + public static Packet joinMessenger(int position) { + final OutPacket p = OutPacket.create(SendOpcode.MESSENGER); + p.writeByte(0x01); + p.writeByte(position); + return p; } - public static byte[] messengerChat(String text) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(0x06); - mplew.writeMapleAsciiString(text); - return mplew.getPacket(); + public static Packet messengerChat(String text) { + final OutPacket p = OutPacket.create(SendOpcode.MESSENGER); + p.writeByte(0x06); + p.writeString(text); + return p; } - public static byte[] messengerNote(String text, int mode, int mode2) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MESSENGER.getValue()); - mplew.write(mode); - mplew.writeMapleAsciiString(text); - mplew.write(mode2); - return mplew.getPacket(); + public static Packet messengerNote(String text, int mode, int mode2) { + final OutPacket p = OutPacket.create(SendOpcode.MESSENGER); + p.writeByte(mode); + p.writeString(text); + p.writeByte(mode2); + return p; } - private static void addPetInfo(final MaplePacketLittleEndianWriter mplew, MaplePet pet, boolean showpet) { - mplew.write(1); + private static void addPetInfo(final OutPacket p, MaplePet pet, boolean showpet) { + p.writeByte(1); if (showpet) { - mplew.write(0); + p.writeByte(0); } - mplew.writeInt(pet.getItemId()); - mplew.writeMapleAsciiString(pet.getName()); - mplew.writeLong(pet.getUniqueId()); - mplew.writePos(pet.getPos()); - mplew.write(pet.getStance()); - mplew.writeInt(pet.getFh()); + p.writeInt(pet.getItemId()); + p.writeString(pet.getName()); + p.writeLong(pet.getUniqueId()); + p.writePos(pet.getPos()); + p.writeByte(pet.getStance()); + p.writeInt(pet.getFh()); } - public static byte[] showPet(MapleCharacter chr, MaplePet pet, boolean remove, boolean hunger) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_PET.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(chr.getPetIndex(pet)); + public static Packet showPet(MapleCharacter chr, MaplePet pet, boolean remove, boolean hunger) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_PET); + p.writeInt(chr.getId()); + p.writeByte(chr.getPetIndex(pet)); if (remove) { - mplew.write(0); - mplew.write(hunger ? 1 : 0); + p.writeByte(0); + p.writeBool(hunger); } else { - addPetInfo(mplew, pet, true); + addPetInfo(p, pet, true); } - return mplew.getPacket(); + return p; } - public static byte[] movePet(int cid, int pid, byte slot, List moves) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MOVE_PET.getValue()); - mplew.writeInt(cid); - mplew.write(slot); - mplew.writeInt(pid); - serializeMovementList(mplew, moves); - return mplew.getPacket(); + public static Packet movePet(int cid, int pid, byte slot, List moves) { + final OutPacket p = OutPacket.create(SendOpcode.MOVE_PET); + p.writeInt(cid); + p.writeByte(slot); + p.writeInt(pid); + serializeMovementList(p, moves); + return p; } - public static byte[] petChat(int cid, byte index, int act, String text) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PET_CHAT.getValue()); - mplew.writeInt(cid); - mplew.write(index); - mplew.write(0); - mplew.write(act); - mplew.writeMapleAsciiString(text); - mplew.write(0); - return mplew.getPacket(); + public static Packet petChat(int cid, byte index, int act, String text) { + final OutPacket p = OutPacket.create(SendOpcode.PET_CHAT); + p.writeInt(cid); + p.writeByte(index); + p.writeByte(0); + p.writeByte(act); + p.writeString(text); + p.writeByte(0); + return p; } - public static byte[] petFoodResponse(int cid, byte index, boolean success, boolean balloonType) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PET_COMMAND.getValue()); - mplew.writeInt(cid); - mplew.write(index); - mplew.write(1); - mplew.writeBool(success); - mplew.writeBool(balloonType); - return mplew.getPacket(); + public static Packet petFoodResponse(int cid, byte index, boolean success, boolean balloonType) { + final OutPacket p = OutPacket.create(SendOpcode.PET_COMMAND); + p.writeInt(cid); + p.writeByte(index); + p.writeByte(1); + p.writeBool(success); + p.writeBool(balloonType); + return p; } - public static byte[] commandResponse(int cid, byte index, boolean talk, int animation, boolean balloonType) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PET_COMMAND.getValue()); - mplew.writeInt(cid); - mplew.write(index); - mplew.write(0); - mplew.write(animation); - mplew.writeBool(!talk); - mplew.writeBool(balloonType); - return mplew.getPacket(); + public static Packet commandResponse(int cid, byte index, boolean talk, int animation, boolean balloonType) { + final OutPacket p = OutPacket.create(SendOpcode.PET_COMMAND); + p.writeInt(cid); + p.writeByte(index); + p.writeByte(0); + p.writeByte(animation); + p.writeBool(!talk); + p.writeBool(balloonType); + return p; } - public static byte[] showOwnPetLevelUp(byte index) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(4); - mplew.write(0); - mplew.write(index); // Pet Index - return mplew.getPacket(); + public static Packet showOwnPetLevelUp(byte index) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(4); + p.writeByte(0); + p.writeByte(index); // Pet Index + return p; } - public static byte[] showPetLevelUp(MapleCharacter chr, byte index) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(4); - mplew.write(0); - mplew.write(index); - return mplew.getPacket(); + public static Packet showPetLevelUp(MapleCharacter chr, byte index) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_FOREIGN_EFFECT); + p.writeInt(chr.getId()); + p.writeByte(4); + p.writeByte(0); + p.writeByte(index); + return p; } - public static byte[] changePetName(MapleCharacter chr, String newname, int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PET_NAMECHANGE.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(0); - mplew.writeMapleAsciiString(newname); - mplew.write(0); - return mplew.getPacket(); + public static Packet changePetName(MapleCharacter chr, String newname, int slot) { + OutPacket p = OutPacket.create(SendOpcode.PET_NAMECHANGE); + p.writeInt(chr.getId()); + p.writeByte(0); + p.writeString(newname); + p.writeByte(0); + return p; } - public static final byte[] loadExceptionList(final int cid, final int petId, final byte petIdx, final List data) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PET_EXCEPTION_LIST.getValue()); - mplew.writeInt(cid); - mplew.write(petIdx); - mplew.writeLong(petId); - mplew.write(data.size()); + public static Packet loadExceptionList(final int cid, final int petId, final byte petIdx, final List data) { + final OutPacket p = OutPacket.create(SendOpcode.PET_EXCEPTION_LIST); + p.writeInt(cid); + p.writeByte(petIdx); + p.writeLong(petId); + p.writeByte(data.size()); for (final Integer ids : data) { - mplew.writeInt(ids); + p.writeInt(ids); } - return mplew.getPacket(); + return p; } - public static byte[] petStatUpdate(MapleCharacter chr) { + public static Packet petStatUpdate(MapleCharacter chr) { // this actually does nothing... packet structure and stats needs to be uncovered - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.STAT_CHANGED.getValue()); + final OutPacket p = OutPacket.create(SendOpcode.STAT_CHANGED); int mask = 0; mask |= MapleStat.PET.getValue(); - mplew.write(0); - mplew.writeInt(mask); + p.writeByte(0); + p.writeInt(mask); MaplePet[] pets = chr.getPets(); for (int i = 0; i < 3; i++) { if (pets[i] != null) { - mplew.writeLong(pets[i].getUniqueId()); + p.writeLong(pets[i].getUniqueId()); } else { - mplew.writeLong(0); + p.writeLong(0); } } - mplew.write(0); - return mplew.getPacket(); + p.writeByte(0); + return p; } - public static byte[] showForcedEquip(int team) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FORCED_MAP_EQUIP.getValue()); + public static Packet showForcedEquip(int team) { + OutPacket p = OutPacket.create(SendOpcode.FORCED_MAP_EQUIP); if (team > -1) { - mplew.write(team); // 00 = red, 01 = blue + p.writeByte(team); // 00 = red, 01 = blue } - return mplew.getPacket(); + return p; } - public static byte[] summonSkill(int cid, int summonSkillId, int newStance) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SUMMON_SKILL.getValue()); - mplew.writeInt(cid); - mplew.writeInt(summonSkillId); - mplew.write(newStance); - return mplew.getPacket(); + public static Packet summonSkill(int cid, int summonSkillId, int newStance) { + final OutPacket p = OutPacket.create(SendOpcode.SUMMON_SKILL); + p.writeInt(cid); + p.writeInt(summonSkillId); + p.writeByte(newStance); + return p; } - public static byte[] skillCooldown(int sid, int time) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.COOLDOWN.getValue()); - mplew.writeInt(sid); - mplew.writeShort(time);//Int in v97 - return mplew.getPacket(); + public static Packet skillCooldown(int sid, int time) { + final OutPacket p = OutPacket.create(SendOpcode.COOLDOWN); + p.writeInt(sid); + p.writeShort(time);//Int in v97 + return p; } - public static byte[] skillBookResult(MapleCharacter chr, int skillid, int maxlevel, boolean canuse, boolean success) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SKILL_LEARN_ITEM_RESULT.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(1); - mplew.writeInt(skillid); - mplew.writeInt(maxlevel); - mplew.write(canuse ? 1 : 0); - mplew.write(success ? 1 : 0); - return mplew.getPacket(); + public static Packet skillBookResult(MapleCharacter chr, int skillid, int maxlevel, boolean canuse, boolean success) { + final OutPacket p = OutPacket.create(SendOpcode.SKILL_LEARN_ITEM_RESULT); + p.writeInt(chr.getId()); + p.writeByte(1); + p.writeInt(skillid); + p.writeInt(maxlevel); + p.writeByte(canuse ? 1 : 0); + p.writeByte(success ? 1 : 0); + return p; } - public static byte[] getMacros(SkillMacro[] macros) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MACRO_SYS_DATA_INIT.getValue()); + public static Packet getMacros(SkillMacro[] macros) { + final OutPacket p = OutPacket.create(SendOpcode.MACRO_SYS_DATA_INIT); int count = 0; for (int i = 0; i < 5; i++) { if (macros[i] != null) { count++; } } - mplew.write(count); + p.writeByte(count); for (int i = 0; i < 5; i++) { SkillMacro macro = macros[i]; if (macro != null) { - mplew.writeMapleAsciiString(macro.getName()); - mplew.write(macro.getShout()); - mplew.writeInt(macro.getSkill1()); - mplew.writeInt(macro.getSkill2()); - mplew.writeInt(macro.getSkill3()); + p.writeString(macro.getName()); + p.writeByte(macro.getShout()); + p.writeInt(macro.getSkill1()); + p.writeInt(macro.getSkill2()); + p.writeInt(macro.getSkill3()); } } - return mplew.getPacket(); + return p; } - public static byte[] showAllCharacterInfo(int worldid, List chars, boolean usePic) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.VIEW_ALL_CHAR.getValue()); - mplew.write(0); - mplew.write(worldid); - mplew.write(chars.size()); + public static Packet showAllCharacterInfo(int worldid, List chars, boolean usePic) { + final OutPacket p = OutPacket.create(SendOpcode.VIEW_ALL_CHAR); + p.writeByte(0); + p.writeByte(worldid); + p.writeByte(chars.size()); for (MapleCharacter chr : chars) { - addCharEntry(mplew, chr, true); + addCharEntry(p, chr, true); } - mplew.write(usePic ? 1 : 2); - return mplew.getPacket(); + p.writeByte(usePic ? 1 : 2); + return p; } - public static byte[] updateMount(int charid, MapleMount mount, boolean levelup) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_TAMING_MOB_INFO.getValue()); - mplew.writeInt(charid); - mplew.writeInt(mount.getLevel()); - mplew.writeInt(mount.getExp()); - mplew.writeInt(mount.getTiredness()); - mplew.write(levelup ? (byte) 1 : (byte) 0); - return mplew.getPacket(); + public static Packet updateMount(int charid, MapleMount mount, boolean levelup) { + final OutPacket p = OutPacket.create(SendOpcode.SET_TAMING_MOB_INFO); + p.writeInt(charid); + p.writeInt(mount.getLevel()); + p.writeInt(mount.getExp()); + p.writeInt(mount.getTiredness()); + p.writeByte(levelup ? (byte) 1 : (byte) 0); + return p; } - public static byte[] crogBoatPacket(boolean type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CONTI_MOVE.getValue()); - mplew.write(10); - mplew.write(type ? 4 : 5); - return mplew.getPacket(); + public static Packet crogBoatPacket(boolean type) { + OutPacket p = OutPacket.create(SendOpcode.CONTI_MOVE); + p.writeByte(10); + p.writeByte(type ? 4 : 5); + return p; } - public static byte[] boatPacket(boolean type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CONTI_STATE.getValue()); - mplew.write(type ? 1 : 2); - mplew.write(0); - return mplew.getPacket(); + public static Packet boatPacket(boolean type) { + OutPacket p = OutPacket.create(SendOpcode.CONTI_STATE); + p.writeByte(type ? 1 : 2); + p.writeByte(0); + return p; } - public static byte[] getMiniGame(MapleClient c, MapleMiniGame minigame, boolean owner, int piece) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(1); - mplew.write(0); - mplew.write(owner ? 0 : 1); - mplew.write(0); - addCharLook(mplew, minigame.getOwner(), false); - mplew.writeMapleAsciiString(minigame.getOwner().getName()); + public static Packet getMiniGame(MapleClient c, MapleMiniGame minigame, boolean owner, int piece) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.ROOM.getCode()); + p.writeByte(1); + p.writeByte(0); + p.writeBool(!owner); + p.writeByte(0); + addCharLook(p, minigame.getOwner(), false); + p.writeString(minigame.getOwner().getName()); if (minigame.getVisitor() != null) { MapleCharacter visitor = minigame.getVisitor(); - mplew.write(1); - addCharLook(mplew, visitor, false); - mplew.writeMapleAsciiString(visitor.getName()); + p.writeByte(1); + addCharLook(p, visitor, false); + p.writeString(visitor.getName()); } - mplew.write(0xFF); - mplew.write(0); - mplew.writeInt(1); - mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.WIN, true)); - mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.TIE, true)); - mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.LOSS, true)); - mplew.writeInt(minigame.getOwnerScore()); + p.writeByte(0xFF); + p.writeByte(0); + p.writeInt(1); + p.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.WIN, true)); + p.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.TIE, true)); + p.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.LOSS, true)); + p.writeInt(minigame.getOwnerScore()); if (minigame.getVisitor() != null) { MapleCharacter visitor = minigame.getVisitor(); - mplew.write(1); - mplew.writeInt(1); - mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.WIN, true)); - mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.TIE, true)); - mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.LOSS, true)); - mplew.writeInt(minigame.getVisitorScore()); + p.writeByte(1); + p.writeInt(1); + p.writeInt(visitor.getMiniGamePoints(MiniGameResult.WIN, true)); + p.writeInt(visitor.getMiniGamePoints(MiniGameResult.TIE, true)); + p.writeInt(visitor.getMiniGamePoints(MiniGameResult.LOSS, true)); + p.writeInt(minigame.getVisitorScore()); } - mplew.write(0xFF); - mplew.writeMapleAsciiString(minigame.getDescription()); - mplew.write(piece); - mplew.write(0); - return mplew.getPacket(); + p.writeByte(0xFF); + p.writeString(minigame.getDescription()); + p.writeByte(piece); + p.writeByte(0); + return p; } - public static byte[] getMiniGameReady(MapleMiniGame game) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.READY.getCode()); - return mplew.getPacket(); + public static Packet getMiniGameReady(MapleMiniGame game) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.READY.getCode()); + return p; } - public static byte[] getMiniGameUnReady(MapleMiniGame game) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.UN_READY.getCode()); - return mplew.getPacket(); + public static Packet getMiniGameUnReady(MapleMiniGame game) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.UN_READY.getCode()); + return p; } - public static byte[] getMiniGameStart(MapleMiniGame game, int loser) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.START.getCode()); - mplew.write(loser); - return mplew.getPacket(); + public static Packet getMiniGameStart(MapleMiniGame game, int loser) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.START.getCode()); + p.writeByte(loser); + return p; } - public static byte[] getMiniGameSkipOwner(MapleMiniGame game) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.SKIP.getCode()); - mplew.write(0x01); - return mplew.getPacket(); + public static Packet getMiniGameSkipOwner(MapleMiniGame game) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.SKIP.getCode()); + p.writeByte(0x01); + return p; } - public static byte[] getMiniGameRequestTie(MapleMiniGame game) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.REQUEST_TIE.getCode()); - return mplew.getPacket(); + public static Packet getMiniGameRequestTie(MapleMiniGame game) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.REQUEST_TIE.getCode()); + return p; } - public static byte[] getMiniGameDenyTie(MapleMiniGame game) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ANSWER_TIE.getCode()); - return mplew.getPacket(); + public static Packet getMiniGameDenyTie(MapleMiniGame game) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.ANSWER_TIE.getCode()); + return p; } /** @@ -5291,59 +4666,53 @@ public class PacketCreator { * @param status * @return */ - public static byte[] getMiniRoomError(int status) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(0); - mplew.write(status); - return mplew.getPacket(); + public static Packet getMiniRoomError(int status) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.ROOM.getCode()); + p.writeByte(0); + p.writeByte(status); + return p; } - public static byte[] getMiniGameSkipVisitor(MapleMiniGame game) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.writeShort(PlayerInteractionHandler.Action.SKIP.getCode()); - return mplew.getPacket(); + public static Packet getMiniGameSkipVisitor(MapleMiniGame game) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeShort(PlayerInteractionHandler.Action.SKIP.getCode()); + return p; } - public static byte[] getMiniGameMoveOmok(MapleMiniGame game, int move1, int move2, int move3) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(12); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.MOVE_OMOK.getCode()); - mplew.writeInt(move1); - mplew.writeInt(move2); - mplew.write(move3); - return mplew.getPacket(); + public static Packet getMiniGameMoveOmok(MapleMiniGame game, int move1, int move2, int move3) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.MOVE_OMOK.getCode()); + p.writeInt(move1); + p.writeInt(move2); + p.writeByte(move3); + return p; } - public static byte[] getMiniGameNewVisitor(MapleMiniGame minigame, MapleCharacter chr, int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); - mplew.write(slot); - addCharLook(mplew, chr, false); - mplew.writeMapleAsciiString(chr.getName()); - mplew.writeInt(1); - mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.WIN, true)); - mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.TIE, true)); - mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.LOSS, true)); - mplew.writeInt(minigame.getVisitorScore()); - return mplew.getPacket(); + public static Packet getMiniGameNewVisitor(MapleMiniGame minigame, MapleCharacter chr, int slot) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.VISIT.getCode()); + p.writeByte(slot); + addCharLook(p, chr, false); + p.writeString(chr.getName()); + p.writeInt(1); + p.writeInt(chr.getMiniGamePoints(MiniGameResult.WIN, true)); + p.writeInt(chr.getMiniGamePoints(MiniGameResult.TIE, true)); + p.writeInt(chr.getMiniGamePoints(MiniGameResult.LOSS, true)); + p.writeInt(minigame.getVisitorScore()); + return p; } - public static byte[] getMiniGameRemoveVisitor() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); - mplew.write(1); - return mplew.getPacket(); + public static Packet getMiniGameRemoveVisitor() { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.EXIT.getCode()); + p.writeByte(1); + return p; } - private static byte[] getMiniGameResult(MapleMiniGame game, int tie, int result, int forfeit) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.GET_RESULT.getCode()); + private static Packet getMiniGameResult(MapleMiniGame game, int tie, int result, int forfeit) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.GET_RESULT.getCode()); int matchResultType; if (tie == 0 && forfeit != 1) { @@ -5354,107 +4723,104 @@ public class PacketCreator { matchResultType = 2; } - mplew.write(matchResultType); - mplew.writeBool(result == 2); // host/visitor wins + p.writeByte(matchResultType); + p.writeBool(result == 2); // host/visitor wins boolean omok = game.isOmok(); if (matchResultType == 1) { - mplew.write(0); - mplew.writeShort(0); - mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins - mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties - mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses - mplew.writeInt(game.getOwnerScore()); // points + p.writeByte(0); + p.writeShort(0); + p.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins + p.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties + p.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses + p.writeInt(game.getOwnerScore()); // points - mplew.writeInt(0); // unknown - mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins - mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties - mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses - mplew.writeInt(game.getVisitorScore()); // points - mplew.write(0); + p.writeInt(0); // unknown + p.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins + p.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties + p.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses + p.writeInt(game.getVisitorScore()); // points + p.writeByte(0); } else { - mplew.writeInt(0); - mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins - mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties - mplew.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses - mplew.writeInt(game.getOwnerScore()); // points - mplew.writeInt(0); - mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins - mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties - mplew.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses - mplew.writeInt(game.getVisitorScore()); // points + p.writeInt(0); + p.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins + p.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties + p.writeInt(game.getOwner().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses + p.writeInt(game.getOwnerScore()); // points + p.writeInt(0); + p.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.WIN, omok)); // wins + p.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.TIE, omok)); // ties + p.writeInt(game.getVisitor().getMiniGamePoints(MiniGameResult.LOSS, omok)); // losses + p.writeInt(game.getVisitorScore()); // points } - return mplew.getPacket(); + return p; } - public static byte[] getMiniGameOwnerWin(MapleMiniGame game, boolean forfeit) { + public static Packet getMiniGameOwnerWin(MapleMiniGame game, boolean forfeit) { return getMiniGameResult(game, 0, 1, forfeit ? 1 : 0); } - public static byte[] getMiniGameVisitorWin(MapleMiniGame game, boolean forfeit) { + public static Packet getMiniGameVisitorWin(MapleMiniGame game, boolean forfeit) { return getMiniGameResult(game, 0, 2, forfeit ? 1 : 0); } - public static byte[] getMiniGameTie(MapleMiniGame game) { + public static Packet getMiniGameTie(MapleMiniGame game) { return getMiniGameResult(game, 1, 3, 0); } - public static byte[] getMiniGameClose(boolean visitor, int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); - mplew.writeBool(visitor); - mplew.write(type); /* 2 : CRASH 3 : The room has been closed 4 : You have left the room 5 : You have been expelled */ - return mplew.getPacket(); + public static Packet getMiniGameClose(boolean visitor, int type) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.EXIT.getCode()); + p.writeBool(visitor); + p.writeByte(type); /* 2 : CRASH 3 : The room has been closed 4 : You have left the room 5 : You have been expelled */ + return p; } - public static byte[] getMatchCard(MapleClient c, MapleMiniGame minigame, boolean owner, int piece) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(2); - mplew.write(2); - mplew.write(owner ? 0 : 1); - mplew.write(0); - addCharLook(mplew, minigame.getOwner(), false); - mplew.writeMapleAsciiString(minigame.getOwner().getName()); + public static Packet getMatchCard(MapleClient c, MapleMiniGame minigame, boolean owner, int piece) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.ROOM.getCode()); + p.writeByte(2); + p.writeByte(2); + p.writeBool(!owner); + p.writeByte(0); + addCharLook(p, minigame.getOwner(), false); + p.writeString(minigame.getOwner().getName()); if (minigame.getVisitor() != null) { MapleCharacter visitor = minigame.getVisitor(); - mplew.write(1); - addCharLook(mplew, visitor, false); - mplew.writeMapleAsciiString(visitor.getName()); + p.writeByte(1); + addCharLook(p, visitor, false); + p.writeString(visitor.getName()); } - mplew.write(0xFF); - mplew.write(0); - mplew.writeInt(2); - mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.WIN, false)); - mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.TIE, false)); - mplew.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.LOSS, false)); + p.writeByte(0xFF); + p.writeByte(0); + p.writeInt(2); + p.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.WIN, false)); + p.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.TIE, false)); + p.writeInt(minigame.getOwner().getMiniGamePoints(MiniGameResult.LOSS, false)); //set vs - mplew.writeInt(minigame.getOwnerScore()); + p.writeInt(minigame.getOwnerScore()); if (minigame.getVisitor() != null) { MapleCharacter visitor = minigame.getVisitor(); - mplew.write(1); - mplew.writeInt(2); - mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.WIN, false)); - mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.TIE, false)); - mplew.writeInt(visitor.getMiniGamePoints(MiniGameResult.LOSS, false)); - mplew.writeInt(minigame.getVisitorScore()); + p.writeByte(1); + p.writeInt(2); + p.writeInt(visitor.getMiniGamePoints(MiniGameResult.WIN, false)); + p.writeInt(visitor.getMiniGamePoints(MiniGameResult.TIE, false)); + p.writeInt(visitor.getMiniGamePoints(MiniGameResult.LOSS, false)); + p.writeInt(minigame.getVisitorScore()); } - mplew.write(0xFF); - mplew.writeMapleAsciiString(minigame.getDescription()); - mplew.write(piece); - mplew.write(0); - return mplew.getPacket(); + p.writeByte(0xFF); + p.writeString(minigame.getDescription()); + p.writeByte(piece); + p.writeByte(0); + return p; } - public static byte[] getMatchCardStart(MapleMiniGame game, int loser) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.START.getCode()); - mplew.write(loser); + public static Packet getMatchCardStart(MapleMiniGame game, int loser) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.START.getCode()); + p.writeByte(loser); int last; if (game.getMatchesToWin() > 10) { @@ -5465,174 +4831,159 @@ public class PacketCreator { last = 12; } - mplew.write(last); + p.writeByte(last); for (int i = 0; i < last; i++) { - mplew.writeInt(game.getCardId(i)); + p.writeInt(game.getCardId(i)); } - return mplew.getPacket(); + return p; } - public static byte[] getMatchCardNewVisitor(MapleMiniGame minigame, MapleCharacter chr, int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); - mplew.write(slot); - addCharLook(mplew, chr, false); - mplew.writeMapleAsciiString(chr.getName()); - mplew.writeInt(1); - mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.WIN, false)); - mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.TIE, false)); - mplew.writeInt(chr.getMiniGamePoints(MiniGameResult.LOSS, false)); - mplew.writeInt(minigame.getVisitorScore()); - return mplew.getPacket(); + public static Packet getMatchCardNewVisitor(MapleMiniGame minigame, MapleCharacter chr, int slot) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.VISIT.getCode()); + p.writeByte(slot); + addCharLook(p, chr, false); + p.writeString(chr.getName()); + p.writeInt(1); + p.writeInt(chr.getMiniGamePoints(MiniGameResult.WIN, false)); + p.writeInt(chr.getMiniGamePoints(MiniGameResult.TIE, false)); + p.writeInt(chr.getMiniGamePoints(MiniGameResult.LOSS, false)); + p.writeInt(minigame.getVisitorScore()); + return p; } - public static byte[] getMatchCardSelect(MapleMiniGame game, int turn, int slot, int firstslot, int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.SELECT_CARD.getCode()); - mplew.write(turn); + public static Packet getMatchCardSelect(MapleMiniGame game, int turn, int slot, int firstslot, int type) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.SELECT_CARD.getCode()); + p.writeByte(turn); if (turn == 1) { - mplew.write(slot); + p.writeByte(slot); } else if (turn == 0) { - mplew.write(slot); - mplew.write(firstslot); - mplew.write(type); + p.writeByte(slot); + p.writeByte(firstslot); + p.writeByte(type); } - return mplew.getPacket(); + return p; } // RPS_GAME packets thanks to Arnah (Vertisy) - public static byte[] openRPSNPC() { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.RPS_GAME.getValue()); - mplew.write(8);// open npc - mplew.writeInt(9000019); - return mplew.getPacket(); + public static Packet openRPSNPC() { + OutPacket p = OutPacket.create(SendOpcode.RPS_GAME); + p.writeByte(8);// open npc + p.writeInt(9000019); + return p; } - public static byte[] rpsMesoError(int mesos) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.RPS_GAME.getValue()); - mplew.write(0x06); + public static Packet rpsMesoError(int mesos) { + OutPacket p = OutPacket.create(SendOpcode.RPS_GAME); + p.writeByte(0x06); if (mesos != -1) { - mplew.writeInt(mesos); + p.writeInt(mesos); } - return mplew.getPacket(); + return p; } - public static byte[] rpsSelection(byte selection, byte answer) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.RPS_GAME.getValue()); - mplew.write(0x0B);// 11l - mplew.write(selection); - mplew.write(answer); - return mplew.getPacket(); + public static Packet rpsSelection(byte selection, byte answer) { + OutPacket p = OutPacket.create(SendOpcode.RPS_GAME); + p.writeByte(0x0B);// 11l + p.writeByte(selection); + p.writeByte(answer); + return p; } - public static byte[] rpsMode(byte mode) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.RPS_GAME.getValue()); - mplew.write(mode); - return mplew.getPacket(); + public static Packet rpsMode(byte mode) { + OutPacket p = OutPacket.create(SendOpcode.RPS_GAME); + p.writeByte(mode); + return p; } - public static byte[] fredrickMessage(byte operation) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FREDRICK_MESSAGE.getValue()); - mplew.write(operation); - return mplew.getPacket(); + public static Packet fredrickMessage(byte operation) { + final OutPacket p = OutPacket.create(SendOpcode.FREDRICK_MESSAGE); + p.writeByte(operation); + return p; } - public static byte[] getFredrick(byte op) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FREDRICK.getValue()); - mplew.write(op); + public static Packet getFredrick(byte op) { + final OutPacket p = OutPacket.create(SendOpcode.FREDRICK); + p.writeByte(op); switch (op) { case 0x24: - mplew.skip(8); + p.skip(8); break; default: - mplew.write(0); + p.writeByte(0); break; } - return mplew.getPacket(); + return p; } - public static byte[] getFredrick(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FREDRICK.getValue()); - mplew.write(0x23); - mplew.writeInt(9030000); // Fredrick - mplew.writeInt(32272); //id - mplew.skip(5); - mplew.writeInt(chr.getMerchantNetMeso()); - mplew.write(0); + public static Packet getFredrick(MapleCharacter chr) { + final OutPacket p = OutPacket.create(SendOpcode.FREDRICK); + p.writeByte(0x23); + p.writeInt(9030000); // Fredrick + p.writeInt(32272); //id + p.skip(5); + p.writeInt(chr.getMerchantNetMeso()); + p.writeByte(0); try { List> items = ItemFactory.MERCHANT.loadItems(chr.getId(), false); - mplew.write(items.size()); + p.writeByte(items.size()); for (Pair item : items) { - addItemInfo(mplew, item.getLeft(), true); + addItemInfo(p, item.getLeft(), true); } } catch (SQLException e) { e.printStackTrace(); } - mplew.skip(3); - return mplew.getPacket(); + p.skip(3); + return p; } - public static byte[] addOmokBox(MapleCharacter chr, int ammount, int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); - mplew.writeInt(chr.getId()); - addAnnounceBox(mplew, chr.getMiniGame(), ammount, type); - return mplew.getPacket(); + public static Packet addOmokBox(MapleCharacter chr, int amount, int type) { + OutPacket p = OutPacket.create(SendOpcode.UPDATE_CHAR_BOX); + p.writeInt(chr.getId()); + addAnnounceBox(p, chr.getMiniGame(), amount, type); + return p; } - public static byte[] addMatchCardBox(MapleCharacter chr, int ammount, int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); - mplew.writeInt(chr.getId()); - addAnnounceBox(mplew, chr.getMiniGame(), ammount, type); - return mplew.getPacket(); + public static Packet addMatchCardBox(MapleCharacter chr, int amount, int type) { + OutPacket p = OutPacket.create(SendOpcode.UPDATE_CHAR_BOX); + p.writeInt(chr.getId()); + addAnnounceBox(p, chr.getMiniGame(), amount, type); + return p; } - public static byte[] removeMinigameBox(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.UPDATE_CHAR_BOX.getValue()); - mplew.writeInt(chr.getId()); - mplew.write(0); - return mplew.getPacket(); + public static Packet removeMinigameBox(MapleCharacter chr) { + OutPacket p = OutPacket.create(SendOpcode.UPDATE_CHAR_BOX); + p.writeInt(chr.getId()); + p.writeByte(0); + return p; } - public static byte[] getPlayerShopChat(MapleCharacter chr, String chat, byte slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.CHAT.getCode()); - mplew.write(PlayerInteractionHandler.Action.CHAT_THING.getCode()); - mplew.write(slot); - mplew.writeMapleAsciiString(chr.getName() + " : " + chat); - return mplew.getPacket(); + public static Packet getPlayerShopChat(MapleCharacter chr, String chat, byte slot) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.CHAT.getCode()); + p.writeByte(PlayerInteractionHandler.Action.CHAT_THING.getCode()); + p.writeByte(slot); + p.writeString(chr.getName() + " : " + chat); + return p; } - public static byte[] getTradeChat(MapleCharacter chr, String chat, boolean owner) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.CHAT.getCode()); - mplew.write(PlayerInteractionHandler.Action.CHAT_THING.getCode()); - mplew.write(owner ? 0 : 1); - mplew.writeMapleAsciiString(chr.getName() + " : " + chat); - return mplew.getPacket(); + public static Packet getTradeChat(MapleCharacter chr, String chat, boolean owner) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.CHAT.getCode()); + p.writeByte(PlayerInteractionHandler.Action.CHAT_THING.getCode()); + p.writeByte(owner ? 0 : 1); + p.writeString(chr.getName() + " : " + chat); + return p; } - public static byte[] hiredMerchantBox() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT.getValue()); // header. - mplew.write(0x07); - return mplew.getPacket(); + public static Packet hiredMerchantBox() { + final OutPacket p = OutPacket.create(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT); // header. + p.writeByte(0x07); + return p; } // 0: Success @@ -5645,88 +4996,79 @@ public class PacketCreator { // 18: The owner of the store is currently undergoing store maintenance. Please try again in a bit. // 23: This can only be used inside the Free Market. // default: This character is unable to do it. - public static byte[] getOwlMessage(int msg) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - - mplew.writeShort(SendOpcode.SHOP_LINK_RESULT.getValue()); - mplew.write(msg); // depending on the byte sent, a different message is sent. - - return mplew.getPacket(); + public static Packet getOwlMessage(int msg) { + OutPacket p = OutPacket.create(SendOpcode.SHOP_LINK_RESULT); + p.writeByte(msg); // depending on the byte sent, a different message is sent. + return p; } - public static byte[] owlOfMinerva(MapleClient c, int itemid, List> hmsAvailable) { - byte itemType = ItemConstants.getInventoryType(itemid).getType(); + public static Packet owlOfMinerva(MapleClient c, int itemId, List> hmsAvailable) { + byte itemType = ItemConstants.getInventoryType(itemId).getType(); - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOP_SCANNER_RESULT.getValue()); // header. - mplew.write(6); - mplew.writeInt(0); - mplew.writeInt(itemid); - mplew.writeInt(hmsAvailable.size()); + OutPacket p = OutPacket.create(SendOpcode.SHOP_SCANNER_RESULT); + p.writeByte(6); + p.writeInt(0); + p.writeInt(itemId); + p.writeInt(hmsAvailable.size()); for (Pair hme : hmsAvailable) { MaplePlayerShopItem item = hme.getLeft(); AbstractMapleMapObject mo = hme.getRight(); - if (mo instanceof MaplePlayerShop) { - MaplePlayerShop ps = (MaplePlayerShop) mo; + if (mo instanceof MaplePlayerShop ps) { MapleCharacter owner = ps.getOwner(); - mplew.writeMapleAsciiString(owner.getName()); - mplew.writeInt(owner.getMapId()); - mplew.writeMapleAsciiString(ps.getDescription()); - mplew.writeInt(item.getBundles()); - mplew.writeInt(item.getItem().getQuantity()); - mplew.writeInt(item.getPrice()); - mplew.writeInt(owner.getId()); - mplew.write(owner.getClient().getChannel() - 1); + p.writeString(owner.getName()); + p.writeInt(owner.getMapId()); + p.writeString(ps.getDescription()); + p.writeInt(item.getBundles()); + p.writeInt(item.getItem().getQuantity()); + p.writeInt(item.getPrice()); + p.writeInt(owner.getId()); + p.writeByte(owner.getClient().getChannel() - 1); } else { MapleHiredMerchant hm = (MapleHiredMerchant) mo; - mplew.writeMapleAsciiString(hm.getOwner()); - mplew.writeInt(hm.getMapId()); - mplew.writeMapleAsciiString(hm.getDescription()); - mplew.writeInt(item.getBundles()); - mplew.writeInt(item.getItem().getQuantity()); - mplew.writeInt(item.getPrice()); - mplew.writeInt(hm.getOwnerId()); - mplew.write(hm.getChannel() - 1); + p.writeString(hm.getOwner()); + p.writeInt(hm.getMapId()); + p.writeString(hm.getDescription()); + p.writeInt(item.getBundles()); + p.writeInt(item.getItem().getQuantity()); + p.writeInt(item.getPrice()); + p.writeInt(hm.getOwnerId()); + p.writeByte(hm.getChannel() - 1); } - mplew.write(itemType); + p.writeByte(itemType); if (itemType == MapleInventoryType.EQUIP.getType()) { - addItemInfo(mplew, item.getItem(), true); + addItemInfo(p, item.getItem(), true); } } - return mplew.getPacket(); + return p; } - public static byte[] getOwlOpen(List owlLeaderboards) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - - mplew.writeShort(SendOpcode.SHOP_SCANNER_RESULT.getValue()); - mplew.write(7); - mplew.write(owlLeaderboards.size()); + public static Packet getOwlOpen(List owlLeaderboards) { + OutPacket p = OutPacket.create(SendOpcode.SHOP_SCANNER_RESULT); + p.writeByte(7); + p.writeByte(owlLeaderboards.size()); for (Integer i : owlLeaderboards) { - mplew.writeInt(i); + p.writeInt(i); } - return mplew.getPacket(); + return p; } - public static byte[] retrieveFirstMessage() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT.getValue()); // header. - mplew.write(0x09); - return mplew.getPacket(); + public static Packet retrieveFirstMessage() { + final OutPacket p = OutPacket.create(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT); // header. + p.writeByte(0x09); + return p; } - public static byte[] remoteChannelChange(byte ch) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT.getValue()); // header. - mplew.write(0x10); - mplew.writeInt(0);//No idea yet - mplew.write(ch); - return mplew.getPacket(); + public static Packet remoteChannelChange(byte ch) { + final OutPacket p = OutPacket.create(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT); // header. + p.writeByte(0x10); + p.writeInt(0);//No idea yet + p.writeByte(ch); + return p; } /* * Possible things for ENTRUSTED_SHOP_CHECK_RESULT @@ -5736,198 +5078,185 @@ public class PacketCreator { * 0x12 = FKING POPUP LOL */ - public static byte[] getHiredMerchant(MapleCharacter chr, MapleHiredMerchant hm, boolean firstTime) {//Thanks Dustin - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(0x05); - mplew.write(0x04); - mplew.writeShort(hm.getVisitorSlotThreadsafe(chr) + 1); - mplew.writeInt(hm.getItemId()); - mplew.writeMapleAsciiString("Hired Merchant"); + public static Packet getHiredMerchant(MapleCharacter chr, MapleHiredMerchant hm, boolean firstTime) {//Thanks Dustin + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.ROOM.getCode()); + p.writeByte(0x05); + p.writeByte(0x04); + p.writeShort(hm.getVisitorSlotThreadsafe(chr) + 1); + p.writeInt(hm.getItemId()); + p.writeString("Hired Merchant"); MapleCharacter[] visitors = hm.getVisitors(); for (int i = 0; i < 3; i++) { if (visitors[i] != null) { - mplew.write(i + 1); - addCharLook(mplew, visitors[i], false); - mplew.writeMapleAsciiString(visitors[i].getName()); + p.writeByte(i + 1); + addCharLook(p, visitors[i], false); + p.writeString(visitors[i].getName()); } } - mplew.write(-1); + p.writeByte(-1); if (hm.isOwner(chr)) { List> msgList = hm.getMessages(); - mplew.writeShort(msgList.size()); + p.writeShort(msgList.size()); for (Pair stringBytePair : msgList) { - mplew.writeMapleAsciiString(stringBytePair.getLeft()); - mplew.write(stringBytePair.getRight()); + p.writeString(stringBytePair.getLeft()); + p.writeByte(stringBytePair.getRight()); } } else { - mplew.writeShort(0); + p.writeShort(0); } - mplew.writeMapleAsciiString(hm.getOwner()); + p.writeString(hm.getOwner()); if (hm.isOwner(chr)) { - mplew.writeShort(0); - mplew.writeShort(hm.getTimeOpen()); - mplew.write(firstTime ? 1 : 0); + p.writeShort(0); + p.writeShort(hm.getTimeOpen()); + p.writeByte(firstTime ? 1 : 0); List sold = hm.getSold(); - mplew.write(sold.size()); + p.writeByte(sold.size()); for (MapleHiredMerchant.SoldItem s : sold) { - mplew.writeInt(s.getItemId()); - mplew.writeShort(s.getQuantity()); - mplew.writeInt(s.getMesos()); - mplew.writeMapleAsciiString(s.getBuyer()); + p.writeInt(s.getItemId()); + p.writeShort(s.getQuantity()); + p.writeInt(s.getMesos()); + p.writeString(s.getBuyer()); } - mplew.writeInt(chr.getMerchantMeso());//:D? + p.writeInt(chr.getMerchantMeso());//:D? } - mplew.writeMapleAsciiString(hm.getDescription()); - mplew.write(0x10); //TODO SLOTS, which is 16 for most stores...slotMax - mplew.writeInt(hm.isOwner(chr) ? chr.getMerchantMeso() : chr.getMeso()); - mplew.write(hm.getItems().size()); + p.writeString(hm.getDescription()); + p.writeByte(0x10); //TODO SLOTS, which is 16 for most stores...slotMax + p.writeInt(hm.isOwner(chr) ? chr.getMerchantMeso() : chr.getMeso()); + p.writeByte(hm.getItems().size()); if (hm.getItems().isEmpty()) { - mplew.write(0);//Hmm?? + p.writeByte(0);//Hmm?? } else { for (MaplePlayerShopItem item : hm.getItems()) { - mplew.writeShort(item.getBundles()); - mplew.writeShort(item.getItem().getQuantity()); - mplew.writeInt(item.getPrice()); - addItemInfo(mplew, item.getItem(), true); + p.writeShort(item.getBundles()); + p.writeShort(item.getItem().getQuantity()); + p.writeInt(item.getPrice()); + addItemInfo(p, item.getItem(), true); } } - return mplew.getPacket(); + return p; } - public static byte[] updateHiredMerchant(MapleHiredMerchant hm, MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.UPDATE_MERCHANT.getCode()); - mplew.writeInt(hm.isOwner(chr) ? chr.getMerchantMeso() : chr.getMeso()); - mplew.write(hm.getItems().size()); + public static Packet updateHiredMerchant(MapleHiredMerchant hm, MapleCharacter chr) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.UPDATE_MERCHANT.getCode()); + p.writeInt(hm.isOwner(chr) ? chr.getMerchantMeso() : chr.getMeso()); + p.writeByte(hm.getItems().size()); for (MaplePlayerShopItem item : hm.getItems()) { - mplew.writeShort(item.getBundles()); - mplew.writeShort(item.getItem().getQuantity()); - mplew.writeInt(item.getPrice()); - addItemInfo(mplew, item.getItem(), true); + p.writeShort(item.getBundles()); + p.writeShort(item.getItem().getQuantity()); + p.writeInt(item.getPrice()); + addItemInfo(p, item.getItem(), true); } - return mplew.getPacket(); + return p; } - public static byte[] hiredMerchantChat(String message, byte slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.CHAT.getCode()); - mplew.write(PlayerInteractionHandler.Action.CHAT_THING.getCode()); - mplew.write(slot); - mplew.writeMapleAsciiString(message); - return mplew.getPacket(); + public static Packet hiredMerchantChat(String message, byte slot) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.CHAT.getCode()); + p.writeByte(PlayerInteractionHandler.Action.CHAT_THING.getCode()); + p.writeByte(slot); + p.writeString(message); + return p; } - public static byte[] hiredMerchantVisitorLeave(int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); + public static Packet hiredMerchantVisitorLeave(int slot) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.EXIT.getCode()); if (slot != 0) { - mplew.write(slot); + p.writeByte(slot); } - return mplew.getPacket(); + return p; } - public static byte[] hiredMerchantOwnerLeave() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.REAL_CLOSE_MERCHANT.getCode()); - mplew.write(0); - return mplew.getPacket(); + public static Packet hiredMerchantOwnerLeave() { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.REAL_CLOSE_MERCHANT.getCode()); + p.writeByte(0); + return p; } - public static byte[] hiredMerchantOwnerMaintenanceLeave() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.REAL_CLOSE_MERCHANT.getCode()); - mplew.write(5); - return mplew.getPacket(); + public static Packet hiredMerchantOwnerMaintenanceLeave() { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.REAL_CLOSE_MERCHANT.getCode()); + p.writeByte(5); + return p; } - public static byte[] hiredMerchantMaintenanceMessage() { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.ROOM.getCode()); - mplew.write(0x00); - mplew.write(0x12); - return mplew.getPacket(); + public static Packet hiredMerchantMaintenanceMessage() { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.ROOM.getCode()); + p.writeByte(0x00); + p.writeByte(0x12); + return p; } - public static byte[] leaveHiredMerchant(int slot, int status2) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.EXIT.getCode()); - mplew.write(slot); - mplew.write(status2); - return mplew.getPacket(); + public static Packet leaveHiredMerchant(int slot, int status2) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.EXIT.getCode()); + p.writeByte(slot); + p.writeByte(status2); + return p; } - public static byte[] hiredMerchantVisitorAdd(MapleCharacter chr, int slot) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(PlayerInteractionHandler.Action.VISIT.getCode()); - mplew.write(slot); - addCharLook(mplew, chr, false); - mplew.writeMapleAsciiString(chr.getName()); - return mplew.getPacket(); + public static Packet hiredMerchantVisitorAdd(MapleCharacter chr, int slot) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.VISIT.getCode()); + p.writeByte(slot); + addCharLook(p, chr, false); + p.writeString(chr.getName()); + return p; } - public static byte[] spawnHiredMerchantBox(MapleHiredMerchant hm) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_HIRED_MERCHANT.getValue()); - mplew.writeInt(hm.getOwnerId()); - mplew.writeInt(hm.getItemId()); - mplew.writeShort((short) hm.getPosition().getX()); - mplew.writeShort((short) hm.getPosition().getY()); - mplew.writeShort(0); - mplew.writeMapleAsciiString(hm.getOwner()); - mplew.write(0x05); - mplew.writeInt(hm.getObjectId()); - mplew.writeMapleAsciiString(hm.getDescription()); - mplew.write(hm.getItemId() % 100); - mplew.write(new byte[]{1, 4}); - return mplew.getPacket(); + public static Packet spawnHiredMerchantBox(MapleHiredMerchant hm) { + final OutPacket p = OutPacket.create(SendOpcode.SPAWN_HIRED_MERCHANT); + p.writeInt(hm.getOwnerId()); + p.writeInt(hm.getItemId()); + p.writeShort((short) hm.getPosition().getX()); + p.writeShort((short) hm.getPosition().getY()); + p.writeShort(0); + p.writeString(hm.getOwner()); + p.writeByte(0x05); + p.writeInt(hm.getObjectId()); + p.writeString(hm.getDescription()); + p.writeByte(hm.getItemId() % 100); + p.writeBytes(new byte[]{1, 4}); + return p; } - public static byte[] removeHiredMerchantBox(int id) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DESTROY_HIRED_MERCHANT.getValue()); - mplew.writeInt(id); - return mplew.getPacket(); + public static Packet removeHiredMerchantBox(int id) { + final OutPacket p = OutPacket.create(SendOpcode.DESTROY_HIRED_MERCHANT); + p.writeInt(id); + return p; } - public static byte[] spawnPlayerNPC(MaplePlayerNPC npc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_NPC_REQUEST_CONTROLLER.getValue()); - mplew.write(1); - mplew.writeInt(npc.getObjectId()); - mplew.writeInt(npc.getScriptId()); - mplew.writeShort(npc.getPosition().x); - mplew.writeShort(npc.getCY()); - mplew.write(npc.getDirection()); - mplew.writeShort(npc.getFH()); - mplew.writeShort(npc.getRX0()); - mplew.writeShort(npc.getRX1()); - mplew.write(1); - return mplew.getPacket(); + public static Packet spawnPlayerNPC(MaplePlayerNPC npc) { + final OutPacket p = OutPacket.create(SendOpcode.SPAWN_NPC_REQUEST_CONTROLLER); + p.writeByte(1); + p.writeInt(npc.getObjectId()); + p.writeInt(npc.getScriptId()); + p.writeShort(npc.getPosition().x); + p.writeShort(npc.getCY()); + p.writeByte(npc.getDirection()); + p.writeShort(npc.getFH()); + p.writeShort(npc.getRX0()); + p.writeShort(npc.getRX1()); + p.writeByte(1); + return p; } - public static byte[] getPlayerNPC(MaplePlayerNPC npc) { // thanks to Arnah - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.IMITATED_NPC_DATA.getValue()); - mplew.write(0x01); - mplew.writeInt(npc.getScriptId()); - mplew.writeMapleAsciiString(npc.getName()); - mplew.write(npc.getGender()); - mplew.write(npc.getSkin()); - mplew.writeInt(npc.getFace()); - mplew.write(0); - mplew.writeInt(npc.getHair()); + public static Packet getPlayerNPC(MaplePlayerNPC npc) { // thanks to Arnah + final OutPacket p = OutPacket.create(SendOpcode.IMITATED_NPC_DATA); + p.writeByte(0x01); + p.writeInt(npc.getScriptId()); + p.writeString(npc.getName()); + p.writeByte(npc.getGender()); + p.writeByte(npc.getSkin()); + p.writeInt(npc.getFace()); + p.writeByte(0); + p.writeInt(npc.getHair()); Map equip = npc.getEquips(); Map myEquip = new LinkedHashMap<>(); Map maskedEquip = new LinkedHashMap<>(); @@ -5946,112 +5275,105 @@ public class PacketCreator { } } for (Entry entry : myEquip.entrySet()) { - mplew.write(entry.getKey()); - mplew.writeInt(entry.getValue()); + p.writeByte(entry.getKey()); + p.writeInt(entry.getValue()); } - mplew.write(0xFF); + p.writeByte(0xFF); for (Entry entry : maskedEquip.entrySet()) { - mplew.write(entry.getKey()); - mplew.writeInt(entry.getValue()); + p.writeByte(entry.getKey()); + p.writeInt(entry.getValue()); } - mplew.write(0xFF); + p.writeByte(0xFF); Integer cWeapon = equip.get((byte) -111); if (cWeapon != null) { - mplew.writeInt(cWeapon); + p.writeInt(cWeapon); } else { - mplew.writeInt(0); + p.writeInt(0); } for (int i = 0; i < 3; i++) { - mplew.writeInt(0); + p.writeInt(0); } - return mplew.getPacket(); + return p; } - public static byte[] removePlayerNPC(int oid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.IMITATED_NPC_DATA.getValue()); - mplew.write(0x00); - mplew.writeInt(oid); - - return mplew.getPacket(); + public static Packet removePlayerNPC(int oid) { + final OutPacket p = OutPacket.create(SendOpcode.IMITATED_NPC_DATA); + p.writeByte(0x00); + p.writeInt(oid); + return p; } - public static byte[] sendYellowTip(String tip) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SET_WEEK_EVENT_MESSAGE.getValue()); - mplew.write(0xFF); - mplew.writeMapleAsciiString(tip); - mplew.writeShort(0); - return mplew.getPacket(); + public static Packet sendYellowTip(String tip) { + final OutPacket p = OutPacket.create(SendOpcode.SET_WEEK_EVENT_MESSAGE); + p.writeByte(0xFF); + p.writeString(tip); + p.writeShort(0); + return p; } - public static byte[] givePirateBuff(List> statups, int buffid, int duration) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + public static Packet givePirateBuff(List> statups, int buffid, int duration) { + OutPacket p = OutPacket.create(SendOpcode.GIVE_BUFF); boolean infusion = buffid == Buccaneer.SPEED_INFUSION || buffid == ThunderBreaker.SPEED_INFUSION || buffid == Corsair.SPEED_INFUSION; - mplew.writeShort(SendOpcode.GIVE_BUFF.getValue()); - writeLongMask(mplew, statups); - mplew.writeShort(0); + writeLongMask(p, statups); + p.writeShort(0); for (Pair stat : statups) { - mplew.writeInt(stat.getRight().shortValue()); - mplew.writeInt(buffid); - mplew.skip(infusion ? 10 : 5); - mplew.writeShort(duration); + p.writeInt(stat.getRight().shortValue()); + p.writeInt(buffid); + p.skip(infusion ? 10 : 5); + p.writeShort(duration); } - mplew.skip(3); - return mplew.getPacket(); + p.skip(3); + return p; } - public static byte[] giveForeignPirateBuff(int cid, int buffid, int time, List> statups) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + public static Packet giveForeignPirateBuff(int cid, int buffid, int time, List> statups) { + OutPacket p = OutPacket.create(SendOpcode.GIVE_FOREIGN_BUFF); boolean infusion = buffid == Buccaneer.SPEED_INFUSION || buffid == ThunderBreaker.SPEED_INFUSION || buffid == Corsair.SPEED_INFUSION; - mplew.writeShort(SendOpcode.GIVE_FOREIGN_BUFF.getValue()); - mplew.writeInt(cid); - writeLongMask(mplew, statups); - mplew.writeShort(0); + p.writeInt(cid); + writeLongMask(p, statups); + p.writeShort(0); for (Pair statup : statups) { - mplew.writeInt(statup.getRight().shortValue()); - mplew.writeInt(buffid); - mplew.skip(infusion ? 10 : 5); - mplew.writeShort(time); + p.writeInt(statup.getRight().shortValue()); + p.writeInt(buffid); + p.skip(infusion ? 10 : 5); + p.writeShort(time); } - mplew.writeShort(0); - mplew.write(2); - return mplew.getPacket(); + p.writeShort(0); + p.writeByte(2); + return p; } - public static byte[] sendMTS(List items, int tab, int type, int page, int pages) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x15); //operation - mplew.writeInt(pages * 16); //testing, change to 10 if fails - mplew.writeInt(items.size()); //number of items - mplew.writeInt(tab); - mplew.writeInt(type); - mplew.writeInt(page); - mplew.write(1); - mplew.write(1); + public static Packet sendMTS(List items, int tab, int type, int page, int pages) { + final OutPacket p = OutPacket.create(SendOpcode.MTS_OPERATION); + p.writeByte(0x15); //operation + p.writeInt(pages * 16); //testing, change to 10 if fails + p.writeInt(items.size()); //number of items + p.writeInt(tab); + p.writeInt(type); + p.writeInt(page); + p.writeByte(1); + p.writeByte(1); for (MTSItemInfo item : items) { - addItemInfo(mplew, item.getItem(), true); - mplew.writeInt(item.getID()); //id - mplew.writeInt(item.getTaxes()); //this + below = price - mplew.writeInt(item.getPrice()); //price - mplew.writeInt(0); - mplew.writeLong(getTime(item.getEndingDate())); - mplew.writeMapleAsciiString(item.getSeller()); //account name (what was nexon thinking?) - mplew.writeMapleAsciiString(item.getSeller()); //char name + addItemInfo(p, item.getItem(), true); + p.writeInt(item.getID()); //id + p.writeInt(item.getTaxes()); //this + below = price + p.writeInt(item.getPrice()); //price + p.writeInt(0); + p.writeLong(getTime(item.getEndingDate())); + p.writeString(item.getSeller()); //account name (what was nexon thinking?) + p.writeString(item.getSeller()); //char name for (int j = 0; j < 28; j++) { - mplew.write(0); + p.writeByte(0); } } - mplew.write(1); - return mplew.getPacket(); + p.writeByte(1); + return p; } - public static byte[] noteSendMsg() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.MEMO_RESULT.getValue()); - mplew.write(4); - return mplew.getPacket(); + public static Packet noteSendMsg() { + OutPacket p = OutPacket.create(SendOpcode.MEMO_RESULT); + p.writeByte(4); + return p; } /* @@ -6059,61 +5381,57 @@ public class PacketCreator { * 1 = Check player's name * 2 = Receiver inbox full */ - public static byte[] noteError(byte error) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.MEMO_RESULT.getValue()); - mplew.write(5); - mplew.write(error); - return mplew.getPacket(); + public static Packet noteError(byte error) { + OutPacket p = OutPacket.create(SendOpcode.MEMO_RESULT); + p.writeByte(5); + p.writeByte(error); + return p; } - public static byte[] showNotes(ResultSet notes, int count) throws SQLException { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MEMO_RESULT.getValue()); - mplew.write(3); - mplew.write(count); + public static Packet showNotes(ResultSet notes, int count) throws SQLException { + final OutPacket p = OutPacket.create(SendOpcode.MEMO_RESULT); + p.writeByte(3); + p.writeByte(count); for (int i = 0; i < count; i++) { - mplew.writeInt(notes.getInt("id")); - mplew.writeMapleAsciiString(notes.getString("from") + " ");//Stupid nexon forgot space lol - mplew.writeMapleAsciiString(notes.getString("message")); - mplew.writeLong(getTime(notes.getLong("timestamp"))); - mplew.write(notes.getByte("fame"));//FAME :D + p.writeInt(notes.getInt("id")); + p.writeString(notes.getString("from") + " ");//Stupid nexon forgot space lol + p.writeString(notes.getString("message")); + p.writeLong(getTime(notes.getLong("timestamp"))); + p.writeByte(notes.getByte("fame"));//FAME :D notes.next(); } - return mplew.getPacket(); + return p; } - public static byte[] useChalkboard(MapleCharacter chr, boolean close) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CHALKBOARD.getValue()); - mplew.writeInt(chr.getId()); + public static Packet useChalkboard(MapleCharacter chr, boolean close) { + OutPacket p = OutPacket.create(SendOpcode.CHALKBOARD); + p.writeInt(chr.getId()); if (close) { - mplew.write(0); + p.writeByte(0); } else { - mplew.write(1); - mplew.writeMapleAsciiString(chr.getChalkboard()); + p.writeByte(1); + p.writeString(chr.getChalkboard()); } - return mplew.getPacket(); + return p; } - public static byte[] trockRefreshMapList(MapleCharacter chr, boolean delete, boolean vip) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAP_TRANSFER_RESULT.getValue()); - mplew.write(delete ? 2 : 3); + public static Packet trockRefreshMapList(MapleCharacter chr, boolean delete, boolean vip) { + final OutPacket p = OutPacket.create(SendOpcode.MAP_TRANSFER_RESULT); + p.writeByte(delete ? 2 : 3); if (vip) { - mplew.write(1); + p.writeByte(1); List map = chr.getVipTrockMaps(); for (int i = 0; i < 10; i++) { - mplew.writeInt(map.get(i)); + p.writeInt(map.get(i)); } } else { - mplew.write(0); + p.writeByte(0); List map = chr.getTrockMaps(); for (int i = 0; i < 5; i++) { - mplew.writeInt(map.get(i)); + p.writeInt(map.get(i)); } } - return mplew.getPacket(); + return p; } /* 1: cannot find char info, @@ -6126,29 +5444,27 @@ public class PacketCreator { 8: must quit family, 9: unknown error */ - public static byte[] sendWorldTransferRules(int error, MapleClient c) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_CHECK_TRANSFER_WORLD_POSSIBLE_RESULT.getValue()); - mplew.writeInt(0); //ignored - mplew.write(error); - mplew.writeInt(0); - mplew.writeBool(error == 0); //0 = ?, otherwise list servers + public static Packet sendWorldTransferRules(int error, MapleClient c) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_CHECK_TRANSFER_WORLD_POSSIBLE_RESULT); + p.writeInt(0); //ignored + p.writeByte(error); + p.writeInt(0); + p.writeBool(error == 0); //0 = ?, otherwise list servers if (error == 0) { List worlds = Server.getInstance().getWorlds(); - mplew.writeInt(worlds.size()); + p.writeInt(worlds.size()); for (World world : worlds) { - mplew.writeMapleAsciiString(GameConstants.WORLD_NAMES[world.getId()]); + p.writeString(GameConstants.WORLD_NAMES[world.getId()]); } } - return mplew.getPacket(); + return p; } - public static byte[] showWorldTransferSuccess(Item item, int accountId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - mplew.write(0xA0); - addCashItemInformation(mplew, item, accountId); - return mplew.getPacket(); + public static Packet showWorldTransferSuccess(Item item, int accountId) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + p.writeByte(0xA0); + addCashItemInformation(p, item, accountId); + return p; } /* 0: no error, send rules @@ -6157,14 +5473,13 @@ public class PacketCreator { 3: recently banned 4: unknown error */ - public static byte[] sendNameTransferRules(int error) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_CHECK_NAME_CHANGE_POSSIBLE_RESULT.getValue()); - mplew.writeInt(0); - mplew.write(error); - mplew.writeInt(0); + public static Packet sendNameTransferRules(int error) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_CHECK_NAME_CHANGE_POSSIBLE_RESULT); + p.writeInt(0); + p.writeByte(error); + p.writeInt(0); - return mplew.getPacket(); + return p; } /* 0: Name available @@ -6172,175 +5487,159 @@ public class PacketCreator { * <0: Unknown error */ - public static byte[] sendNameTransferCheck(String availableName, boolean canUseName) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_CHECK_NAME_CHANGE.getValue()); + public static Packet sendNameTransferCheck(String availableName, boolean canUseName) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_CHECK_NAME_CHANGE); //Send provided name back to client to add to temporary cache of checked & accepted names - mplew.writeMapleAsciiString(availableName); - mplew.writeBool(!canUseName); - return mplew.getPacket(); + p.writeString(availableName); + p.writeBool(!canUseName); + return p; } - public static byte[] showNameChangeSuccess(Item item, int accountId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - mplew.write(0x9E); - addCashItemInformation(mplew, item, accountId); - return mplew.getPacket(); + public static Packet showNameChangeSuccess(Item item, int accountId) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + p.writeByte(0x9E); + addCashItemInformation(p, item, accountId); + return p; } - public static byte[] showNameChangeCancel(boolean success) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_NAME_CHANGE_RESULT.getValue()); - mplew.writeBool(success); + public static Packet showNameChangeCancel(boolean success) { + OutPacket p = OutPacket.create(SendOpcode.CANCEL_NAME_CHANGE_RESULT); + p.writeBool(success); if (!success) { - mplew.write(0); + p.writeByte(0); } - //mplew.writeMapleAsciiString("Custom message."); //only if ^ != 0 - return mplew.getPacket(); + //p.writeString("Custom message."); //only if ^ != 0 + return p; } - public static byte[] showWorldTransferCancel(boolean success) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CANCEL_TRANSFER_WORLD_RESULT.getValue()); - mplew.writeBool(success); + public static Packet showWorldTransferCancel(boolean success) { + OutPacket p = OutPacket.create(SendOpcode.CANCEL_TRANSFER_WORLD_RESULT); + p.writeBool(success); if (!success) { - mplew.write(0); + p.writeByte(0); } - //mplew.writeMapleAsciiString("Custom message."); //only if ^ != 0 - return mplew.getPacket(); + //p.writeString("Custom message."); //only if ^ != 0 + return p; } - public static byte[] showMTSCash(MapleCharacter p) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION2.getValue()); - mplew.writeInt(p.getCashShop().getCash(4)); - mplew.writeInt(p.getCashShop().getCash(2)); - return mplew.getPacket(); + public static Packet showMTSCash(MapleCharacter chr) { + final OutPacket p = OutPacket.create(SendOpcode.MTS_OPERATION2); + p.writeInt(chr.getCashShop().getCash(4)); + p.writeInt(chr.getCashShop().getCash(2)); + return p; } - public static byte[] MTSWantedListingOver(int nx, int items) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x3D); - mplew.writeInt(nx); - mplew.writeInt(items); - return mplew.getPacket(); + public static Packet MTSWantedListingOver(int nx, int items) { + final OutPacket p = OutPacket.create(SendOpcode.MTS_OPERATION); + p.writeByte(0x3D); + p.writeInt(nx); + p.writeInt(items); + return p; } - public static byte[] MTSConfirmSell() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x1D); - return mplew.getPacket(); + public static Packet MTSConfirmSell() { + final OutPacket p = OutPacket.create(SendOpcode.MTS_OPERATION); + p.writeByte(0x1D); + return p; } - public static byte[] MTSConfirmBuy() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x33); - return mplew.getPacket(); + public static Packet MTSConfirmBuy() { + final OutPacket p = OutPacket.create(SendOpcode.MTS_OPERATION); + p.writeByte(0x33); + return p; } - public static byte[] MTSFailBuy() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x34); - mplew.write(0x42); - return mplew.getPacket(); + public static Packet MTSFailBuy() { + final OutPacket p = OutPacket.create(SendOpcode.MTS_OPERATION); + p.writeByte(0x34); + p.writeByte(0x42); + return p; } - public static byte[] MTSConfirmTransfer(int quantity, int pos) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x27); - mplew.writeInt(quantity); - mplew.writeInt(pos); - return mplew.getPacket(); + public static Packet MTSConfirmTransfer(int quantity, int pos) { + final OutPacket p = OutPacket.create(SendOpcode.MTS_OPERATION); + p.writeByte(0x27); + p.writeInt(quantity); + p.writeInt(pos); + return p; } - public static byte[] notYetSoldInv(List items) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x23); - mplew.writeInt(items.size()); + public static Packet notYetSoldInv(List items) { + final OutPacket p = OutPacket.create(SendOpcode.MTS_OPERATION); + p.writeByte(0x23); + p.writeInt(items.size()); if (!items.isEmpty()) { for (MTSItemInfo item : items) { - addItemInfo(mplew, item.getItem(), true); - mplew.writeInt(item.getID()); //id - mplew.writeInt(item.getTaxes()); //this + below = price - mplew.writeInt(item.getPrice()); //price - mplew.writeInt(0); - mplew.writeLong(getTime(item.getEndingDate())); - mplew.writeMapleAsciiString(item.getSeller()); //account name (what was nexon thinking?) - mplew.writeMapleAsciiString(item.getSeller()); //char name + addItemInfo(p, item.getItem(), true); + p.writeInt(item.getID()); //id + p.writeInt(item.getTaxes()); //this + below = price + p.writeInt(item.getPrice()); //price + p.writeInt(0); + p.writeLong(getTime(item.getEndingDate())); + p.writeString(item.getSeller()); //account name (what was nexon thinking?) + p.writeString(item.getSeller()); //char name for (int i = 0; i < 28; i++) { - mplew.write(0); + p.writeByte(0); } } } else { - mplew.writeInt(0); + p.writeInt(0); } - return mplew.getPacket(); + return p; } - public static byte[] transferInventory(List items) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MTS_OPERATION.getValue()); - mplew.write(0x21); - mplew.writeInt(items.size()); + public static Packet transferInventory(List items) { + final OutPacket p = OutPacket.create(SendOpcode.MTS_OPERATION); + p.writeByte(0x21); + p.writeInt(items.size()); if (!items.isEmpty()) { for (MTSItemInfo item : items) { - addItemInfo(mplew, item.getItem(), true); - mplew.writeInt(item.getID()); //id - mplew.writeInt(item.getTaxes()); //taxes - mplew.writeInt(item.getPrice()); //price - mplew.writeInt(0); - mplew.writeLong(getTime(item.getEndingDate())); - mplew.writeMapleAsciiString(item.getSeller()); //account name (what was nexon thinking?) - mplew.writeMapleAsciiString(item.getSeller()); //char name + addItemInfo(p, item.getItem(), true); + p.writeInt(item.getID()); //id + p.writeInt(item.getTaxes()); //taxes + p.writeInt(item.getPrice()); //price + p.writeInt(0); + p.writeLong(getTime(item.getEndingDate())); + p.writeString(item.getSeller()); //account name (what was nexon thinking?) + p.writeString(item.getSeller()); //char name for (int i = 0; i < 28; i++) { - mplew.write(0); + p.writeByte(0); } } } - mplew.write(0xD0 + items.size()); - mplew.write(new byte[]{-1, -1, -1, 0}); - return mplew.getPacket(); + p.writeByte(0xD0 + items.size()); + p.writeBytes(new byte[]{-1, -1, -1, 0}); + return p; } - public static byte[] showCouponRedeemedItems(int accountId, int maplePoints, int mesos, List cashItems, List> items) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - mplew.write(0x59); - mplew.write((byte) cashItems.size()); + public static Packet showCouponRedeemedItems(int accountId, int maplePoints, int mesos, List cashItems, List> items) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + p.writeByte(0x59); + p.writeByte((byte) cashItems.size()); for (Item item : cashItems) { - addCashItemInformation(mplew, item, accountId); + addCashItemInformation(p, item, accountId); } - mplew.writeInt(maplePoints); - mplew.writeInt(items.size()); + p.writeInt(maplePoints); + p.writeInt(items.size()); for (Pair itemPair : items) { int quantity = itemPair.getLeft(); - mplew.writeShort((short) quantity); //quantity (0 = 1 for cash items) - mplew.writeShort(0x1F); //0 = ?, >=0x20 = ?, <0x20 = ? (does nothing?) - mplew.writeInt(itemPair.getRight()); + p.writeShort((short) quantity); //quantity (0 = 1 for cash items) + p.writeShort(0x1F); //0 = ?, >=0x20 = ?, <0x20 = ? (does nothing?) + p.writeInt(itemPair.getRight()); } - mplew.writeInt(mesos); - return mplew.getPacket(); + p.writeInt(mesos); + return p; } - public static byte[] showCash(MapleCharacter mc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.QUERY_CASH_RESULT.getValue()); - - mplew.writeInt(mc.getCashShop().getCash(1)); - mplew.writeInt(mc.getCashShop().getCash(2)); - mplew.writeInt(mc.getCashShop().getCash(4)); - - return mplew.getPacket(); + public static Packet showCash(MapleCharacter mc) { + final OutPacket p = OutPacket.create(SendOpcode.QUERY_CASH_RESULT); + p.writeInt(mc.getCashShop().getCash(1)); + p.writeInt(mc.getCashShop().getCash(2)); + p.writeInt(mc.getCashShop().getCash(4)); + return p; } - public static byte[] enableCSUse(MapleCharacter mc) { + public static Packet enableCSUse(MapleCharacter mc) { return showCash(mc); } @@ -6364,112 +5663,98 @@ public class PacketCreator { * @param flag LOCATION or LOCATION_FRIEND * @return packet structure */ - public static byte[] getFindResult(MapleCharacter target, byte type, int fieldOrChannel, byte flag) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.WHISPER.getValue()); + public static Packet getFindResult(MapleCharacter target, byte type, int fieldOrChannel, byte flag) { + OutPacket p = OutPacket.create(SendOpcode.WHISPER); - mplew.write(flag | WhisperFlag.RESULT); - mplew.writeMapleAsciiString(target.getName()); - mplew.write(type); - mplew.writeInt(fieldOrChannel); + p.writeByte(flag | WhisperFlag.RESULT); + p.writeString(target.getName()); + p.writeByte(type); + p.writeInt(fieldOrChannel); if (type == WhisperHandler.RT_SAME_CHANNEL) { - mplew.writeInt(target.getPosition().x); - mplew.writeInt(target.getPosition().y); + p.writeInt(target.getPosition().x); + p.writeInt(target.getPosition().y); } - return mplew.getPacket(); + return p; } - public static byte[] getWhisperResult(String target, boolean success) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.WHISPER.getValue()); - - mplew.write(WhisperFlag.WHISPER | WhisperFlag.RESULT); - mplew.writeMapleAsciiString(target); - mplew.writeBool(success); - - return mplew.getPacket(); + public static Packet getWhisperResult(String target, boolean success) { + OutPacket p = OutPacket.create(SendOpcode.WHISPER); + p.writeByte(WhisperFlag.WHISPER | WhisperFlag.RESULT); + p.writeString(target); + p.writeBool(success); + return p; } - public static byte[] getWhisperReceive(String sender, int channel, boolean fromAdmin, String message) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.WHISPER.getValue()); - - mplew.write(WhisperFlag.WHISPER | WhisperFlag.RECEIVE); - mplew.writeMapleAsciiString(sender); - mplew.write(channel); - mplew.writeBool(fromAdmin); - mplew.writeMapleAsciiString(message); - - return mplew.getPacket(); + public static Packet getWhisperReceive(String sender, int channel, boolean fromAdmin, String message) { + OutPacket p = OutPacket.create(SendOpcode.WHISPER); + p.writeByte(WhisperFlag.WHISPER | WhisperFlag.RECEIVE); + p.writeString(sender); + p.writeByte(channel); + p.writeBool(fromAdmin); + p.writeString(message); + return p; } - public static byte[] sendAutoHpPot(int itemId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.AUTO_HP_POT.getValue()); - mplew.writeInt(itemId); - return mplew.getPacket(); + public static Packet sendAutoHpPot(int itemId) { + final OutPacket p = OutPacket.create(SendOpcode.AUTO_HP_POT); + p.writeInt(itemId); + return p; } - public static byte[] sendAutoMpPot(int itemId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.AUTO_MP_POT.getValue()); - mplew.writeInt(itemId); - return mplew.getPacket(); + public static Packet sendAutoMpPot(int itemId) { + OutPacket p = OutPacket.create(SendOpcode.AUTO_MP_POT); + p.writeInt(itemId); + return p; } - public static byte[] showOXQuiz(int questionSet, int questionId, boolean askQuestion) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.OX_QUIZ.getValue()); - mplew.write(askQuestion ? 1 : 0); - mplew.write(questionSet); - mplew.writeShort(questionId); - return mplew.getPacket(); + public static Packet showOXQuiz(int questionSet, int questionId, boolean askQuestion) { + OutPacket p = OutPacket.create(SendOpcode.OX_QUIZ); + p.writeByte(askQuestion ? 1 : 0); + p.writeByte(questionSet); + p.writeShort(questionId); + return p; } - public static byte[] updateGender(MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.SET_GENDER.getValue()); - mplew.write(chr.getGender()); - return mplew.getPacket(); + public static Packet updateGender(MapleCharacter chr) { + OutPacket p = OutPacket.create(SendOpcode.SET_GENDER); + p.writeByte(chr.getGender()); + return p; } - public static byte[] enableReport() { // thanks to snow - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.CLAIM_STATUS_CHANGED.getValue()); - mplew.write(1); - return mplew.getPacket(); + public static Packet enableReport() { // thanks to snow + OutPacket p = OutPacket.create(SendOpcode.CLAIM_STATUS_CHANGED); + p.writeByte(1); + return p; } - public static byte[] giveFinalAttack(int skillid, int time) { // packets found thanks to lailainoob - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GIVE_BUFF.getValue()); - mplew.writeLong(0); - mplew.writeShort(0); - mplew.write(0);//some 80 and 0 bs DIRECTION - mplew.write(0x80);//let's just do 80, then 0 - mplew.writeInt(0); - mplew.writeShort(1); - mplew.writeInt(skillid); - mplew.writeInt(time); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet giveFinalAttack(int skillid, int time) { // packets found thanks to lailainoob + final OutPacket p = OutPacket.create(SendOpcode.GIVE_BUFF); + p.writeLong(0); + p.writeShort(0); + p.writeByte(0);//some 80 and 0 bs DIRECTION + p.writeByte(0x80);//let's just do 80, then 0 + p.writeInt(0); + p.writeShort(1); + p.writeInt(skillid); + p.writeInt(time); + p.writeInt(0); + return p; } - public static byte[] loadFamily(MapleCharacter player) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_PRIVILEGE_LIST.getValue()); - mplew.writeInt(MapleFamilyEntitlement.values().length); + public static Packet loadFamily(MapleCharacter player) { + final OutPacket p = OutPacket.create(SendOpcode.FAMILY_PRIVILEGE_LIST); + p.writeInt(MapleFamilyEntitlement.values().length); for (int i = 0; i < MapleFamilyEntitlement.values().length; i++) { MapleFamilyEntitlement entitlement = MapleFamilyEntitlement.values()[i]; - mplew.write(i <= 1 ? 1 : 2); //type - mplew.writeInt(entitlement.getRepCost()); - mplew.writeInt(entitlement.getUsageLimit()); - mplew.writeMapleAsciiString(entitlement.getName()); - mplew.writeMapleAsciiString(entitlement.getDescription()); + p.writeByte(i <= 1 ? 1 : 2); //type + p.writeInt(entitlement.getRepCost()); + p.writeInt(entitlement.getUsageLimit()); + p.writeString(entitlement.getName()); + p.writeString(entitlement.getDescription()); } - return mplew.getPacket(); + return p; } /** @@ -6507,57 +5792,54 @@ public class PacketCreator { * @param type The type * @return Family Result packet */ - public static byte[] sendFamilyMessage(int type, int mesos) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.FAMILY_RESULT.getValue()); - mplew.writeInt(type); - mplew.writeInt(mesos); - return mplew.getPacket(); + public static Packet sendFamilyMessage(int type, int mesos) { + OutPacket p = OutPacket.create(SendOpcode.FAMILY_RESULT); + p.writeInt(type); + p.writeInt(mesos); + return p; } - public static byte[] getFamilyInfo(MapleFamilyEntry f) { - if (f == null) { - return getEmptyFamilyInfo(); - } - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_INFO_RESULT.getValue()); - mplew.writeInt(f.getReputation()); // cur rep left - mplew.writeInt(f.getTotalReputation()); // tot rep left - mplew.writeInt(f.getTodaysRep()); // todays rep - mplew.writeShort(f.getJuniorCount()); // juniors added - mplew.writeShort(2); // juniors allowed - mplew.writeShort(0); //Unknown - mplew.writeInt(f.getFamily().getLeader().getChrId()); // Leader ID (Allows setting message) - mplew.writeMapleAsciiString(f.getFamily().getName()); - mplew.writeMapleAsciiString(f.getFamily().getMessage()); //family message - mplew.writeInt(MapleFamilyEntitlement.values().length); //Entitlement info count - for (MapleFamilyEntitlement entitlement : MapleFamilyEntitlement.values()) { - mplew.writeInt(entitlement.ordinal()); //ID - mplew.writeInt(f.isEntitlementUsed(entitlement) ? 1 : 0); //Used count + public static Packet getFamilyInfo(MapleFamilyEntry f) { + if (f == null) { + return getEmptyFamilyInfo(); } - return mplew.getPacket(); + + OutPacket p = OutPacket.create(SendOpcode.FAMILY_INFO_RESULT); + p.writeInt(f.getReputation()); // cur rep left + p.writeInt(f.getTotalReputation()); // tot rep left + p.writeInt(f.getTodaysRep()); // todays rep + p.writeShort(f.getJuniorCount()); // juniors added + p.writeShort(2); // juniors allowed + p.writeShort(0); //Unknown + p.writeInt(f.getFamily().getLeader().getChrId()); // Leader ID (Allows setting message) + p.writeString(f.getFamily().getName()); + p.writeString(f.getFamily().getMessage()); //family message + p.writeInt(MapleFamilyEntitlement.values().length); //Entitlement info count + for (MapleFamilyEntitlement entitlement : MapleFamilyEntitlement.values()) { + p.writeInt(entitlement.ordinal()); //ID + p.writeInt(f.isEntitlementUsed(entitlement) ? 1 : 0); //Used count + } + return p; } - private static byte[] getEmptyFamilyInfo() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_INFO_RESULT.getValue()); - mplew.writeInt(0); // cur rep left - mplew.writeInt(0); // tot rep left - mplew.writeInt(0); // todays rep - mplew.writeShort(0); // juniors added - mplew.writeShort(2); // juniors allowed - mplew.writeShort(0); //Unknown - mplew.writeInt(0); // Leader ID (Allows setting message) - mplew.writeMapleAsciiString(""); - mplew.writeMapleAsciiString(""); //family message - mplew.writeInt(0); - return mplew.getPacket(); + private static Packet getEmptyFamilyInfo() { + OutPacket p = OutPacket.create(SendOpcode.FAMILY_INFO_RESULT); + p.writeInt(0); // cur rep left + p.writeInt(0); // tot rep left + p.writeInt(0); // todays rep + p.writeShort(0); // juniors added + p.writeShort(2); // juniors allowed + p.writeShort(0); //Unknown + p.writeInt(0); // Leader ID (Allows setting message) + p.writeString(""); + p.writeString(""); //family message + p.writeInt(0); + return p; } - public static byte[] showPedigree(MapleFamilyEntry entry) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_CHART_RESULT.getValue()); - mplew.writeInt(entry.getChrId()); //ID of viewed player's pedigree, can't be leader? + public static Packet showPedigree(MapleFamilyEntry entry) { + final OutPacket p = OutPacket.create(SendOpcode.FAMILY_CHART_RESULT); + p.writeInt(entry.getChrId()); //ID of viewed player's pedigree, can't be leader? List superJuniors = new ArrayList<>(4); boolean hasOtherJunior = false; int entryCount = 2; //2 guaranteed, leader and self @@ -6584,160 +5866,154 @@ public class PacketCreator { } //write entries boolean missingEntries = entryCount == 2; //pedigree requires at least 3 entries to show leader, might only have 2 if leader's juniors leave - if (missingEntries) { - entryCount++; - } - mplew.writeInt(entryCount); //player count - addPedigreeEntry(mplew, entry.getFamily().getLeader()); - if (entry.getSenior() != null) { - if (entry.getSenior().getSenior() != null) { - addPedigreeEntry(mplew, entry.getSenior().getSenior()); - } - addPedigreeEntry(mplew, entry.getSenior()); + if (missingEntries) { + entryCount++; } - addPedigreeEntry(mplew, entry); + p.writeInt(entryCount); //player count + addPedigreeEntry(p, entry.getFamily().getLeader()); + if (entry.getSenior() != null) { + if (entry.getSenior().getSenior() != null) { + addPedigreeEntry(p, entry.getSenior().getSenior()); + } + addPedigreeEntry(p, entry.getSenior()); + } + addPedigreeEntry(p, entry); if (hasOtherJunior) { //must be sent after own entry MapleFamilyEntry otherJunior = entry.getSenior().getOtherJunior(entry); - if (otherJunior != null) { - addPedigreeEntry(mplew, otherJunior); - } - } - if (missingEntries) { - addPedigreeEntry(mplew, entry); + if (otherJunior != null) { + addPedigreeEntry(p, otherJunior); } + } + if (missingEntries) { + addPedigreeEntry(p, entry); + } for (MapleFamilyEntry junior : entry.getJuniors()) { - if (junior == null) { - continue; - } - addPedigreeEntry(mplew, junior); + if (junior == null) { + continue; + } + addPedigreeEntry(p, junior); for (MapleFamilyEntry superJunior : junior.getJuniors()) { - if (superJunior != null) { - addPedigreeEntry(mplew, superJunior); - } + if (superJunior != null) { + addPedigreeEntry(p, superJunior); + } } } - mplew.writeInt(2 + superJuniors.size()); //member info count + p.writeInt(2 + superJuniors.size()); //member info count // 0 = total seniors, -1 = total members, otherwise junior count of ID - mplew.writeInt(-1); - mplew.writeInt(entry.getFamily().getTotalMembers()); - mplew.writeInt(0); - mplew.writeInt(entry.getTotalSeniors()); //client subtracts provided seniors + p.writeInt(-1); + p.writeInt(entry.getFamily().getTotalMembers()); + p.writeInt(0); + p.writeInt(entry.getTotalSeniors()); //client subtracts provided seniors for (MapleFamilyEntry superJunior : superJuniors) { - mplew.writeInt(superJunior.getChrId()); - mplew.writeInt(superJunior.getTotalJuniors()); + p.writeInt(superJunior.getChrId()); + p.writeInt(superJunior.getTotalJuniors()); } - mplew.writeInt(0); //another loop count (entitlements used) - //mplew.writeInt(1); //entitlement index - //mplew.writeInt(2); //times used - mplew.writeShort(entry.getJuniorCount() >= 2 ? 0 : 2); //0 disables Add button (only if viewing own pedigree) - return mplew.getPacket(); + p.writeInt(0); //another loop count (entitlements used) + //p.writeInt(1); //entitlement index + //p.writeInt(2); //times used + p.writeShort(entry.getJuniorCount() >= 2 ? 0 : 2); //0 disables Add button (only if viewing own pedigree) + return p; } - private static void addPedigreeEntry(MaplePacketLittleEndianWriter mplew, MapleFamilyEntry entry) { + private static void addPedigreeEntry(OutPacket p, MapleFamilyEntry entry) { MapleCharacter chr = entry.getChr(); boolean isOnline = chr != null; - mplew.writeInt(entry.getChrId()); //ID - mplew.writeInt(entry.getSenior() != null ? entry.getSenior().getChrId() : 0); //parent ID - mplew.writeShort(entry.getJob().getId()); //job id - mplew.write(entry.getLevel()); //level - mplew.writeBool(isOnline); //isOnline - mplew.writeInt(entry.getReputation()); //current rep - mplew.writeInt(entry.getTotalReputation()); //total rep - mplew.writeInt(entry.getRepsToSenior()); //reps recorded to senior - mplew.writeInt(entry.getTodaysRep()); - mplew.writeInt(isOnline ? ((chr.isAwayFromWorld() || chr.getCashShop().isOpened()) ? -1 : chr.getClient().getChannel() - 1) : 0); - mplew.writeInt(isOnline ? (int) (chr.getLoggedInTime() / 60000) : 0); //time online in minutes - mplew.writeMapleAsciiString(entry.getName()); //name + p.writeInt(entry.getChrId()); //ID + p.writeInt(entry.getSenior() != null ? entry.getSenior().getChrId() : 0); //parent ID + p.writeShort(entry.getJob().getId()); //job id + p.writeByte(entry.getLevel()); //level + p.writeBool(isOnline); //isOnline + p.writeInt(entry.getReputation()); //current rep + p.writeInt(entry.getTotalReputation()); //total rep + p.writeInt(entry.getRepsToSenior()); //reps recorded to senior + p.writeInt(entry.getTodaysRep()); + p.writeInt(isOnline ? ((chr.isAwayFromWorld() || chr.getCashShop().isOpened()) ? -1 : chr.getClient().getChannel() - 1) : 0); + p.writeInt(isOnline ? (int) (chr.getLoggedInTime() / 60000) : 0); //time online in minutes + p.writeString(entry.getName()); //name } - public static byte[] updateAreaInfo(int area, String info) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(0x0A); //0x0B in v95 - mplew.writeShort(area);//infoNumber - mplew.writeMapleAsciiString(info); - return mplew.getPacket(); + public static Packet updateAreaInfo(int area, String info) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(0x0A); //0x0B in v95 + p.writeShort(area);//infoNumber + p.writeString(info); + return p; } - public static byte[] getGPMessage(int gpChange) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(6); - mplew.writeInt(gpChange); - return mplew.getPacket(); + public static Packet getGPMessage(int gpChange) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(6); + p.writeInt(gpChange); + return p; } - public static byte[] getItemMessage(int itemid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(7); - mplew.writeInt(itemid); - return mplew.getPacket(); + public static Packet getItemMessage(int itemid) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(7); + p.writeInt(itemid); + return p; } - public static byte[] addCard(boolean full, int cardid, int level) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); - mplew.writeShort(SendOpcode.MONSTER_BOOK_SET_CARD.getValue()); - mplew.write(full ? 0 : 1); - mplew.writeInt(cardid); - mplew.writeInt(level); - return mplew.getPacket(); + public static Packet addCard(boolean full, int cardid, int level) { + OutPacket p = OutPacket.create(SendOpcode.MONSTER_BOOK_SET_CARD); + p.writeByte(full ? 0 : 1); + p.writeInt(cardid); + p.writeInt(level); + return p; } - public static byte[] showGainCard() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(0x0D); - return mplew.getPacket(); + public static Packet showGainCard() { + OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(0x0D); + return p; } - public static byte[] showForeignCardEffect(int id) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(id); - mplew.write(0x0D); - return mplew.getPacket(); + public static Packet showForeignCardEffect(int id) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_FOREIGN_EFFECT); + p.writeInt(id); + p.writeByte(0x0D); + return p; } - public static byte[] changeCover(int cardid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.MONSTER_BOOK_SET_COVER.getValue()); - mplew.writeInt(cardid); - return mplew.getPacket(); + public static Packet changeCover(int cardid) { + OutPacket p = OutPacket.create(SendOpcode.MONSTER_BOOK_SET_COVER); + p.writeInt(cardid); + return p; } - public static byte[] aranGodlyStats() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FORCED_STAT_SET.getValue()); - mplew.write(new byte[]{(byte) 0x1F, (byte) 0x0F, 0, 0, (byte) 0xE7, 3, (byte) 0xE7, 3, (byte) 0xE7, 3, (byte) 0xE7, 3, (byte) 0xFF, 0, (byte) 0xE7, 3, (byte) 0xE7, 3, (byte) 0x78, (byte) 0x8C}); - return mplew.getPacket(); + public static Packet aranGodlyStats() { + OutPacket p = OutPacket.create(SendOpcode.FORCED_STAT_SET); + p.writeBytes(new byte[]{ + (byte) 0x1F, (byte) 0x0F, 0, 0, + (byte) 0xE7, 3, (byte) 0xE7, 3, + (byte) 0xE7, 3, (byte) 0xE7, 3, + (byte) 0xFF, 0, (byte) 0xE7, 3, + (byte) 0xE7, 3, (byte) 0x78, (byte) 0x8C}); + return p; } - public static byte[] showIntro(String path) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(0x12); - mplew.writeMapleAsciiString(path); - return mplew.getPacket(); + public static Packet showIntro(String path) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(0x12); + p.writeString(path); + return p; } - public static byte[] showInfo(String path) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(0x17); - mplew.writeMapleAsciiString(path); - mplew.writeInt(1); - return mplew.getPacket(); + public static Packet showInfo(String path) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(0x17); + p.writeString(path); + p.writeInt(1); + return p; } - public static byte[] showForeignInfo(int cid, String path) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(0x17); - mplew.writeMapleAsciiString(path); - mplew.writeInt(1); - return mplew.getPacket(); + public static Packet showForeignInfo(int cid, String path) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_FOREIGN_EFFECT); + p.writeInt(cid); + p.writeByte(0x17); + p.writeString(path); + p.writeInt(1); + return p; } /** @@ -6753,59 +6029,50 @@ public class PacketCreator { * @param ui * @return */ - public static byte[] openUI(byte ui) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.OPEN_UI.getValue()); - mplew.write(ui); - return mplew.getPacket(); + public static Packet openUI(byte ui) { + OutPacket p = OutPacket.create(SendOpcode.OPEN_UI); + p.writeByte(ui); + return p; } - public static byte[] lockUI(boolean enable) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.LOCK_UI.getValue()); - mplew.write(enable ? 1 : 0); - return mplew.getPacket(); + public static Packet lockUI(boolean enable) { + OutPacket p = OutPacket.create(SendOpcode.LOCK_UI); + p.writeByte(enable ? 1 : 0); + return p; } - public static byte[] disableUI(boolean enable) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DISABLE_UI.getValue()); - mplew.write(enable ? 1 : 0); - return mplew.getPacket(); + public static Packet disableUI(boolean enable) { + final OutPacket p = OutPacket.create(SendOpcode.DISABLE_UI); + p.writeByte(enable ? 1 : 0); + return p; } - public static byte[] itemMegaphone(String msg, boolean whisper, int channel, Item item) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SERVERMESSAGE.getValue()); - mplew.write(8); - mplew.writeMapleAsciiString(msg); - mplew.write(channel - 1); - mplew.write(whisper ? 1 : 0); + public static Packet itemMegaphone(String msg, boolean whisper, int channel, Item item) { + final OutPacket p = OutPacket.create(SendOpcode.SERVERMESSAGE); + p.writeByte(8); + p.writeString(msg); + p.writeByte(channel - 1); + p.writeByte(whisper ? 1 : 0); if (item == null) { - mplew.write(0); + p.writeByte(0); } else { - mplew.write(item.getPosition()); - addItemInfo(mplew, item, true); + p.writeByte(item.getPosition()); + addItemInfo(p, item, true); } - return mplew.getPacket(); + return p; } - public static byte[] removeNPC(int oid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.REMOVE_NPC.getValue()); - mplew.writeInt(oid); - - return mplew.getPacket(); + public static Packet removeNPC(int objId) { + OutPacket p = OutPacket.create(SendOpcode.REMOVE_NPC); + p.writeInt(objId); + return p; } - public static byte[] removeNPCController(int objectid) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - - mplew.writeShort(SendOpcode.SPAWN_NPC_REQUEST_CONTROLLER.getValue()); - mplew.write(0); - mplew.writeInt(objectid); - - return mplew.getPacket(); + public static Packet removeNPCController(int objId) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_NPC_REQUEST_CONTROLLER); + p.writeByte(0); + p.writeInt(objId); + return p; } /** @@ -6820,63 +6087,58 @@ public class PacketCreator { * @param mode The mode * @return Report Reponse packet */ - public static byte[] reportResponse(byte mode) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SUE_CHARACTER_RESULT.getValue()); - mplew.write(mode); - return mplew.getPacket(); + public static Packet reportResponse(byte mode) { + final OutPacket p = OutPacket.create(SendOpcode.SUE_CHARACTER_RESULT); + p.writeByte(mode); + return p; } - public static byte[] sendHammerData(int hammerUsed) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.VICIOUS_HAMMER.getValue()); - mplew.write(0x39); - mplew.writeInt(0); - mplew.writeInt(hammerUsed); - return mplew.getPacket(); + public static Packet sendHammerData(int hammerUsed) { + OutPacket p = OutPacket.create(SendOpcode.VICIOUS_HAMMER); + p.writeByte(0x39); + p.writeInt(0); + p.writeInt(hammerUsed); + return p; } - public static byte[] sendHammerMessage() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.VICIOUS_HAMMER.getValue()); - mplew.write(0x3D); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet sendHammerMessage() { + final OutPacket p = OutPacket.create(SendOpcode.VICIOUS_HAMMER); + p.writeByte(0x3D); + p.writeInt(0); + return p; } - public static byte[] playPortalSound() { + public static Packet playPortalSound() { return showSpecialEffect(7); } - public static byte[] showMonsterBookPickup() { + public static Packet showMonsterBookPickup() { return showSpecialEffect(14); } - public static byte[] showEquipmentLevelUp() { + public static Packet showEquipmentLevelUp() { return showSpecialEffect(15); } - public static byte[] showItemLevelup() { + public static Packet showItemLevelup() { return showSpecialEffect(15); } - public static byte[] showBuybackEffect() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(11); - mplew.writeInt(0); + public static Packet showBuybackEffect() { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(11); + p.writeInt(0); - return mplew.getPacket(); + return p; } - public static byte[] showForeignBuybackEffect(int cid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(11); - mplew.writeInt(0); + public static Packet showForeignBuybackEffect(int cid) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_FOREIGN_EFFECT); + p.writeInt(cid); + p.writeByte(11); + p.writeInt(0); - return mplew.getPacket(); + return p; } /** @@ -6889,193 +6151,176 @@ public class PacketCreator { * @param effect * @return */ - public static byte[] showSpecialEffect(int effect) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(effect); - return mplew.getPacket(); + public static Packet showSpecialEffect(int effect) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(effect); + return p; } - public static byte[] showMakerEffect(boolean makerSucceeded) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(16); - mplew.writeInt(makerSucceeded ? 0 : 1); - return mplew.getPacket(); + public static Packet showMakerEffect(boolean makerSucceeded) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(16); + p.writeInt(makerSucceeded ? 0 : 1); + return p; } - public static byte[] showForeignMakerEffect(int cid, boolean makerSucceeded) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(16); - mplew.writeInt(makerSucceeded ? 0 : 1); - return mplew.getPacket(); + public static Packet showForeignMakerEffect(int cid, boolean makerSucceeded) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_FOREIGN_EFFECT); + p.writeInt(cid); + p.writeByte(16); + p.writeInt(makerSucceeded ? 0 : 1); + return p; } - public static byte[] showForeignEffect(int effect) { + public static Packet showForeignEffect(int effect) { return showForeignEffect(-1, effect); } - public static byte[] showForeignEffect(int cid, int effect) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(effect); - return mplew.getPacket(); + public static Packet showForeignEffect(int chrId, int effect) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_FOREIGN_EFFECT); + p.writeInt(chrId); + p.writeByte(effect); + return p; } - public static byte[] showOwnRecovery(byte heal) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(0x0A); - mplew.write(heal); - return mplew.getPacket(); + public static Packet showOwnRecovery(byte heal) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(0x0A); + p.writeByte(heal); + return p; } - public static byte[] showRecovery(int cid, byte amount) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); - mplew.writeInt(cid); - mplew.write(0x0A); - mplew.write(amount); - return mplew.getPacket(); + public static Packet showRecovery(int chrId, byte amount) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_FOREIGN_EFFECT); + p.writeInt(chrId); + p.writeByte(0x0A); + p.writeByte(amount); + return p; } - public static byte[] showWheelsLeft(int left) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); - mplew.write(0x15); - mplew.write(left); - return mplew.getPacket(); + public static Packet showWheelsLeft(int left) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(0x15); + p.writeByte(left); + return p; } - public static byte[] updateQuestFinish(short quest, int npc, short nextquest) { //Check - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); //0xF2 in v95 - mplew.write(8);//0x0A in v95 - mplew.writeShort(quest); - mplew.writeInt(npc); - mplew.writeShort(nextquest); - return mplew.getPacket(); + public static Packet updateQuestFinish(short quest, int npc, short nextquest) { //Check + final OutPacket p = OutPacket.create(SendOpcode.UPDATE_QUEST_INFO); //0xF2 in v95 + p.writeByte(8);//0x0A in v95 + p.writeShort(quest); + p.writeInt(npc); + p.writeShort(nextquest); + return p; } - public static byte[] showInfoText(String text) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(9); - mplew.writeMapleAsciiString(text); - return mplew.getPacket(); + public static Packet showInfoText(String text) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(9); + p.writeString(text); + return p; } - public static byte[] questError(short quest) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); - mplew.write(0x0A); - mplew.writeShort(quest); - return mplew.getPacket(); + public static Packet questError(short quest) { + final OutPacket p = OutPacket.create(SendOpcode.UPDATE_QUEST_INFO); + p.writeByte(0x0A); + p.writeShort(quest); + return p; } - public static byte[] questFailure(byte type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); - mplew.write(type);//0x0B = No meso, 0x0D = Worn by character, 0x0E = Not having the item ? - return mplew.getPacket(); + public static Packet questFailure(byte type) { + final OutPacket p = OutPacket.create(SendOpcode.UPDATE_QUEST_INFO); + p.writeByte(type);//0x0B = No meso, 0x0D = Worn by character, 0x0E = Not having the item ? + return p; } - public static byte[] questExpire(short quest) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.UPDATE_QUEST_INFO.getValue()); - mplew.write(0x0F); - mplew.writeShort(quest); - return mplew.getPacket(); + public static Packet questExpire(short quest) { + final OutPacket p = OutPacket.create(SendOpcode.UPDATE_QUEST_INFO); + p.writeByte(0x0F); + p.writeShort(quest); + return p; } // MAKER_RESULT packets thanks to Arnah (Vertisy) - public static byte[] makerResult(boolean success, int itemMade, int itemCount, int mesos, List> itemsLost, int catalystID, List INCBuffGems) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAKER_RESULT.getValue()); - mplew.writeInt(success ? 0 : 1); // 0 = success, 1 = fail - mplew.writeInt(1); // 1 or 2 doesn't matter, same methods - mplew.writeBool(!success); + public static Packet makerResult(boolean success, int itemMade, int itemCount, int mesos, List> itemsLost, int catalystID, List INCBuffGems) { + final OutPacket p = OutPacket.create(SendOpcode.MAKER_RESULT); + p.writeInt(success ? 0 : 1); // 0 = success, 1 = fail + p.writeInt(1); // 1 or 2 doesn't matter, same methods + p.writeBool(!success); if (success) { - mplew.writeInt(itemMade); - mplew.writeInt(itemCount); + p.writeInt(itemMade); + p.writeInt(itemCount); } - mplew.writeInt(itemsLost.size()); // Loop + p.writeInt(itemsLost.size()); // Loop for (Pair item : itemsLost) { - mplew.writeInt(item.getLeft()); - mplew.writeInt(item.getRight()); + p.writeInt(item.getLeft()); + p.writeInt(item.getRight()); } - mplew.writeInt(INCBuffGems.size()); + p.writeInt(INCBuffGems.size()); for (Integer gem : INCBuffGems) { - mplew.writeInt(gem); + p.writeInt(gem); } if (catalystID != -1) { - mplew.write(1); // stimulator - mplew.writeInt(catalystID); + p.writeByte(1); // stimulator + p.writeInt(catalystID); } else { - mplew.write(0); + p.writeByte(0); } - mplew.writeInt(mesos); - return mplew.getPacket(); + p.writeInt(mesos); + return p; } - public static byte[] makerResultCrystal(int itemIdGained, int itemIdLost) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAKER_RESULT.getValue()); - mplew.writeInt(0); // Always successful! - mplew.writeInt(3); // Monster Crystal - mplew.writeInt(itemIdGained); - mplew.writeInt(itemIdLost); - return mplew.getPacket(); + public static Packet makerResultCrystal(int itemIdGained, int itemIdLost) { + final OutPacket p = OutPacket.create(SendOpcode.MAKER_RESULT); + p.writeInt(0); // Always successful! + p.writeInt(3); // Monster Crystal + p.writeInt(itemIdGained); + p.writeInt(itemIdLost); + return p; } - public static byte[] makerResultDesynth(int itemId, int mesos, List> itemsGained) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAKER_RESULT.getValue()); - mplew.writeInt(0); // Always successful! - mplew.writeInt(4); // Mode Desynth - mplew.writeInt(itemId); // Item desynthed - mplew.writeInt(itemsGained.size()); // Loop of items gained, (int, int) + public static Packet makerResultDesynth(int itemId, int mesos, List> itemsGained) { + final OutPacket p = OutPacket.create(SendOpcode.MAKER_RESULT); + p.writeInt(0); // Always successful! + p.writeInt(4); // Mode Desynth + p.writeInt(itemId); // Item desynthed + p.writeInt(itemsGained.size()); // Loop of items gained, (int, int) for (Pair item : itemsGained) { - mplew.writeInt(item.getLeft()); - mplew.writeInt(item.getRight()); + p.writeInt(item.getLeft()); + p.writeInt(item.getRight()); } - mplew.writeInt(mesos); // Mesos spent. - return mplew.getPacket(); + p.writeInt(mesos); // Mesos spent. + return p; } - public static byte[] makerEnableActions() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MAKER_RESULT.getValue()); - mplew.writeInt(0); // Always successful! - mplew.writeInt(0); // Monster Crystal - mplew.writeInt(0); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet makerEnableActions() { + final OutPacket p = OutPacket.create(SendOpcode.MAKER_RESULT); + p.writeInt(0); // Always successful! + p.writeInt(0); // Monster Crystal + p.writeInt(0); + p.writeInt(0); + return p; } - public static byte[] getMultiMegaphone(String[] messages, int channel, boolean showEar) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SERVERMESSAGE.getValue()); - mplew.write(0x0A); + public static Packet getMultiMegaphone(String[] messages, int channel, boolean showEar) { + final OutPacket p = OutPacket.create(SendOpcode.SERVERMESSAGE); + p.writeByte(0x0A); if (messages[0] != null) { - mplew.writeMapleAsciiString(messages[0]); + p.writeString(messages[0]); } - mplew.write(messages.length); + p.writeByte(messages.length); for (int i = 1; i < messages.length; i++) { if (messages[i] != null) { - mplew.writeMapleAsciiString(messages[i]); + p.writeString(messages[i]); } } for (int i = 0; i < 10; i++) { - mplew.write(channel - 1); + p.writeByte(channel - 1); } - mplew.write(showEar ? 1 : 0); - mplew.write(1); - return mplew.getPacket(); + p.writeByte(showEar ? 1 : 0); + p.writeByte(1); + return p; } /** @@ -7094,419 +6339,213 @@ public class PacketCreator { * @param mode The mode * @return The gm effect packet */ - public static byte[] getGMEffect(int type, byte mode) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ADMIN_RESULT.getValue()); - mplew.write(type); - mplew.write(mode); - return mplew.getPacket(); + public static Packet getGMEffect(int type, byte mode) { + OutPacket p = OutPacket.create(SendOpcode.ADMIN_RESULT); + p.writeByte(type); + p.writeByte(mode); + return p; } - public static byte[] findMerchantResponse(boolean map, int extra) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ADMIN_RESULT.getValue()); - mplew.write(0x13); - mplew.write(map ? 0 : 1); //00 = mapid, 01 = ch + public static Packet findMerchantResponse(boolean map, int extra) { + final OutPacket p = OutPacket.create(SendOpcode.ADMIN_RESULT); + p.writeByte(0x13); + p.writeByte(map ? 0 : 1); //00 = mapid, 01 = ch if (map) { - mplew.writeInt(extra); + p.writeInt(extra); } else { - mplew.write(extra); //-1 = unable to find + p.writeByte(extra); //-1 = unable to find } - mplew.write(0); - return mplew.getPacket(); + p.writeByte(0); + return p; } - public static byte[] disableMinimap() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ADMIN_RESULT.getValue()); - mplew.writeShort(0x1C); - return mplew.getPacket(); + public static Packet disableMinimap() { + final OutPacket p = OutPacket.create(SendOpcode.ADMIN_RESULT); + p.writeShort(0x1C); + return p; } - public static byte[] sendFamilyInvite(int playerId, String inviter) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_JOIN_REQUEST.getValue()); - mplew.writeInt(playerId); - mplew.writeMapleAsciiString(inviter); - return mplew.getPacket(); + public static Packet sendFamilyInvite(int playerId, String inviter) { + final OutPacket p = OutPacket.create(SendOpcode.FAMILY_JOIN_REQUEST); + p.writeInt(playerId); + p.writeString(inviter); + return p; } - public static byte[] sendFamilySummonRequest(String familyName, String from) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_SUMMON_REQUEST.getValue()); - mplew.writeMapleAsciiString(from); - mplew.writeMapleAsciiString(familyName); - return mplew.getPacket(); + public static Packet sendFamilySummonRequest(String familyName, String from) { + final OutPacket p = OutPacket.create(SendOpcode.FAMILY_SUMMON_REQUEST); + p.writeString(from); + p.writeString(familyName); + return p; } - public static byte[] sendFamilyLoginNotice(String name, boolean loggedIn) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_NOTIFY_LOGIN_OR_LOGOUT.getValue()); - mplew.writeBool(loggedIn); - mplew.writeMapleAsciiString(name); - return mplew.getPacket(); + public static Packet sendFamilyLoginNotice(String name, boolean loggedIn) { + final OutPacket p = OutPacket.create(SendOpcode.FAMILY_NOTIFY_LOGIN_OR_LOGOUT); + p.writeBool(loggedIn); + p.writeString(name); + return p; } - public static byte[] sendFamilyJoinResponse(boolean accepted, String added) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_JOIN_REQUEST_RESULT.getValue()); - mplew.write(accepted ? 1 : 0); - mplew.writeMapleAsciiString(added); - return mplew.getPacket(); + public static Packet sendFamilyJoinResponse(boolean accepted, String added) { + final OutPacket p = OutPacket.create(SendOpcode.FAMILY_JOIN_REQUEST_RESULT); + p.writeByte(accepted ? 1 : 0); + p.writeString(added); + return p; } - public static byte[] getSeniorMessage(String name) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_JOIN_ACCEPTED.getValue()); - mplew.writeMapleAsciiString(name); - mplew.writeInt(0); - return mplew.getPacket(); + public static Packet getSeniorMessage(String name) { + final OutPacket p = OutPacket.create(SendOpcode.FAMILY_JOIN_ACCEPTED); + p.writeString(name); + p.writeInt(0); + return p; } - public static byte[] sendGainRep(int gain, String from) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FAMILY_REP_GAIN.getValue()); - mplew.writeInt(gain); - mplew.writeMapleAsciiString(from); - return mplew.getPacket(); + public static Packet sendGainRep(int gain, String from) { + final OutPacket p = OutPacket.create(SendOpcode.FAMILY_REP_GAIN); + p.writeInt(gain); + p.writeString(from); + return p; } - public static byte[] showBoughtCashPackage(List cashPackage, int accountId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + public static Packet showBoughtCashPackage(List cashPackage, int accountId) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); - mplew.write(0x89); - mplew.write(cashPackage.size()); + p.writeByte(0x89); + p.writeByte(cashPackage.size()); for (Item item : cashPackage) { - addCashItemInformation(mplew, item, accountId); + addCashItemInformation(p, item, accountId); } - mplew.writeShort(0); + p.writeShort(0); - return mplew.getPacket(); + return p; } - public static byte[] showBoughtQuestItem(int itemId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - - mplew.write(0x8D); - mplew.writeInt(1); - mplew.writeShort(1); - mplew.write(0x0B); - mplew.write(0); - mplew.writeInt(itemId); - - return mplew.getPacket(); + public static Packet showBoughtQuestItem(int itemId) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + p.writeByte(0x8D); + p.writeInt(1); + p.writeShort(1); + p.writeByte(0x0B); + p.writeByte(0); + p.writeInt(itemId); + return p; } // Cash Shop Surprise packets found thanks to Arnah (Vertisy) - public static byte[] onCashItemGachaponOpenFailed() { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_CASH_ITEM_GACHAPON_RESULT.getValue()); - mplew.write(0xE4); - return mplew.getPacket(); + public static Packet onCashItemGachaponOpenFailed() { + OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_CASH_ITEM_GACHAPON_RESULT); + p.writeByte(0xE4); + return p; } - public static byte[] onCashGachaponOpenSuccess(int accountid, long sn, int remainingBoxes, Item item, int itemid, int nSelectedItemCount, boolean bJackpot) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_CASH_ITEM_GACHAPON_RESULT.getValue()); - mplew.write(0xE5); // subopcode thanks to Ubaware - mplew.writeLong(sn);// sn of the box used - mplew.writeInt(remainingBoxes); - addCashItemInformation(mplew, item, accountid); - mplew.writeInt(itemid);// the itemid of the liSN? - mplew.write(nSelectedItemCount);// the total count now? o.O - mplew.writeBool(bJackpot);// "CashGachaponJackpot" - return mplew.getPacket(); + public static Packet onCashGachaponOpenSuccess(int accountid, long sn, int remainingBoxes, Item item, int itemid, int nSelectedItemCount, boolean bJackpot) { + OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_CASH_ITEM_GACHAPON_RESULT); + p.writeByte(0xE5); // subopcode thanks to Ubaware + p.writeLong(sn);// sn of the box used + p.writeInt(remainingBoxes); + addCashItemInformation(p, item, accountid); + p.writeInt(itemid);// the itemid of the liSN? + p.writeByte(nSelectedItemCount);// the total count now? o.O + p.writeBool(bJackpot);// "CashGachaponJackpot" + return p; } - private static void getGuildInfo(final MaplePacketLittleEndianWriter mplew, MapleGuild guild) { - mplew.writeInt(guild.getId()); - mplew.writeMapleAsciiString(guild.getName()); - for (int i = 1; i <= 5; i++) { - mplew.writeMapleAsciiString(guild.getRankTitle(i)); - } - Collection members = guild.getMembers(); - mplew.write(members.size()); - for (MapleGuildCharacter mgc : members) { - mplew.writeInt(mgc.getId()); - } - for (MapleGuildCharacter mgc : members) { - mplew.writeAsciiString(getRightPaddedStr(mgc.getName(), '\0', 13)); - mplew.writeInt(mgc.getJobId()); - mplew.writeInt(mgc.getLevel()); - mplew.writeInt(mgc.getGuildRank()); - mplew.writeInt(mgc.isOnline() ? 1 : 0); - mplew.writeInt(guild.getSignature()); - mplew.writeInt(mgc.getAllianceRank()); - } - mplew.writeInt(guild.getCapacity()); - mplew.writeShort(guild.getLogoBG()); - mplew.write(guild.getLogoBGColor()); - mplew.writeShort(guild.getLogo()); - mplew.write(guild.getLogoColor()); - mplew.writeMapleAsciiString(guild.getNotice()); - mplew.writeInt(guild.getGP()); - mplew.writeInt(guild.getAllianceId()); + public static Packet sendMesoLimit() { + final OutPacket p = OutPacket.create(SendOpcode.TRADE_MONEY_LIMIT); //Players under level 15 can only trade 1m per day + return p; } - public static byte[] getAllianceInfo(MapleAlliance alliance) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x0C); - mplew.write(1); - mplew.writeInt(alliance.getId()); - mplew.writeMapleAsciiString(alliance.getName()); - for (int i = 1; i <= 5; i++) { - mplew.writeMapleAsciiString(alliance.getRankTitle(i)); - } - mplew.write(alliance.getGuilds().size()); - mplew.writeInt(alliance.getCapacity()); // probably capacity - for (Integer guild : alliance.getGuilds()) { - mplew.writeInt(guild); - } - mplew.writeMapleAsciiString(alliance.getNotice()); - return mplew.getPacket(); + public static Packet removeItemFromDuey(boolean remove, int Package) { + final OutPacket p = OutPacket.create(SendOpcode.PARCEL); + p.writeByte(0x17); + p.writeInt(Package); + p.writeByte(remove ? 3 : 4); + return p; } - public static byte[] updateAllianceInfo(MapleAlliance alliance, int world) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x0F); - mplew.writeInt(alliance.getId()); - mplew.writeMapleAsciiString(alliance.getName()); - for (int i = 1; i <= 5; i++) { - mplew.writeMapleAsciiString(alliance.getRankTitle(i)); - } - mplew.write(alliance.getGuilds().size()); - for (Integer guild : alliance.getGuilds()) { - mplew.writeInt(guild); - } - mplew.writeInt(alliance.getCapacity()); // probably capacity - mplew.writeShort(0); - for (Integer guildid : alliance.getGuilds()) { - getGuildInfo(mplew, Server.getInstance().getGuild(guildid, world)); - } - return mplew.getPacket(); + public static Packet sendDueyParcelReceived(String from, boolean quick) { // thanks inhyuk + OutPacket p = OutPacket.create(SendOpcode.PARCEL); + p.writeByte(0x19); + p.writeString(from); + p.writeBool(quick); + return p; } - public static byte[] getGuildAlliances(MapleAlliance alliance, int worldId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x0D); - mplew.writeInt(alliance.getGuilds().size()); - for (Integer guild : alliance.getGuilds()) { - getGuildInfo(mplew, Server.getInstance().getGuild(guild, worldId)); - } - return mplew.getPacket(); + public static Packet sendDueyParcelNotification(boolean quick) { + final OutPacket p = OutPacket.create(SendOpcode.PARCEL); + p.writeByte(0x1B); + p.writeBool(quick); // 0 : package received, 1 : quick delivery package + return p; } - public static byte[] addGuildToAlliance(MapleAlliance alliance, int newGuild, MapleClient c) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x12); - mplew.writeInt(alliance.getId()); - mplew.writeMapleAsciiString(alliance.getName()); - for (int i = 1; i <= 5; i++) { - mplew.writeMapleAsciiString(alliance.getRankTitle(i)); - } - mplew.write(alliance.getGuilds().size()); - for (Integer guild : alliance.getGuilds()) { - mplew.writeInt(guild); - } - mplew.writeInt(alliance.getCapacity()); - mplew.writeMapleAsciiString(alliance.getNotice()); - mplew.writeInt(newGuild); - getGuildInfo(mplew, Server.getInstance().getGuild(newGuild, c.getWorld(), null)); - return mplew.getPacket(); - } - - public static byte[] allianceMemberOnline(MapleCharacter mc, boolean online) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x0E); - mplew.writeInt(mc.getGuild().getAllianceId()); - mplew.writeInt(mc.getGuildId()); - mplew.writeInt(mc.getId()); - mplew.write(online ? 1 : 0); - return mplew.getPacket(); - } - - public static byte[] allianceNotice(int id, String notice) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x1C); - mplew.writeInt(id); - mplew.writeMapleAsciiString(notice); - return mplew.getPacket(); - } - - public static byte[] changeAllianceRankTitle(int alliance, String[] ranks) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x1A); - mplew.writeInt(alliance); - for (int i = 0; i < 5; i++) { - mplew.writeMapleAsciiString(ranks[i]); - } - return mplew.getPacket(); - } - - public static byte[] updateAllianceJobLevel(MapleCharacter mc) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x18); - mplew.writeInt(mc.getGuild().getAllianceId()); - mplew.writeInt(mc.getGuildId()); - mplew.writeInt(mc.getId()); - mplew.writeInt(mc.getLevel()); - mplew.writeInt(mc.getJob().getId()); - return mplew.getPacket(); - } - - public static byte[] removeGuildFromAlliance(MapleAlliance alliance, int expelledGuild, int worldId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x10); - mplew.writeInt(alliance.getId()); - mplew.writeMapleAsciiString(alliance.getName()); - for (int i = 1; i <= 5; i++) { - mplew.writeMapleAsciiString(alliance.getRankTitle(i)); - } - mplew.write(alliance.getGuilds().size()); - for (Integer guild : alliance.getGuilds()) { - mplew.writeInt(guild); - } - mplew.writeInt(alliance.getCapacity()); - mplew.writeMapleAsciiString(alliance.getNotice()); - mplew.writeInt(expelledGuild); - getGuildInfo(mplew, Server.getInstance().getGuild(expelledGuild, worldId, null)); - mplew.write(0x01); - return mplew.getPacket(); - } - - public static byte[] disbandAlliance(int alliance) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x1D); - mplew.writeInt(alliance); - return mplew.getPacket(); - } - - public static byte[] allianceInvite(int allianceid, MapleCharacter chr) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x03); - mplew.writeInt(allianceid); - mplew.writeMapleAsciiString(chr.getName()); - mplew.writeShort(0); - return mplew.getPacket(); - } - - public static byte[] sendMesoLimit() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.TRADE_MONEY_LIMIT.getValue()); //Players under level 15 can only trade 1m per day - return mplew.getPacket(); - } - - public static byte[] removeItemFromDuey(boolean remove, int Package) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARCEL.getValue()); - mplew.write(0x17); - mplew.writeInt(Package); - mplew.write(remove ? 3 : 4); - return mplew.getPacket(); - } - - public static byte[] sendDueyParcelReceived(String from, boolean quick) { // thanks inhyuk - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARCEL.getValue()); - mplew.write(0x19); - mplew.writeMapleAsciiString(from); - mplew.writeBool(quick); - return mplew.getPacket(); - } - - public static byte[] sendDueyParcelNotification(boolean quick) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARCEL.getValue()); - mplew.write(0x1B); - mplew.writeBool(quick); // 0 : package received, 1 : quick delivery package - return mplew.getPacket(); - } - - public static byte[] sendDueyMSG(byte operation) { + public static Packet sendDueyMSG(byte operation) { return sendDuey(operation, null); } - public static byte[] sendDuey(int operation, List packages) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PARCEL.getValue()); - mplew.write(operation); + public static Packet sendDuey(int operation, List packages) { + final OutPacket p = OutPacket.create(SendOpcode.PARCEL); + p.writeByte(operation); if (operation == 8) { - mplew.write(0); - mplew.write(packages.size()); + p.writeByte(0); + p.writeByte(packages.size()); for (DueyPackage dp : packages) { - mplew.writeInt(dp.getPackageId()); - mplew.writeAsciiString(dp.getSender()); + p.writeInt(dp.getPackageId()); + p.writeFixedString(dp.getSender()); for (int i = dp.getSender().length(); i < 13; i++) { - mplew.write(0); + p.writeByte(0); } - mplew.writeInt(dp.getMesos()); - mplew.writeLong(getTime(dp.sentTimeInMilliseconds())); + p.writeInt(dp.getMesos()); + p.writeLong(getTime(dp.sentTimeInMilliseconds())); String msg = dp.getMessage(); if (msg != null) { - mplew.writeInt(1); - mplew.writeAsciiString(msg); + p.writeInt(1); + p.writeFixedString(msg); for (int i = msg.length(); i < 200; i++) { - mplew.write(0); + p.writeByte(0); } } else { - mplew.writeInt(0); - mplew.skip(200); + p.writeInt(0); + p.skip(200); } - mplew.write(0); + p.writeByte(0); if (dp.getItem() != null) { - mplew.write(1); - addItemInfo(mplew, dp.getItem(), true); + p.writeByte(1); + addItemInfo(p, dp.getItem(), true); } else { - mplew.write(0); + p.writeByte(0); } } - mplew.write(0); + p.writeByte(0); } - return mplew.getPacket(); + return p; } - public static byte[] sendDojoAnimation(byte firstByte, String animation) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(firstByte); - mplew.writeMapleAsciiString(animation); - return mplew.getPacket(); + public static Packet sendDojoAnimation(byte firstByte, String animation) { + final OutPacket p = OutPacket.create(SendOpcode.FIELD_EFFECT); + p.writeByte(firstByte); + p.writeString(animation); + return p; } - public static byte[] getDojoInfo(String info) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(10); - mplew.write(new byte[]{(byte) 0xB7, 4});//QUEST ID f5 - mplew.writeMapleAsciiString(info); - return mplew.getPacket(); + public static Packet getDojoInfo(String info) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(10); + p.writeBytes(new byte[]{(byte) 0xB7, 4});//QUEST ID f5 + p.writeString(info); + return p; } - public static byte[] getDojoInfoMessage(String message) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(9); - mplew.writeMapleAsciiString(message); - return mplew.getPacket(); + public static Packet getDojoInfoMessage(String message) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(9); + p.writeString(message); + return p; } /** @@ -7522,11 +6561,10 @@ public class PacketCreator { * @param type The type * @return The "block" packet. */ - public static byte[] blockedMessage(int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BLOCKED_MAP.getValue()); - mplew.write(type); - return mplew.getPacket(); + public static Packet blockedMessage(int type) { + final OutPacket p = OutPacket.create(SendOpcode.BLOCKED_MAP); + p.writeByte(type); + return p; } /** @@ -7542,20 +6580,18 @@ public class PacketCreator { * @param type The type * @return The "block" packet. */ - public static byte[] blockedMessage2(int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BLOCKED_SERVER.getValue()); - mplew.write(type); - return mplew.getPacket(); + public static Packet blockedMessage2(int type) { + final OutPacket p = OutPacket.create(SendOpcode.BLOCKED_SERVER); + p.writeByte(type); + return p; } - public static byte[] updateDojoStats(MapleCharacter chr, int belt) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(10); - mplew.write(new byte[]{(byte) 0xB7, 4}); //? - mplew.writeMapleAsciiString("pt=" + chr.getDojoPoints() + ";belt=" + belt + ";tuto=" + (chr.getFinishedDojoTutorial() ? "1" : "0")); - return mplew.getPacket(); + public static Packet updateDojoStats(MapleCharacter chr, int belt) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(10); + p.writeBytes(new byte[]{(byte) 0xB7, 4}); //? + p.writeString("pt=" + chr.getDojoPoints() + ";belt=" + belt + ";tuto=" + (chr.getFinishedDojoTutorial() ? "1" : "0")); + return p; } /** @@ -7568,14 +6604,13 @@ public class PacketCreator { * @param type The type * @return The "levelup" packet. */ - public static byte[] levelUpMessage(int type, int level, String charname) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NOTIFY_LEVELUP.getValue()); - mplew.write(type); - mplew.writeInt(level); - mplew.writeMapleAsciiString(charname); + public static Packet levelUpMessage(int type, int level, String charname) { + final OutPacket p = OutPacket.create(SendOpcode.NOTIFY_LEVELUP); + p.writeByte(type); + p.writeInt(level); + p.writeString(charname); - return mplew.getPacket(); + return p; } /** @@ -7588,13 +6623,12 @@ public class PacketCreator { * @param type The type * @return The "married" packet. */ - public static byte[] marriageMessage(int type, String charname) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NOTIFY_MARRIAGE.getValue()); - mplew.write(type); // 0: guild, 1: family - mplew.writeMapleAsciiString("> " + charname); //To fix the stupid packet lol + public static Packet marriageMessage(int type, String charname) { + final OutPacket p = OutPacket.create(SendOpcode.NOTIFY_MARRIAGE); + p.writeByte(type); // 0: guild, 1: family + p.writeString("> " + charname); //To fix the stupid packet lol - return mplew.getPacket(); + return p; } /** @@ -7606,14 +6640,12 @@ public class PacketCreator { * @param type The type * @return The "job advance" packet. */ - public static byte[] jobMessage(int type, int job, String charname) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.NOTIFY_JOB_CHANGE.getValue()); - mplew.write(type); - mplew.writeInt(job); //Why fking int? - mplew.writeMapleAsciiString("> " + charname); //To fix the stupid packet lol - - return mplew.getPacket(); + public static Packet jobMessage(int type, int job, String charname) { + OutPacket p = OutPacket.create(SendOpcode.NOTIFY_JOB_CHANGE); + p.writeByte(type); + p.writeInt(job); //Why fking int? + p.writeString("> " + charname); //To fix the stupid packet lol + return p; } /** @@ -7621,37 +6653,33 @@ public class PacketCreator { * @param delay - seconds * @return */ - public static byte[] trembleEffect(int type, int delay) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.FIELD_EFFECT.getValue()); - mplew.write(1); - mplew.write(type); - mplew.writeInt(delay); - return mplew.getPacket(); + public static Packet trembleEffect(int type, int delay) { + final OutPacket p = OutPacket.create(SendOpcode.FIELD_EFFECT); + p.writeByte(1); + p.writeByte(type); + p.writeInt(delay); + return p; } - public static byte[] getEnergy(String info, int amount) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SESSION_VALUE.getValue()); - mplew.writeMapleAsciiString(info); - mplew.writeMapleAsciiString(Integer.toString(amount)); - return mplew.getPacket(); + public static Packet getEnergy(String info, int amount) { + final OutPacket p = OutPacket.create(SendOpcode.SESSION_VALUE); + p.writeString(info); + p.writeString(Integer.toString(amount)); + return p; } - public static byte[] dojoWarpUp() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DOJO_WARP_UP.getValue()); - mplew.write(0); - mplew.write(6); - return mplew.getPacket(); + public static Packet dojoWarpUp() { + final OutPacket p = OutPacket.create(SendOpcode.DOJO_WARP_UP); + p.writeByte(0); + p.writeByte(6); + return p; } - public static byte[] itemExpired(int itemid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(2); - mplew.writeInt(itemid); - return mplew.getPacket(); + public static Packet itemExpired(int itemid) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(2); + p.writeInt(itemid); + return p; } private static String getRightPaddedStr(String in, char padchar, int length) { @@ -7662,138 +6690,127 @@ public class PacketCreator { return builder.toString(); } - public static byte[] MobDamageMobFriendly(MapleMonster mob, int damage, int remainingHp) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.DAMAGE_MONSTER.getValue()); - mplew.writeInt(mob.getObjectId()); - mplew.write(1); // direction ? - mplew.writeInt(damage); - mplew.writeInt(remainingHp); - mplew.writeInt(mob.getMaxHp()); - return mplew.getPacket(); + public static Packet MobDamageMobFriendly(MapleMonster mob, int damage, int remainingHp) { + final OutPacket p = OutPacket.create(SendOpcode.DAMAGE_MONSTER); + p.writeInt(mob.getObjectId()); + p.writeByte(1); // direction ? + p.writeInt(damage); + p.writeInt(remainingHp); + p.writeInt(mob.getMaxHp()); + return p; } - public static byte[] shopErrorMessage(int error, int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(0x0A); - mplew.write(type); - mplew.write(error); - return mplew.getPacket(); + public static Packet shopErrorMessage(int error, int type) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(0x0A); + p.writeByte(type); + p.writeByte(error); + return p; } - private static void addRingInfo(final MaplePacketLittleEndianWriter mplew, MapleCharacter chr) { - mplew.writeShort(chr.getCrushRings().size()); + private static void addRingInfo(OutPacket p, MapleCharacter chr) { + p.writeShort(chr.getCrushRings().size()); for (MapleRing ring : chr.getCrushRings()) { - mplew.writeInt(ring.getPartnerChrId()); - mplew.writeAsciiString(getRightPaddedStr(ring.getPartnerName(), '\0', 13)); - mplew.writeInt(ring.getRingId()); - mplew.writeInt(0); - mplew.writeInt(ring.getPartnerRingId()); - mplew.writeInt(0); + p.writeInt(ring.getPartnerChrId()); + p.writeFixedString(getRightPaddedStr(ring.getPartnerName(), '\0', 13)); + p.writeInt(ring.getRingId()); + p.writeInt(0); + p.writeInt(ring.getPartnerRingId()); + p.writeInt(0); } - mplew.writeShort(chr.getFriendshipRings().size()); + p.writeShort(chr.getFriendshipRings().size()); for (MapleRing ring : chr.getFriendshipRings()) { - mplew.writeInt(ring.getPartnerChrId()); - mplew.writeAsciiString(getRightPaddedStr(ring.getPartnerName(), '\0', 13)); - mplew.writeInt(ring.getRingId()); - mplew.writeInt(0); - mplew.writeInt(ring.getPartnerRingId()); - mplew.writeInt(0); - mplew.writeInt(ring.getItemId()); + p.writeInt(ring.getPartnerChrId()); + p.writeFixedString(getRightPaddedStr(ring.getPartnerName(), '\0', 13)); + p.writeInt(ring.getRingId()); + p.writeInt(0); + p.writeInt(ring.getPartnerRingId()); + p.writeInt(0); + p.writeInt(ring.getItemId()); } if (chr.getPartnerId() > 0) { MapleRing marriageRing = chr.getMarriageRing(); - mplew.writeShort(1); - mplew.writeInt(chr.getRelationshipId()); - mplew.writeInt(chr.getGender() == 0 ? chr.getId() : chr.getPartnerId()); - mplew.writeInt(chr.getGender() == 0 ? chr.getPartnerId() : chr.getId()); - mplew.writeShort((marriageRing != null) ? 3 : 1); + p.writeShort(1); + p.writeInt(chr.getRelationshipId()); + p.writeInt(chr.getGender() == 0 ? chr.getId() : chr.getPartnerId()); + p.writeInt(chr.getGender() == 0 ? chr.getPartnerId() : chr.getId()); + p.writeShort((marriageRing != null) ? 3 : 1); if (marriageRing != null) { - mplew.writeInt(marriageRing.getItemId()); - mplew.writeInt(marriageRing.getItemId()); + p.writeInt(marriageRing.getItemId()); + p.writeInt(marriageRing.getItemId()); } else { - mplew.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) - mplew.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) + p.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) + p.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) } - mplew.writeAsciiString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? chr.getName() : MapleCharacter.getNameById(chr.getPartnerId()), '\0', 13)); - mplew.writeAsciiString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? MapleCharacter.getNameById(chr.getPartnerId()) : chr.getName(), '\0', 13)); + p.writeFixedString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? chr.getName() : MapleCharacter.getNameById(chr.getPartnerId()), '\0', 13)); + p.writeFixedString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? MapleCharacter.getNameById(chr.getPartnerId()) : chr.getName(), '\0', 13)); } else { - mplew.writeShort(0); + p.writeShort(0); } } - public static byte[] finishedSort(int inv) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.GATHER_ITEM_RESULT.getValue()); - mplew.write(0); - mplew.write(inv); - return mplew.getPacket(); + public static Packet finishedSort(int inv) { + OutPacket p = OutPacket.create(SendOpcode.GATHER_ITEM_RESULT); + p.writeByte(0); + p.writeByte(inv); + return p; } - public static byte[] finishedSort2(int inv) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.SORT_ITEM_RESULT.getValue()); - mplew.write(0); - mplew.write(inv); - return mplew.getPacket(); + public static Packet finishedSort2(int inv) { + OutPacket p = OutPacket.create(SendOpcode.SORT_ITEM_RESULT); + p.writeByte(0); + p.writeByte(inv); + return p; } - public static byte[] bunnyPacket() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_STATUS_INFO.getValue()); - mplew.write(9); - mplew.writeAsciiString("Protect the Moon Bunny!!!"); - return mplew.getPacket(); + public static Packet bunnyPacket() { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(9); + p.writeFixedString("Protect the Moon Bunny!!!"); + return p; } - public static byte[] hpqMessage(String text) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.BLOW_WEATHER.getValue()); // not 100% sure - mplew.write(0); - mplew.writeInt(5120016); - mplew.writeAsciiString(text); - return mplew.getPacket(); + public static Packet hpqMessage(String text) { + final OutPacket p = OutPacket.create(SendOpcode.BLOW_WEATHER); // not 100% sure + p.writeByte(0); + p.writeInt(5120016); + p.writeFixedString(text); + return p; } - public static byte[] showEventInstructions() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GMEVENT_INSTRUCTIONS.getValue()); - mplew.write(0); - return mplew.getPacket(); + public static Packet showEventInstructions() { + final OutPacket p = OutPacket.create(SendOpcode.GMEVENT_INSTRUCTIONS); + p.writeByte(0); + return p; } - public static byte[] leftKnockBack() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(2); - mplew.writeShort(SendOpcode.LEFT_KNOCK_BACK.getValue()); - return mplew.getPacket(); + public static Packet leftKnockBack() { + return OutPacket.create(SendOpcode.LEFT_KNOCK_BACK); } - public static byte[] rollSnowBall(boolean entermap, int state, MapleSnowball ball0, MapleSnowball ball1) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SNOWBALL_STATE.getValue()); + public static Packet rollSnowBall(boolean entermap, int state, MapleSnowball ball0, MapleSnowball ball1) { + OutPacket p = OutPacket.create(SendOpcode.SNOWBALL_STATE); if (entermap) { - mplew.skip(21); + p.skip(21); } else { - mplew.write(state);// 0 = move, 1 = roll, 2 is down disappear, 3 is up disappear - mplew.writeInt(ball0.getSnowmanHP() / 75); - mplew.writeInt(ball1.getSnowmanHP() / 75); - mplew.writeShort(ball0.getPosition());//distance snowball down, 84 03 = max - mplew.write(-1); - mplew.writeShort(ball1.getPosition());//distance snowball up, 84 03 = max - mplew.write(-1); + p.writeByte(state);// 0 = move, 1 = roll, 2 is down disappear, 3 is up disappear + p.writeInt(ball0.getSnowmanHP() / 75); + p.writeInt(ball1.getSnowmanHP() / 75); + p.writeShort(ball0.getPosition());//distance snowball down, 84 03 = max + p.writeByte(-1); + p.writeShort(ball1.getPosition());//distance snowball up, 84 03 = max + p.writeByte(-1); } - return mplew.getPacket(); + return p; } - public static byte[] hitSnowBall(int what, int damage) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.HIT_SNOWBALL.getValue()); - mplew.write(what); - mplew.writeInt(damage); - return mplew.getPacket(); + public static Packet hitSnowBall(int what, int damage) { + OutPacket p = OutPacket.create(SendOpcode.HIT_SNOWBALL); + p.writeByte(what); + p.writeInt(damage); + return p; } /** @@ -7807,83 +6824,73 @@ public class PacketCreator { * * @param message */ - public static byte[] snowballMessage(int team, int message) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.SNOWBALL_MESSAGE.getValue()); - mplew.write(team);// 0 is down, 1 is up - mplew.writeInt(message); - return mplew.getPacket(); + public static Packet snowballMessage(int team, int message) { + OutPacket p = OutPacket.create(SendOpcode.SNOWBALL_MESSAGE); + p.writeByte(team);// 0 is down, 1 is up + p.writeInt(message); + return p; } - public static byte[] coconutScore(int team1, int team2) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.COCONUT_SCORE.getValue()); - mplew.writeShort(team1); - mplew.writeShort(team2); - return mplew.getPacket(); + public static Packet coconutScore(int team1, int team2) { + OutPacket p = OutPacket.create(SendOpcode.COCONUT_SCORE); + p.writeShort(team1); + p.writeShort(team2); + return p; } - public static byte[] hitCoconut(boolean spawn, int id, int type) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.COCONUT_HIT.getValue()); + public static Packet hitCoconut(boolean spawn, int id, int type) { + OutPacket p = OutPacket.create(SendOpcode.COCONUT_HIT); if (spawn) { - mplew.writeShort(-1); - mplew.writeShort(5000); - mplew.write(0); + p.writeShort(-1); + p.writeShort(5000); + p.writeByte(0); } else { - mplew.writeShort(id); - mplew.writeShort(1000);//delay till you can attack again! - mplew.write(type); // What action to do for the coconut. + p.writeShort(id); + p.writeShort(1000);//delay till you can attack again! + p.writeByte(type); // What action to do for the coconut. } - return mplew.getPacket(); + return p; } - public static byte[] customPacket(String packet) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.write(HexTool.getByteArrayFromHexString(packet)); - return mplew.getPacket(); + public static Packet customPacket(String packet) { + OutPacket p = new ByteBufOutPacket(); + p.writeBytes(HexTool.getByteArrayFromHexString(packet)); + return p; } - public static byte[] customPacket(byte[] packet) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(packet.length); - mplew.write(packet); - return mplew.getPacket(); + public static Packet customPacket(byte[] packet) { + OutPacket p = new ByteBufOutPacket(); + p.writeBytes(packet); + return p; } - public static byte[] spawnGuide(boolean spawn) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.SPAWN_GUIDE.getValue()); - if (spawn) { - mplew.write(1); - } else { - mplew.write(0); - } - return mplew.getPacket(); + public static Packet spawnGuide(boolean spawn) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_GUIDE); + p.writeBool(spawn); + return p; } - public static byte[] talkGuide(String talk) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.TALK_GUIDE.getValue()); - mplew.write(0); - mplew.writeMapleAsciiString(talk); - mplew.write(new byte[]{(byte) 0xC8, 0, 0, 0, (byte) 0xA0, (byte) 0x0F, 0, 0}); - return mplew.getPacket(); + public static Packet talkGuide(String talk) { + final OutPacket p = OutPacket.create(SendOpcode.TALK_GUIDE); + p.writeByte(0); + p.writeString(talk); + p.writeBytes(new byte[]{(byte) 0xC8, 0, 0, 0, (byte) 0xA0, (byte) 0x0F, 0, 0}); + return p; } - public static byte[] guideHint(int hint) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(11); - mplew.writeShort(SendOpcode.TALK_GUIDE.getValue()); - mplew.write(1); - mplew.writeInt(hint); - mplew.writeInt(7000); - return mplew.getPacket(); + public static Packet guideHint(int hint) { + OutPacket p = OutPacket.create(SendOpcode.TALK_GUIDE); + p.writeByte(1); + p.writeInt(hint); + p.writeInt(7000); + return p; } - public static void addCashItemInformation(final MaplePacketLittleEndianWriter mplew, Item item, int accountId) { - addCashItemInformation(mplew, item, accountId, null); + public static void addCashItemInformation(OutPacket p, Item item, int accountId) { + addCashItemInformation(p, item, accountId, null); } - public static void addCashItemInformation(final MaplePacketLittleEndianWriter mplew, Item item, int accountId, String giftMessage) { + public static void addCashItemInformation(OutPacket p, Item item, int accountId, String giftMessage) { boolean isGift = giftMessage != null; boolean isRing = false; Equip equip = null; @@ -7891,65 +6898,62 @@ public class PacketCreator { equip = (Equip) item; isRing = equip.getRingId() > -1; } - mplew.writeLong(item.getPetId() > -1 ? item.getPetId() : isRing ? equip.getRingId() : item.getCashId()); + p.writeLong(item.getPetId() > -1 ? item.getPetId() : isRing ? equip.getRingId() : item.getCashId()); if (!isGift) { - mplew.writeInt(accountId); - mplew.writeInt(0); + p.writeInt(accountId); + p.writeInt(0); } - mplew.writeInt(item.getItemId()); + p.writeInt(item.getItemId()); if (!isGift) { - mplew.writeInt(item.getSN()); - mplew.writeShort(item.getQuantity()); + p.writeInt(item.getSN()); + p.writeShort(item.getQuantity()); } - mplew.writeAsciiString(StringUtil.getRightPaddedStr(item.getGiftFrom(), '\0', 13)); + p.writeFixedString(StringUtil.getRightPaddedStr(item.getGiftFrom(), '\0', 13)); if (isGift) { - mplew.writeAsciiString(StringUtil.getRightPaddedStr(giftMessage, '\0', 73)); + p.writeFixedString(StringUtil.getRightPaddedStr(giftMessage, '\0', 73)); return; } - addExpirationTime(mplew, item.getExpiration()); - mplew.writeLong(0); + addExpirationTime(p, item.getExpiration()); + p.writeLong(0); } - public static byte[] showWishList(MapleCharacter mc, boolean update) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + public static Packet showWishList(MapleCharacter mc, boolean update) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); if (update) { - mplew.write(0x55); + p.writeByte(0x55); } else { - mplew.write(0x4F); + p.writeByte(0x4F); } for (int sn : mc.getCashShop().getWishList()) { - mplew.writeInt(sn); + p.writeInt(sn); } for (int i = mc.getCashShop().getWishList().size(); i < 10; i++) { - mplew.writeInt(0); + p.writeInt(0); } - return mplew.getPacket(); + return p; } - public static byte[] showBoughtCashItem(Item item, int accountId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + public static Packet showBoughtCashItem(Item item, int accountId) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); - mplew.write(0x57); - addCashItemInformation(mplew, item, accountId); + p.writeByte(0x57); + addCashItemInformation(p, item, accountId); - return mplew.getPacket(); + return p; } - public static byte[] showBoughtCashRing(Item ring, String recipient, int accountId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - mplew.write(0x87); - addCashItemInformation(mplew, ring, accountId); - mplew.writeMapleAsciiString(recipient); - mplew.writeInt(ring.getItemId()); - mplew.writeShort(1); //quantity - return mplew.getPacket(); + public static Packet showBoughtCashRing(Item ring, String recipient, int accountId) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + p.writeByte(0x87); + addCashItemInformation(p, ring, accountId); + p.writeString(recipient); + p.writeInt(ring.getItemId()); + p.writeShort(1); //quantity + return p; } /* @@ -8004,152 +7008,144 @@ public class PacketCreator { * E7 = lol sorry for the inconvenience, eh? * E8 = cannot purchase by anyone under 7 */ - public static byte[] showCashShopMessage(byte message) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(4); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - - mplew.write(0x5C); - mplew.write(message); - - return mplew.getPacket(); + public static Packet showCashShopMessage(byte message) { + OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + p.writeByte(0x5C); + p.writeByte(message); + return p; } - public static byte[] showCashInventory(MapleClient c) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + public static Packet showCashInventory(MapleClient c) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); - mplew.write(0x4B); - mplew.writeShort(c.getPlayer().getCashShop().getInventory().size()); + p.writeByte(0x4B); + p.writeShort(c.getPlayer().getCashShop().getInventory().size()); for (Item item : c.getPlayer().getCashShop().getInventory()) { - addCashItemInformation(mplew, item, c.getAccID()); + addCashItemInformation(p, item, c.getAccID()); } - mplew.writeShort(c.getPlayer().getStorage().getSlots()); - mplew.writeShort(c.getCharacterSlots()); + p.writeShort(c.getPlayer().getStorage().getSlots()); + p.writeShort(c.getCharacterSlots()); - return mplew.getPacket(); + return p; } - public static byte[] showGifts(List> gifts) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + public static Packet showGifts(List> gifts) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); - mplew.write(0x4D); - mplew.writeShort(gifts.size()); + p.writeByte(0x4D); + p.writeShort(gifts.size()); for (Pair gift : gifts) { - addCashItemInformation(mplew, gift.getLeft(), 0, gift.getRight()); + addCashItemInformation(p, gift.getLeft(), 0, gift.getRight()); } - return mplew.getPacket(); + return p; } - public static byte[] showGiftSucceed(String to, CashItem item) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + public static Packet showGiftSucceed(String to, CashItem item) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); - mplew.write(0x5E); //0x5D, Couldn't be sent - mplew.writeMapleAsciiString(to); - mplew.writeInt(item.getItemId()); - mplew.writeShort(item.getCount()); - mplew.writeInt(item.getPrice()); + p.writeByte(0x5E); //0x5D, Couldn't be sent + p.writeString(to); + p.writeInt(item.getItemId()); + p.writeShort(item.getCount()); + p.writeInt(item.getPrice()); - return mplew.getPacket(); + return p; } - public static byte[] showBoughtInventorySlots(int type, short slots) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + public static Packet showBoughtInventorySlots(int type, short slots) { + OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); - mplew.write(0x60); - mplew.write(type); - mplew.writeShort(slots); + p.writeByte(0x60); + p.writeByte(type); + p.writeShort(slots); - return mplew.getPacket(); + return p; } - public static byte[] showBoughtStorageSlots(short slots) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + public static Packet showBoughtStorageSlots(short slots) { + OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); - mplew.write(0x62); - mplew.writeShort(slots); + p.writeByte(0x62); + p.writeShort(slots); - return mplew.getPacket(); + return p; } - public static byte[] showBoughtCharacterSlot(short slots) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + public static Packet showBoughtCharacterSlot(short slots) { + OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); - mplew.write(0x64); - mplew.writeShort(slots); + p.writeByte(0x64); + p.writeShort(slots); - return mplew.getPacket(); + return p; } - public static byte[] takeFromCashInventory(Item item) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + public static Packet takeFromCashInventory(Item item) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); - mplew.write(0x68); - mplew.writeShort(item.getPosition()); - addItemInfo(mplew, item, true); + p.writeByte(0x68); + p.writeShort(item.getPosition()); + addItemInfo(p, item, true); - return mplew.getPacket(); + return p; } - public static byte[] deleteCashItem(Item item) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - mplew.write(0x6C); - mplew.writeLong(item.getCashId()); - return mplew.getPacket(); + public static Packet deleteCashItem(Item item) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + p.writeByte(0x6C); + p.writeLong(item.getCashId()); + return p; } - public static byte[] refundCashItem(Item item, int maplePoints) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); - mplew.write(0x85); - mplew.writeLong(item.getCashId()); - mplew.writeInt(maplePoints); - return mplew.getPacket(); + public static Packet refundCashItem(Item item, int maplePoints) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + p.writeByte(0x85); + p.writeLong(item.getCashId()); + p.writeInt(maplePoints); + return p; } - public static byte[] putIntoCashInventory(Item item, int accountId) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); + public static Packet putIntoCashInventory(Item item, int accountId) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); - mplew.write(0x6A); - addCashItemInformation(mplew, item, accountId); + p.writeByte(0x6A); + addCashItemInformation(p, item, accountId); - return mplew.getPacket(); + return p; } - public static byte[] openCashShop(MapleClient c, boolean mts) throws Exception { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(mts ? SendOpcode.SET_ITC.getValue() : SendOpcode.SET_CASH_SHOP.getValue()); + public static Packet openCashShop(MapleClient c, boolean mts) throws Exception { + final OutPacket p = OutPacket.create(mts ? SendOpcode.SET_ITC : SendOpcode.SET_CASH_SHOP); - addCharacterInfo(mplew, c.getPlayer()); + addCharacterInfo(p, c.getPlayer()); if (!mts) { - mplew.write(1); + p.writeByte(1); } - mplew.writeMapleAsciiString(c.getAccountName()); + p.writeString(c.getAccountName()); if (mts) { - mplew.write(new byte[]{(byte) 0x88, 19, 0, 0, 7, 0, 0, 0, (byte) 0xF4, 1, 0, 0, (byte) 0x18, 0, 0, 0, (byte) 0xA8, 0, 0, 0, (byte) 0x70, (byte) 0xAA, (byte) 0xA7, (byte) 0xC5, (byte) 0x4E, (byte) 0xC1, (byte) 0xCA, 1}); + p.writeBytes(new byte[]{(byte) 0x88, 19, 0, 0, + 7, 0, 0, 0, + (byte) 0xF4, 1, 0, 0, + (byte) 0x18, 0, 0, 0, + (byte) 0xA8, 0, 0, 0, + (byte) 0x70, (byte) 0xAA, (byte) 0xA7, (byte) 0xC5, + (byte) 0x4E, (byte) 0xC1, (byte) 0xCA, 1}); } else { - mplew.writeInt(0); + p.writeInt(0); List lsci = CashItemFactory.getSpecialCashItems(); - mplew.writeShort(lsci.size());//Guess what + p.writeShort(lsci.size());//Guess what for (SpecialCashItem sci : lsci) { - mplew.writeInt(sci.getSN()); - mplew.writeInt(sci.getModifier()); - mplew.write(sci.getInfo()); + p.writeInt(sci.getSN()); + p.writeInt(sci.getModifier()); + p.writeByte(sci.getInfo()); } - mplew.skip(121); + p.skip(121); List> mostSellers = c.getWorldServer().getMostSellerCashItems(); for (int i = 1; i <= 8; i++) { @@ -8157,163 +7153,146 @@ public class PacketCreator { for (int j = 0; j < 2; j++) { for (Integer snid : mostSellersTab) { - mplew.writeInt(i); - mplew.writeInt(j); - mplew.writeInt(snid); + p.writeInt(i); + p.writeInt(j); + p.writeInt(snid); } } } - mplew.writeInt(0); - mplew.writeShort(0); - mplew.write(0); - mplew.writeInt(75); + p.writeInt(0); + p.writeShort(0); + p.writeByte(0); + p.writeInt(75); } - return mplew.getPacket(); + return p; } - public static byte[] sendVegaScroll(int op) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.VEGA_SCROLL.getValue()); - mplew.write(op); - return mplew.getPacket(); + public static Packet sendVegaScroll(int op) { + OutPacket p = OutPacket.create(SendOpcode.VEGA_SCROLL); + p.writeByte(op); + return p; } - public static byte[] resetForcedStats() { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(2); - mplew.writeShort(SendOpcode.FORCED_STAT_RESET.getValue()); - return mplew.getPacket(); + public static Packet resetForcedStats() { + return OutPacket.create(SendOpcode.FORCED_STAT_RESET); } - public static byte[] showCombo(int count) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.SHOW_COMBO.getValue()); - mplew.writeInt(count); - return mplew.getPacket(); + public static Packet showCombo(int count) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_COMBO); + p.writeInt(count); + return p; } - public static byte[] earnTitleMessage(String msg) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SCRIPT_PROGRESS_MESSAGE.getValue()); - mplew.writeMapleAsciiString(msg); - return mplew.getPacket(); + public static Packet earnTitleMessage(String msg) { + final OutPacket p = OutPacket.create(SendOpcode.SCRIPT_PROGRESS_MESSAGE); + p.writeString(msg); + return p; } - public static byte[] CPUpdate(boolean party, int curCP, int totalCP, int team) { // CPQ - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + public static Packet CPUpdate(boolean party, int curCP, int totalCP, int team) { // CPQ + final OutPacket p; if (!party) { - mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_OBTAINED_CP.getValue()); + p = OutPacket.create(SendOpcode.MONSTER_CARNIVAL_OBTAINED_CP); } else { - mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_PARTY_CP.getValue()); - mplew.write(team); // team? + p = OutPacket.create(SendOpcode.MONSTER_CARNIVAL_PARTY_CP); + p.writeByte(team); // team? } - mplew.writeShort(curCP); - mplew.writeShort(totalCP); - return mplew.getPacket(); + p.writeShort(curCP); + p.writeShort(totalCP); + return p; } - public static byte[] CPQMessage(byte message) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(3); - mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_MESSAGE.getValue()); - mplew.write(message); // Message - return mplew.getPacket(); + public static Packet CPQMessage(byte message) { + OutPacket p = OutPacket.create(SendOpcode.MONSTER_CARNIVAL_MESSAGE); + p.writeByte(message); // Message + return p; } - public static byte[] playerSummoned(String name, int tab, int number) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_SUMMON.getValue()); - mplew.write(tab); - mplew.write(number); - mplew.writeMapleAsciiString(name); - return mplew.getPacket(); + public static Packet playerSummoned(String name, int tab, int number) { + OutPacket p = OutPacket.create(SendOpcode.MONSTER_CARNIVAL_SUMMON); + p.writeByte(tab); + p.writeByte(number); + p.writeString(name); + return p; } - public static byte[] playerDiedMessage(String name, int lostCP, int team) { // CPQ - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - - mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_DIED.getValue()); - mplew.write(team); // team - mplew.writeMapleAsciiString(name); - mplew.write(lostCP); - return mplew.getPacket(); + public static Packet playerDiedMessage(String name, int lostCP, int team) { // CPQ + OutPacket p = OutPacket.create(SendOpcode.MONSTER_CARNIVAL_DIED); + p.writeByte(team); // team + p.writeString(name); + p.writeByte(lostCP); + return p; } - public static byte[] startMonsterCarnival(MapleCharacter chr, int team, int oposition) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(25); - mplew.writeShort(SendOpcode.MONSTER_CARNIVAL_START.getValue()); - mplew.write(team); // team - mplew.writeShort(chr.getCP()); // Obtained CP - Used CP - mplew.writeShort(chr.getTotalCP()); // Total Obtained CP - mplew.writeShort(chr.getMonsterCarnival().getCP(team)); // Obtained CP - Used CP of the team - mplew.writeShort(chr.getMonsterCarnival().getTotalCP(team)); // Total Obtained CP of the team - mplew.writeShort(chr.getMonsterCarnival().getCP(oposition)); // Obtained CP - Used CP of the team - mplew.writeShort(chr.getMonsterCarnival().getTotalCP(oposition)); // Total Obtained CP of the team - mplew.writeShort(0); // Probably useless nexon shit - mplew.writeLong(0); // Probably useless nexon shit - return mplew.getPacket(); + public static Packet startMonsterCarnival(MapleCharacter chr, int team, int opposition) { + OutPacket p = OutPacket.create(SendOpcode.MONSTER_CARNIVAL_START); + p.writeByte(team); // team + p.writeShort(chr.getCP()); // Obtained CP - Used CP + p.writeShort(chr.getTotalCP()); // Total Obtained CP + p.writeShort(chr.getMonsterCarnival().getCP(team)); // Obtained CP - Used CP of the team + p.writeShort(chr.getMonsterCarnival().getTotalCP(team)); // Total Obtained CP of the team + p.writeShort(chr.getMonsterCarnival().getCP(opposition)); // Obtained CP - Used CP of the team + p.writeShort(chr.getMonsterCarnival().getTotalCP(opposition)); // Total Obtained CP of the team + p.writeShort(0); // Probably useless nexon shit + p.writeLong(0); // Probably useless nexon shit + return p; } - public static byte[] sheepRanchInfo(byte wolf, byte sheep) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHEEP_RANCH_INFO.getValue()); - mplew.write(wolf); - mplew.write(sheep); - return mplew.getPacket(); + public static Packet sheepRanchInfo(byte wolf, byte sheep) { + final OutPacket p = OutPacket.create(SendOpcode.SHEEP_RANCH_INFO); + p.writeByte(wolf); + p.writeByte(sheep); + return p; } //Know what this is? ?? >=) - public static byte[] sheepRanchClothes(int id, byte clothes) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHEEP_RANCH_CLOTHES.getValue()); - mplew.writeInt(id); //Character id - mplew.write(clothes); //0 = sheep, 1 = wolf, 2 = Spectator (wolf without wool) - return mplew.getPacket(); + public static Packet sheepRanchClothes(int id, byte clothes) { + final OutPacket p = OutPacket.create(SendOpcode.SHEEP_RANCH_CLOTHES); + p.writeInt(id); //Character id + p.writeByte(clothes); //0 = sheep, 1 = wolf, 2 = Spectator (wolf without wool) + return p; } - public static byte[] incubatorResult() {//lol - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(8); - mplew.writeShort(SendOpcode.INCUBATOR_RESULT.getValue()); - mplew.skip(6); - return mplew.getPacket(); + public static Packet incubatorResult() {//lol + OutPacket p = OutPacket.create(SendOpcode.INCUBATOR_RESULT); + p.skip(6); + return p; } - public static byte[] pyramidGauge(int gauge) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(6); - mplew.writeShort(SendOpcode.PYRAMID_GAUGE.getValue()); - mplew.writeInt(gauge); - return mplew.getPacket(); + public static Packet pyramidGauge(int gauge) { + OutPacket p = OutPacket.create(SendOpcode.PYRAMID_GAUGE); + p.writeInt(gauge); + return p; } // f2 - public static byte[] pyramidScore(byte score, int exp) {//Type cannot be higher than 4 (Rank D), otherwise you'll crash - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(7); - mplew.writeShort(SendOpcode.PYRAMID_SCORE.getValue()); - mplew.write(score); - mplew.writeInt(exp); - return mplew.getPacket(); + public static Packet pyramidScore(byte score, int exp) {//Type cannot be higher than 4 (Rank D), otherwise you'll crash + OutPacket p = OutPacket.create(SendOpcode.PYRAMID_SCORE); + p.writeByte(score); + p.writeInt(exp); + return p; } - public static byte[] spawnDragon(MapleDragon dragon) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPAWN_DRAGON.getValue()); - mplew.writeInt(dragon.getOwner().getId());//objectid = owner id - mplew.writeShort(dragon.getPosition().x); - mplew.writeShort(0); - mplew.writeShort(dragon.getPosition().y); - mplew.writeShort(0); - mplew.write(dragon.getStance()); - mplew.write(0); - mplew.writeShort(dragon.getOwner().getJob().getId()); - return mplew.getPacket(); + public static Packet spawnDragon(MapleDragon dragon) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_DRAGON); + p.writeInt(dragon.getOwner().getId());//objectid = owner id + p.writeShort(dragon.getPosition().x); + p.writeShort(0); + p.writeShort(dragon.getPosition().y); + p.writeShort(0); + p.writeByte(dragon.getStance()); + p.writeByte(0); + p.writeShort(dragon.getOwner().getJob().getId()); + return p; } - public static byte[] moveDragon(MapleDragon dragon, Point startPos, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.MOVE_DRAGON.getValue()); - mplew.writeInt(dragon.getOwner().getId()); - mplew.writePos(startPos); - rebroadcastMovementList(mplew, movementSlea, movementDataLength); - return mplew.getPacket(); + public static Packet moveDragon(MapleDragon dragon, Point startPos, SeekableLittleEndianAccessor movementSlea, long movementDataLength) { + final OutPacket p = OutPacket.create(SendOpcode.MOVE_DRAGON); + p.writeInt(dragon.getOwner().getId()); + p.writePos(startPos); + rebroadcastMovementList(p, movementSlea, movementDataLength); + return p; } /** @@ -8322,11 +7301,10 @@ public class PacketCreator { * @param charid - Needs the specific Character ID * @return The packet */ - public static byte[] removeDragon(int chrid) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.REMOVE_DRAGON.getValue()); - mplew.writeInt(chrid); - return mplew.getPacket(); + public static Packet removeDragon(int chrId) { + OutPacket p = OutPacket.create(SendOpcode.REMOVE_DRAGON); + p.writeInt(chrId); + return p; } /** @@ -8368,73 +7346,54 @@ public class PacketCreator { return p; } - private static byte[] MassacreResult(byte nRank, int nIncExp) { + private static Packet MassacreResult(byte nRank, int nIncExp) { //CField_MassacreResult__OnMassacreResult @ 0x005617C5 - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PYRAMID_SCORE.getValue()); //MASSACRERESULT | 0x009E - mplew.write(nRank); //(0 - S) (1 - A) (2 - B) (3 - C) (4 - D) ( Else - Crash ) - mplew.writeInt(nIncExp); - return mplew.getPacket(); - } - - private static byte[] GuildBoss_HealerMove(short nY) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_BOSS_HEALER_MOVE.getValue()); - mplew.writeShort(nY); //New Y Position - return mplew.getPacket(); + final OutPacket p = OutPacket.create(SendOpcode.PYRAMID_SCORE); //MASSACRERESULT | 0x009E + p.writeByte(nRank); //(0 - S) (1 - A) (2 - B) (3 - C) (4 - D) ( Else - Crash ) + p.writeInt(nIncExp); + return p; } - private static byte[] GuildBoss_PulleyStateChange(byte nState) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.GUILD_BOSS_PULLEY_STATE_CHANGE.getValue()); - mplew.write(nState); - return mplew.getPacket(); + private static Packet Tournament__Tournament(byte nState, byte nSubState) { + final OutPacket p = OutPacket.create(SendOpcode.TOURNAMENT); + p.writeByte(nState); + p.writeByte(nSubState); + return p; } - private static byte[] Tournament__Tournament(byte nState, byte nSubState) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.TOURNAMENT.getValue()); - mplew.write(nState); - mplew.write(nSubState); - return mplew.getPacket(); + private static Packet Tournament__MatchTable(byte nState, byte nSubState) { + final OutPacket p = OutPacket.create(SendOpcode.TOURNAMENT_MATCH_TABLE); //Prompts CMatchTableDlg Modal + return p; } - private static byte[] Tournament__MatchTable(byte nState, byte nSubState) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.TOURNAMENT_MATCH_TABLE.getValue()); //Prompts CMatchTableDlg Modal - return mplew.getPacket(); - } - - private static byte[] Tournament__SetPrize(byte bSetPrize, byte bHasPrize, int nItemID1, int nItemID2) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.TOURNAMENT_SET_PRIZE.getValue()); + private static Packet Tournament__SetPrize(byte bSetPrize, byte bHasPrize, int nItemID1, int nItemID2) { + final OutPacket p = OutPacket.create(SendOpcode.TOURNAMENT_SET_PRIZE); //0 = "You have failed the set the prize. Please check the item number again." //1 = "You have successfully set the prize." - mplew.write(bSetPrize); + p.writeByte(bSetPrize); - mplew.write(bHasPrize); + p.writeByte(bHasPrize); if (bHasPrize != 0) { - mplew.writeInt(nItemID1); - mplew.writeInt(nItemID2); + p.writeInt(nItemID1); + p.writeInt(nItemID2); } - return mplew.getPacket(); + return p; } - private static byte[] Tournament__UEW(byte nState) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.TOURNAMENT_UEW.getValue()); + private static Packet Tournament__UEW(byte nState) { + final OutPacket p = OutPacket.create(SendOpcode.TOURNAMENT_UEW); //Is this a bitflag o.o ? //2 = "You have reached the finals by default." //4 = "You have reached the semifinals by default." //8 or 16 = "You have reached the round of %n by default." | Encodes nState as %n ?! - mplew.write(nState); + p.writeByte(nState); - return mplew.getPacket(); + return p; } } diff --git a/src/main/java/tools/packets/Fishing.java b/src/main/java/tools/packets/Fishing.java index b3a883b3c8..32cd43a4c3 100644 --- a/src/main/java/tools/packets/Fishing.java +++ b/src/main/java/tools/packets/Fishing.java @@ -119,7 +119,7 @@ public class Fishing { chr.getMap().dropMessage(6, chr.getName() + " found " + rewardStr); } - chr.announce(PacketCreator.showInfo(fishingEffect)); + chr.sendPacket(PacketCreator.showInfo(fishingEffect)); chr.getMap().broadcastMessage(chr, PacketCreator.showForeignInfo(chr.getId(), fishingEffect), false); } diff --git a/src/main/java/tools/packets/Wedding.java b/src/main/java/tools/packets/WeddingPackets.java similarity index 63% rename from src/main/java/tools/packets/Wedding.java rename to src/main/java/tools/packets/WeddingPackets.java index ab688c0e1c..cd0455d470 100644 --- a/src/main/java/tools/packets/Wedding.java +++ b/src/main/java/tools/packets/WeddingPackets.java @@ -8,9 +8,11 @@ package tools.packets; import client.MapleCharacter; import client.inventory.Item; +import net.opcodes.SendOpcode; +import net.packet.OutPacket; +import net.packet.Packet; import tools.PacketCreator; import tools.StringUtil; -import tools.data.output.MaplePacketLittleEndianWriter; import java.util.ArrayList; import java.util.List; @@ -22,15 +24,7 @@ import java.util.List; * * Wishlists edited by Drago (Dragohe4rt) */ -public class Wedding extends PacketCreator { - private static final short MARRIAGE_REQUEST = 0x48; - private static final short MARRIAGE_RESULT = 0x49; - private static final short WEDDING_GIFT_RESULT = 0x4A; - private static final short NOTIFY_MARRIED_PARTNER_MAP_TRANSFER = 0x4B; - private static final short WEDDING_PHOTO = 0x2B; - private static final short WEDDING_PROGRESS = 0x140; - private static final short WEDDING_CEREMONY_END = 0x141; - +public class WeddingPackets extends PacketCreator { /* 00000000 CWeddingMan struc ; (sizeof=0x104) 00000000 vfptr dd ? ; offset @@ -205,13 +199,12 @@ public class Wedding extends PacketCreator { * @param playerid * @return mplew */ - public static byte[] OnMarriageRequest(String name, int playerid) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(MARRIAGE_REQUEST); - mplew.write(0); //mode, 0 = engage, 1 = cancel, 2 = answer.. etc - mplew.writeMapleAsciiString(name); // name - mplew.writeInt(playerid); // playerid - return mplew.getPacket(); + public static Packet onMarriageRequest(String name, int playerid) { + OutPacket p = OutPacket.create(SendOpcode.MARRIAGE_REQUEST); + p.writeByte(0); //mode, 0 = engage, 1 = cancel, 2 = answer.. etc + p.writeString(name); // name + p.writeInt(playerid); // playerid + return p; } /** @@ -234,38 +227,37 @@ public class Wedding extends PacketCreator { * @param m_dwUsers The List of all MapleCharacter guests within the current cake map to be encoded * @return mplew (MaplePacket) Byte array to be converted and read for byte[]->ImageIO */ - public static byte[] OnTakePhoto(String ReservedGroomName, String ReservedBrideName, int m_dwField, List m_dwUsers) { // OnIFailedAtWeddingPhotos - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(WEDDING_PHOTO); // v53 header, convert -> v83 - mplew.writeMapleAsciiString(ReservedGroomName); - mplew.writeMapleAsciiString(ReservedBrideName); - mplew.writeInt(m_dwField); // field id? - mplew.writeInt(m_dwUsers.size()); + public static Packet onTakePhoto(String ReservedGroomName, String ReservedBrideName, int m_dwField, List m_dwUsers) { // OnIFailedAtWeddingPhotos + OutPacket p = OutPacket.create(SendOpcode.WEDDING_PHOTO);// v53 header, convert -> v83 + p.writeString(ReservedGroomName); + p.writeString(ReservedBrideName); + p.writeInt(m_dwField); // field id? + p.writeInt(m_dwUsers.size()); for (MapleCharacter guest : m_dwUsers) { // Begin Avatar Encoding - addCharLook(mplew, guest, false); // CUser::EncodeAvatar - mplew.writeInt(30000); // v20 = *(_DWORD *)(v13 + 2192) -- new groom marriage ID?? - mplew.writeInt(30000); // v20 = *(_DWORD *)(v13 + 2192) -- new bride marriage ID?? - mplew.writeMapleAsciiString(guest.getName()); - mplew.writeMapleAsciiString(guest.getGuildId() > 0 && guest.getGuild() != null ? guest.getGuild().getName() : ""); - mplew.writeShort(guest.getGuildId() > 0 && guest.getGuild() != null ? guest.getGuild().getLogoBG() : 0); - mplew.write(guest.getGuildId() > 0 && guest.getGuild() != null ? guest.getGuild().getLogoBGColor() : 0); - mplew.writeShort(guest.getGuildId() > 0 && guest.getGuild() != null ? guest.getGuild().getLogo() : 0); - mplew.write(guest.getGuildId() > 0 && guest.getGuild() != null ? guest.getGuild().getLogoColor() : 0); - mplew.writeShort(guest.getPosition().x); // v18 = *(_DWORD *)(v13 + 3204); - mplew.writeShort(guest.getPosition().y); // v20 = *(_DWORD *)(v13 + 3208); + addCharLook(p, guest, false); // CUser::EncodeAvatar + p.writeInt(30000); // v20 = *(_DWORD *)(v13 + 2192) -- new groom marriage ID?? + p.writeInt(30000); // v20 = *(_DWORD *)(v13 + 2192) -- new bride marriage ID?? + p.writeString(guest.getName()); + p.writeString(guest.getGuildId() > 0 && guest.getGuild() != null ? guest.getGuild().getName() : ""); + p.writeShort(guest.getGuildId() > 0 && guest.getGuild() != null ? guest.getGuild().getLogoBG() : 0); + p.writeByte(guest.getGuildId() > 0 && guest.getGuild() != null ? guest.getGuild().getLogoBGColor() : 0); + p.writeShort(guest.getGuildId() > 0 && guest.getGuild() != null ? guest.getGuild().getLogo() : 0); + p.writeByte(guest.getGuildId() > 0 && guest.getGuild() != null ? guest.getGuild().getLogoColor() : 0); + p.writeShort(guest.getPosition().x); // v18 = *(_DWORD *)(v13 + 3204); + p.writeShort(guest.getPosition().y); // v20 = *(_DWORD *)(v13 + 3208); // Begin Screenshot Encoding - mplew.write(1); // // if ( *(_DWORD *)(v13 + 288) ) { COutPacket::Encode1(&thisa, v20); + p.writeByte(1); // // if ( *(_DWORD *)(v13 + 288) ) { COutPacket::Encode1(&thisa, v20); // CPet::EncodeScreenShotPacket(*(CPet **)(v13 + 288), &thisa); - mplew.writeInt(1); // dwTemplateID - mplew.writeMapleAsciiString(guest.getName()); // m_sName - mplew.writeShort(guest.getPosition().x); // m_ptCurPos.x - mplew.writeShort(guest.getPosition().y); // m_ptCurPos.y - mplew.write(guest.getStance()); // guest.m_bMoveAction + p.writeInt(1); // dwTemplateID + p.writeString(guest.getName()); // m_sName + p.writeShort(guest.getPosition().x); // m_ptCurPos.x + p.writeShort(guest.getPosition().y); // m_ptCurPos.y + p.writeByte(guest.getStance()); // guest.m_bMoveAction } - return mplew.getPacket(); + return p; } /** @@ -276,25 +268,24 @@ public class Wedding extends PacketCreator { * @param wedding * @return mplew */ - public static byte[] OnMarriageResult(int marriageId, MapleCharacter chr, boolean wedding) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(MARRIAGE_RESULT); - mplew.write(11); - mplew.writeInt(marriageId); - mplew.writeInt(chr.getGender() == 0 ? chr.getId() : chr.getPartnerId()); - mplew.writeInt(chr.getGender() == 0 ? chr.getPartnerId() : chr.getId()); - mplew.writeShort(wedding ? 3 : 1); + public static Packet OnMarriageResult(int marriageId, MapleCharacter chr, boolean wedding) { + OutPacket p = OutPacket.create(SendOpcode.MARRIAGE_RESULT); + p.writeByte(11); + p.writeInt(marriageId); + p.writeInt(chr.getGender() == 0 ? chr.getId() : chr.getPartnerId()); + p.writeInt(chr.getGender() == 0 ? chr.getPartnerId() : chr.getId()); + p.writeShort(wedding ? 3 : 1); if (wedding) { - mplew.writeInt(chr.getMarriageItemId()); - mplew.writeInt(chr.getMarriageItemId()); + p.writeInt(chr.getMarriageItemId()); + p.writeInt(chr.getMarriageItemId()); } else { - mplew.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) - mplew.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) + p.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) + p.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) } - mplew.writeAsciiString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? chr.getName() : MapleCharacter.getNameById(chr.getPartnerId()), '\0', 13)); - mplew.writeAsciiString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? MapleCharacter.getNameById(chr.getPartnerId()) : chr.getName(), '\0', 13)); + p.writeFixedString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? chr.getName() : MapleCharacter.getNameById(chr.getPartnerId()), '\0', 13)); + p.writeFixedString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? MapleCharacter.getNameById(chr.getPartnerId()) : chr.getName(), '\0', 13)); - return mplew.getPacket(); + return p; } /** @@ -303,15 +294,14 @@ public class Wedding extends PacketCreator { * @param msg * @return mplew */ - public static byte[] OnMarriageResult(final byte msg) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(MARRIAGE_RESULT); - mplew.write(msg); + public static Packet OnMarriageResult(final byte msg) { + OutPacket p = OutPacket.create(SendOpcode.MARRIAGE_RESULT); + p.writeByte(msg); if (msg == 36) { - mplew.write(1); - mplew.writeMapleAsciiString("You are now engaged."); + p.writeByte(1); + p.writeString("You are now engaged."); } - return mplew.getPacket(); + return p; } /** @@ -321,13 +311,11 @@ public class Wedding extends PacketCreator { * @param mapid * @return mplew */ - public static byte[] OnNotifyWeddingPartnerTransfer(int partner, int mapid) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(NOTIFY_MARRIED_PARTNER_MAP_TRANSFER); - mplew.writeInt(mapid); - mplew.writeInt(partner); - - return mplew.getPacket(); + public static Packet OnNotifyWeddingPartnerTransfer(int partner, int mapid) { + OutPacket p = OutPacket.create(SendOpcode.NOTIFY_MARRIED_PARTNER_MAP_TRANSFER); + p.writeInt(mapid); + p.writeInt(partner); + return p; } /** @@ -335,21 +323,20 @@ public class Wedding extends PacketCreator { * CField_Wedding::OnWeddingProgress - Stages * CField_Wedding::OnWeddingCeremonyEnd - Wedding Ceremony Effect * - * @param SetBlessEffect + * @param setBlessEffect * @param groom * @param bride * @param step * @return mplew */ - public static byte[] OnWeddingProgress(boolean SetBlessEffect, int groom, int bride, byte step) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SetBlessEffect ? WEDDING_CEREMONY_END : WEDDING_PROGRESS); - if (!SetBlessEffect) { // in order for ceremony packet to send, byte step = 2 must be sent first - mplew.write(step); + public static Packet OnWeddingProgress(boolean setBlessEffect, int groom, int bride, byte step) { + OutPacket p = OutPacket.create(setBlessEffect ? SendOpcode.WEDDING_CEREMONY_END : SendOpcode.WEDDING_PROGRESS); + if (!setBlessEffect) { // in order for ceremony packet to send, byte step = 2 must be sent first + p.writeByte(step); } - mplew.writeInt(groom); - mplew.writeInt(bride); - return mplew.getPacket(); + p.writeInt(groom); + p.writeInt(bride); + return p; } /** @@ -359,21 +346,19 @@ public class Wedding extends PacketCreator { * @param bride * @return mplew */ - public static byte[] sendWeddingInvitation(String groom, String bride) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(MARRIAGE_RESULT); - mplew.write(15); - mplew.writeMapleAsciiString(groom); - mplew.writeMapleAsciiString(bride); - mplew.writeShort(1); // 0 = Cathedral Normal?, 1 = Cathedral Premium?, 2 = Chapel Normal? - return mplew.getPacket(); + public static Packet sendWeddingInvitation(String groom, String bride) { + OutPacket p = OutPacket.create(SendOpcode.MARRIAGE_RESULT); + p.writeByte(15); + p.writeString(groom); + p.writeString(bride); + p.writeShort(1); // 0 = Cathedral Normal?, 1 = Cathedral Premium?, 2 = Chapel Normal? + return p; } - public static byte[] sendWishList() { // fuck my life - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(MARRIAGE_REQUEST); - mplew.write(9); - return mplew.getPacket(); + public static Packet sendWishList() { // fuck my life + OutPacket p = OutPacket.create(SendOpcode.MARRIAGE_REQUEST); + p.writeByte(9); + return p; } /** @@ -384,19 +369,18 @@ public class Wedding extends PacketCreator { * @param items * @return mplew */ - public static byte[] OnWeddingGiftResult(byte mode, List itemnames, List items) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(WEDDING_GIFT_RESULT); - mplew.write(mode); + public static Packet onWeddingGiftResult(byte mode, List itemnames, List items) { + OutPacket p = OutPacket.create(SendOpcode.WEDDING_GIFT_RESULT); + p.writeByte(mode); switch (mode) { case 0xC: // 12 : You cannot give more than one present for each wishlist case 0xE: // 14 : Failed to send the gift. break; case 0x09: { // Load Wedding Registry - mplew.write(itemnames.size()); + p.writeByte(itemnames.size()); for (String names : itemnames) { - mplew.writeMapleAsciiString(names); + p.writeString(names); } break; } @@ -405,15 +389,15 @@ public class Wedding extends PacketCreator { case 0xB: { // Add Item to Wedding Registry // 11 : You have sent a gift | | 13 : Failed to send the gift. | if (mode == 0xB) { - mplew.write(itemnames.size()); + p.writeByte(itemnames.size()); for (String names : itemnames) { - mplew.writeMapleAsciiString(names); + p.writeString(names); } } - mplew.writeLong(32); - mplew.write(items.size()); + p.writeLong(32); + p.writeByte(items.size()); for (Item item : items) { - addItemInfo(mplew, item, true); + addItemInfo(p, item, true); } break; } @@ -422,6 +406,6 @@ public class Wedding extends PacketCreator { break; } } - return mplew.getPacket(); + return p; } } \ No newline at end of file diff --git a/src/test/java/net/packet/ByteBufOutPacketTest.java b/src/test/java/net/packet/ByteBufOutPacketTest.java index c0fa148e08..a7d0611500 100644 --- a/src/test/java/net/packet/ByteBufOutPacketTest.java +++ b/src/test/java/net/packet/ByteBufOutPacketTest.java @@ -176,9 +176,9 @@ class ByteBufOutPacketTest { } @Test - void writePoint() { + void writePosition() { final Point writtenPoint = new Point(23, 42); - outPacket.writePoint(writtenPoint); + outPacket.writePos(writtenPoint); ByteBuf wrapped = wrapExplicitlyWrittenBytes(outPacket); short readX = wrapped.readShortLE(); From b3d422a6c58c8b9990e79c60f513054a591d7a9c Mon Sep 17 00:00:00 2001 From: P0nk Date: Sun, 22 Aug 2021 21:03:51 +0200 Subject: [PATCH 6/7] Remove remaining uses of MaplePacketLittleEndianWriter --- src/main/java/client/MapleCharacter.java | 2 +- .../command/commands/gm3/PeCommand.java | 9 +-- .../handlers/AllianceOperationHandler.java | 55 +------------------ .../java/net/server/guild/GuildPackets.java | 47 ++++++++++++++++ src/main/java/server/life/MapleMonster.java | 3 +- .../maps/AbstractAnimatedMapleMapObject.java | 45 ++++++++------- .../java/server/maps/MaplePlayerShop.java | 11 ---- 7 files changed, 78 insertions(+), 94 deletions(-) diff --git a/src/main/java/client/MapleCharacter.java b/src/main/java/client/MapleCharacter.java index edb7fc099f..ec0d1a5929 100644 --- a/src/main/java/client/MapleCharacter.java +++ b/src/main/java/client/MapleCharacter.java @@ -1221,7 +1221,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void broadcastStance() { - map.broadcastMessage(this, PacketCreator.movePlayer(id, this.getIdleMovement(), getIdleMovementDataLength()), false); + map.broadcastMessage(this, PacketCreator.movePlayer(id, this.getIdleMovement(), AbstractAnimatedMapleMapObject.IDLE_MOVEMENT_PACKET_LENGTH), false); } public MapleMap getWarpMap(int map) { diff --git a/src/main/java/client/command/commands/gm3/PeCommand.java b/src/main/java/client/command/commands/gm3/PeCommand.java index 886bee1616..3f959663b9 100644 --- a/src/main/java/client/command/commands/gm3/PeCommand.java +++ b/src/main/java/client/command/commands/gm3/PeCommand.java @@ -28,12 +28,13 @@ import client.MapleClient; import client.command.Command; import net.MaplePacketHandler; import net.PacketProcessor; +import net.packet.ByteBufOutPacket; +import net.packet.OutPacket; import tools.FilePrinter; import tools.HexTool; import tools.data.input.ByteArrayByteStream; import tools.data.input.GenericSeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor; -import tools.data.output.MaplePacketLittleEndianWriter; import java.io.FileReader; import java.io.IOException; @@ -61,9 +62,9 @@ public class PeCommand extends Command { return; } - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.write(HexTool.getByteArrayFromHexString(packet)); - SeekableLittleEndianAccessor slea = new GenericSeekableLittleEndianAccessor(new ByteArrayByteStream(mplew.getPacket())); + OutPacket p = new ByteBufOutPacket(); + p.writeBytes(HexTool.getByteArrayFromHexString(packet)); + SeekableLittleEndianAccessor slea = new GenericSeekableLittleEndianAccessor(new ByteArrayByteStream(p.getBytes())); short packetId = slea.readShort(); final MaplePacketHandler packetHandler = PacketProcessor.getProcessor(0, c.getChannel()).getHandler(packetId); if (packetHandler != null && packetHandler.validateState(c)) { diff --git a/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java b/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java index 01a491ae0d..88b9979cd3 100644 --- a/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java @@ -24,9 +24,6 @@ package net.server.channel.handlers; import client.MapleCharacter; import client.MapleClient; import net.AbstractMaplePacketHandler; -import net.opcodes.SendOpcode; -import net.packet.OutPacket; -import net.packet.Packet; import net.server.Server; import net.server.guild.GuildPackets; import net.server.guild.MapleAlliance; @@ -34,7 +31,6 @@ import net.server.guild.MapleGuild; import net.server.guild.MapleGuildCharacter; import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; -import tools.data.output.MaplePacketLittleEndianWriter; /** * @@ -78,7 +74,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { // "alliance" is only null at case 0x04 switch (b) { case 0x01: - Server.getInstance().allianceMessage(alliance.getId(), sendShowInfo(chr.getGuild().getAllianceId(), chr.getId()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.sendShowInfo(chr.getGuild().getAllianceId(), chr.getId()), -1, -1); break; case 0x02: { // Leave Alliance if (chr.getGuild().getAllianceId() == 0 || chr.getGuildId() < 1 || chr.getGuildRank() != 1) { @@ -228,53 +224,4 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { alliance.dropMessage("'" + chr.getName() + "' has been reassigned to '" + alliance.getRankTitle(newRank) + "' in this Alliance."); } - private static Packet sendShowInfo(int allianceid, int playerid) { - OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); - p.writeByte(0x02); - p.writeInt(allianceid); - p.writeInt(playerid); - return p; - } - - private static byte[] sendInvitation(int allianceid, int playerid, final String guildname) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x05); - mplew.writeInt(allianceid); - mplew.writeInt(playerid); - mplew.writeMapleAsciiString(guildname); - return mplew.getPacket(); - } - - private static byte[] sendChangeGuild(int allianceid, int playerid, int guildid, int option) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x07); - mplew.writeInt(allianceid); - mplew.writeInt(guildid); - mplew.writeInt(playerid); - mplew.write(option); - return mplew.getPacket(); - } - - private static byte[] sendChangeLeader(int allianceid, int playerid, int victim) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x08); - mplew.writeInt(allianceid); - mplew.writeInt(playerid); - mplew.writeInt(victim); - return mplew.getPacket(); - } - - private static byte[] sendChangeRank(int allianceid, int playerid, int int1, byte byte1) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.ALLIANCE_OPERATION.getValue()); - mplew.write(0x09); - mplew.writeInt(allianceid); - mplew.writeInt(playerid); - mplew.writeInt(int1); - mplew.writeInt(byte1); - return mplew.getPacket(); - } } diff --git a/src/main/java/net/server/guild/GuildPackets.java b/src/main/java/net/server/guild/GuildPackets.java index 92309848dd..f63a748da8 100644 --- a/src/main/java/net/server/guild/GuildPackets.java +++ b/src/main/java/net/server/guild/GuildPackets.java @@ -540,4 +540,51 @@ public class GuildPackets { p.writeByte(guild.getLogoColor()); return p; } + + + public static Packet sendShowInfo(int allianceid, int playerid) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x02); + p.writeInt(allianceid); + p.writeInt(playerid); + return p; + } + + public static Packet sendInvitation(int allianceid, int playerid, final String guildname) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x05); + p.writeInt(allianceid); + p.writeInt(playerid); + p.writeString(guildname); + return p; + } + + public static Packet sendChangeGuild(int allianceid, int playerid, int guildid, int option) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x07); + p.writeInt(allianceid); + p.writeInt(guildid); + p.writeInt(playerid); + p.writeByte(option); + return p; + } + + public static Packet sendChangeLeader(int allianceid, int playerid, int victim) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x08); + p.writeInt(allianceid); + p.writeInt(playerid); + p.writeInt(victim); + return p; + } + + public static Packet sendChangeRank(int allianceid, int playerid, int int1, byte byte1) { + OutPacket p = OutPacket.create(SendOpcode.ALLIANCE_OPERATION); + p.writeByte(0x09); + p.writeInt(allianceid); + p.writeInt(playerid); + p.writeInt(int1); + p.writeInt(byte1); + return p; + } } diff --git a/src/main/java/server/life/MapleMonster.java b/src/main/java/server/life/MapleMonster.java index dbf7e71dc0..9907157041 100644 --- a/src/main/java/server/life/MapleMonster.java +++ b/src/main/java/server/life/MapleMonster.java @@ -45,6 +45,7 @@ import server.MapleStatEffect; import server.TimerManager; import server.life.MapleLifeFactory.BanishInfo; import server.loot.MapleLootManager; +import server.maps.AbstractAnimatedMapleMapObject; import server.maps.MapleMap; import server.maps.MapleMapObjectType; import server.maps.MapleSummon; @@ -1324,7 +1325,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { aggroRemoveController(); setPosition(newPoint); - map.broadcastMessage(PacketCreator.moveMonster(this.getObjectId(), false, -1, 0, 0, 0, this.getPosition(), this.getIdleMovement(), getIdleMovementDataLength())); + map.broadcastMessage(PacketCreator.moveMonster(this.getObjectId(), false, -1, 0, 0, 0, this.getPosition(), this.getIdleMovement(), AbstractAnimatedMapleMapObject.IDLE_MOVEMENT_PACKET_LENGTH)); map.moveMonster(this, this.getPosition()); aggroUpdateController(); diff --git a/src/main/java/server/maps/AbstractAnimatedMapleMapObject.java b/src/main/java/server/maps/AbstractAnimatedMapleMapObject.java index e7b1f9d4c1..2623240159 100644 --- a/src/main/java/server/maps/AbstractAnimatedMapleMapObject.java +++ b/src/main/java/server/maps/AbstractAnimatedMapleMapObject.java @@ -23,29 +23,17 @@ package server.maps; import java.util.Arrays; +import net.packet.ByteBufOutPacket; +import net.packet.OutPacket; +import net.packet.Packet; import tools.data.input.ByteArrayByteStream; import tools.data.input.GenericSeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor; -import tools.data.output.MaplePacketLittleEndianWriter; public abstract class AbstractAnimatedMapleMapObject extends AbstractMapleMapObject implements AnimatedMapleMapObject { - - static { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter((int) getIdleMovementDataLength()); - mplew.write(1); //movement command count - mplew.write(0); - mplew.writeShort(-1); //x - mplew.writeShort(-1); //y - mplew.writeShort(0); //xwobble - mplew.writeShort(0); //ywobble - mplew.writeShort(0); //fh - mplew.write(-1); //stance - mplew.writeShort(0); //duration - idleMovementPacketData = mplew.getPacket(); - } - - private static final byte[] idleMovementPacketData; - + public static final int IDLE_MOVEMENT_PACKET_LENGTH = 15; + private static final Packet IDLE_MOVEMENT_PACKET = createIdleMovementPacket(); + private int stance; @Override @@ -64,7 +52,8 @@ public abstract class AbstractAnimatedMapleMapObject extends AbstractMapleMapObj } public SeekableLittleEndianAccessor getIdleMovement() { - byte[] movementData = Arrays.copyOf(idleMovementPacketData, idleMovementPacketData.length); + final byte[] idleMovementBytes = IDLE_MOVEMENT_PACKET.getBytes(); + byte[] movementData = Arrays.copyOf(idleMovementBytes, idleMovementBytes.length); //seems wasteful to create a whole packet writer when only a few values are changed int x = getPosition().x; int y = getPosition().y; @@ -75,8 +64,18 @@ public abstract class AbstractAnimatedMapleMapObject extends AbstractMapleMapObj movementData[12] = (byte) (getStance() & 0xFF); return new GenericSeekableLittleEndianAccessor(new ByteArrayByteStream(movementData)); } - - public static long getIdleMovementDataLength() { - return 15; - } + + private static Packet createIdleMovementPacket() { + OutPacket p = new ByteBufOutPacket(); + p.writeByte(1); //movement command count + p.writeByte(0); + p.writeShort(-1); //x + p.writeShort(-1); //y + p.writeShort(0); //xwobble + p.writeShort(0); //ywobble + p.writeShort(0); //fh + p.writeByte(-1); //stance + p.writeShort(0); //duration + return p; + } } diff --git a/src/main/java/server/maps/MaplePlayerShop.java b/src/main/java/server/maps/MaplePlayerShop.java index 9b6edd44a1..8becaa0c3a 100644 --- a/src/main/java/server/maps/MaplePlayerShop.java +++ b/src/main/java/server/maps/MaplePlayerShop.java @@ -28,14 +28,12 @@ import client.inventory.MapleInventory; import client.inventory.MapleInventoryType; import client.inventory.manipulator.MapleInventoryManipulator; import client.inventory.manipulator.MapleKarmaManipulator; -import net.opcodes.SendOpcode; import net.packet.Packet; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import server.MapleTrade; import tools.PacketCreator; import tools.Pair; -import tools.data.output.MaplePacketLittleEndianWriter; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; @@ -377,15 +375,6 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } } - public static byte[] shopErrorMessage(int error, int type) { - MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); - mplew.write(0x0A); - mplew.write(type); - mplew.write(error); - return mplew.getPacket(); - } - public void broadcast(Packet packet) { MapleClient client = owner.getClient(); if (client != null) { From ffc0f3bc975576694c53c5eff0313edb97027066 Mon Sep 17 00:00:00 2001 From: P0nk Date: Sun, 22 Aug 2021 21:08:40 +0200 Subject: [PATCH 7/7] Remove LittleEndianWriter class hierarchy --- src/main/java/tools/PacketCreator.java | 6 +- .../data/output/BAOSByteOutputStream.java | 56 ------ .../tools/data/output/ByteOutputStream.java | 38 ---- .../output/GenericLittleEndianWriter.java | 185 ------------------ .../tools/data/output/LittleEndianWriter.java | 114 ----------- .../output/MaplePacketLittleEndianWriter.java | 73 ------- 6 files changed, 3 insertions(+), 469 deletions(-) delete mode 100644 src/main/java/tools/data/output/BAOSByteOutputStream.java delete mode 100644 src/main/java/tools/data/output/ByteOutputStream.java delete mode 100644 src/main/java/tools/data/output/GenericLittleEndianWriter.java delete mode 100644 src/main/java/tools/data/output/LittleEndianWriter.java delete mode 100644 src/main/java/tools/data/output/MaplePacketLittleEndianWriter.java diff --git a/src/main/java/tools/PacketCreator.java b/src/main/java/tools/PacketCreator.java index fa0d8fe580..b9d9b9c946 100644 --- a/src/main/java/tools/PacketCreator.java +++ b/src/main/java/tools/PacketCreator.java @@ -2127,9 +2127,9 @@ public class PacketCreator { } /** - * Adds a announcement box to an existing MaplePacketLittleEndianWriter. + * Adds an announcement box to an existing OutPacket. * - * @param p The MaplePacketLittleEndianWriter to add an announcement box + * @param p The OutPacket to add an announcement box * to. * @param shop The shop to announce. */ @@ -5844,7 +5844,7 @@ public class PacketCreator { boolean hasOtherJunior = false; int entryCount = 2; //2 guaranteed, leader and self entryCount += Math.min(2, entry.getTotalSeniors()); - //needed since MaplePacketLittleEndianWriter doesn't have any seek functionality + //needed since OutPacket doesn't have any seek functionality if (entry.getSenior() != null) { if (entry.getSenior().getJuniorCount() == 2) { entryCount++; diff --git a/src/main/java/tools/data/output/BAOSByteOutputStream.java b/src/main/java/tools/data/output/BAOSByteOutputStream.java deleted file mode 100644 index 80cbc9301e..0000000000 --- a/src/main/java/tools/data/output/BAOSByteOutputStream.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation version 3 as published by - the Free Software Foundation. You may not use, modify or distribute - this program under any other version of the GNU Affero General Public - License. - - This program 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ -package tools.data.output; - -import java.io.ByteArrayOutputStream; - -/** - * Uses a byte array to output a stream of bytes. - * - * @author Frz - * @version 1.0 - * @since Revision 352 - */ -class BAOSByteOutputStream implements ByteOutputStream { - private ByteArrayOutputStream baos; - - /** - * Class constructor - Wraps the stream around a Java BAOS. - * - * @param baos The ByteArrayOutputStream to wrap this around. - */ - BAOSByteOutputStream(ByteArrayOutputStream baos) { - super(); - this.baos = baos; - } - - /** - * Writes a byte to the stream. - * - * @param b The byte to write to the stream. - * @see tools.data.output.ByteOutputStream#writeByte(byte) - */ - @Override - public void writeByte(byte b) { - baos.write(b); - } -} diff --git a/src/main/java/tools/data/output/ByteOutputStream.java b/src/main/java/tools/data/output/ByteOutputStream.java deleted file mode 100644 index 0df7ca7753..0000000000 --- a/src/main/java/tools/data/output/ByteOutputStream.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation version 3 as published by - the Free Software Foundation. You may not use, modify or distribute - this program under any other version of the GNU Affero General Public - License. - - This program 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ -package tools.data.output; - -/** - * Provides an interface to an output stream of bytes. - * - * @author Frz - * @since Revision 323 - * @version 1.0 - */ -interface ByteOutputStream { - /** - * Writes a byte to the stream. - * - * @param b The byte to write. - */ - void writeByte(byte b); -} diff --git a/src/main/java/tools/data/output/GenericLittleEndianWriter.java b/src/main/java/tools/data/output/GenericLittleEndianWriter.java deleted file mode 100644 index 70965077ca..0000000000 --- a/src/main/java/tools/data/output/GenericLittleEndianWriter.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation version 3 as published by - the Free Software Foundation. You may not use, modify or distribute - this program under any other version of the GNU Affero General Public - License. - - This program 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ -package tools.data.output; - -import constants.string.CharsetConstants.MapleLanguageType; - -import java.awt.*; -import java.nio.charset.Charset; - -/** - * Provides a generic writer of a little-endian sequence of bytes. - * - * @author Frz - * @version 1.0 - * @since Revision 323 - */ -public class GenericLittleEndianWriter implements LittleEndianWriter { - private static Charset ASCII = Charset.forName(MapleLanguageType.LANGUAGE_US.getAscii()); - private ByteOutputStream bos; - - /** - * Class constructor - Protected to prevent instantiation with no arguments. - */ - protected GenericLittleEndianWriter() { - // Blah! - } - - /** - * Sets the byte-output stream for this instance of the object. - * - * @param bos The new output stream to set. - */ - void setByteOutputStream(ByteOutputStream bos) { - this.bos = bos; - } - - /** - * Write an array of bytes to the stream. - * - * @param b The bytes to write. - */ - @Override - public void write(byte[] b) { - for (byte value : b) { - bos.writeByte(value); - } - } - - /** - * Write a byte to the stream. - * - * @param b The byte to write. - */ - @Override - public void write(byte b) { - bos.writeByte(b); - } - - /** - * Write a byte in integer form to the stream. - * - * @param b The byte as an Integer to write. - */ - @Override - public void write(int b) { - bos.writeByte((byte) b); - } - - @Override - public void skip(int b) { - write(new byte[b]); - } - - /** - * Write a short integer to the stream. - * - * @param i The short integer to write. - */ - @Override - public void writeShort(int i) { - bos.writeByte((byte) (i & 0xFF)); - bos.writeByte((byte) ((i >>> 8) & 0xFF)); - } - - /** - * Writes an integer to the stream. - * - * @param i The integer to write. - */ - @Override - public void writeInt(int i) { - bos.writeByte((byte) (i & 0xFF)); - bos.writeByte((byte) ((i >>> 8) & 0xFF)); - bos.writeByte((byte) ((i >>> 16) & 0xFF)); - bos.writeByte((byte) ((i >>> 24) & 0xFF)); - } - - /** - * Writes an ASCII string the the stream. - * - * @param s The ASCII string to write. - */ - @Override - public void writeAsciiString(String s) { - write(s.getBytes(ASCII)); - } - - /** - * Writes a maple-convention ASCII string to the stream. - * - * @param s The ASCII string to use maple-convention to write. - */ - @Override - public void writeMapleAsciiString(String s) { - writeShort((short) s.length()); - writeAsciiString(s); - } - - /** - * Writes a null-terminated ASCII string to the stream. - * - * @param s The ASCII string to write. - */ - @Override - public void writeNullTerminatedAsciiString(String s) { - writeAsciiString(s); - write(0); - } - - /** - * Write a long integer to the stream. - * @param l The long integer to write. - */ - @Override - public void writeLong(long l) { - bos.writeByte((byte) (l & 0xFF)); - bos.writeByte((byte) ((l >>> 8) & 0xFF)); - bos.writeByte((byte) ((l >>> 16) & 0xFF)); - bos.writeByte((byte) ((l >>> 24) & 0xFF)); - bos.writeByte((byte) ((l >>> 32) & 0xFF)); - bos.writeByte((byte) ((l >>> 40) & 0xFF)); - bos.writeByte((byte) ((l >>> 48) & 0xFF)); - bos.writeByte((byte) ((l >>> 56) & 0xFF)); - } - - /** - * Writes a 2D 4 byte position information - * - * @param s The Point position to write. - */ - @Override - public void writePos(Point s) { - writeShort(s.x); - writeShort(s.y); - } - - /** - * Writes a boolean true ? 1 : 0 - * - * @param b The boolean to write. - */ - @Override - public void writeBool(final boolean b) { - write(b ? 1 : 0); - } -} diff --git a/src/main/java/tools/data/output/LittleEndianWriter.java b/src/main/java/tools/data/output/LittleEndianWriter.java deleted file mode 100644 index 0ec260fbaf..0000000000 --- a/src/main/java/tools/data/output/LittleEndianWriter.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation version 3 as published by - the Free Software Foundation. You may not use, modify or distribute - this program under any other version of the GNU Affero General Public - License. - - This program 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ -package tools.data.output; - -import java.awt.*; - -/** - * Provides an interface to a writer class that writes a little-endian sequence - * of bytes. - * - * @author Frz - * @version 1.0 - * @since Revision 323 - */ -public interface LittleEndianWriter { - - /** - * Write an array of bytes to the sequence. - * - * @param b The bytes to write. - */ - void write(byte[] b); - - /** - * Write a byte to the sequence. - * - * @param b The byte to write. - */ - void write(byte b); - - /** - * Write a byte in integer form to the sequence. - * - * @param b The byte as an Integer to write. - */ - void write(int b); - - void skip(int b); - - /** - * Writes an integer to the sequence. - * - * @param i The integer to write. - */ - void writeInt(int i); - - /** - * Write a short integer to the sequence. - * - * @param s The short integer to write. - */ - void writeShort(int s); - - /** - * Write a long integer to the sequence. - * - * @param l The long integer to write. - */ - void writeLong(long l); - - /** - * Writes an ASCII string the the sequence. - * - * @param s The ASCII string to write. - */ - void writeAsciiString(String s); - - /** - * Writes a null-terminated ASCII string to the sequence. - * - * @param s The ASCII string to write. - */ - void writeNullTerminatedAsciiString(String s); - - /** - * Writes a maple-convention ASCII string to the sequence. - * - * @param s The ASCII string to use maple-convention to write. - */ - void writeMapleAsciiString(String s); - - /** - * Writes a 2D 4 byte position information - * - * @param s The Point position to write. - */ - void writePos(Point s); - - /** - * Writes a boolean true ? 1 : 0 - * - * @param b The boolean to write. - */ - void writeBool(final boolean b); -} diff --git a/src/main/java/tools/data/output/MaplePacketLittleEndianWriter.java b/src/main/java/tools/data/output/MaplePacketLittleEndianWriter.java deleted file mode 100644 index b02365ec62..0000000000 --- a/src/main/java/tools/data/output/MaplePacketLittleEndianWriter.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation version 3 as published by - the Free Software Foundation. You may not use, modify or distribute - this program under any other version of the GNU Affero General Public - License. - - This program 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ -package tools.data.output; - -import java.io.ByteArrayOutputStream; -import tools.HexTool; - -/** - * Writes a maplestory-packet little-endian stream of bytes. - * - * @author Frz - * @version 1.0 - * @since Revision 352 - */ -public class MaplePacketLittleEndianWriter extends GenericLittleEndianWriter { - private ByteArrayOutputStream baos; - - /** - * Constructor - initializes this stream with a default size. - */ - public MaplePacketLittleEndianWriter() { - this(32); - } - - /** - * Constructor - initializes this stream with size size. - * - * @param size The size of the underlying stream. - */ - public MaplePacketLittleEndianWriter(int size) { - this.baos = new ByteArrayOutputStream(size); - setByteOutputStream(new BAOSByteOutputStream(baos)); - } - - /** - * Gets a MaplePacket instance representing this - * sequence of bytes. - * - * @return A MaplePacket with the bytes in this stream. - */ - public byte[] getPacket() { - return baos.toByteArray(); - } - - /** - * Changes this packet into a human-readable hexadecimal stream of bytes. - * - * @return This packet as hex digits. - */ - @Override - public String toString() { - return HexTool.toString(baos.toByteArray()); - } -}