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..a68959262e 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.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_magician.js b/scripts/event/3rdJob_magician.js index efa3818094..ca391ed446 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.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_mount.js b/scripts/event/3rdJob_mount.js index 363f2e28f0..7d45386e66 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.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_pirate.js b/scripts/event/3rdJob_pirate.js index 27ff8d4586..928ec11638 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.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_thief.js b/scripts/event/3rdJob_thief.js index 37b5fefa60..780f66d860 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.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/3rdJob_warrior.js b/scripts/event/3rdJob_warrior.js index 0ce3a86411..c4890fb012 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.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/Aran_2ndmount.js b/scripts/event/Aran_2ndmount.js index 27da92ba44..87843af48c 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.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/Aran_3rdmount.js b/scripts/event/Aran_3rdmount.js index 93c9ee83c8..0e9f37aa7f 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.sendPacket(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..af9c4c834e 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.sendPacket(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..42e0e93c5e 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.sendPacket(PacketCreator.getClock(eventTime * 60)); eim.startEventTimer(eventTime * 60000); } diff --git a/scripts/event/Hak.js b/scripts/event/Hak.js index 536124e21d..d47a926126 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.sendPacket(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..4146384fb8 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.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 b1dbe077e6..99b80fe97a 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.sendPacket(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..0c6511cd61 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().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 b72a54b86f..ecd5b6feb0 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().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 63a593d8c8..aaf881afbf 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().sendPacket(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..cba57b8d63 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().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(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.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 43627b8b8a..bfe547c32b 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().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(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.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 9b5a7ab270..4d769c2932 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().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(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.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 c7a6590218..af7282a361 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().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(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.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 3420643eaf..4087b3f6f4 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().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(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.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 3c39a2493b..edbc02f44d 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().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(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.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 35499c3a28..0f38111ea3 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().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(MaplePacketCreator.showEffect("quest/party/clear")); - cm.getPlayer().announce(MaplePacketCreator.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/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..07f0e8658b 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().sendPacket(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..2825cacd15 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.sendPacket(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.sendPacket(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.sendPacket(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!"); @@ -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 e61b923927..f41d49c2a5 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.sendPacket(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.sendPacket(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.sendPacket(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~!"); @@ -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/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..bcabefea5b 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().sendPacket(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().sendPacket(PacketCreator.musicChange(ambientSong)); cm.dispose(); } else { if (mode == 0 && type > 0) { - cm.getPlayer().announce(MaplePacketCreator.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(MaplePacketCreator.musicChange(ambientSong)); + cm.getPlayer().sendPacket(PacketCreator.musicChange(ambientSong)); cm.dispose(); } } diff --git a/scripts/npc/MagatiaPassword.js b/scripts/npc/MagatiaPassword.js index 340e7b52cb..a4c10f40ab 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().sendPacket(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..f7579c5b9a 100644 --- a/src/main/java/client/BuddyList.java +++ b/src/main/java/client/BuddyList.java @@ -21,9 +21,10 @@ */ package client; +import net.packet.Packet; import net.server.PlayerStorage; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.sql.Connection; import java.sql.PreparedStatement; @@ -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(MaplePacketCreator.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 b1a57fbc5c..ec0d1a5929 100644 --- a/src/main/java/client/MapleCharacter.java +++ b/src/main/java/client/MapleCharacter.java @@ -38,12 +38,14 @@ 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; 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; @@ -75,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; @@ -294,7 +296,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { statup.add(new Pair<>(s.getKey(), s.getValue())); } - announce(MaplePacketCreator.updatePlayerStats(statup, true, MapleCharacter.this)); + sendPacket(PacketCreator.updatePlayerStats(statup, true, MapleCharacter.this)); } }); @@ -757,7 +759,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } combocounter = (short) Math.min(30000, count); if (count > 0) { - announce(MaplePacketCreator.showCombo(combocounter)); + sendPacket(PacketCreator.showCombo(combocounter)); } } @@ -823,13 +825,13 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (isGM() && hide != this.hidden) { if (!hide) { this.hidden = false; - announce(MaplePacketCreator.getGMEffect(0x10, (byte) 0)); + sendPacket(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 +840,15 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } } else { this.hidden = true; - announce(MaplePacketCreator.getGMEffect(0x10, (byte) 1)); + sendPacket(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()); + sendPacket(PacketCreator.enableActions()); } } @@ -871,9 +873,9 @@ public class MapleCharacter extends AbstractMapleCharacterObject { private void cancelPlayerBuffs(List buffstats) { if (client.getChannelServer().getPlayerStorage().getCharacterById(getId()) != null) { updateLocalStats(); - client.announce(MaplePacketCreator.cancelBuff(buffstats)); + sendPacket(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 +1036,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 +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(MaplePacketCreator.updatePlayerStats(statup, true, this)); + sendPacket(PacketCreator.updatePlayerStats(statup, true, this)); } finally { statWlock.unlock(); effLock.unlock(); @@ -1147,16 +1149,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,10 +1180,10 @@ 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) { + public void broadcastAcquaintances(Packet packet) { buddylist.broadcast(packet, getWorldServer().getPlayerStorage()); MapleFamily family = getFamily(); if(family != null) { @@ -1195,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) { @@ -1219,7 +1221,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(), AbstractAnimatedMapleMapObject.IDLE_MOVEMENT_PACKET_LENGTH), false); } public MapleMap getWarpMap(int map) { @@ -1366,7 +1368,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 +1384,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 +1419,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--; @@ -1662,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)); } } } @@ -1671,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; } @@ -1689,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; @@ -1701,7 +1703,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)); + sendPacket(PacketCreator.updateParty(client.getChannel(), party, PartyOperation.SILENT_UPDATE, null)); updatePartyMemberHPInternal(); } } finally { @@ -1738,7 +1740,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())); + sendPacket(PacketCreator.environmentMoveList(map.getEnvironment().entrySet())); } } @@ -1758,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(MaplePacketCreator.updateSkill(skill.getId(), newLevel, newMasterlevel, expiration)); + sendPacket(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 :) + 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()); @@ -1799,11 +1801,11 @@ public class MapleCharacter extends AbstractMapleCharacterObject { return; } - client.announce(MaplePacketCreator.showOwnBerserk(skilllevel, berserk)); + sendPacket(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 +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(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); return; } @@ -1936,13 +1938,13 @@ public class MapleCharacter extends AbstractMapleCharacterObject { mapitem.lockItem(); try { if (mapitem.isPickedUp()) { - client.announce(MaplePacketCreator.showItemUnavailable()); - client.announce(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.showItemUnavailable()); + sendPacket(PacketCreator.enableActions()); return; } boolean isPet = petIndex > -1; - final byte[] pickupPacket = MaplePacketCreator.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; @@ -1975,21 +1977,21 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } else if (MapleInventoryManipulator.addFromDrop(client, mItem, true)) { this.getMap().pickItemDrop(pickupPacket, mapitem); } else { - client.announce(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); return; } } else { - client.announce(MaplePacketCreator.showItemUnavailable()); - client.announce(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.showItemUnavailable()); + sendPacket(PacketCreator.enableActions()); return; } - client.announce(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); return; } if (!this.needQuestItem(mapitem.getQuest(), mapitem.getItemId())) { - client.announce(MaplePacketCreator.showItemUnavailable()); - client.announce(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.showItemUnavailable()); + sendPacket(PacketCreator.enableActions()); return; } @@ -2010,7 +2012,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { itemScript = info; } else { if (!MapleInventoryManipulator.addFromDrop(client, mItem, true)) { - client.announce(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); return; } } @@ -2026,14 +2028,14 @@ public class MapleCharacter extends AbstractMapleCharacterObject { updateAriantScore(); } } else { - client.announce(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); return; } this.getMap().pickItemDrop(pickupPacket, mapitem); } else if(!hasSpaceInventory) { - client.announce(MaplePacketCreator.getInventoryFull()); - client.announce(MaplePacketCreator.getShowInventoryFull()); + sendPacket(PacketCreator.getInventoryFull()); + sendPacket(PacketCreator.getShowInventoryFull()); } } finally { mapitem.unlockItem(); @@ -2044,7 +2046,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { ism.runItemScript(client, itemScript); } } - client.announce(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); } public int countItem(int itemid) { @@ -2075,7 +2077,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void announceBattleshipHp() { - announce(MaplePacketCreator.skillCooldown(5221999, battleshipHp)); + sendPacket(PacketCreator.skillCooldown(5221999, battleshipHp)); } public void decreaseBattleshipHp(int decrease) { @@ -2083,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(MaplePacketCreator.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); @@ -2115,7 +2117,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.sendPacket(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); } } @@ -2133,7 +2135,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { notifyRemoteChannel(client, getWorldServer().find(otherCid), otherCid, BuddyList.BuddyOperation.DELETED); } bl.remove(otherCid); - client.announce(MaplePacketCreator.updateBuddylist(getBuddylist().getBuddies())); + sendPacket(PacketCreator.updateBuddylist(getBuddylist().getBuddies())); nextPendingRequest(client); } @@ -2458,8 +2460,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); + 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. } @@ -2506,8 +2508,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); + sendPacket(PacketCreator.showOwnRecovery(healHP)); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showRecovery(id, healHP), false); } } @@ -2614,9 +2616,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 +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(MaplePacketCreator.giveForeignDebuff(cid, debuff, skill)); + this.sendPacket(PacketCreator.giveForeignDebuff(cid, debuff, skill)); } else { - this.announce(MaplePacketCreator.giveForeignSlowDebuff(cid, debuff, skill)); + this.sendPacket(PacketCreator.giveForeignSlowDebuff(cid, debuff, skill)); } } } @@ -2661,12 +2663,12 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } final List> debuff = Collections.singletonList(new Pair<>(disease, Integer.valueOf(skill.getX()))); - client.announce(MaplePacketCreator.giveDebuff(debuff, skill)); + sendPacket(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 +2676,12 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void dispelDebuff(MapleDisease debuff) { if (hasDisease(debuff)) { long mask = debuff.getValue(); - announce(MaplePacketCreator.cancelDebuff(mask)); + sendPacket(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 +2791,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void dropMessage(int type, String message) { - client.announce(MaplePacketCreator.serverNotice(type, message)); + sendPacket(PacketCreator.serverNotice(type, message)); } public void enteredScript(String script, int mapid) { @@ -2909,7 +2911,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)); + sendPacket(PacketCreator.skillCooldown(mcdvh.skillId, 0)); } } } @@ -2954,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(MaplePacketCreator.itemExpired(item.getItemId())); + sendPacket(PacketCreator.itemExpired(item.getItemId())); toberemove.add(item); if (ItemConstants.isRateCoupon(item.getItemId())) { deletedCoupon = true; @@ -2966,7 +2968,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } if (ItemConstants.isExpirablePet(item.getItemId())) { - client.announce(MaplePacketCreator.itemExpired(item.getItemId())); + sendPacket(PacketCreator.itemExpired(item.getItemId())); toberemove.add(item); } else { item.setExpiration(-1); @@ -3017,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(MaplePacketCreator.modifyInventory(true, mods)); + sendPacket(PacketCreator.modifyInventory(true, mods)); } public void gainGachaExp() { @@ -3094,7 +3096,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { white = false; } - client.announce(MaplePacketCreator.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 @@ -3158,10 +3160,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.sendPacket(PacketCreator.giveFameResponse(mode, getName(), thisFame)); + sendPacket(PacketCreator.receiveFame(mode, fromPlayer.getName())); } else { - announce(MaplePacketCreator.getShowFameGain(delta)); + sendPacket(PacketCreator.getShowFameGain(delta)); } return true; @@ -3201,15 +3203,15 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (gain != 0) { updateSingleStat(MapleStat.MESO, (int) nextMeso, enableActions); if (show) { - client.announce(MaplePacketCreator.getShowMesoGain(gain, inChat)); + sendPacket(PacketCreator.getShowMesoGain(gain, inChat)); } } else { - client.announce(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); } } public void genericGuildMessage(int code) { - this.client.announce(MaplePacketCreator.genericGuildMessage((byte) code)); + this.sendPacket(GuildPackets.genericGuildMessage((byte) code)); } public int getAccountID() { @@ -3712,7 +3714,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 +4034,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } if (!inactiveStats.isEmpty()) { - client.announce(MaplePacketCreator.cancelBuff(inactiveStats)); - getMap().broadcastMessage(this, MaplePacketCreator.cancelForeignBuff(getId(), inactiveStats), false); + sendPacket(PacketCreator.cancelBuff(inactiveStats)); + getMap().broadcastMessage(this, PacketCreator.cancelForeignBuff(getId(), inactiveStats), false); } } @@ -4308,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(MaplePacketCreator.giveBuff(1932000, 5221006, statups)); + this.sendPacket(PacketCreator.giveBuff(1932000, 5221006, statups)); this.announceBattleshipHp(); } } @@ -4402,9 +4404,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); + sendPacket(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 +4422,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); + 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); } }, buffInterval, buffInterval); } @@ -4454,8 +4456,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } addHP(heal); - client.announce(MaplePacketCreator.showOwnRecovery(heal)); - getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showRecovery(id, heal), false); + sendPacket(PacketCreator.showOwnRecovery(heal)); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showRecovery(id, heal), false); } }, healInterval, healInterval); } finally { @@ -4812,7 +4814,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))); + sendPacket(PacketCreator.loadExceptionList(this.getId(), pe.getKey(), petIndex, new ArrayList<>(exclItems))); chrLock.lock(); try { @@ -4836,7 +4838,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.sendPacket(PacketCreator.loadExceptionList(this.getId(), pe.getKey(), petIndex, new ArrayList<>(exclItems))); } } } @@ -5935,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, MaplePacketCreator.updateAllianceJobLevel(this), getId(), -1); + Server.getInstance().allianceMessage(allianceId, GuildPackets.updateAllianceJobLevel(this), getId(), -1); } } catch (Exception e) { e.printStackTrace(); @@ -5954,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(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)); + 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; @@ -5968,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(MaplePacketCreator.giveBuff(energybar, 0, stat)); - getMap().broadcastMessage(chr, MaplePacketCreator.cancelForeignFirstDebuff(id, ((long) 1) << 50)); + sendPacket(PacketCreator.giveBuff(energybar, 0, stat)); + getMap().broadcastPacket(chr, PacketCreator.cancelForeignFirstDebuff(id, ((long) 1) << 50)); } }, ceffect.getDuration()); } @@ -5980,8 +5982,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); + sendPacket(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 +6414,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 +6441,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)); + sendPacket(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 +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(MaplePacketCreator.levelUpMessage(1, level, getName())); + if(seniorChr != null) seniorChr.sendPacket(PacketCreator.levelUpMessage(1, level, getName())); } } } @@ -7495,7 +7497,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void yellowMessage(String m) { - announce(MaplePacketCreator.sendYellowTip(m)); + sendPacket(PacketCreator.sendYellowTip(m)); } public void raiseQuestMobCount(int id) { @@ -7544,7 +7546,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 +7605,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } unsitChairInternal(); - client.announce(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); } private void unsitChairInternal() { @@ -7615,13 +7617,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)); + sendPacket(PacketCreator.cancelChair(-1)); } public void sitChair(int itemId) { @@ -7629,16 +7631,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()); + sendPacket(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)); + sendPacket(PacketCreator.cancelChair(itemId)); } } else { // stand up unsitChairInternal(); @@ -7683,8 +7685,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); + sendPacket(PacketCreator.showOwnBuffEffect(bloodEffect.getSourceId(), 5)); + getMap().broadcastMessage(MapleCharacter.this, PacketCreator.showBuffEffect(getId(), bloodEffect.getSourceId(), 5), false); } }, 4000, 4000); } @@ -7908,7 +7910,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { enforceMaxHpMp(); if (!hpmpupdate.isEmpty()) { - client.announce(MaplePacketCreator.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 @@ -7926,7 +7928,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { try { if (party != null) { for (MapleCharacter partychar : this.getPartyMembersOnSameMap()) { - announce(MaplePacketCreator.updatePartyMemberHP(partychar.getId(), partychar.getHp(), partychar.getCurrentMaxHp())); + sendPacket(PacketCreator.updatePartyMemberHP(partychar.getId(), partychar.getHp(), partychar.getCurrentMaxHp())); } } } finally { @@ -7943,7 +7945,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (mcvh.skillId != id) { coolDowns.remove(mcvh.skillId); if (packet) { - client.announce(MaplePacketCreator.skillCooldown(mcvh.skillId, 0)); + sendPacket(PacketCreator.skillCooldown(mcvh.skillId, 0)); } } } @@ -8742,7 +8744,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))); + 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 @@ -8755,14 +8757,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)); + //sendPacket(PacketCreator.sendPolice(text)); //this.isbanned = true; //TimerManager.getInstance().schedule(new Runnable() { // @Override @@ -8773,7 +8775,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void sendKeymap() { - client.announce(MaplePacketCreator.getKeymap(keymap)); + sendPacket(PacketCreator.getKeymap(keymap)); } public void sendQuickmap() { @@ -8784,12 +8786,12 @@ public class MapleCharacter extends AbstractMapleCharacterObject { pQuickslotKeyMapped = new MapleQuickslotBinding(MapleQuickslotBinding.DEFAULT_QUICKSLOTS); } - this.announce(MaplePacketCreator.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(MaplePacketCreator.getMacros(skillMacros)); + sendPacket(PacketCreator.getMacros(skillMacros)); } public SkillMacro[] getMacros() { @@ -8826,7 +8828,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void setBuddyCapacity(int capacity) { buddylist.setCapacity(capacity); - client.announce(MaplePacketCreator.updateBuddyCapacity(capacity)); + sendPacket(PacketCreator.updateBuddyCapacity(capacity)); } public void setBuffedValue(MapleBuffStat effect, int value) { @@ -9300,7 +9302,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (newLimit != -1) { this.saveCharToDB(); if (update) { - client.announce(MaplePacketCreator.updateInventorySlotLimit(type, newLimit)); + sendPacket(PacketCreator.updateInventorySlotLimit(type, newLimit)); } return true; } else { @@ -9602,7 +9604,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void showDojoClock() { if (GameConstants.isDojoBossArea(map.getId())) { - client.announce(MaplePacketCreator.getClock((int) (getDojoTimeLeft() / 1000))); + sendPacket(PacketCreator.getClock((int) (getDojoTimeLeft() / 1000))); } } @@ -9632,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(MaplePacketCreator.getAvatarMega(mapOwner, medal, this.getClient().getChannel(), 5390006, strLines, true)); + this.sendPacket(PacketCreator.getAvatarMega(mapOwner, medal, this.getClient().getChannel(), 5390006, strLines, true)); } } @@ -9652,7 +9654,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { rs.last(); int count = rs.getRow(); rs.first(); - client.announce(MaplePacketCreator.showNotes(rs, count)); + sendPacket(PacketCreator.showNotes(rs, count)); } } catch (SQLException e) { e.printStackTrace(); @@ -9731,7 +9733,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); @@ -9749,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); } @@ -9781,13 +9783,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()); + sendPacket(PacketCreator.petStatUpdate(this)); + sendPacket(PacketCreator.enableActions()); } public void updateMacros(int position, SkillMacro updateMacro) { @@ -9808,7 +9810,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.sendPacket(PacketCreator.updatePartyMemberHP(getId(), curhp, curmaxhp)); } } } @@ -9858,20 +9860,20 @@ public class MapleCharacter extends AbstractMapleCharacterObject { switch (questUpdate.getLeft()) { case UPDATE: - announce(MaplePacketCreator.updateQuest(chr, (MapleQuestStatus) objs[0], (Boolean) objs[1])); + sendPacket(PacketCreator.updateQuest(chr, (MapleQuestStatus) objs[0], (Boolean) objs[1])); break; case FORFEIT: - announce(MaplePacketCreator.forfeitQuest((Short) objs[0])); + sendPacket(PacketCreator.forfeitQuest((Short) objs[0])); break; case COMPLETE: - announce(MaplePacketCreator.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(MaplePacketCreator.updateQuestInfo(qs.getQuest().getId(), qs.getNpc())); + sendPacket(PacketCreator.updateQuestInfo(qs.getQuest().getId(), qs.getNpc())); break; } } @@ -9932,7 +9934,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { private void expireQuest(MapleQuest quest) { if (quest.forfeit(this)) { - announce(MaplePacketCreator.questExpire(quest.getId())); + sendPacket(PacketCreator.questExpire(quest.getId())); } } @@ -10027,7 +10029,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)); + sendPacket(PacketCreator.addQuestTimeLimit(quest.getId(), seconds * 1000)); } public void questTimeLimit2(final MapleQuest quest, long expires) { @@ -10045,11 +10047,11 @@ 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)); + sendPacket(PacketCreator.updatePlayerStats(Collections.singletonList(new Pair<>(stat, Integer.valueOf(newval))), itemReaction, this)); } - public void announce(final byte[] packet) { - client.announce(packet); + public void sendPacket(Packet packet) { + client.sendPacket(packet); } @Override @@ -10064,22 +10066,22 @@ public class MapleCharacter extends AbstractMapleCharacterObject { @Override public void sendDestroyData(MapleClient client) { - client.announce(MaplePacketCreator.removePlayerFromMap(this.getObjectId())); + client.sendPacket(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.sendPacket(PacketCreator.spawnPlayerMapObject(client, this, false)); if (buffEffects.containsKey(getJobMapChair(job))) { // mustn't effLock, chrLock sendSpawnData - client.announce(MaplePacketCreator.giveForeignChairSkillEffect(id)); + client.sendPacket(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 +10150,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public void blockPortal(String scriptName) { if (!blockedPortals.contains(scriptName) && scriptName != null) { blockedPortals.add(scriptName); - client.announce(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.enableActions()); } } @@ -10172,7 +10174,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)); + sendPacket(PacketCreator.updateAreaInfo(area, info)); } public String getAreaInfo(int area) { @@ -10189,7 +10191,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"))); + 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() { @@ -10197,7 +10199,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 +10419,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 +11240,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())); + sendPacket(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..d5e5984a50 100644 --- a/src/main/java/client/MapleClient.java +++ b/src/main/java/client/MapleClient.java @@ -30,11 +30,10 @@ import io.netty.handler.timeout.IdleStateEvent; import net.MaplePacketHandler; import net.PacketProcessor; import net.netty.InvalidPacketHeaderException; +import net.packet.InPacket; +import net.packet.Packet; import net.packet.logging.LoggingUtil; import net.packet.logging.MapleLogger; -import net.packet.ByteBufOutPacket; -import net.packet.InPacket; -import net.packet.OutPacket; import net.server.Server; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; @@ -44,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.*; @@ -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.sendPacket(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.sendPacket(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.sendPacket(GuildPackets.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()); + sendPacket(PacketCreator.getPing()); TimerManager.getInstance().schedule(() -> { try { if (lastPong < pingedAt) { @@ -1414,15 +1414,15 @@ public class MapleClient extends ChannelInboundHandlerAdapter { private void announceDisableServerMessage() { if (!this.getWorldServer().registerDisabledServerMessage(player.getId())) { - announce(MaplePacketCreator.serverMessage("")); + sendPacket(PacketCreator.serverMessage("")); } } public void announceServerMessage() { - announce(MaplePacketCreator.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(); @@ -1430,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" + public void sendPacket(Packet packet) { 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(OutPacket outPacket) { - announcerLock.lock(); - try { - ioChannel.writeAndFlush(outPacket.getBytes()); + ioChannel.writeAndFlush(packet); } finally { announcerLock.unlock(); } } public void announceHint(String msg, int length) { - announce(MaplePacketCreator.sendHint(msg, length, 10)); - announce(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.sendHint(msg, length, 10)); + sendPacket(PacketCreator.enableActions()); } public void changeChannel(int channel) { @@ -1488,18 +1464,18 @@ public class MapleClient extends ChannelInboundHandlerAdapter { return; } if (!player.isAlive() || FieldLimit.CANNOTMIGRATE.check(player.getMap().getFieldLimit())) { - announce(MaplePacketCreator.enableActions()); + sendPacket(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()); + 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(MaplePacketCreator.serverNotice(1, "Channel " + channel + " is currently disabled. Try another channel.")); - announce(MaplePacketCreator.enableActions()); + sendPacket(PacketCreator.serverNotice(1, "Channel " + channel + " is currently disabled. Try another channel.")); + sendPacket(PacketCreator.enableActions()); return; } @@ -1530,7 +1506,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { player.setSessionTransitionState(); try { - announce(MaplePacketCreator.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(); } @@ -1586,7 +1562,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { } public void enableCSActions() { - announce(MaplePacketCreator.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 60bf97b092..b0a295f5b4 100644 --- a/src/main/java/client/MapleFamily.java +++ b/src/main/java/client/MapleFamily.java @@ -21,11 +21,12 @@ */ package client; +import net.packet.Packet; 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; @@ -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(MaplePacketCreator.getFamilyInfo(entry)); + chr.sendPacket(PacketCreator.getFamilyInfo(entry)); } } } diff --git a/src/main/java/client/MapleFamilyEntry.java b/src/main/java/client/MapleFamilyEntry.java index e1ad0ecad0..f42cf3d540 100644 --- a/src/main/java/client/MapleFamilyEntry.java +++ b/src/main/java/client/MapleFamilyEntry.java @@ -19,6 +19,13 @@ */ package client; +import net.packet.Packet; +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 +33,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 +265,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.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(MaplePacketCreator.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(MaplePacketCreator.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 1e614cf32d..d0c7465883 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.sendPacket(PacketCreator.addCard(false, cardid, qty + 1)); + c.sendPacket(PacketCreator.showGainCard()); } else { - c.announce(MaplePacketCreator.addCard(true, cardid, 5)); + c.sendPacket(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..0593943e0f 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.sendPacket(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..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.MaplePacketCreator; +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(MaplePacketCreator.showPlayerRanks(9010000, worldRanking)); + player.sendPacket(GuildPackets.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..a6524147e9 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.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(), 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.sendPacket(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.sendPacket(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..f43b066c05 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.sendPacket(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..bca318bb10 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.sendPacket(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.sendPacket(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/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/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..f58898dd43 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.sendPacket(PacketCreator.removeClock()); } } else { try { int seconds = Integer.parseInt(params[0]); for (MapleCharacter victim : player.getWorldServer().getPlayerStorage().getAllCharacters()) { - victim.announce(MaplePacketCreator.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 dfb12c6df5..927dc40571 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.sendPacket(PacketCreator.removeClock()); } else { try { - victim.announce(MaplePacketCreator.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 2096e8f2c3..6b10b51092 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.sendPacket(PacketCreator.removeClock()); } } else { try { int seconds = Integer.parseInt(params[0]); for (MapleCharacter victim : player.getMap().getCharacters()) { - victim.announce(MaplePacketCreator.getClock(seconds)); + victim.sendPacket(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..6f65a11c08 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.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 fe65ab98b5..d4d74e1768 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.sendPacket(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..c6797a62f6 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.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 e2b3cb8594..0703424a44 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.sendPacket(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..1199cdfd2a 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.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(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return false; } if (owner != null) { nItem.setOwner(owner); } - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return false; } - c.announce(MaplePacketCreator.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(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return false; } - c.announce(MaplePacketCreator.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(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(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.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(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return false; } nItem.setPosition(newSlot); item.setPosition(newSlot); - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } else if (quantity == 1) { short newSlot = inv.addItem(item); if (newSlot == -1) { - c.announce(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.getShowInventoryFull()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.getShowInventoryFull()); return false; } item.setPosition(newSlot); - c.announce(MaplePacketCreator.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(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.showItemUnavailable()); + c.sendPacket(PacketCreator.getInventoryFull()); + c.sendPacket(PacketCreator.showItemUnavailable()); return false; } if (show) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.modifyInventory(fromDrop, Collections.singletonList(new ModifyInventory(3, item)))); + c.sendPacket(PacketCreator.modifyInventory(fromDrop, Collections.singletonList(new ModifyInventory(3, item)))); } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.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(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.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(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.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(MaplePacketCreator.getInventoryFull()); - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.getInventoryFull()); + c.sendPacket(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.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(MaplePacketCreator.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(MaplePacketCreator.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)) { @@ -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/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 88a7c0212d..c521148a7c 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.sendPacket(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..b96e10f4c0 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.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 e2634abce6..ccbfd1d232 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.sendPacket(PacketCreator.serverNotice(1, ii.getName(fromLeftover) + " is unavailable for Monster Crystal conversion.")); + c.sendPacket(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.sendPacket(PacketCreator.serverNotice(1, ii.getName(toCreate) + " is unavailable for Monster Crystal disassembly.")); + c.sendPacket(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.sendPacket(PacketCreator.serverNotice(1, "An unknown error occurred when trying to apply that item for disassembly.")); + c.sendPacket(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.sendPacket(PacketCreator.serverNotice(1, "You can only use WATK and MATK Strengthening Gems on weapon items.")); + c.sendPacket(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.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(MaplePacketCreator.serverNotice(1, "You don't have all required items in your inventory to make " + ii.getName(toCreate) + ".")); - c.announce(MaplePacketCreator.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(MaplePacketCreator.serverNotice(1, "You don't have enough mesos (" + GameConstants.numberWithCommas(recipe.getCost()) + ") to complete this operation.")); - c.announce(MaplePacketCreator.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(MaplePacketCreator.serverNotice(1, "You don't have enough level to complete this operation.")); - c.announce(MaplePacketCreator.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(MaplePacketCreator.serverNotice(1, "You don't have enough Maker level to complete this operation.")); - c.announce(MaplePacketCreator.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(MaplePacketCreator.serverNotice(1, "Your inventory is full.")); - c.announce(MaplePacketCreator.makerEnableActions()); + c.sendPacket(PacketCreator.serverNotice(1, "Your inventory is full.")); + c.sendPacket(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.sendPacket(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.sendPacket(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.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(MaplePacketCreator.showMakerEffect(makerSucceeded)); - c.getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.showForeignMakerEffect(c.getPlayer().getId(), makerSucceeded), false); + 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) { 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..45114854bb 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.sendPacket(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.sendPacket(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.sendPacket(PacketCreator.enableActions()); return; } } @@ -178,7 +179,7 @@ public class PetAutopotProcessor { } } - chr.announce(MaplePacketCreator.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 9929e24224..29cc716a31 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.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(MaplePacketCreator.enableActions()); + c.sendPacket(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.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 3d984bae8a..8e955a7d22 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.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(MaplePacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_SAMEACC_ERROR.getCode())); + c.sendPacket(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.sendPacket(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.sendPacket(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.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_ENABLE_ACTIONS.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_ENABLE_ACTIONS.getCode())); } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.removeItemFromDuey(playerRemove, packageid)); + c.sendPacket(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.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_RECEIVER_WITH_UNIQUE.getCode())); + c.sendPacket(PacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_RECEIVER_WITH_UNIQUE.getCode())); } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } c.getPlayer().setNpcCooldown(timeNow); if (quickDelivery) { - c.announce(MaplePacketCreator.sendDuey(0x1A, null)); + c.sendPacket(PacketCreator.sendDuey(0x1A, null)); } else { - c.announce(MaplePacketCreator.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 3b8f0dfa2c..d15b4bf63d 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.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(MaplePacketCreator.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 8251c9791c..37dde5f809 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.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(MaplePacketCreator.getStorageError((byte) 0x0C)); + c.sendPacket(PacketCreator.getStorageError((byte) 0x0C)); return; } int takeoutFee = storage.getTakeOutFee(); if (chr.getMeso() < takeoutFee) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (storage.isFull()) { - c.announce(MaplePacketCreator.getStorageError((byte) 0x11)); + c.sendPacket(PacketCreator.getStorageError((byte) 0x11)); return; } int storeFee = storage.getStoreFee(); if (chr.getMeso() < storeFee) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -144,7 +144,7 @@ public class StorageProcessor { MapleInventoryManipulator.removeFromSlot(c, invType, slot, quantity, false); } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } else if (meso > 0 && (playerMesos + meso) < 0) { meso = Integer.MAX_VALUE - playerMesos; if (meso > storageMesos) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.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 032143883e..0b127535ef 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.sendPacket(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.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(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } if (!player.assignStr(-1)) { player.message("Couldn't execute AP reset operation."); - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } if (!player.assignDex(-1)) { player.message("Couldn't execute AP reset operation."); - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } if (!player.assignInt(-1)) { player.message("Couldn't execute AP reset operation."); - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } if (!player.assignLuk(-1)) { player.message("Couldn't execute AP reset operation."); - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } @@ -546,7 +546,7 @@ public class AssignAPProcessor { } break; default: - c.announce(MaplePacketCreator.updatePlayerStats(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + chr.sendPacket(PacketCreator.enableActions()); return false; } break; default: - chr.announce(MaplePacketCreator.updatePlayerStats(MaplePacketCreator.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 f6f18cfaa6..191cf3aedf 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.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(MaplePacketCreator.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/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/netty/ServerChannelInitializer.java b/src/main/java/net/netty/ServerChannelInitializer.java index 9e520f593d..eb1cf96875 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..31b7c3fc77 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.sendPacket(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.sendPacket(PacketCreator.sendFamilyMessage(76, 0)); + chr.sendPacket(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.sendPacket(PacketCreator.sendFamilyMessage(76, 0)); + chr.sendPacket(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.sendPacket(PacketCreator.getSeniorMessage(inviter.getName())); + c.sendPacket(PacketCreator.getFamilyInfo(chr.getFamilyEntry())); chr.getFamilyEntry().updateSeniorFamilyInfo(true); } else { - inviter.announce(MaplePacketCreator.sendFamilyJoinResponse(false, c.getPlayer().getName())); + inviter.sendPacket(PacketCreator.sendFamilyJoinResponse(false, c.getPlayer().getName())); } } - c.announce(MaplePacketCreator.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 40acfc9259..16e4cd01a5 100644 --- a/src/main/java/net/server/channel/handlers/AdminChatHandler.java +++ b/src/main/java/net/server/channel/handlers/AdminChatHandler.java @@ -3,8 +3,9 @@ package net.server.channel.handlers; import client.MapleClient; import config.YamlConfig; import net.AbstractMaplePacketHandler; +import net.packet.Packet; import tools.LogHelper; -import tools.MaplePacketCreator; +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 = 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 :) + 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 9c8b80a88a..ef48f94718 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.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(MaplePacketCreator.getGMEffect(4, (byte) 0)); + c.sendPacket(PacketCreator.getGMEffect(4, (byte) 0)); } else if (MapleCharacter.ban(victim, reason, false)) { - c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0)); + c.sendPacket(PacketCreator.getGMEffect(4, (byte) 0)); } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.serverNotice(1, message)); - c.announce(MaplePacketCreator.getGMEffect(0x1E, (byte) 1)); + target.getClient().sendPacket(PacketCreator.serverNotice(1, message)); + c.sendPacket(PacketCreator.getGMEffect(0x1E, (byte) 1)); } else { - c.announce(MaplePacketCreator.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 c450f5eae4..88b9979cd3 100644 --- a/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/AllianceOperationHandler.java @@ -24,14 +24,13 @@ package net.server.channel.handlers; import client.MapleCharacter; import client.MapleClient; import net.AbstractMaplePacketHandler; -import net.opcodes.SendOpcode; import net.server.Server; +import net.server.guild.GuildPackets; 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 +44,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { MapleCharacter chr = c.getPlayer(); if (chr.getGuild() == null) { - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } @@ -56,18 +55,18 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler { byte b = slea.readByte(); if (alliance == null) { if (b != 4) { - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } else { if (b == 4) { chr.dropMessage(5, "Your guild is already registered on a guild alliance."); - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (chr.getMGC().getAllianceRank() > 2 || !alliance.getGuilds().contains(chr.getGuildId())) { - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } @@ -75,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) { @@ -131,9 +130,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(), 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 +144,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(), GuildPackets.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(), 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 +174,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(), GuildPackets.changeAllianceRankTitle(alliance.getId(), ranks), -1, -1); break; case 0x09: { int int1 = slea.readInt(); @@ -190,7 +189,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(), GuildPackets.allianceNotice(alliance.getId(), notice), -1, -1); alliance.dropMessage(5, "* Alliance Notice : " + notice); break; @@ -210,7 +209,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(), GuildPackets.getGuildAlliances(alliance, newLeader.getWorld()), -1, -1); alliance.dropMessage("'" + newLeader.getName() + "' has been appointed as the new head of this Alliance."); } @@ -221,58 +220,8 @@ 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(), 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 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/channel/handlers/BBSOperationHandler.java b/src/main/java/net/server/channel/handlers/BBSOperationHandler.java index 83682555b0..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.MaplePacketCreator; 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.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(MaplePacketCreator.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 b0633904a8..47b9c06389 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.sendPacket(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.sendPacket(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.sendPacket(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.sendPacket(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.sendPacket(PacketCreator.updateBuddylist(buddylist.getBuddies())); } } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.updateBuddylist(buddylist.getBuddies())); + c.sendPacket(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.sendPacket(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..1d3927645d 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.sendPacket(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..727a20eaf7 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.sendPacket(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.sendPacket(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.sendPacket(PacketCreator.showBoughtCashPackage(cashPackage, c.getAccID())); } - c.announce(MaplePacketCreator.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()); @@ -109,19 +110,19 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { return; } if (!checkBirthday(c, birthday)) { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC4)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC4)); return; } else if (recipient == null) { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xA9)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xA9)); return; } else if (recipient.get("accountid").equals(String.valueOf(c.getAccID()))) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.showGiftSucceed(recipient.get("name"), cItem)); - c.announce(MaplePacketCreator.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) { @@ -138,7 +139,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { cs.addToWishList(sn); } } - c.announce(MaplePacketCreator.showWishList(chr, true)); + c.sendPacket(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.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())); } @@ -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.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())); } @@ -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.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."); } @@ -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.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."); } @@ -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.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(); @@ -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.sendPacket(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().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(MaplePacketCreator.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(MaplePacketCreator.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)) { @@ -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.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()) { @@ -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.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())); @@ -333,27 +334,27 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } } } else { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC4)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC4)); } - c.announce(MaplePacketCreator.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(MaplePacketCreator.showCashShopMessage((byte) 0xC0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC0)); return; } CashItem item = CashItemFactory.getItem(serialNumber); if (item == null || !item.isOnSale()) { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC0)); return; } int itemId = item.getItemId(); int itemPrice = item.getPrice(); if (itemPrice <= 0) { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC0)); + c.sendPacket(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.sendPacket(PacketCreator.showBoughtQuestItem(itemId)); } } - c.announce(MaplePacketCreator.showCash(c.getPlayer())); + c.sendPacket(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.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) { @@ -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.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())); @@ -399,14 +400,14 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } } } else { - c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC4)); + c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC4)); } - c.announce(MaplePacketCreator.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(MaplePacketCreator.showCashShopMessage((byte)0)); + c.sendPacket(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.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(MaplePacketCreator.showCashShopMessage((byte)0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte)0)); c.enableCSActions(); return; } if(chr.registerNameChange(newName)) { //success Item item = cItem.toItem(); - c.announce(MaplePacketCreator.showNameChangeSuccess(item, c.getAccID())); + c.sendPacket(PacketCreator.showNameChangeSuccess(item, c.getAccID())); cs.gainCash(4, cItem, chr.getWorld()); cs.addToInventory(item); } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.showCashShopMessage((byte)0)); + c.sendPacket(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.sendPacket(PacketCreator.showCashShopMessage((byte)0)); return; } else if(newWorldSelection == c.getWorld()) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.showCashShopMessage((byte)0xDF)); + c.sendPacket(PacketCreator.showCashShopMessage((byte)0xDF)); return; } else if(chr.registerWorldTransfer(newWorldSelection)) { Item item = cItem.toItem(); - c.announce(MaplePacketCreator.showWorldTransferSuccess(item, c.getAccID())); + c.sendPacket(PacketCreator.showWorldTransferSuccess(item, c.getAccID())); cs.gainCash(4, cItem, chr.getWorld()); cs.addToInventory(item); } else { - c.announce(MaplePacketCreator.showCashShopMessage((byte)0)); + c.sendPacket(PacketCreator.showCashShopMessage((byte)0)); } } c.enableCSActions(); @@ -469,7 +470,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { c.releaseClient(); } } else { - c.announce(MaplePacketCreator.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 f5df6a4699..b8b87625e6 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.sendPacket(PacketCreator.onCashGachaponOpenSuccess(c.getAccID(), cssBox.getSN(), cssBox.getQuantity(), cssItem, cssItem.getItemId(), cssItem.getQuantity(), true)); } else { - c.announce(MaplePacketCreator.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 5ea0701d62..071b568090 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.sendPacket(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.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(MaplePacketCreator.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(MaplePacketCreator.lockUI(false)); - c.announce(MaplePacketCreator.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(MaplePacketCreator.blockedMessage(1)); - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } portal.enterPortal(c); } else { - c.announce(MaplePacketCreator.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 1c1f6368df..0709f6170b 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.sendPacket(PacketCreator.enableActions()); return; } if (c.getPlayer().isChangingMaps() || c.getPlayer().isBanned()) { - c.announce(MaplePacketCreator.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 6454a9e256..822dd221b6 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.sendPacket(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..10e8da6a68 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.sendPacket(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.sendPacket(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.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(MaplePacketCreator.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/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..6920594961 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.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(MaplePacketCreator.showBoughtQuestItem(0)); + c.sendPacket(PacketCreator.showBoughtQuestItem(0)); } else { - c.announce(MaplePacketCreator.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/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..d873996092 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.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 b2a2ea2888..72b7139f31 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.sendPacket(PacketCreator.enableActions()); return; } @@ -55,7 +55,7 @@ public final class DoorHandler extends AbstractMaplePacketHandler { } } - c.announce(MaplePacketCreator.blockedMessage(6)); - c.announce(MaplePacketCreator.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 0e67dc43e7..3b28f14b62 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.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 915bf996d2..d66e2d3b8c 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.sendPacket(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.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(MaplePacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); - c.announce(MaplePacketCreator.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(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.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 e6e42a79c5..e766473a5d 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.sendPacket(PacketCreator.enableActions()); } else { if (!YamlConfig.config.server.USE_MTS) { - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(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.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(MaplePacketCreator.serverNotice(5, "Changing channels or entering Cash Shop or MTS are disabled when inside a Mini-Dungeon.")); - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (!chr.isAlive()) { - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (chr.getLevel() < 10) { - c.announce(MaplePacketCreator.blockedMessage2(5)); - c.announce(MaplePacketCreator.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(MaplePacketCreator.openCashShop(c, true)); + c.sendPacket(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.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(MaplePacketCreator.sendMTS(items, 1, 0, 0, pages)); - c.announce(MaplePacketCreator.transferInventory(getTransfer(chr.getId()))); - c.announce(MaplePacketCreator.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 6c9e0d7fcd..ffc8115d25 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.sendPacket(PacketCreator.sendFamilyMessage(65, 0)); } else if(addChr == chr) { //only possible through packet editing/client editing i think? - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if(addChr.getMap() != chr.getMap() || (addChr.isHidden()) && chr.gmLevel() < addChr.gmLevel()) { - c.announce(MaplePacketCreator.sendFamilyMessage(69, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(69, 0)); } else if(addChr.getLevel() <= 10) { - c.announce(MaplePacketCreator.sendFamilyMessage(77, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(77, 0)); } else if(Math.abs(addChr.getLevel() - chr.getLevel()) > 20) { - c.announce(MaplePacketCreator.sendFamilyMessage(72, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(72, 0)); } else if(addChr.getFamily() != null && addChr.getFamily() == chr.getFamily()) { //same family - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if(MapleInviteCoordinator.hasInvite(InviteType.FAMILY, addChr.getId())) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.sendFamilyMessage(76, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(76, 0)); } else { MapleInviteCoordinator.createInvite(InviteType.FAMILY, chr, addChr, addChr.getId()); - addChr.getClient().announce(MaplePacketCreator.sendFamilyInvite(chr.getId(), chr.getName())); + addChr.getClient().sendPacket(PacketCreator.sendFamilyInvite(chr.getId(), chr.getName())); chr.dropMessage("The invite has been sent."); - c.announce(MaplePacketCreator.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 7da34c29f2..1ea23d9f5b 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.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 d1a69822b0..02293785ac 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.sendPacket(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.sendPacket(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.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 9f39b745f8..dcbd6b22d9 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.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 344f8b541d..97f1e2abbf 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.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.sendFamilyMessage(75, 0)); + c.sendPacket(PacketCreator.sendFamilyMessage(75, 0)); return; } } } } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.getFamilyInfo(entry)); + entry.getChr().sendPacket(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..8c0f08af84 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.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 6f56b1a16b..cdad5a31c7 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.sendPacket(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..399b8499b7 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.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/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..4434ac29dd 100644 --- a/src/main/java/net/server/channel/handlers/GuildOperationHandler.java +++ b/src/main/java/net/server/channel/handlers/GuildOperationHandler.java @@ -28,12 +28,13 @@ 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; 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 +60,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { int allianceId = -1; switch (type) { case 0x00: - //c.announce(MaplePacketCreator.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(MaplePacketCreator.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, 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().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(MaplePacketCreator.updateGP(mc.getGuildId(), 0)); + c.sendPacket(GuildPackets.updateGP(mc.getGuildId(), 0)); Server.getInstance().leaveGuild(mc.getMGC()); - c.announce(MaplePacketCreator.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, MaplePacketCreator.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(MaplePacketCreator.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(), MaplePacketCreator.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/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..71c3a25847 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.sendPacket(PacketCreator.getMiniRoomError(13)); return; } } else { - chr.announce(MaplePacketCreator.getMiniRoomError(13)); + chr.sendPacket(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.sendPacket(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.sendPacket(PacketCreator.hiredMerchantBox()); } else { - chr.announce(MaplePacketCreator.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 ae8c2feb3b..5a09df8d85 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.sendPacket(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.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 b993695db8..028db91ac9 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.sendPacket(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.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 959232cd98..2ad2df288d 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.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 6fc7586ecf..eeeee09d7c 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.sendPacket(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.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 7a71d85ce5..7d5e223bbb 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.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 97fce7ec6c..007565f827 100644 --- a/src/main/java/net/server/channel/handlers/MTSHandler.java +++ b/src/main/java/net/server/channel/handlers/MTSHandler.java @@ -29,12 +29,13 @@ 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; import server.MapleItemInformationProvider; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.data.input.SeekableLittleEndianAccessor; @@ -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(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.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(MaplePacketCreator.MTSConfirmSell()); - c.announce(getMTS(1, 0, 0)); + c.sendPacket(PacketCreator.MTSConfirmSell()); + c.sendPacket(getMTS(1, 0, 0)); c.enableCSActions(); - c.announce(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.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(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.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(MaplePacketCreator.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.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(MaplePacketCreator.notYetSoldInv(getNotYetSold(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.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(MaplePacketCreator.MTSConfirmTransfer(i.getQuantity(), i.getPosition())); - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); - c.announce(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.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(MaplePacketCreator.transferInventory(getTransfer(c.getPlayer().getId()))); - c.announce(MaplePacketCreator.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(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.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(MaplePacketCreator.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(MaplePacketCreator.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(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.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(MaplePacketCreator.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(MaplePacketCreator.MTSFailBuy()); + c.sendPacket(PacketCreator.MTSFailBuy()); } } else { System.out.println("Unhandled OP(MTS): " + op + " Packet: " + slea.toString()); } } else { - c.announce(MaplePacketCreator.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; @@ -668,7 +669,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) { @@ -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; @@ -803,10 +804,10 @@ 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) { + public Packet getMTSSearch(int tab, int type, int cOi, String search, int page) { List items = new ArrayList<>(); MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); String listaitems = ""; @@ -904,6 +905,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..963f0cc0ca 100644 --- a/src/main/java/net/server/channel/handlers/MagicDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/MagicDamageHandler.java @@ -21,19 +21,16 @@ */ 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; import constants.skills.Evan; import constants.skills.FPArchMage; import constants.skills.ILArchMage; +import net.packet.Packet; import server.MapleStatEffect; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class MagicDamageHandler extends AbstractDealDamageHandler { @@ -59,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(MaplePacketCreator.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 = MaplePacketCreator.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); @@ -73,7 +70,7 @@ public final class MagicDamageHandler extends AbstractDealDamageHandler { if (chr.skillIsCooling(attack.skill)) { return; } else { - c.announce(MaplePacketCreator.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 e401d00582..196fbe327a 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.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } finally { c.releaseClient(); } } else { - c.announce(MaplePacketCreator.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 e30b9a8aca..1a84d63bef 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.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(MaplePacketCreator.messengerInvite(c.getPlayer().getName(), messenger.getId())); - c.announce(MaplePacketCreator.messengerNote(input, 4, 1)); + target.sendPacket(PacketCreator.messengerInvite(c.getPlayer().getName(), messenger.getId())); + c.sendPacket(PacketCreator.messengerNote(input, 4, 1)); } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.messengerNote(input, 4, 0)); + c.sendPacket(PacketCreator.messengerNote(input, 4, 0)); } } } else { - c.announce(MaplePacketCreator.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 39c318e64b..0f921988c0 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.sendPacket(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..b7b74987ce 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.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 7878dd3254..4ca4d92e78 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.sendPacket(PacketCreator.CPQMessage((byte) 1)); + c.sendPacket(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.sendPacket(PacketCreator.CPQMessage((byte) 2)); + c.sendPacket(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.sendPacket(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.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(MaplePacketCreator.CPQMessage((byte) 1)); - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.CPQMessage((byte) 1)); + c.sendPacket(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.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(MaplePacketCreator.CPQMessage((byte) 1)); - c.announce(MaplePacketCreator.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(MaplePacketCreator.CPQMessage((byte) 2)); - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.CPQMessage((byte) 2)); + c.sendPacket(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.sendPacket(PacketCreator.CPQMessage((byte) 3)); break; case 0: - c.announce(MaplePacketCreator.CPQMessage((byte) 4)); + c.sendPacket(PacketCreator.CPQMessage((byte) 4)); break; default: - c.announce(MaplePacketCreator.CPQMessage((byte) 3)); + c.sendPacket(PacketCreator.CPQMessage((byte) 3)); } - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(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..e9b5ce4dfc 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().broadcastGMPacket(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..0bbf41d8aa 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.sendPacket(PacketCreator.moveMonsterResponse(objectid, moveid, mobMp, aggro, nextSkillId, nextSkillLevel)); } else { - c.announce(MaplePacketCreator.moveMonsterResponse(objectid, moveid, mobMp, aggro)); + c.sendPacket(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/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 73fec20467..4cffe9c820 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.sendPacket(PacketCreator.enableActions()); return; } if(currentServerTime() - c.getPlayer().getNpcCooldown() < YamlConfig.config.server.BLOCK_NPC_RACE_CONDT) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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 af7d3102bb..4bee6e232c 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.sendPacket(PacketCreator.onNewYearCardRes(player, newyear, 4, 0)); // successfully sent } else { - player.announce(MaplePacketCreator.onNewYearCardRes(player, -1, 5, 0xF)); // cannot send to yourself + player.sendPacket(PacketCreator.onNewYearCardRes(player, -1, 5, 0xF)); // cannot send to yourself } } else { - player.announce(MaplePacketCreator.onNewYearCardRes(player, -1, 5, 0x13)); // cannot find such character + player.sendPacket(PacketCreator.onNewYearCardRes(player, -1, 5, 0x13)); // cannot find such character } } else { - player.announce(MaplePacketCreator.onNewYearCardRes(player, -1, 5, 0x10)); // inventory full + player.sendPacket(PacketCreator.onNewYearCardRes(player, -1, 5, 0x10)); // inventory full } } else { - player.announce(MaplePacketCreator.onNewYearCardRes(player, -1, 5, status)); // item and inventory errors + player.sendPacket(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.sendPacket(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.sendPacket(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.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 9c7689bc38..e151dd4e97 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.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 0811842ed8..5f8f834078 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.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 444cc9161a..eb3c02de09 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.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 5eab87fa5b..587ecb8dde 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.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(MaplePacketCreator.getOwlMessage(1)); - else c.announce(MaplePacketCreator.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(MaplePacketCreator.getOwlMessage(2)); - else c.announce(MaplePacketCreator.getOwlMessage(17)); + if(!ps.isBanned(c.getPlayer().getName())) c.sendPacket(PacketCreator.getOwlMessage(2)); + else c.sendPacket(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.sendPacket(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); + c.sendPacket(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.sendPacket(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.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(MaplePacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); - c.announce(MaplePacketCreator.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(MaplePacketCreator.getHiredMerchant(c.getPlayer(), hm, false)); + c.sendPacket(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.sendPacket(PacketCreator.serverNotice(1, hm.getOwner() + "'s merchant is full. Wait awhile before trying again.")); + c.sendPacket(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.sendPacket(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); + c.sendPacket(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.sendPacket(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.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(MaplePacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); - c.announce(MaplePacketCreator.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 4977ce0137..443dd9b107 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.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.partyInvite(player)); + invited.sendPacket(PacketCreator.partyInvite(player)); } else { - c.announce(MaplePacketCreator.partyStatusMessage(22, invited.getName())); + c.sendPacket(PacketCreator.partyStatusMessage(22, invited.getName())); } } else { - c.announce(MaplePacketCreator.partyStatusMessage(17)); + c.sendPacket(PacketCreator.partyStatusMessage(17)); } } else { - c.announce(MaplePacketCreator.partyStatusMessage(16)); + c.sendPacket(PacketCreator.partyStatusMessage(16)); } } else { - c.announce(MaplePacketCreator.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 ca7f1c53f1..eb8c569e22 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.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(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(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..8f16b27b59 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.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(MaplePacketCreator.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 8b794344f2..e3cda96fcb 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.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (chr.isEquippedPetItemIgnore()) { final Set petIgnore = chr.getExcludedItems(); if(!petIgnore.isEmpty() && petIgnore.contains(Integer.MAX_VALUE)) { - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } } else { if (!chr.isEquippedItemPouch()) { - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if (chr.isEquippedPetItemIgnore()) { final Set petIgnore = chr.getExcludedItems(); if(!petIgnore.isEmpty() && petIgnore.contains(mapitem.getItem().getItemId())) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.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 a066a7fbb2..373a23b320 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.sendPacket(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.sendPacket(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.sendPacket(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.sendPacket(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.sendPacket(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.sendPacket(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.sendPacket(PacketCreator.getMiniRoomError(15)); return; } int status = establishMiniroomStatus(chr, false); if (status > 0) { - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(status)); + chr.sendPacket(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.sendPacket(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.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(MaplePacketCreator.getHiredMerchant(chr, merchant, true)); + chr.sendPacket(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.sendPacket(PacketCreator.getMiniRoomError(2)); return; } } else { @@ -311,10 +303,10 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { break; } } else { - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(2)); + chr.sendPacket(PacketCreator.getMiniRoomError(2)); } } else { - chr.getClient().announce(MaplePacketCreator.getMiniRoomError(22)); + chr.sendPacket(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.sendPacket(PacketCreator.serverNotice(1, "Please check again the birthday date.")); return; } - c.announce(MaplePacketCreator.hiredMerchantOwnerMaintenanceLeave()); + c.sendPacket(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().sendPacket(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.sendPacket(PacketCreator.enableActions()); return; } if (item == null) { - c.announce(MaplePacketCreator.serverNotice(1, "Invalid item description.")); - c.announce(MaplePacketCreator.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(MaplePacketCreator.serverNotice(1, "Pets are not allowed to be traded.")); + c.sendPacket(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.sendPacket(PacketCreator.serverNotice(1, "Cash items are not allowed to be traded.")); } - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(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.sendPacket(PacketCreator.serverNotice(1, "You don't have enough quantity of the item.")); + c.sendPacket(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.sendPacket(PacketCreator.serverNotice(1, "That item is untradeable.")); + c.sendPacket(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.sendPacket(PacketCreator.serverNotice(1, "Invalid item description.")); + c.sendPacket(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().sendPacket(PacketCreator.getTradeItemAdd((byte) 0, tradeItem)); if (trade.getPartner() != null) { - trade.getPartner().getChr().announce(MaplePacketCreator.getTradeItemAdd((byte) 1, tradeItem)); + trade.getPartner().getChr().sendPacket(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.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(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.sendPacket(PacketCreator.serverNotice(1, "Could not perform shop operation with that item.")); + c.sendPacket(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.sendPacket(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.sendPacket(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.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(MaplePacketCreator.serverNotice(1, "You can't sell it anymore.")); + c.sendPacket(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.sendPacket(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.sendPacket(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.sendPacket(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.sendPacket(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.sendPacket(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.sendPacket(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.sendPacket(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.sendPacket(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.sendPacket(PacketCreator.getMiniRoomError(13)); return false; } } else { - chr.announce(MaplePacketCreator.getMiniRoomError(13)); + chr.sendPacket(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.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 dfa22824e4..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; @@ -43,10 +44,10 @@ 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; +import tools.packets.WeddingPackets; import java.sql.Connection; import java.sql.PreparedStatement; @@ -84,12 +85,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.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(MaplePacketCreator.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(MaplePacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } @@ -213,7 +214,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { player.silentApplyDiseases(diseases); } - c.announce(MaplePacketCreator.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(MaplePacketCreator.sendAutoHpPot(autohpPot != null ? autohpPot.getAction() : 0)); + player.sendPacket(PacketCreator.sendAutoHpPot(autohpPot != null ? autohpPot.getAction() : 0)); MapleKeyBinding autompPot = player.getKeymap().get(92); - player.announce(MaplePacketCreator.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(MaplePacketCreator.updateBuddylist(bl.getBuddies())); + c.sendPacket(PacketCreator.updateBuddylist(bl.getBuddies())); - c.announce(MaplePacketCreator.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(MaplePacketCreator.getFamilyInfo(familyEntry)); - familyEntry.announceToSenior(MaplePacketCreator.sendFamilyLoginNotice(player.getName(), true), true); + 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(MaplePacketCreator.getFamilyInfo(null)); + c.sendPacket(PacketCreator.getFamilyInfo(null)); } } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.updateAllianceInfo(newAlliance, c.getWorld())); - c.announce(MaplePacketCreator.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, MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.updateBuddylist(player.getBuddylist().getBuddies())); + c.sendPacket(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.sendPacket(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); } - c.announce(MaplePacketCreator.updateGender(player)); + c.sendPacket(PacketCreator.updateGender(player)); player.checkMessenger(); - c.announce(MaplePacketCreator.enableReport()); + c.sendPacket(PacketCreator.enableReport()); player.changeSkillLevel(SkillFactory.getSkill(10000000 * player.getJobType() + 12), (byte) (player.getLinkedLevel() / 10), 20, -1); player.checkBerserk(player.isHidden()); @@ -345,24 +346,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.sendPacket(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.sendPacket(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.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())); } } @@ -427,7 +428,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { npcsIds.put(YamlConfig.config.server.REBIRTH_NPC_ID, "Rebirth"); } - c.announce(MaplePacketCreator.setNPCScriptable(npcsIds)); + c.sendPacket(PacketCreator.setNPCScriptable(npcsIds)); } if (newcomer) player.setLoginTime(System.currentTimeMillis()); @@ -449,7 +450,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { ps2.setInt(1, player.getId()); ps2.executeUpdate(); - c.announce(MaplePacketCreator.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 760cd41bc9..9e1fed873e 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.sendPacket(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.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 f3eea78053..8ff86854a6 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.sendPacket(PacketCreator.rpsMesoError(-1)); } break; case 1: // answer if(rps == null || !rps.answer(c, slea.readByte())){ - c.announce(MaplePacketCreator.rpsMode((byte) 0x0D));// 13 + c.sendPacket(PacketCreator.rpsMode((byte) 0x0D));// 13 } break; case 2: // time over if(rps == null || !rps.timeOut(c)){ - c.announce(MaplePacketCreator.rpsMode((byte) 0x0D)); + c.sendPacket(PacketCreator.rpsMode((byte) 0x0D)); } break; case 3: // continue if(rps == null || !rps.nextRound(c)){ - c.announce(MaplePacketCreator.rpsMode((byte) 0x0D)); + c.sendPacket(PacketCreator.rpsMode((byte) 0x0D)); } break; case 4: // leave if(rps != null){ rps.dispose(c); }else{ - c.announce(MaplePacketCreator.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 b0ad63342a..aaf4f237dd 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.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(MaplePacketCreator.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 5b7f7e19cb..b61c193f16 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,11 @@ 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 net.packet.Packet; import server.MapleItemInformationProvider; import server.MapleStatEffect; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Randomizer; import tools.data.input.SeekableLittleEndianAccessor; @@ -72,21 +63,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.sendPacket(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 +102,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.sendPacket(PacketCreator.skillCooldown(attack.skill, effect.getCooldown())); } if(attack.skill == 4111004) { // shadow meso @@ -197,16 +188,16 @@ public final class RangedAttackHandler extends AbstractDealDamageHandler { visProjectile = 0; } - byte[] packet; + final Packet packet; switch (attack.skill) { case 3121004: // Hurricane 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 +209,7 @@ public final class RangedAttackHandler extends AbstractDealDamageHandler { if (chr.skillIsCooling(attack.skill)) { return; } else { - c.announce(MaplePacketCreator.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 0a24fe84d7..bda4500775 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.sendPacket(PacketCreator.remoteChannelChange((byte) (hm.getChannel() - 1))); } return; } else { chr.dropMessage(1, "You don't have a Merchant open."); } - c.announce(MaplePacketCreator.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 2cc21962f1..3d4a1635c4 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.sendPacket(PacketCreator.reportResponse((byte) 4)); return; } } else { - c.announce(MaplePacketCreator.reportResponse((byte) 2)); + c.sendPacket(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.sendPacket(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..f2e9a5d0ef 100644 --- a/src/main/java/net/server/channel/handlers/RingActionHandler.java +++ b/src/main/java/net/server/channel/handlers/RingActionHandler.java @@ -35,10 +35,10 @@ 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; +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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } if((itemId != 4031377 && itemId != 4031395) || !c.getPlayer().haveItem(itemId)) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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 d8b9911855..2bb16041ad 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.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(MaplePacketCreator.getScrollEffect(c.getPlayer().getId(), Equip.ScrollResult.FAIL, false, false)); + c.sendPacket(PacketCreator.getScrollEffect(c.getPlayer().getId(), Equip.ScrollResult.FAIL, false, false)); } else { - c.announce(MaplePacketCreator.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 9ff146ecb6..37bee76147 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.sendPacket(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..93935599b6 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.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; @@ -85,7 +79,7 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler { cooldownTime /= 60; } - c.announce(MaplePacketCreator.skillCooldown(skillid, cooldownTime)); + c.sendPacket(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.sendPacket(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.sendPacket(PacketCreator.enableActions()); } } else { - c.announce(MaplePacketCreator.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 46d4bff57f..9c0f142d82 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.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/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..6acda7e7e0 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.sendPacket(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.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 be241138b5..5679254814 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.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 d434fae6be..6aebf3b4a7 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.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC4)); + c.sendPacket(PacketCreator.enableActions()); return; } if(!YamlConfig.config.server.ALLOW_CASHSHOP_NAME_CHANGE) { - c.announce(MaplePacketCreator.sendNameTransferRules(4)); + c.sendPacket(PacketCreator.sendNameTransferRules(4)); return; } MapleCharacter chr = c.getPlayer(); if(chr.getLevel() < 10) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.sendNameTransferRules(1)); + c.sendPacket(PacketCreator.sendNameTransferRules(1)); return; } else if(completedTimestamp.getTime() + YamlConfig.config.server.NAME_CHANGE_COOLDOWN > System.currentTimeMillis()) { - c.announce(MaplePacketCreator.sendNameTransferRules(3)); + c.sendPacket(PacketCreator.sendNameTransferRules(3)); return; } } @@ -78,6 +78,6 @@ public final class TransferNameHandler extends AbstractMaplePacketHandler { e.printStackTrace(); return; } - c.announce(MaplePacketCreator.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 aca218c523..fbe86a1f68 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.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 b34078c1b4..6dcee7e311 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.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(MaplePacketCreator.sendWorldTransferRules(9, c)); + c.sendPacket(PacketCreator.sendWorldTransferRules(9, c)); return; } int worldTransferError = chr.checkWorldTransferEligibility(); if(worldTransferError != 0) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.sendWorldTransferRules(6, c)); + c.sendPacket(PacketCreator.sendWorldTransferRules(6, c)); return; } else if(completedTimestamp.getTime() + YamlConfig.config.server.WORLD_TRANSFER_COOLDOWN > System.currentTimeMillis()) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.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 0f0c34364b..a261a0f41e 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.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(MaplePacketCreator.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 3cf50014fd..de4ef33990 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; @@ -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(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } - + position = toUse.getPosition(); } - + if (toUse.getQuantity() < 1) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } else if (itemType == 505) { // AP/SP reset - if(!player.isAlive()) { - c.announce(MaplePacketCreator.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; } } @@ -254,14 +258,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; @@ -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(), 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, ear)); } - + break; case 6: //item megaphone String msg = medal + player.getName() + " : " + slea.readMapleAsciiString(); @@ -313,10 +317,10 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { { return; } - + // 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,18 +333,18 @@ 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); } 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(MaplePacketCreator.sendCannotSpawnKite()); + c.sendPacket(PacketCreator.sendCannotSpawnKite()); } } else if (itemType == 509) { String sendTo = slea.readMapleAsciiString(); @@ -352,7 +356,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,41 +369,46 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler { } else if (itemType == 517) { MaplePet pet = player.getPet(0); if (pet == null) { - c.announce(MaplePacketCreator.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, MaplePacketCreator.changePetName(player, newName, 1), true); - c.announce(MaplePacketCreator.enableActions()); + } + + player.getMap().broadcastMessage(player, PacketCreator.changePetName(player, newName, 1), true); + 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(MaplePacketCreator.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(MaplePacketCreator.owlOfMinerva(c, itemid, hmsAvailable)); - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if (itemType == 530) { ii.getItemEffect(itemId).applyTo(player); remove(c, position, itemId); @@ -418,41 +427,41 @@ 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.sendPacket(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.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, 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())); - } else if(itemId == 5401000) { //world transfer - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.sendMapleLifeNameError()); + if (createStatus == -1) { // check name + c.sendPacket(PacketCreator.sendMapleLifeNameError()); } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } else if (itemType == 550) { //Extend item expiration - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } - + MapleKarmaManipulator.setKarmaFlag(item); player.forceUpdateItem(item); remove(c, position, itemId); - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } else if (itemType == 552) { //DS EGG THING - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.sendVegaScroll(0x40)); - + c.sendPacket(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.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + client.sendPacket(PacketCreator.enableActions()); }, 1000 * 3); } else { - System.out.println("NEW CASH ITEM: " + itemType + "\n" + slea.toString()); - c.announce(MaplePacketCreator.enableActions()); + System.out.println("NEW CASH ITEM: " + itemType + "\n" + slea); + c.sendPacket(PacketCreator.enableActions()); } } @@ -612,7 +611,7 @@ client.announce(MaplePacketCreator.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 ef3ee4b444..f20b5e4c57 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.sendPacket(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.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(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.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(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.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(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.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(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.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(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.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(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.sendPacket(PacketCreator.catchMessage(0)); } } - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(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.sendPacket(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.sendPacket(PacketCreator.catchMessage(0)); } } else { chr.message("You cannot use the Fishing Net yet."); } } } - c.announce(MaplePacketCreator.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 d750301b40..a8579a0397 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.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 61b8c27bf5..5356016443 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.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 dc80c8960e..57802103de 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.sendPacket(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..7a716b28b2 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.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(MaplePacketCreator.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 4c45d4e593..36a2000e9b 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.sendPacket(PacketCreator.sendMapleLifeError(3)); + c.sendPacket(PacketCreator.enableActions()); return; } player.setLastUsedCashItem(timeNow); String name = slea.readMapleAsciiString(); if(MapleCharacter.canCreateChar(name)) { - c.announce(MaplePacketCreator.sendMapleLifeCharacterInfo()); + c.sendPacket(PacketCreator.sendMapleLifeCharacterInfo()); } else { - c.announce(MaplePacketCreator.sendMapleLifeNameError()); + c.sendPacket(PacketCreator.sendMapleLifeNameError()); } - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(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..c8d21ef126 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.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 972e7dc69a..dbc984b42c 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.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 da8d730d68..3b9322d072 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.sendPacket(PacketCreator.enableActions()); return; } slea.readInt(); @@ -58,6 +58,6 @@ public final class UseSummonBagHandler extends AbstractMaplePacketHandler { } } } - c.announce(MaplePacketCreator.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 677f119786..0d9f4c3f41 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 tools.packets.WeddingPackets; + import java.util.Collections; import java.util.List; @@ -73,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 { @@ -88,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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } } else if (mode == 7) { // take items slea.readByte(); // invType @@ -116,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 { @@ -135,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(MaplePacketCreator.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 607cc7d194..dec9329860 100644 --- a/src/main/java/net/server/channel/handlers/WeddingTalkHandler.java +++ b/src/main/java/net/server/channel/handlers/WeddingTalkHandler.java @@ -23,9 +23,9 @@ 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; +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(MaplePacketCreator.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 d557b15912..fd77aacc28 100644 --- a/src/main/java/net/server/channel/handlers/WeddingTalkMoreHandler.java +++ b/src/main/java/net/server/channel/handlers/WeddingTalkMoreHandler.java @@ -23,9 +23,9 @@ 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; +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(MaplePacketCreator.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 1d622d16ff..db0bbf9c29 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.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(MaplePacketCreator.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(MaplePacketCreator.getFindResult(target, RT_SAME_CHANNEL, target.getMapId(), flag)); + user.sendPacket(PacketCreator.getFindResult(target, RT_SAME_CHANNEL, target.getMapId(), flag)); } else { - user.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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 6c42b38dbb..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,14 +22,16 @@ 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 java.util.Set; -import net.server.Server; import net.server.world.MapleParty; -import tools.MaplePacketCreator; + +import java.util.Set; /** * @@ -40,7 +42,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.sendPacket(GuildPackets.genericGuildMessage((byte) 0x26)); } } } @@ -55,11 +57,11 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { @Override public void onMatchCreated(MapleCharacter leader, Set nonLeaderMatchPlayers, String message) { - byte[] createGuildPacket = MaplePacketCreator.createGuildMessage(leader.getName(), message); + Packet createGuildPacket = GuildPackets.createGuildMessage(leader.getName(), message); for (MapleCharacter chr : nonLeaderMatchPlayers) { if (chr.isLoggedinWorld()) { - chr.announce(createGuildPacket); + chr.sendPacket(createGuildPacket); } } } @@ -111,7 +113,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { int gid = Server.getInstance().createGuild(leader.getId(), message); if (gid == 0) { - leader.announce(MaplePacketCreator.genericGuildMessage((byte) 0x23)); + leader.sendPacket(GuildPackets.genericGuildMessage((byte) 0x23)); broadcastGuildCreationDismiss(matchPlayers); return; } @@ -121,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(MaplePacketCreator.showGuildInfo(leader)); + leader.sendPacket(GuildPackets.showGuildInfo(leader)); leader.dropMessage(1, "You have successfully created a Guild."); for (MapleCharacter chr : matchPlayers) { @@ -135,7 +137,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { Server.getInstance().addGuildMember(mgc, chr); if (chr.isLoggedinWorld()) { - chr.announce(MaplePacketCreator.showGuildInfo(chr)); + chr.sendPacket(GuildPackets.showGuildInfo(chr)); if (cofounder) { chr.dropMessage(1, "You have successfully cofounded a Guild."); @@ -159,7 +161,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { } if (chr.isLoggedinWorld()) { - chr.announce(MaplePacketCreator.genericGuildMessage((byte)0x26)); + chr.sendPacket(GuildPackets.genericGuildMessage((byte)0x26)); } } } @@ -189,7 +191,7 @@ public class MatchCheckerGuildCreation implements MatchCheckerListenerRecipe { if (chr.isLoggedinWorld()) { chr.message(msg); - chr.announce(MaplePacketCreator.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 4dcbb2f54a..408dfa315c 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.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..f63a748da8 --- /dev/null +++ b/src/main/java/net/server/guild/GuildPackets.java @@ -0,0 +1,590 @@ +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; + } + + + 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/net/server/guild/MapleAlliance.java b/src/main/java/net/server/guild/MapleAlliance.java index 3aa405f2e7..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.MaplePacketCreator; 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, 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, MaplePacketCreator.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(), MaplePacketCreator.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(), 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(), 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(MaplePacketCreator.updateAllianceInfo(this, chr.getWorld())); - this.broadcastMessage(MaplePacketCreator.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(MaplePacketCreator.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 2c7f82e5da..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; @@ -34,7 +35,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 +185,7 @@ public class MapleGuild { membersLock.lock(); try { - this.broadcast(MaplePacketCreator.guildDisband(this.id)); + this.broadcast(GuildPackets.guildDisband(this.id)); } finally { membersLock.unlock(); } @@ -279,8 +280,8 @@ public class MapleGuild { continue; } - byte[] packet = MaplePacketCreator.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 = MaplePacketCreator.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 = MaplePacketCreator.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(MaplePacketCreator.guildMemberOnline(id, cid, online), cid); + this.broadcast(GuildPackets.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(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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.changeRank(mgc)); + this.broadcast(GuildPackets.changeRank(mgc)); } finally { membersLock.unlock(); } @@ -580,7 +580,7 @@ public class MapleGuild { membersLock.lock(); try { - this.broadcast(MaplePacketCreator.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(MaplePacketCreator.guildMemberLevelJobUpdate(mgc)); + this.broadcast(GuildPackets.guildMemberLevelJobUpdate(mgc)); break; } } @@ -624,7 +624,7 @@ public class MapleGuild { membersLock.lock(); try { - this.broadcast(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.updateGP(this.id, this.gp)); - this.guildMessage(MaplePacketCreator.getGPMessage(amount)); + 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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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 b8c04e1832..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.MaplePacketCreator; +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 MaplePacketCreator.responseGuildMessage((byte) value, targetName); + return GuildPackets.responseGuildMessage((byte) value, targetName); } else { - return MaplePacketCreator.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 6da4ae94d8..7b69f880a3 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.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 52268c15a1..d6771a0cd9 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.sendPacket(PacketCreator.getAuthSuccess(c)); } else { - c.announce(MaplePacketCreator.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 2a4b306665..5c66d75284 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.sendPacket(PacketCreator.registerPin()); } else { - c.announce(MaplePacketCreator.requestPin()); + c.sendPacket(PacketCreator.requestPin()); } } else if (c2 == 1 && c3 == 0) { String pin = slea.readMapleAsciiString(); if (c.checkPin(pin)) { - c.announce(MaplePacketCreator.pinAccepted()); + c.sendPacket(PacketCreator.pinAccepted()); } else { - c.announce(MaplePacketCreator.requestPinAfterFailure()); + c.sendPacket(PacketCreator.requestPinAfterFailure()); } } else if (c2 == 2 && c3 == 0) { String pin = slea.readMapleAsciiString(); if (c.checkPin(pin)) { - c.announce(MaplePacketCreator.registerPin()); + c.sendPacket(PacketCreator.registerPin()); } else { - c.announce(MaplePacketCreator.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 b879b30c21..d39311c5ad 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.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(MaplePacketCreator.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(MaplePacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } String[] socket = server.getInetSocket(c, c.getWorld(), c.getChannel()); if(socket == null) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.sendPacket(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.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 7311b931df..c6eb13ca78 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.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(MaplePacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } String[] socket = server.getInetSocket(c, c.getWorld(), c.getChannel()); if(socket == null) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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 66c290d3b7..d34c7bfa76 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.sendPacket(PacketCreator.getServerStatus(2)); return; } int channel = slea.readByte() + 1; Channel ch = wserv.getChannel(channel); if(ch == null) { - c.announce(MaplePacketCreator.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 dc27beedb7..696c236516 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.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 ae709f4e02..6c3c13f4aa 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.sendPacket(PacketCreator.deleteCharResponse(0, 9)); return; } if (status == -2) { - c.announce(MaplePacketCreator.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 a57c1db128..e1f5626825 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.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(MaplePacketCreator.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(MaplePacketCreator.deleteCharResponse(cid, 0x1A)); + c.sendPacket(PacketCreator.deleteCharResponse(cid, 0x1A)); return; } } } catch (SQLException e) { e.printStackTrace(); - c.announce(MaplePacketCreator.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(MaplePacketCreator.deleteCharResponse(cid, 0)); + c.sendPacket(PacketCreator.deleteCharResponse(cid, 0)); } else { - c.announce(MaplePacketCreator.deleteCharResponse(cid, 0x09)); + c.sendPacket(PacketCreator.deleteCharResponse(cid, 0x09)); } } else { - c.announce(MaplePacketCreator.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 8ad0f707d7..09979eee8f 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.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 3928d9506c..31594ac886 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.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(MaplePacketCreator.getLoginFailed(3)); + c.sendPacket(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.sendPacket(PacketCreator.getTempBan(tempban.getTimeInMillis(), c.getGReason())); return; } } if (loginok == 3) { - c.announce(MaplePacketCreator.getPermBan(c.getGReason()));//crashes but idc :D + c.sendPacket(PacketCreator.getPermBan(c.getGReason()));//crashes but idc :D return; } else if (loginok != 0) { - c.announce(MaplePacketCreator.getLoginFailed(loginok)); + c.sendPacket(PacketCreator.getLoginFailed(loginok)); return; } if (c.finishLogin() == 0) { c.checkChar(c.getAccID()); login(c); } else { - c.announce(MaplePacketCreator.getLoginFailed(7)); + c.sendPacket(PacketCreator.getLoginFailed(7)); } } private static void login(MapleClient c) { - c.announce(MaplePacketCreator.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 8d3f4a7ad8..de7c850d60 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.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(MaplePacketCreator.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(MaplePacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } String[] socket = server.getInetSocket(c, c.getWorld(), c.getChannel()); if(socket == null) { - c.announce(MaplePacketCreator.getAfterLoginError(10)); + c.sendPacket(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.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 d35d6717e7..1caa92af07 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.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 0e16342a07..4a5a0c2a8d 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.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 b2c37b302a..fe0588600c 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.sendPacket(PacketCreator.getServerStatus(status)); } else { - c.announce(MaplePacketCreator.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 9391bafac4..b71fb74062 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.sendPacket(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.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 50c9292643..548a302611 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.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 edf3a5f7dc..a31ea3fe3a 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.sendPacket(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.sendPacket(PacketCreator.showAllCharacter(charsSize, unk)); for (Pair> wchars : worldChars) { - c.announce(MaplePacketCreator.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 a2fc4842b5..a4ee26afa5 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.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.getAfterLoginError(10)); + c.sendPacket(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.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 82157f8c89..8320ff5681 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.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.getAfterLoginError(10)); + c.sendPacket(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.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 2b3a33e14c..8dfeb6cac3 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.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(MaplePacketCreator.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(MaplePacketCreator.getAfterLoginError(10)); + c.sendPacket(PacketCreator.getAfterLoginError(10)); return; } AntiMulticlientResult res = SessionCoordinator.getInstance().attemptGameSession(c, c.getAccID(), hwid); if (res != AntiMulticlientResult.SUCCESS) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.wrongPic()); + c.sendPacket(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..e9a05766ea 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.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(MaplePacketCreator.partyCreated(party, partyplayer.getId())); + player.sendPacket(PacketCreator.partyCreated(party, partyplayer.getId())); return true; } else { if (!silentCheck) { - player.announce(MaplePacketCreator.partyStatusMessage(16)); + player.sendPacket(PacketCreator.partyStatusMessage(16)); } return false; @@ -380,15 +380,15 @@ public class MapleParty { return true; } else { if (!silentCheck) { - player.announce(MaplePacketCreator.partyStatusMessage(17)); + player.sendPacket(PacketCreator.partyStatusMessage(17)); } } } else { - player.announce(MaplePacketCreator.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(MaplePacketCreator.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 c4fb749fa6..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; @@ -55,7 +57,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 +677,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().broadcastPacket(mc, GuildPackets.guildNameChanged(cid, guild.getName())); + mc.getMap().broadcastPacket(mc, GuildPackets.guildMarkChanged(cid, guild)); } else { - mc.getMap().broadcastMessage(mc, MaplePacketCreator.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, MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.messengerInvite(sender, messengerid)); - from.getClient().announce(MaplePacketCreator.messengerNote(target, 4, 1)); + targetChr.sendPacket(PacketCreator.messengerInvite(sender, messengerid)); + from.sendPacket(PacketCreator.messengerNote(target, 4, 1)); } else { - from.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.addMessengerPlayer(namefrom, from, position, (byte) (fromchannel - 1))); - from.getClient().announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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 35de7419da..e4734b8cc1 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.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(MaplePacketCreator.getShowItemGain(id, quantity, true)); + c.sendPacket(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.sendPacket(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.sendPacket(PacketCreator.mapEffect(path)); } public void mapSound(String path) { - c.announce(MaplePacketCreator.mapSound(path)); + c.sendPacket(PacketCreator.mapSound(path)); } public void displayAranIntro() { @@ -699,17 +699,17 @@ public class AbstractPlayerInteraction { } public void showIntro(String path) { - c.announce(MaplePacketCreator.showIntro(path)); + c.sendPacket(PacketCreator.showIntro(path)); } public void showInfo(String path) { - c.announce(MaplePacketCreator.showInfo(path)); - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.showInfo(path)); + c.sendPacket(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.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.sendHint(msg, width, height)); - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.sendHint(msg, width, height)); + c.sendPacket(PacketCreator.enableActions()); } public void disableMinimap() { - c.announce(MaplePacketCreator.disableMinimap()); + c.sendPacket(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.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(MaplePacketCreator.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(MaplePacketCreator.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) { @@ -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.sendPacket(PacketCreator.spawnGuide(true)); } public void removeGuide() { - c.announce(MaplePacketCreator.spawnGuide(false)); + c.sendPacket(PacketCreator.spawnGuide(false)); } public void displayGuide(int num) { - c.announce(MaplePacketCreator.showInfo("UI/tutorial.img/" + num)); + c.sendPacket(PacketCreator.showInfo("UI/tutorial.img/" + num)); } public void goDojoUp() { - c.announce(MaplePacketCreator.dojoWarpUp()); + c.sendPacket(PacketCreator.dojoWarpUp()); } public void resetDojoEnergy() { @@ -1000,28 +1000,28 @@ public class AbstractPlayerInteraction { } public void enableActions() { - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); } public void showEffect(String effect){ - c.announce(MaplePacketCreator.showEffect(effect)); + c.sendPacket(PacketCreator.showEffect(effect)); } public void dojoEnergy() { - c.announce(MaplePacketCreator.getEnergy("energy", getPlayer().getDojoEnergy())); + c.sendPacket(PacketCreator.getEnergy("energy", getPlayer().getDojoEnergy())); } public void talkGuide(String message) { - c.announce(MaplePacketCreator.talkGuide(message)); + c.sendPacket(PacketCreator.talkGuide(message)); } public void guideHint(int hint) { - c.announce(MaplePacketCreator.guideHint(hint)); + c.sendPacket(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.sendPacket(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.sendPacket(PacketCreator.earnTitleMessage(msg)); } public void showInfoText(String msg) { - c.announce(MaplePacketCreator.showInfoText(msg)); + c.sendPacket(PacketCreator.showInfoText(msg)); } public void openUI(byte ui) { - c.announce(MaplePacketCreator.openUI(ui)); + c.sendPacket(PacketCreator.openUI(ui)); } public void lockUI() { - c.announce(MaplePacketCreator.disableUI(true)); - c.announce(MaplePacketCreator.lockUI(true)); + c.sendPacket(PacketCreator.disableUI(true)); + c.sendPacket(PacketCreator.lockUI(true)); } public void unlockUI() { - c.announce(MaplePacketCreator.disableUI(false)); - c.announce(MaplePacketCreator.lockUI(false)); + c.sendPacket(PacketCreator.disableUI(false)); + c.sendPacket(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.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 ee4dbc6104..3528da2a67 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.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(MaplePacketCreator.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(); } @@ -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.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 cc94de2edd..65e5a0e7f2 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.sendPacket(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene0")); break; case 913040101: - c.announce(MaplePacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene1")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene1")); break; case 913040102: - c.announce(MaplePacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene2")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene2")); break; case 913040103: - c.announce(MaplePacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene3")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene3")); break; case 913040104: - c.announce(MaplePacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene4")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene4")); break; case 913040105: - c.announce(MaplePacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene5")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction.img/cygnusJobTutorial/Scene5")); break; case 913040106: lockUI(); - c.announce(MaplePacketCreator.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(MaplePacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene0")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene0")); break; case 914090011: - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene3")); + c.sendPacket(PacketCreator.showIntro("Effect/Direction1.img/aranTutorial/Scene3")); break; case 914090100: lockUI(); - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.getShowQuestCompletion(quest.getId())); + getPlayer().sendPacket(PacketCreator.getShowQuestCompletion(quest.getId())); } else { - getPlayer().announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.earnTitleMessage(status + "/5 Completed")); - getPlayer().announce(MaplePacketCreator.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(MaplePacketCreator.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 c634ca6c3a..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; @@ -59,8 +60,8 @@ import server.partyquest.Pyramid; import server.partyquest.Pyramid.PyramidMode; import tools.FilePrinter; import tools.LogHelper; -import tools.MaplePacketCreator; -import tools.packets.Wedding; +import tools.PacketCreator; +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(MaplePacketCreator.enableActions()); + getClient().sendPacket(PacketCreator.enableActions()); } public void sendNext(String text) { - getClient().announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.getNPCTalk(npc, (byte) 1, text, "", (byte) 0)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 1, text, "", (byte) 0)); } public void sendAcceptDecline(String text) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 0x0C, text, "", (byte) 0)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 0x0C, text, "", (byte) 0)); } public void sendSimple(String text) { - getClient().announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.getNPCTalk(npc, (byte) 1, text, "", speaker)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 1, text, "", speaker)); } public void sendAcceptDecline(String text, byte speaker) { - getClient().announce(MaplePacketCreator.getNPCTalk(npc, (byte) 0x0C, text, "", speaker)); + getClient().sendPacket(PacketCreator.getNPCTalk(npc, (byte) 0x0C, text, "", speaker)); } public void sendSimple(String text, byte speaker) { - getClient().announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.getNPCTalkNum(npc, text, def, min, max)); + getClient().sendPacket(PacketCreator.getNPCTalkNum(npc, text, def, min, max)); } public void sendGetText(String text) { - getClient().announce(MaplePacketCreator.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(MaplePacketCreator.getDimensionalMirror(text)); + getClient().sendPacket(PacketCreator.getDimensionalMirror(text)); } public void setGetText(String text) { @@ -278,7 +279,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 +411,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 +419,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(), GuildPackets.getGuildAlliances(alliance, c.getWorld()), -1, -1); + Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.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.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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); @@ -939,7 +940,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) { @@ -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 39b74f2bc1..978beada46 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.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 d12ea79a1d..b6756e6c22 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.sendPacket(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..86e1ff085b 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.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(MaplePacketCreator.shopTransaction((byte) 0)); + c.sendPacket(PacketCreator.shopTransaction((byte) 0)); } else - c.announce(MaplePacketCreator.shopTransaction((byte) 3)); + c.sendPacket(PacketCreator.shopTransaction((byte) 3)); } else - c.announce(MaplePacketCreator.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(MaplePacketCreator.shopTransaction((byte) 0)); + c.sendPacket(PacketCreator.shopTransaction((byte) 0)); } else - c.announce(MaplePacketCreator.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(MaplePacketCreator.shopTransaction((byte) 3)); + c.sendPacket(PacketCreator.shopTransaction((byte) 3)); } - c.announce(MaplePacketCreator.shopTransaction((byte) 0)); + c.sendPacket(PacketCreator.shopTransaction((byte) 0)); } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.shopTransaction((byte) 0x8)); + c.sendPacket(PacketCreator.shopTransaction((byte) 0x8)); } else { - c.announce(MaplePacketCreator.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(MaplePacketCreator.shopTransaction((byte) 0x8)); + c.sendPacket(PacketCreator.shopTransaction((byte) 0x8)); } else { - c.announce(MaplePacketCreator.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 d7aa812cd9..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; @@ -43,7 +44,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 +827,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.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(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + applyto.sendPacket(PacketCreator.enableActions()); return false; } @@ -970,7 +971,7 @@ public class MapleStatEffect { applyto.cancelBuffStats(MapleBuffStat.SUMMON); } - applyto.announce(MaplePacketCreator.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(MaplePacketCreator.showOwnBuffEffect(sourceid, 2)); - affected.getMap().broadcastMessage(affected, MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.givePirateBuff(activeStats, (skill ? sourceid : -sourceid), (int) leftDuration)); + target.sendPacket(PacketCreator.givePirateBuff(activeStats, (skill ? sourceid : -sourceid), (int) leftDuration)); } else { - target.announce(MaplePacketCreator.giveBuff((skill ? sourceid : -sourceid), (int) leftDuration, activeStats)); + target.sendPacket(PacketCreator.giveBuff((skill ? sourceid : -sourceid), (int) leftDuration, activeStats)); } } } @@ -1260,35 +1261,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; + Packet buff = null; + Packet 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,30 +1298,30 @@ 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) { //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 ffb5aca046..046b2ec154 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.sendPacket(PacketCreator.enableActions()); return; } @@ -248,7 +248,7 @@ public class MapleStorage { } currentNpcid = npcId; - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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 7ad528c397..7ad5d30e8e 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().sendPacket(PacketCreator.getTradeConfirmation()); } private void fetchExchangedItems() { @@ -143,7 +143,7 @@ public class MapleTrade { exchangeItems.clear(); } - chr.getClient().announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.getTradeMesoSet((byte) 0, this.meso)); + chr.sendPacket(PacketCreator.getTradeMesoSet((byte) 0, this.meso)); if (partner != null) { - partner.getChr().getClient().announce(MaplePacketCreator.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(MaplePacketCreator.getTradeChat(chr, message, true)); + chr.sendPacket(PacketCreator.getTradeChat(chr, message, true)); if (partner != null) { - partner.getChr().getClient().announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.getTradeStart(c1.getClient(), c1.getTrade(), (byte) 0)); - c2.getClient().announce(MaplePacketCreator.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(MaplePacketCreator.getTradePartnerAdd(c1)); - c1.getClient().announce(MaplePacketCreator.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 c9ca7332bd..46ef960819 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.sendPacket(PacketCreator.showEffect("event/coconut/victory")); + chr.sendPacket(PacketCreator.playSound("Coconut/Victory")); } else { - chr.getClient().announce(MaplePacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(MaplePacketCreator.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(MaplePacketCreator.showEffect("event/coconut/victory")); - chr.getClient().announce(MaplePacketCreator.playSound("Coconut/Victory")); + chr.sendPacket(PacketCreator.showEffect("event/coconut/victory")); + chr.sendPacket(PacketCreator.playSound("Coconut/Victory")); } else { - chr.getClient().announce(MaplePacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(MaplePacketCreator.playSound("Coconut/Failed")); + chr.sendPacket(PacketCreator.showEffect("event/coconut/lose")); + chr.sendPacket(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.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(MaplePacketCreator.showEffect("event/coconut/victory")); - chr.getClient().announce(MaplePacketCreator.playSound("Coconut/Victory")); + chr.sendPacket(PacketCreator.showEffect("event/coconut/victory")); + chr.sendPacket(PacketCreator.playSound("Coconut/Victory")); } else { - chr.getClient().announce(MaplePacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(MaplePacketCreator.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(MaplePacketCreator.showEffect("event/coconut/victory")); - chr.getClient().announce(MaplePacketCreator.playSound("Coconut/Victory")); + chr.sendPacket(PacketCreator.showEffect("event/coconut/victory")); + chr.sendPacket(PacketCreator.playSound("Coconut/Victory")); } else { - chr.getClient().announce(MaplePacketCreator.showEffect("event/coconut/lose")); - chr.getClient().announce(MaplePacketCreator.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 4006a30eba..058d9ee057 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().sendPacket(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.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(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.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(MaplePacketCreator.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(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.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(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.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(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.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(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.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(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.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(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.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(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.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(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.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(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.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(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.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 820c618ad6..ce5c969e10 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.sendPacket(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.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/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..f315ecfe9c 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.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(MaplePacketCreator.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(MaplePacketCreator.rollSnowBall(false, 4, map.getSnowball(0), map.getSnowball(0))); + chr.sendPacket(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.sendPacket(PacketCreator.snowballMessage(team, message)); } } diff --git a/src/main/java/server/expeditions/MapleExpedition.java b/src/main/java/server/expeditions/MapleExpedition.java index 32262909e6..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; @@ -33,7 +34,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 +116,10 @@ public class MapleExpedition { public void beginRegistration() { registering = true; - leader.announce(MaplePacketCreator.getClock(type.getRegistrationTime() * 60)); + leader.sendPacket(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.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(); } @@ -130,35 +131,35 @@ 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); } }, type.getRegistrationTime() * 60 * 1000); } - public void dispose(boolean log){ - broadcastExped(MaplePacketCreator.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; } 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 +179,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.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,8 +196,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.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,17 +209,17 @@ 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(MaplePacketCreator.removeClock()); + chr.sendPacket(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 +234,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.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 05b695e60a..9907157041 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; @@ -44,11 +45,12 @@ 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; import tools.IntervalBuilder; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import tools.Randomizer; @@ -365,16 +367,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 = MaplePacketCreator.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); } } } @@ -471,7 +473,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 +760,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())); } } @@ -1005,8 +1007,8 @@ public class MapleMonster extends AbstractLoadedMapleLife { this.controllerHasPuppet = controllerHasPuppet; } - public byte[] makeBossHPBarPacket() { - return MaplePacketCreator.showBossHP(getId(), getHp(), getMaxHp(), getTagColor(), getTagBgColor()); + public Packet makeBossHPBarPacket() { + return PacketCreator.showBossHP(getId(), getHp(), getMaxHp(), getTagColor(), getTagBgColor()); } public boolean hasBossHPBar() { @@ -1019,9 +1021,9 @@ public class MapleMonster extends AbstractLoadedMapleLife { return; } if (fake) { - client.announce(MaplePacketCreator.spawnFakeMonster(this, 0)); + client.sendPacket(PacketCreator.spawnFakeMonster(this, 0)); } else { - client.announce(MaplePacketCreator.spawnMonster(this, false)); + client.sendPacket(PacketCreator.spawnMonster(this, false)); } if (hasBossHPBar()) { @@ -1031,8 +1033,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.sendPacket(PacketCreator.killMonster(getObjectId(), false)); + client.sendPacket(PacketCreator.killMonster(getObjectId(), true)); } @Override @@ -1086,18 +1088,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 = MaplePacketCreator.applyMonsterStatus(getObjectId(), status, null); + Packet packet = PacketCreator.applyMonsterStatus(getObjectId(), status, null); broadcastMonsterStatusMessage(packet); return animationTime; @@ -1172,7 +1174,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { final Runnable cancelTask = () -> { if (isAlive()) { - byte[] packet = MaplePacketCreator.cancelMonsterStatus(getObjectId(), status.getStati()); + Packet packet = PacketCreator.cancelMonsterStatus(getObjectId(), status.getStati()); broadcastMonsterStatusMessage(packet); } @@ -1284,7 +1286,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); + Packet packet = PacketCreator.cancelMonsterStatus(getObjectId(), stats); broadcastMonsterStatusMessage(packet); statiLock.lock(); @@ -1298,7 +1300,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { } }; final MonsterStatusEffect effect = new MonsterStatusEffect(stats, null, skill, true); - byte[] packet = MaplePacketCreator.applyMonsterStatus(getObjectId(), effect, reflection); + Packet packet = PacketCreator.applyMonsterStatus(getObjectId(), effect, reflection); broadcastMonsterStatusMessage(packet); statiLock.lock(); @@ -1323,7 +1325,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(), AbstractAnimatedMapleMapObject.IDLE_MOVEMENT_PACKET_LENGTH)); map.moveMonster(this, this.getPosition()); aggroUpdateController(); @@ -1339,7 +1341,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { } if (oldEffect != null) { - byte[] packet = MaplePacketCreator.cancelMonsterStatus(getObjectId(), oldEffect.getStati()); + Packet packet = PacketCreator.cancelMonsterStatus(getObjectId(), oldEffect.getStati()); broadcastMonsterStatusMessage(packet); } } @@ -1639,10 +1641,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 +1886,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.sendPacket(PacketCreator.stopControllingMonster(this.getObjectId())); chrController.stopControllingMonster(this); } @@ -2088,7 +2090,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.sendPacket(PacketCreator.stopControllingMonster(this.getObjectId())); aggroMonsterControl(chrController.getClient(), this, true); } */ @@ -2099,7 +2101,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { } private static void aggroMonsterControl(MapleClient c, MapleMonster mob, boolean immediateAggro) { - c.announce(MaplePacketCreator.controlMonster(mob, false, immediateAggro)); + c.sendPacket(PacketCreator.controlMonster(mob, false, immediateAggro)); } private void aggroRefreshPuppetVisibility(MapleCharacter chrController, MapleSummon puppet) { @@ -2113,15 +2115,15 @@ public class MapleMonster extends AbstractLoadedMapleLife { } for (MapleMonster mob : puppetControlled) { - chrController.announce(MaplePacketCreator.stopControllingMonster(mob.getObjectId())); + chrController.sendPacket(PacketCreator.stopControllingMonster(mob.getObjectId())); } - chrController.announce(MaplePacketCreator.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(MaplePacketCreator.spawnSummon(puppet, false)); + chrController.sendPacket(PacketCreator.spawnSummon(puppet, false)); } public void aggroUpdatePuppetVisibility() { @@ -2151,7 +2153,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { if (controllerHasPuppet) { controllerHasPuppet = false; - chrController.announce(MaplePacketCreator.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 a86fad4459..718bc326ec 100644 --- a/src/main/java/server/life/MapleNPC.java +++ b/src/main/java/server/life/MapleNPC.java @@ -24,10 +24,10 @@ 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; + 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(MaplePacketCreator.spawnNPC(this)); - client.announce(MaplePacketCreator.spawnNPCRequestController(this, true)); + client.sendPacket(PacketCreator.spawnNPC(this)); + client.sendPacket(PacketCreator.spawnNPCRequestController(this, true)); } @Override public void sendDestroyData(MapleClient client) { - client.announce(MaplePacketCreator.removeNPCController(getObjectId())); - client.announce(MaplePacketCreator.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 8c5c8d27b5..cec6d892f4 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.sendPacket(PacketCreator.spawnPlayerNPC(this)); + client.sendPacket(PacketCreator.getPlayerNPC(this)); } @Override public void sendDestroyData(MapleClient client) { - client.announce(MaplePacketCreator.removeNPCController(this.getObjectId())); - client.announce(MaplePacketCreator.removePlayerNPC(this.getObjectId())); + client.sendPacket(PacketCreator.removeNPCController(this.getObjectId())); + client.sendPacket(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/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/MapleDoorObject.java b/src/main/java/server/maps/MapleDoorObject.java index 834bebd4d0..df6d8d6503 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.sendPacket(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.sendPacket(PacketCreator.blockedMessage(6)); + chr.sendPacket(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.sendPacket(PacketCreator.partyPortal(this.getFrom().getId(), this.getTo().getId(), this.toPosition())); } - chr.announce(MaplePacketCreator.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(MaplePacketCreator.spawnDoor(this.getOwnerId(), this.getPosition(), launched)); + chr.sendPacket(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.sendPacket(PacketCreator.partyPortal(999999999, 999999999, new Point(-1, -1))); } - client.announce(MaplePacketCreator.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(MaplePacketCreator.partyPortal(999999999, 999999999, new Point(-1, -1))); - client.announce(MaplePacketCreator.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 6632b91940..dd2dbded3a 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.sendPacket(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.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 38d4301808..53329f45a9 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.sendPacket(PacketCreator.enableActions()); } } diff --git a/src/main/java/server/maps/MapleHiredMerchant.java b/src/main/java/server/maps/MapleHiredMerchant.java index 845e593fd3..7af984f59e 100644 --- a/src/main/java/server/maps/MapleHiredMerchant.java +++ b/src/main/java/server/maps/MapleHiredMerchant.java @@ -31,13 +31,14 @@ 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; import server.MapleItemInformationProvider; import server.MapleTrade; import tools.DatabaseConnection; -import tools.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; import java.sql.Connection; @@ -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); } } } @@ -126,8 +127,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 +148,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 +183,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.sendPacket(PacketCreator.leaveHiredMerchant(i + 1, 0x11)); + visitor.sendPacket(PacketCreator.hiredMerchantMaintenanceMessage()); visitors[i] = null; } } - this.getMap().broadcastMessage(MaplePacketCreator.updateHiredMerchantBox(this)); + this.getMap().broadcastMessage(PacketCreator.updateHiredMerchantBox(this)); } finally { visitorLock.unlock(); } @@ -197,8 +198,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.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(MaplePacketCreator.serverNotice(1, "Have a slot available on your inventory to claim back the item.")); - chr.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } else if (newItem.getInventoryType().equals(MapleInventoryType.EQUIP) && newItem.getQuantity() > 1) { - c.announce(MaplePacketCreator.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(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } } else { c.getPlayer().dropMessage(1, "You don't have enough mesos to purchase this item."); - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return; } try { @@ -345,7 +346,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 +399,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 +462,15 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { this.setOpen(false); this.removeAllVisitors(); - chr.announce(MaplePacketCreator.getHiredMerchant(chr, this, false)); + chr.sendPacket(PacketCreator.getHiredMerchant(chr, this, false)); } else if (!this.isOpen()) { - chr.announce(MaplePacketCreator.getMiniRoomError(18)); + chr.sendPacket(PacketCreator.getMiniRoomError(18)); return; } else if (!this.addVisitor(chr)) { - chr.announce(MaplePacketCreator.getMiniRoomError(2)); + chr.sendPacket(PacketCreator.getMiniRoomError(2)); return; } else { - chr.announce(MaplePacketCreator.getHiredMerchant(chr, this, false)); + chr.sendPacket(PacketCreator.getHiredMerchant(chr, this, false)); } chr.setHiredMerchant(this); } finally { @@ -599,7 +600,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 +714,7 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { @Override public void sendSpawnData(MapleClient client) { - client.announce(MaplePacketCreator.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 d0cea46a48..078e7639c1 100644 --- a/src/main/java/server/maps/MapleKite.java +++ b/src/main/java/server/maps/MapleKite.java @@ -1,24 +1,25 @@ package server.maps; -import java.awt.Point; import client.MapleCharacter; import client.MapleClient; -import tools.MaplePacketCreator; +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 @@ -42,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() { - return MaplePacketCreator.spawnKite(getObjectId(), itemid, owner.getName(), text, pos, ft); + public final Packet makeSpawnData() { + return PacketCreator.spawnKite(getObjectId(), itemid, owner.getName(), text, pos, ft); } - public final byte[] makeDestroyData() { - return MaplePacketCreator.removeKite(getObjectId(), 0); + 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 135f5753d2..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; @@ -62,7 +63,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; @@ -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) { @@ -307,7 +301,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(); } @@ -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 = MaplePacketCreator.silentRemoveItemFromMap(mdrop.getObjectId()); - byte[] updatePacket = MaplePacketCreator.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(MaplePacketCreator.updateMapItemObject(mdrop, true)); + partyLeaver.sendPacket(PacketCreator.updateMapItemObject(mdrop, true)); } } } @@ -1081,15 +1075,15 @@ public class MapleMap { continue; } - byte[] removePacket = MaplePacketCreator.silentRemoveItemFromMap(mdrop.getObjectId()); - byte[] updatePacket = MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.dropItemFromMapObject(c.getPlayer(), mdrop, dropper.getPosition(), droppos, (byte) 1)); + c.sendPacket(PacketCreator.dropItemFromMapObject(c.getPlayer(), mdrop, dropper.getPosition(), droppos, (byte) 1)); } finally { mdrop.unlockItem(); } @@ -1379,7 +1373,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 +1401,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.sendPacket(PacketCreator.showOwnBuffEffect(buff, 1)); + broadcastMessage(character, PacketCreator.showBuffEffect(character.getId(), buff, 1), false); statEffect.applyTo(character); } } @@ -1460,7 +1454,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 +1587,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 +1721,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 +1861,7 @@ public class MapleMap { getEventInstance().registerMonster(monster); } - spawnAndAddRangedMapObject(monster, c -> c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.spawnFakeMonster(monster, 0))); + spawnAndAddRangedMapObject(monster, c -> c.sendPacket(PacketCreator.spawnFakeMonster(monster, 0))); spawnedMonstersOnMap.incrementAndGet(); addSelfDestructive(monster); @@ -2036,14 +2030,14 @@ public class MapleMap { public void makeMonsterReal(final MapleMonster monster) { monster.setFake(false); - broadcastMessage(MaplePacketCreator.makeMonsterReal(monster)); + broadcastMessage(PacketCreator.makeMonsterReal(monster)); monster.aggroUpdateController(); updateBossSpawn(monster); } 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(MaplePacketCreator.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(MaplePacketCreator.dropItemFromMapObject(c.getPlayer(), mdrop, dropper.getPosition(), droppos, (byte) 1)); + c.sendPacket(PacketCreator.dropItemFromMapObject(c.getPlayer(), mdrop, dropper.getPosition(), droppos, (byte) 1)); } finally { mdrop.unlockItem(); } @@ -2268,7 +2262,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 +2396,7 @@ public class MapleMap { if (mapid == 200090060) { // To Rien int travelTime = getWorldServer().getTransportationTime(1 * 60 * 1000); - chr.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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,10 +2492,10 @@ public class MapleMap { if (chr.isHidden()) { broadcastGMSpawnPlayerMapObjectMessage(chr, chr, true); - chr.announce(MaplePacketCreator.getGMEffect(0x10, (byte) 1)); + chr.sendPacket(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 +2506,11 @@ public class MapleMap { chr.getMap().getPortal("join00").setPortalStatus(false); } if (hasForcedEquip()) { - chr.getClient().announce(MaplePacketCreator.showForcedEquip(-1)); + chr.sendPacket(PacketCreator.showForcedEquip(-1)); } if (specialEquip()) { - chr.getClient().announce(MaplePacketCreator.coconutScore(0, 0)); - chr.getClient().announce(MaplePacketCreator.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, MaplePacketCreator.spawnDragon(dragon)); + this.broadcastGMPacket(chr, PacketCreator.spawnDragon(dragon)); } else { - this.broadcastMessage(chr, MaplePacketCreator.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(MaplePacketCreator.resetForcedStats()); + chr.sendPacket(PacketCreator.resetForcedStats()); if (mapid == 914000200 || mapid == 914000210 || mapid == 914000220) { - chr.getClient().announce(MaplePacketCreator.aranGodlyStats()); + chr.sendPacket(PacketCreator.aranGodlyStats()); } if (chr.getEventInstance() != null && chr.getEventInstance().isTimerStarted()) { - chr.getClient().announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.getClock((int) (chr.getOla().getTimeLeft() / 1000))); + chr.sendPacket(PacketCreator.getClock((int) (chr.getOla().getTimeLeft() / 1000))); } if (mapid == 109060000) { - chr.announce(MaplePacketCreator.rollSnowBall(true, 0, null, null)); + chr.sendPacket(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.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((MaplePacketCreator.boatPacket(true))); + chr.sendPacket((PacketCreator.boatPacket(true))); } else { - chr.getClient().announce(MaplePacketCreator.boatPacket(false)); + chr.sendPacket(PacketCreator.boatPacket(false)); } } @@ -2697,9 +2691,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,18 +2709,18 @@ public class MapleMap { if (chr.getDragon() != null) { removeMapObject(chr.getDragon()); if (chr.isHidden()) { - this.broadcastGMMessage(chr, MaplePacketCreator.removeDragon(chr.getId())); + this.broadcastGMPacket(chr, PacketCreator.removeDragon(chr.getId())); } else { - this.broadcastMessage(chr, MaplePacketCreator.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 = MaplePacketCreator.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(MaplePacketCreator.spawnPlayerMapObject(chr.getClient(), player, enteringField)); + chr.sendPacket(PacketCreator.spawnPlayerMapObject(chr.getClient(), player, enteringField)); } } } } else { for (MapleCharacter chr : characters) { if (chr != source) { - chr.announce(MaplePacketCreator.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(MaplePacketCreator.updateCharLook(chr.getClient(), player)); + chr.sendPacket(PacketCreator.updateCharLook(chr.getClient(), player)); } } } finally { @@ -2911,7 +2905,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 +3228,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 { @@ -3314,10 +3308,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(MaplePacketCreator.changeBackgroundEffect(true, types.getKey(), 0)); + chr.sendPacket(PacketCreator.changeBackgroundEffect(true, types.getKey(), 0)); } } } @@ -3363,7 +3357,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 +3436,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 +3452,7 @@ public class MapleMap { try { reactor.resetReactorActions(0); reactor.setAlive(true); - broadcastMessage(MaplePacketCreator.triggerReactor(reactor, 0)); + broadcastMessage(PacketCreator.triggerReactor(reactor, 0)); } finally { reactor.unlockReactor(); } @@ -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 { @@ -3803,7 +3797,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 +3805,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 +3970,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 +4019,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..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 tools.MaplePacketCreator; +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() { - return MaplePacketCreator.removeMapEffect(); + public final Packet makeDestroyData() { + return PacketCreator.removeMapEffect(); } - public final byte[] makeStartData() { - return MaplePacketCreator.startMapEffect(msg, itemId, active); + 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 529cef07d9..fc95654920 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; @@ -40,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() { @@ -202,7 +205,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.sendPacket(PacketCreator.dropItemFromMapObject(chr, this, null, getPosition(), (byte) 2)); } finally { this.unlockItem(); } @@ -211,6 +214,6 @@ public class MapleMapItem extends AbstractMapleMapObject { @Override public void sendDestroyData(final MapleClient client) { - client.announce(MaplePacketCreator.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 d001108b34..6e3868077e 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.sendPacket(PacketCreator.getClock(time)); lock.lock(); try { @@ -68,7 +68,7 @@ public class MapleMiniDungeon { } public boolean unregisterPlayer(MapleCharacter chr) { - chr.getClient().announce(MaplePacketCreator.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 4f383da923..e211bc1cdc 100644 --- a/src/main/java/server/maps/MapleMiniGame.java +++ b/src/main/java/server/maps/MapleMiniGame.java @@ -23,8 +23,9 @@ package server.maps; import client.MapleCharacter; import client.MapleClient; +import net.packet.Packet; import net.server.Server; -import tools.MaplePacketCreator; +import tools.PacketCreator; import java.util.ArrayList; import java.util.Collections; @@ -107,21 +108,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.sendPacket(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.sendPacket(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 +136,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.sendPacket(PacketCreator.getMiniGameClose(true, 4)); } challenger.setMiniGame(null); visitor = null; - this.getOwner().getClient().announce(MaplePacketCreator.getMiniGameRemoveVisitor()); + this.getOwner().sendPacket(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)); } } } @@ -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); } } @@ -176,7 +177,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 +242,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 +256,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 +274,7 @@ public class MapleMiniGame extends AbstractMapleMapObject { nextavailabletie = timeNow + 5 * 60 * 1000; } - this.broadcast(MaplePacketCreator.getMiniGameTie(this)); + this.broadcast(PacketCreator.getMiniGameTie(this)); minigameMatchFinished(); } @@ -384,21 +385,21 @@ public class MapleMiniGame extends AbstractMapleMapObject { return loser; } - public void broadcast(final byte[] packet) { + public void broadcast(Packet packet) { broadcastToOwner(packet); broadcastToVisitor(packet); } 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.sendPacket(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.sendPacket(PacketCreator.getMatchCard(c, this, isOwner(c.getPlayer()), type)); } public MapleCharacter getOwner() { @@ -413,7 +414,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..9531bfc25a 100644 --- a/src/main/java/server/maps/MapleMist.java +++ b/src/main/java/server/maps/MapleMist.java @@ -25,19 +25,14 @@ 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 net.packet.Packet; import server.MapleStatEffect; import server.life.MapleMonster; import server.life.MobSkill; -import tools.MaplePacketCreator; +import tools.PacketCreator; + +import java.awt.*; /** * @@ -134,32 +129,32 @@ public class MapleMist extends AbstractMapleMapObject { throw new UnsupportedOperationException(); } - public final byte[] makeDestroyData() { - return MaplePacketCreator.removeMist(getObjectId()); + public final Packet makeDestroyData() { + return PacketCreator.removeMist(getObjectId()); } - public final byte[] makeSpawnData() { + public final Packet 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) { + public final Packet 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 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 b2648d9854..8becaa0c3a 100644 --- a/src/main/java/server/maps/MaplePlayerShop.java +++ b/src/main/java/server/maps/MaplePlayerShop.java @@ -28,13 +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.MaplePacketCreator; +import tools.PacketCreator; import tools.Pair; -import tools.data.output.MaplePacketLittleEndianWriter; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; @@ -126,8 +125,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 +146,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 +168,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.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(MaplePacketCreator.getPlayerShopNewVisitor(visitors[j], j + 1)); + if(visitors[j] != null) owner.sendPacket(PacketCreator.getPlayerShopNewVisitor(visitors[j], j + 1)); } this.broadcastRestoreToVisitors(); - owner.getMap().broadcastMessage(MaplePacketCreator.updatePlayerShopBox(this)); + owner.getMap().broadcastMessage(PacketCreator.updatePlayerShopBox(this)); return; } } @@ -187,7 +186,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { visitorLock.unlock(); } - owner.getMap().broadcastMessage(MaplePacketCreator.updatePlayerShopBox(this)); + owner.getMap().broadcastMessage(PacketCreator.updatePlayerShopBox(this)); } } @@ -226,8 +225,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.sendPacket(PacketCreator.serverNotice(1, "Have a slot available on your inventory to claim back the item.")); + chr.sendPacket(PacketCreator.enableActions()); return; } @@ -235,7 +234,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } removeFromSlot(slot); - chr.announce(MaplePacketCreator.getPlayerShopItemUpdate(this)); + chr.sendPacket(PacketCreator.getPlayerShopItemUpdate(this)); } } } @@ -254,10 +253,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.sendPacket(PacketCreator.enableActions()); return false; } else if (newItem.getInventoryType().equals(MapleInventoryType.EQUIP) && newItem.getQuantity() > 1) { - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } @@ -270,7 +269,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.sendPacket(PacketCreator.enableActions()); return false; } @@ -280,7 +279,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.sendPacket(PacketCreator.getPlayerShopOwnerUpdate(soldItem, item)); synchronized (sold) { sold.add(soldItem); @@ -298,12 +297,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.sendPacket(PacketCreator.enableActions()); return false; } } else { c.getPlayer().dropMessage(1, "You don't have enough mesos to purchase this item."); - c.announce(MaplePacketCreator.enableActions()); + c.sendPacket(PacketCreator.enableActions()); return false; } @@ -317,12 +316,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 +334,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].sendPacket(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].sendPacket(PacketCreator.getPlayerShop(this, false)); } } @@ -359,7 +358,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].sendPacket(PacketCreator.shopErrorMessage(10, 1)); visitorList.add(visitors[i]); } } @@ -376,19 +375,10 @@ 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(final byte[] packet) { + public void broadcast(Packet packet) { MapleClient client = owner.getClient(); if (client != null) { - client.announce(packet); + client.sendPacket(packet); } broadcastToVisitors(packet); } @@ -418,7 +408,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 +417,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 +431,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.sendPacket(PacketCreator.getPlayerShop(this, isOwner(c.getPlayer()))); } finally { visitorLock.unlock(); } @@ -512,7 +502,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } if(target != null) { - target.getClient().announce(MaplePacketCreator.shopErrorMessage(5, 1)); + target.sendPacket(PacketCreator.shopErrorMessage(5, 1)); removeVisitor(target); } } @@ -572,12 +562,12 @@ public class MaplePlayerShop extends AbstractMapleMapObject { @Override public void sendDestroyData(MapleClient client) { - client.announce(MaplePacketCreator.removePlayerShopBox(this)); + client.sendPacket(PacketCreator.removePlayerShopBox(this)); } @Override public void sendSpawnData(MapleClient client) { - client.announce(MaplePacketCreator.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 a8e127e8c1..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; @@ -30,7 +31,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.*; @@ -166,22 +167,22 @@ public class MapleReactor extends AbstractMapleMapObject { @Override public void sendDestroyData(MapleClient client) { - client.announce(makeDestroyData()); + client.sendPacket(makeDestroyData()); } - public final byte[] makeDestroyData() { - return MaplePacketCreator.destroyReactor(this); + 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() { - return MaplePacketCreator.spawnReactor(this); + public final Packet makeSpawnData() { + return PacketCreator.spawnReactor(this); } public void resetReactorActions(int newState) { @@ -199,7 +200,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 +213,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 +279,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 +303,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 +345,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..ec1f7de170 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.sendPacket(PacketCreator.spawnSummon(this, false)); } @Override public void sendDestroyData(MapleClient client) { - client.announce(MaplePacketCreator.removeSummon(this, true)); + client.sendPacket(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..5cf1d19e84 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.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(MaplePacketCreator.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(MaplePacketCreator.rpsSelection((byte) response, (byte) (round + 1))); + c.sendPacket(PacketCreator.rpsSelection((byte) response, (byte) (round + 1))); ableAnswer = false; win = true; }else{ // they lose - c.announce(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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 0b08f79b3d..9f0a385906 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.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(MaplePacketCreator.updateAriantPQRanking(score)); + chr.sendPacket(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..f31e506a40 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.sendPacket(PacketCreator.showEffect("quest/carnival/win")); + mc.sendPacket(PacketCreator.playSound("MobCarnival/Win")); mc.dispelDebuffs(); } else { - mc.getClient().announce(MaplePacketCreator.showEffect("quest/carnival/lose")); - mc.getClient().announce(MaplePacketCreator.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(MaplePacketCreator.showEffect("quest/carnival/win")); - mc.getClient().announce(MaplePacketCreator.playSound("MobCarnival/Win")); + mc.sendPacket(PacketCreator.showEffect("quest/carnival/win")); + mc.sendPacket(PacketCreator.playSound("MobCarnival/Win")); mc.dispelDebuffs(); } else { - mc.getClient().announce(MaplePacketCreator.showEffect("quest/carnival/lose")); - mc.getClient().announce(MaplePacketCreator.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 ab57498e25..c76294f3e6 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.sendPacket(PacketCreator.showEffect(effect)); } } diff --git a/src/main/java/server/partyquest/Pyramid.java b/src/main/java/server/partyquest/Pyramid.java index 7c9560afc1..9fa46ac2a6 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.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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(MaplePacketCreator.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 5495a51726..0a1fa61b09 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.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(MaplePacketCreator.removeQuestTimeLimit(id)); + chr.sendPacket(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.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 25271baa56..84757d42bc 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.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(MaplePacketCreator.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 234bfc95fd..dffece4878 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.sendPacket(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/MaplePacketCreator.java deleted file mode 100644 index 1c321610d5..0000000000 --- a/src/main/java/tools/MaplePacketCreator.java +++ /dev/null @@ -1,8425 +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; - -import client.*; -import client.MapleCharacter.SkillEntry; -import client.inventory.*; -import client.inventory.Equip.ScrollResult; -import client.keybind.MapleKeyBinding; -import client.keybind.MapleQuickslotBinding; -import client.newyear.NewYearCardRecord; -import client.status.MonsterStatus; -import client.status.MonsterStatusEffect; -import config.YamlConfig; -import constants.game.ExpTable; -import constants.game.GameConstants; -import constants.inventory.ItemConstants; -import constants.skills.Buccaneer; -import constants.skills.Corsair; -import constants.skills.ThunderBreaker; -import net.encryption.InitializationVector; -import net.opcodes.SendOpcode; -import net.server.PlayerCoolDownValueHolder; -import net.server.Server; -import net.server.channel.Channel; -import net.server.channel.handlers.PlayerInteractionHandler; -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; -import net.server.world.PartyOperation; -import net.server.world.World; -import server.CashShop.CashItem; -import server.CashShop.CashItemFactory; -import server.CashShop.SpecialCashItem; -import server.*; -import server.events.gm.MapleSnowball; -import server.life.MapleMonster; -import server.life.MapleNPC; -import server.life.MaplePlayerNPC; -import server.life.MobSkill; -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; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.List; -import java.util.*; -import java.util.Map.Entry; -import java.util.stream.Collectors; - -/** - * - * @author Frz - */ -public class MaplePacketCreator { - - 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++; - } - } - - 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); - } - - 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()); - } - - 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 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); - mplew.writeInt(0); - 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 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); - } - } - } - - 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 : 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); - } - - 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(); - } - - 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()); - 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) { - yes = true; - mplew.write(1); - } - mplew.writeInt(ring.getRingId()); - mplew.writeInt(0); - 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 - } - - return mplew.getPacket(); - } - - /* - public static byte[] summonAttack(int cid, int summonSkillId, 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(summonSkillId); - mplew.write(direction); - mplew.write(4); - 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(); - } - */ - - 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[] 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()); - } - 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()); - } - } - - 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) { - if (morph) { - mplew.writeInt(statup.getRight().intValue()); - } else { - mplew.writeShort(statup.getRight().shortValue()); - } - } - 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[] 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(); - } - - 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[] 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[] 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(); - } - - 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[] 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(); - } - - 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 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; - } - } - - for (int mask : masks) { - mplew.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(); - } - - 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[] 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); - } - - 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); - } - 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); - } - 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.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; - } - - 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(); - 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); - } - } 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); - } - } - - 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); - } 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) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SPOUSE_CHAT.getValue()); - mplew.writeMapleAsciiString(partner.getName()); - mplew.writeMapleAsciiString(msg); - 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); - } - 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(0); - 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; - } - - 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.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)); - } - 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(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, - 5: cannot send guild leader, - 6: cannot send if account already requested transfer, - 7: cannot transfer within 30days, - 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[] 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()); - 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.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); - 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); - } - } - } - 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; - } - } - for(MapleFamilyEntry junior : entry.getJuniors()) { - if(junior == null) continue; - entryCount++; - for(MapleFamilyEntry superJunior : junior.getJuniors()) { - if(superJunior == 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++; - 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); - } - - 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.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.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); - 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(); - } - - 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 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 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 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[] 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); - } - - 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(); - } - -} diff --git a/src/main/java/tools/PacketCreator.java b/src/main/java/tools/PacketCreator.java new file mode 100644 index 0000000000..b9d9b9c946 --- /dev/null +++ b/src/main/java/tools/PacketCreator.java @@ -0,0 +1,7399 @@ +/* + 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; + +import client.*; +import client.MapleCharacter.SkillEntry; +import client.inventory.*; +import client.inventory.Equip.ScrollResult; +import client.keybind.MapleKeyBinding; +import client.keybind.MapleQuickslotBinding; +import client.newyear.NewYearCardRecord; +import client.status.MonsterStatus; +import client.status.MonsterStatusEffect; +import config.YamlConfig; +import constants.game.ExpTable; +import constants.game.GameConstants; +import constants.inventory.ItemConstants; +import constants.skills.Buccaneer; +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; +import net.server.Server; +import net.server.channel.Channel; +import net.server.channel.handlers.PlayerInteractionHandler; +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.MapleGuildSummary; +import net.server.world.MapleParty; +import net.server.world.MaplePartyCharacter; +import net.server.world.PartyOperation; +import net.server.world.World; +import server.CashShop.CashItem; +import server.CashShop.CashItemFactory; +import server.CashShop.SpecialCashItem; +import server.*; +import server.events.gm.MapleSnowball; +import server.life.MapleMonster; +import server.life.MapleNPC; +import server.life.MaplePlayerNPC; +import server.life.MobSkill; +import server.maps.*; +import server.maps.MapleMiniGame.MiniGameResult; +import server.movement.LifeMovementFragment; +import tools.data.input.SeekableLittleEndianAccessor; + +import java.awt.*; +import java.net.InetAddress; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; +import java.util.*; +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 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 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 OutPacket p, MapleCharacter chr) { + int[] remainingSp = chr.getRemainingSps(); + int effectiveLength = 0; + for (int j : remainingSp) { + if (j > 0) { + effectiveLength++; + } + } + + p.writeByte(effectiveLength); + for (int i = 0; i < remainingSp.length; i++) { + if (remainingSp[i] > 0) { + p.writeByte(i + 1); + p.writeByte(remainingSp[i]); + } + } + } + + 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. + { + p.writeLong(pet.getUniqueId()); + } else { + p.writeLong(0); + } + } + + 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(p, chr); + } else { + p.writeShort(chr.getRemainingSp()); // remaining sp + } + 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 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(OutPacket p, MapleCharacter chr) { + p.writeLong(-1); + p.writeByte(0); + addCharStats(p, chr); + p.writeByte(chr.getBuddylist().getCapacity()); + + if (chr.getLinkedName() == null) { + p.writeByte(0); + } else { + p.writeByte(1); + p.writeString(chr.getLinkedName()); + } + + 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(OutPacket p, MapleCharacter chr) { + Set received = chr.getReceivedNewYearRecords(); + + p.writeShort(received.size()); + for (NewYearCardRecord nyc : received) { + encodeNewYearCard(nyc, p); + } + } + + 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++) { + p.writeInt(tele.get(i)); + } + for (int i = 0; i < 10; i++) { + p.writeInt(viptele.get(i)); + } + } + + private static void addMiniGameInfo(OutPacket p, MapleCharacter chr) { + p.writeShort(0); + /*for (int m = size; m > 0; m--) {//nexon does this :P + p.writeInt(0); + p.writeInt(0); + p.writeInt(0); + p.writeInt(0); + p.writeInt(0); + }*/ + } + + private static void addAreaInfo(OutPacket p, MapleCharacter chr) { + Map areaInfos = chr.getAreaInfos(); + p.writeShort(areaInfos.size()); + for (Short area : areaInfos.keySet()) { + p.writeShort(area); + p.writeString(areaInfos.get(area)); + } + } + + 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<>(); + 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()) { + p.writeByte(entry.getKey()); + p.writeInt(entry.getValue()); + } + p.writeByte(0xFF); + for (Entry entry : maskedEquip.entrySet()) { + p.writeByte(entry.getKey()); + p.writeInt(entry.getValue()); + } + p.writeByte(0xFF); + Item cWeapon = equip.getItem((short) -111); + p.writeInt(cWeapon != null ? cWeapon.getItemId() : 0); + for (int i = 0; i < 3; i++) { + if (chr.getPet(i) != null) { + p.writeInt(chr.getPet(i).getItemId()); + } else { + p.writeInt(0); + } + } + } + + 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(OutPacket p, MapleCharacter chr, boolean viewall) { + addCharStats(p, chr); + addCharLook(p, chr, false); + if (!viewall) { + p.writeByte(0); + } + if (chr.isGM() || chr.isGmJob()) { // thanks Daddy Egg (Ubaware), resinate for noticing GM jobs crashing on non-GM players account + p.writeByte(0); + return; + } + 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(OutPacket p, MapleCharacter chr) { + List started = chr.getStartedQuests(); + int startedSize = 0; + for (MapleQuestStatus qs : started) { + if (qs.getInfoNumber() > 0) { + startedSize++; + } + startedSize++; + } + p.writeShort(startedSize); + for (MapleQuestStatus qs : started) { + p.writeShort(qs.getQuest().getId()); + p.writeString(qs.getProgressData()); + + short infoNumber = qs.getInfoNumber(); + if (infoNumber > 0) { + MapleQuestStatus iqs = chr.getQuest(infoNumber); + p.writeShort(infoNumber); + p.writeString(iqs.getProgressData()); + } + } + List completed = chr.getCompletedQuests(); + p.writeShort(completed.size()); + for (MapleQuestStatus qs : completed) { + p.writeShort(qs.getQuest().getId()); + p.writeLong(getTime(qs.getCompletionTime())); + } + } + + 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(OutPacket p, Item item) { + addItemInfo(p, item, false); + } + + 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; + 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; + } + p.writeShort(pos > 100 ? pos - 100 : pos); + } else { + p.writeByte(pos); + } + } + p.writeByte(itemType); + p.writeInt(item.getItemId()); + p.writeBool(isCash); + if (isCash) { + p.writeLong(isPet ? item.getPetId() : isRing ? equip.getRingId() : item.getCashId()); + } + addExpirationTime(p, item.getExpiration()); + if (isPet) { + MaplePet pet = item.getPet(); + 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 */ + + p.writeBytes(new byte[]{(byte) 0x50, (byte) 0x46}); //wonder what this is + p.writeInt(0); + return; + } + if (equip == null) { + p.writeShort(item.getQuantity()); + p.writeString(item.getOwner()); + p.writeShort(item.getFlag()); // flag + + if (ItemConstants.isRechargeable(item.getItemId())) { + p.writeInt(2); + p.writeBytes(new byte[]{(byte) 0x54, 0, 0, (byte) 0x34}); + } + return; + } + 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++) { + p.writeByte(0x40); + } + } else { + int itemLevel = equip.getItemLevel(); + + long expNibble = (ExpTable.getExpNeededForLevel(ii.getEquipLevelReq(item.getItemId())) * equip.getItemExp()); + expNibble /= ExpTable.getEquipExpNeededForLevel(itemLevel); + + p.writeByte(0); + p.writeByte(itemLevel); //Item Level + p.writeInt((int) expNibble); + p.writeInt(equip.getVicious()); //WTF NEXON ARE YOU SERIOUS? + p.writeLong(0); + } + p.writeLong(getTime(-2)); + p.writeInt(-1); + + } + + private static void addInventoryInfo(OutPacket p, MapleCharacter chr) { + for (byte i = 1; i <= 5; i++) { + p.writeByte(chr.getInventory(MapleInventoryType.getByType(i)).getSlotLimit()); + } + p.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(p, item); + } + p.writeShort(0); // start of equip cash + for (Item item : equippedCash) { + addItemInfo(p, item); + } + p.writeShort(0); // start of equip inventory + for (Item item : chr.getInventory(MapleInventoryType.EQUIP).list()) { + addItemInfo(p, item); + } + p.writeInt(0); + for (Item item : chr.getInventory(MapleInventoryType.USE).list()) { + addItemInfo(p, item); + } + p.writeByte(0); + for (Item item : chr.getInventory(MapleInventoryType.SETUP).list()) { + addItemInfo(p, item); + } + p.writeByte(0); + for (Item item : chr.getInventory(MapleInventoryType.ETC).list()) { + addItemInfo(p, item); + } + p.writeByte(0); + for (Item item : chr.getInventory(MapleInventoryType.CASH).list()) { + addItemInfo(p, item); + } + } + + 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. + for (Entry skill : skills.entrySet()) { + if (GameConstants.isHiddenSkills(skill.getKey().getId())) { + skillsSize--; + } + } + p.writeShort(skillsSize); + for (Entry skill : skills.entrySet()) { + if (GameConstants.isHiddenSkills(skill.getKey().getId())) { + continue; + } + p.writeInt(skill.getKey().getId()); + p.writeInt(skill.getValue().skillevel); + addExpirationTime(p, skill.getValue().expiration); + if (skill.getKey().isFourthJob()) { + p.writeInt(skill.getValue().masterlevel); + } + } + p.writeShort(chr.getAllCooldowns().size()); + for (PlayerCoolDownValueHolder cooling : chr.getAllCooldowns()) { + p.writeInt(cooling.skillId); + int timeLeft = (int) (cooling.length + cooling.startTime - System.currentTimeMillis()); + p.writeShort(timeLeft / 1000); + } + } + + private static void addMonsterBookInfo(OutPacket p, MapleCharacter chr) { + p.writeInt(chr.getMonsterBookCover()); // cover + p.writeByte(0); + Map cards = chr.getMonsterBook().getCards(); + p.writeShort(cards.size()); + for (Entry all : cards.entrySet()) { + p.writeShort(all.getKey() % 10000); // Id + p.writeByte(all.getValue()); // Level + } + } + + 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; + } + + /** + * 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 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; + } + + /** + * Sends a ping packet. + * + * @return The packet. + */ + public static Packet getPing() { + return OutPacket.create(SendOpcode.PING); + } + + /** + * 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 Packet getLoginFailed(int reason) { + OutPacket p = OutPacket.create(SendOpcode.LOGIN_STATUS); + p.writeByte(reason); + p.writeByte(0); + p.writeInt(0); + return p; + } + + /** + * 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 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 Packet sendPolice() { + final OutPacket p = OutPacket.create(SendOpcode.FAKE_GM_NOTICE); + p.writeByte(0);//doesn't even matter what value + return p; + } + + public static Packet sendPolice(String text) { + final OutPacket p = OutPacket.create(SendOpcode.DATA_CRC_CHECK_FAILED); + p.writeString(text); + return p; + } + + 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 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; + } + + /** + * Gets a successful authentication packet. + * + * @param c + * @return the successful authentication packet + */ + 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 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()); + 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. + + p.writeString(c.getAccountName()); + p.writeByte(0); + + p.writeByte(0); // IsQuietBan + p.writeLong(0);//IsQuietBanTimeStamp + p.writeLong(0); //CreationTimeStamp + + p.writeInt(1); // 1: Remove the "Select the world you want to play in" + + 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 p; + } + + /** + * 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 Packet pinOperation(byte mode) { + OutPacket p = OutPacket.create(SendOpcode.CHECK_PINCODE); + p.writeByte(mode); + return p; + } + + public static Packet pinRegistered() { + OutPacket p = OutPacket.create(SendOpcode.UPDATE_PINCODE); + p.writeByte(0); + return p; + } + + public static Packet requestPin() { + return pinOperation((byte) 4); + } + + public static Packet requestPinAfterFailure() { + return pinOperation((byte) 2); + } + + public static Packet registerPin() { + return pinOperation((byte) 1); + } + + public static Packet pinAccepted() { + return pinOperation((byte) 0); + } + + public static Packet wrongPic() { + OutPacket p = OutPacket.create(SendOpcode.CHECK_SPW_RESULT); + p.writeByte(0); + return p; + } + + /** + * 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 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) { + p.writeString(serverName + "-" + ch.getId()); + p.writeInt(ch.getChannelCapacity()); + + // thanks GabrielSin for this channel packet structure part + p.writeByte(1);// nWorldID + p.writeByte(ch.getId() - 1);// nChannelID + p.writeBool(false);// bAdultChannel + } + p.writeShort(0); + return p; + } + + /** + * Gets a packet saying that the server list is over. + * + * @return The end of server list packet. + */ + public static Packet getEndOfServerList() { + OutPacket p = OutPacket.create(SendOpcode.SERVERLIST); + p.writeByte(0xFF); + return p; + } + + /** + * 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 Packet getServerStatus(int status) { + OutPacket p = OutPacket.create(SendOpcode.SERVERSTATUS); + p.writeShort(status); + return p; + } + + /** + * 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 Packet getServerIP(InetAddress inetAddr, int port, int clientId) { + final OutPacket p = OutPacket.create(SendOpcode.SERVER_IP); + p.writeShort(0); + byte[] addr = inetAddr.getAddress(); + p.writeBytes(addr); + p.writeShort(port); + p.writeInt(clientId); + p.writeBytes(new byte[]{0, 0, 0, 0, 0}); + return p; + } + + /** + * 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 Packet getChannelChange(InetAddress inetAddr, int port) { + final OutPacket p = OutPacket.create(SendOpcode.CHANGE_CHANNEL); + p.writeByte(1); + byte[] addr = inetAddr.getAddress(); + p.writeBytes(addr); + p.writeShort(port); + return p; + } + + /** + * 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 Packet getCharList(MapleClient c, int serverId, int status) { + final OutPacket p = OutPacket.create(SendOpcode.CHARLIST); + p.writeByte(status); + List chars = c.loadCharacters(serverId); + p.writeByte((byte) chars.size()); + for (MapleCharacter chr : chars) { + addCharEntry(p, chr, false); + } + + 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 Packet enableTV() { + OutPacket p = OutPacket.create(SendOpcode.ENABLE_TV); + p.writeInt(0); + p.writeByte(0); + return p; + } + + /** + * Removes TV + * + * @return The Remove TV Packet + */ + public static Packet removeTV() { + return OutPacket.create(SendOpcode.REMOVE_TV); + } + + /** + * 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 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) { + p.writeString(partner.getName()); + } else { + p.writeShort(0); + } + for (int i = 0; i < messages.size(); i++) { + if (i == 4 && messages.get(4).length() > 15) { + p.writeString(messages.get(4).substring(0, 15)); + } else { + p.writeString(messages.get(i)); + } + } + p.writeInt(1337); // time limit shit lol 'Your thing still start in blah blah seconds' + if (partner != null) { + addCharLook(p, partner, false); + } + return p; + } + + /** + * Gets character info for a character. + * + * @param chr The character to get info about. + * @return The character info packet. + */ + 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++) { + p.writeInt(Randomizer.nextInt()); + } + addCharacterInfo(p, chr); + p.writeLong(getTime(System.currentTimeMillis())); + return p; + } + + /** + * Gets an empty stat update. + * + * @return The empty stat update packet. + */ + public static Packet 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 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(); + } + 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)); + }); + } + p.writeInt(updateMask); + for (Pair statupdate : mystats) { + if (statupdate.getLeft().getValue() >= 1) { + if (statupdate.getLeft().getValue() == 0x1) { + p.writeByte(statupdate.getRight().byteValue()); + } else if (statupdate.getLeft().getValue() <= 0x4) { + p.writeInt(statupdate.getRight()); + } else if (statupdate.getLeft().getValue() < 0x20) { + p.writeByte(statupdate.getRight().shortValue()); + } else if (statupdate.getLeft().getValue() == 0x8000) { + if (GameConstants.hasSPTable(chr.getJob())) { + addRemainingSkillInfo(p, chr); + } else { + p.writeShort(statupdate.getRight().shortValue()); + } + } else if (statupdate.getLeft().getValue() < 0xFFFF) { + p.writeShort(statupdate.getRight().shortValue()); + } else if (statupdate.getLeft().getValue() == 0x20000) { + p.writeShort(statupdate.getRight().shortValue()); + } else { + p.writeInt(statupdate.getRight()); + } + } + } + return p; + } + + /** + * 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 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); + p.writeInt(chr.getPosition().x); + p.writeInt(chr.getPosition().y); + } + p.writeLong(getTime(Server.getInstance().getCurrentTime())); + return p; + } + + 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; + } + + /** + * 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 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; + } + + /** + * 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 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 town + * @return The remove door packet. + */ + public static Packet removeDoor(int ownerId, boolean town) { + final OutPacket p; + if (town) { + p = OutPacket.create(SendOpcode.SPAWN_PORTAL); + p.writeInt(999999999); + p.writeInt(999999999); + } else { + p = OutPacket.create(SendOpcode.REMOVE_DOOR); + p.writeByte(0); + p.writeInt(ownerId); + } + return p; + } + + /** + * 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 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; + } + + /** + * Gets a packet to remove a special map object. + * + * @param summon + * @param animated Animated removal? + * @return The packet removing the object. + */ + 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 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 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 Packet sendCannotSpawnKite() { + return OutPacket.create(SendOpcode.CANNOT_SPAWN_KITE); + } + + /** + * Gets the response to a relog request. + * + * @return The relog response packet. + */ + public static Packet getRelogResponse() { + OutPacket p = OutPacket.create(SendOpcode.RELOG_RESPONSE); + p.writeByte(1);//1 O.O Must be more types ): + return p; + } + + /** + * Gets a server message packet. + * + * @param message The message to convey. + * @return The server message packet. + */ + public static Packet 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 Packet 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 Packet serverNotice(int type, String message, int npc) { + return serverMessage(type, 0, message, false, false, npc); + } + + public static Packet serverNotice(int type, int channel, String message) { + return serverMessage(type, channel, message, false, false, 0); + } + + public static Packet 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 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) { + p.writeByte(1); + } + p.writeString(message); + if (type == 3) { + p.writeByte(channel - 1); // channel + p.writeBool(megaEar); + } else if (type == 6) { + p.writeInt(0); + } else if (type == 7) { // npc + p.writeInt(npc); + } + return p; + } + + /** + * 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 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) { + p.writeString(s); + } + 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 Packet byeAvatarMega() { + final OutPacket p = OutPacket.create(SendOpcode.CLEAR_AVATAR_MEGAPHONE); + p.writeByte(1); + return p; + } + + /** + * Sends the Gachapon green message when a user uses a gachapon ticket. + * + * @param item + * @param town + * @param player + * @return + */ + 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 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 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; + } + + /** + * 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 Packet 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 Packet 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 Packet controlMonster(MapleMonster life, boolean newSpawn, boolean aggro) { + return spawnMonsterInternal(life, true, newSpawn, aggro, 0, false); + } + + /** + * Removes a monster invisibility. + * + * @param life + * @return + */ + public static Packet removeMonsterInvisibility(MapleMonster life) { + final OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL); + p.writeByte(1); + p.writeInt(life.getObjectId()); + return p; + } + + /** + * Makes a monster invisible for Ariant PQ. + * + * @param life + * @return + */ + public static Packet makeMonsterInvisible(MapleMonster life) { + return spawnMonsterInternal(life, true, false, false, 0, true); + } + + private static void encodeParentlessMobSpawnEffect(OutPacket p, boolean newSpawn, int effect) { + if (effect > 0) { + p.writeByte(effect); + p.writeByte(0); + p.writeShort(0); + if (effect == 15) { + p.writeByte(0); + } + } + p.writeByte(newSpawn ? -2 : -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(p, stati.keySet()); // packet structure mapped thanks to Eric + + for (Entry s : stati.entrySet()) { + MonsterStatusEffect mse = s.getValue(); + p.writeShort(mse.getStati().get(s.getKey())); + + MobSkill mobSkill = mse.getMobSkill(); + if (mobSkill != null) { + p.writeShort(mobSkill.getSkillId()); + p.writeShort(mobSkill.getSkillLevel()); + + switch (s.getKey()) { + case WEAPON_REFLECT -> pCounter = mobSkill.getX(); + case MAGIC_REFLECT -> mCounter = mobSkill.getY(); + } + } else { + Skill skill = mse.getSkill(); + p.writeInt(skill != null ? skill.getId() : 0); + } + + p.writeShort(-1); // duration + } + + // reflect packet structure found thanks to Arnah (Vertisy) + if (pCounter != -1) { + p.writeInt(pCounter);// wPCounter_ + } + if (mCounter != -1) { + p.writeInt(mCounter);// wMCounter_ + } + if (pCounter != -1 || mCounter != -1) { + p.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 Packet spawnMonsterInternal(MapleMonster life, boolean requestController, boolean newSpawn, boolean aggro, int effect, boolean makeInvis) { + if (makeInvis) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL); + p.writeByte(0); + p.writeInt(life.getObjectId()); + return p; + } + + 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()); + + + /** + * -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()) { + p.writeByte(effect != 0 ? effect : -3); + p.writeInt(life.getParentMobOid()); + } else { + encodeParentlessMobSpawnEffect(p, newSpawn, effect); + } + } else { + encodeParentlessMobSpawnEffect(p, newSpawn, effect); + } + + p.writeByte(life.getTeam()); + p.writeInt(0); // getItemEffect + return p; + } + + /** + * 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 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) { + p.writeByte(effect); + p.writeByte(0); + p.writeShort(0); + } + p.writeShort(-2); + p.writeByte(life.getTeam()); + p.writeInt(0); + return p; + } + + /** + * 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 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; + } + + /** + * Gets a stop control monster packet. + * + * @param oid The ObjectID of the monster to stop controlling. + * @return The stop control monster packet. + */ + public static Packet stopControllingMonster(int oid) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL); + p.writeByte(0); + p.writeInt(oid); + return p; + } + + /** + * 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 Packet 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 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; + } + + /** + * 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 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; + } + + /** + * 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 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 + p.writeByte(0); + } + + 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; + } + + /** + * Gets a packet telling the client to show a fame gain. + * + * @param gain How many fame gained. + * @return The meso gain packet. + */ + public static Packet getShowFameGain(int gain) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(4); + p.writeInt(gain); + return p; + } + + /** + * Gets a packet telling the client to show a meso gain. + * + * @param gain How many mesos gained. + * @return The meso gain packet. + */ + public static Packet 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 Packet getShowMesoGain(int gain, boolean inChat) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + if (!inChat) { + p.writeByte(0); + p.writeShort(1); //v83 + } else { + p.writeByte(5); + } + p.writeInt(gain); + p.writeShort(0); + return p; + } + + /** + * 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 Packet 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 Packet getShowItemGain(int itemId, short quantity, boolean inChat) { + final OutPacket p; + if (inChat) { + p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(3); + p.writeByte(1); + p.writeInt(itemId); + p.writeInt(quantity); + } else { + p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeShort(0); + p.writeInt(itemId); + p.writeInt(quantity); + p.writeInt(0); + p.writeInt(0); + } + return p; + } + + 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 objId The objectID of the killed monster. + * @param animation 0 = dissapear, 1 = fade out, 2+ = special + * @return The kill monster packet. + */ + 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 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(p, drop.getItem().getExpiration()); + } + p.writeBool(!drop.isPlayerDrop()); + return p; + } + + 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; + } + + 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) { + p.writePos(dropfrom); + p.writeShort(0);//Fh? + } + if (drop.getMeso() == 0) { + addExpirationTime(p, drop.getItem().getExpiration()); + } + p.writeByte(drop.isPlayerDrop() ? 0 : 1); //pet EQP pickup + return p; + } + + 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) { + p.writeInt(2); + } else { + p.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)); + } + p.writeInt((int) ((buffmask >> 32) & 0xffffffffL)); + if (buffvalue != null) { + if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) { //TEST + p.writeShort(buffvalue); + } else { + p.writeByte(buffvalue.byteValue()); + } + } + p.writeInt((int) (buffmask & 0xffffffffL)); + + // Energy Charge + p.writeInt(chr.getEnergyBar() == 15000 ? 1 : 0); + p.writeShort(0); + p.skip(4); + + boolean dashBuff = chr.getBuffedValue(MapleBuffStat.DASH) != null; + // Dash Speed + p.writeInt(dashBuff ? 1 << 24 : 0); + p.skip(11); + p.writeShort(0); + // Dash Jump + 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) { + p.writeInt(mount.getItemId()); + p.writeInt(mount.getSkillId()); + } else { + p.writeLong(0); + } + } else { + p.writeLong(0); + } + + int CHAR_MAGIC_SPAWN = Randomizer.nextInt(); // skill references found thanks to Rien dev team + p.writeInt(CHAR_MAGIC_SPAWN); + // Speed Infusion + p.skip(8); + p.writeInt(CHAR_MAGIC_SPAWN); + p.writeByte(0); + p.writeInt(CHAR_MAGIC_SPAWN); + p.writeShort(0); + // Homing Beacon + p.skip(9); + p.writeInt(CHAR_MAGIC_SPAWN); + p.writeInt(0); + // Zombify + p.skip(9); + p.writeInt(CHAR_MAGIC_SPAWN); + p.writeShort(0); + p.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 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) { + p.writeString(""); + p.writeBytes(new byte[6]); + } else { + MapleGuildSummary gs = chr.getClient().getWorldServer().getGuildSummary(chr.getGuildId(), chr.getWorld()); + if (gs != null) { + p.writeString(gs.getName()); + p.writeShort(gs.getLogoBG()); + p.writeByte(gs.getLogoBGColor()); + p.writeShort(gs.getLogo()); + p.writeByte(gs.getLogoColor()); + } else { + p.writeString(""); + p.writeBytes(new byte[6]); + } + } + + writeForeignBuffs(p, chr); + + p.writeShort(chr.getJob().getId()); + + /* 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)) { + p.writeShort(chr.getJob().getId()); + } else { + p.writeShort(412); + }*/ + + 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; + p.writePos(spawnPos); + p.writeByte(6); + } else { + p.writePos(chr.getPosition()); + p.writeByte(chr.getStance()); + } + + p.writeShort(0);//chr.getFh() + p.writeByte(0); + MaplePet[] pet = chr.getPets(); + for (int i = 0; i < 3; i++) { + if (pet[i] != null) { + addPetInfo(p, pet[i], false); + } + } + p.writeByte(0); //end of pets + if (chr.getMount() == null) { + p.writeInt(1); // mob level + p.writeLong(0); // mob exp + tiredness + } else { + 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(p, mps, mps.getVisitors().length); + } else { + addAnnounceBox(p, mps, 1); + } + } else { + MapleMiniGame miniGame = chr.getMiniGame(); + if (miniGame != null && miniGame.isOwner(chr)) { + if (miniGame.hasFreeSlot()) { + addAnnounceBox(p, miniGame, 1, 0); + } else { + addAnnounceBox(p, miniGame, 2, miniGame.isMatchInProgress() ? 1 : 0); + } + } else { + p.writeByte(0); + } + } + + if (chr.getChalkboard() != null) { + p.writeByte(1); + p.writeString(chr.getChalkboard()); + } else { + p.writeByte(0); + } + 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(OutPacket p, MapleCharacter chr) { + Set newyears = chr.getReceivedNewYearRecords(); + if (!newyears.isEmpty()) { + p.writeByte(1); + + p.writeInt(newyears.size()); + for (NewYearCardRecord nyc : newyears) { + p.writeInt(nyc.getId()); + } + } else { + p.writeByte(0); + } + } + + 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 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, p); + break; + + case 8: // Successfully deleted a New Year Card. + p.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 ! + p.writeByte(msg); + break; + + case 0xA: // GetUnreceivedList_Done + int nSN = 1; + p.writeInt(nSN); + if ((nSN - 1) <= 98 && nSN > 0) {//lol nexon are you kidding + for (int i = 0; i < nSN; i++) { + p.writeInt(newyear.getId()); + p.writeInt(newyear.getSenderId()); + p.writeString(newyear.getSenderName()); + } + } + break; + + case 0xC: // NotiArrived + p.writeInt(newyear.getId()); + p.writeString(newyear.getSenderName()); + break; + + case 0xD: // BroadCast_AddCardInfo + p.writeInt(newyear.getId()); + p.writeInt(user.getId()); + break; + + case 0xE: // BroadCast_RemoveCardInfo + p.writeInt(newyear.getId()); + break; + } + return p; + } + + 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 OutPacket p, 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; + p.writeByte(1); + } + p.writeInt(ring.getRingId()); + p.writeInt(0); + p.writeInt(ring.getPartnerRingId()); + p.writeInt(0); + p.writeInt(ring.getItemId()); + } + } + if (yes == false) { + p.writeByte(0); + } + } + + private static void addMarriageRingLook(MapleClient target, final OutPacket p, MapleCharacter chr) { + MapleRing ring = chr.getMarriageRing(); + + if (ring == null || !ring.equipped()) { + p.writeByte(0); + } else { + p.writeByte(1); + + MapleCharacter targetChr = target.getPlayer(); + if (targetChr != null && targetChr.getPartnerId() == chr.getId()) { + p.writeInt(0); + p.writeInt(0); + } else { + p.writeInt(chr.getId()); + p.writeInt(ring.getPartnerChrId()); + } + + p.writeInt(ring.getItemId()); + } + } + + /** + * Adds an announcement box to an existing OutPacket. + * + * @param p The OutPacket to add an announcement box + * to. + * @param shop The shop to announce. + */ + 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 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(OutPacket p, MapleHiredMerchant hm) { + byte[] roomInfo = hm.getShopRoomInfo(); + + 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 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(OutPacket p, MaplePlayerShop shop) { + byte[] roomInfo = shop.getShopRoomInfo(); + + 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 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 Packet removePlayerShopBox(MaplePlayerShop shop) { + OutPacket p = OutPacket.create(SendOpcode.UPDATE_CHAR_BOX); + p.writeInt(shop.getOwner().getId()); + p.writeByte(0); + return p; + } + + 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(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++) { + op.writeByte(slea.readByte()); + } + } + + private static void serializeMovementList(OutPacket p, List moves) { + p.writeByte(moves.size()); + for (LifeMovementFragment move : moves) { + move.serialize(p); + } + } + + 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 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 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 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 + p.writeInt(cid); + p.writeInt(summonOid); + p.writeByte(0); // char level + p.writeByte(direction); + p.writeByte(allDamage.size()); + for (SummonAttackEntry attackEntry : allDamage) { + p.writeInt(attackEntry.getMonsterOid()); // oid + p.writeByte(6); // who knows + p.writeInt(attackEntry.getDamage()); // damage + } + + return p; + } + + /* + 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 + SUMMON_ATTACK); + p.writeInt(cid); + p.writeInt(summonSkillId); + p.writeByte(direction); + p.writeByte(4); + p.writeByte(allDamage.size()); + for (SummonAttackEntry attackEntry : allDamage) { + p.writeInt(attackEntry.getMonsterOid()); // oid + p.writeByte(6); // who knows + p.writeInt(attackEntry.getDamage()); // damage + } + return p; + } + */ + + 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 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 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) { + p.writeInt(charge); + } + return p; + } + + 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) { + p.writeInt(skill); + } + 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) { + p.writeInt(oned); + p.writeByte(0x0); + if (skill == 4211006) { + p.writeByte(onedList.size()); + } + for (Integer eachd : onedList) { + p.writeInt(eachd); + } + } + } + } + + 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 + private static int doubleToShortBits(double d) { + return (int) (Double.doubleToLongBits(d) >> 48); + } + + public static Packet getNPCShop(MapleClient c, int sid, List items) { + MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); + final OutPacket p = OutPacket.create(SendOpcode.OPEN_NPC_SHOP); + p.writeInt(sid); + p.writeShort(items.size()); // item count + for (MapleShopItem item : items) { + 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())) { + p.writeShort(1); // stacksize o.o + p.writeShort(item.getBuyable()); + } else { + p.writeShort(0); + p.writeInt(0); + p.writeShort(doubleToShortBits(ii.getUnitPrice(item.getItemId()))); + p.writeShort(ii.getSlotMax(c, item.getItemId())); + } + } + return p; + } + + /* 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 Packet shopTransaction(byte code) { + OutPacket p = OutPacket.create(SendOpcode.CONFIRM_SHOP_TRANSACTION); + p.writeByte(code); + return p; + } + + 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 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) { + 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(p, mod.getItem(), true); + break; + } + case 1: {//update quantity + p.writeShort(mod.getQuantity()); + break; + } + case 2: {//move + p.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) { + p.writeByte(addMovement); + } + return p; + } + + 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 Packet removePlayerFromMap(int chrId) { + OutPacket p = OutPacket.create(SendOpcode.REMOVE_PLAYER_FROM_MAP); + p.writeInt(chrId); + return p; + } + + 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 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 Packet showAriantScoreBoard() { // thanks lrenex for pointing match's end scoreboard packet + return OutPacket.create(SendOpcode.ARIANT_ARENA_SHOW_RESULT); + } + + public static Packet updateAriantPQRanking(final MapleCharacter chr, final int score) { + return updateAriantPQRanking(new LinkedHashMap() {{ + put(chr, score); + }}); + } + + public static Packet updateAriantPQRanking(Map playerScore) { + OutPacket p = OutPacket.create(SendOpcode.ARIANT_ARENA_USER_SCORE); + p.writeByte(playerScore.size()); + for (Entry e : playerScore.entrySet()) { + p.writeString(e.getKey().getName()); + p.writeInt(e.getValue()); + } + return p; + } + + public static Packet updateWitchTowerScore(int score) { + OutPacket p = OutPacket.create(SendOpcode.WITCH_TOWER_SCORE_UPDATE); + p.writeByte(score); + return p; + } + + 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 objId + * @param animation + * @param chrId + * @return + */ + public static Packet removeItemFromMap(int objId, int animation, int chrId) { + return removeItemFromMap(objId, animation, chrId, 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 objId + * @param animation + * @param chrId + * @param pet + * @param slot + * @return + */ + 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) { + p.writeInt(chrId); + if (pet) { + p.writeByte(slot); + } + } + return p; + } + + 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 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) { + p.writeInt(0); + } + p.writeInt(damage); + if (skill != -4) { + p.writeInt(monsteridfrom); + p.writeByte(direction); + if (pgmr) { + 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 { + p.writeShort(0); + } + p.writeInt(damage); + if (fake > 0) { + p.writeInt(fake); + } + } else { + p.writeInt(damage); + } + + return p; + } + + public static Packet sendMapleLifeCharacterInfo() { + final OutPacket p = OutPacket.create(SendOpcode.MAPLELIFE_RESULT); + p.writeInt(0); + return p; + } + + public static Packet sendMapleLifeNameError() { + OutPacket p = OutPacket.create(SendOpcode.MAPLELIFE_RESULT); + p.writeInt(2); + p.writeInt(3); + p.writeByte(0); + return p; + } + + public static Packet sendMapleLifeError(int code) { + OutPacket p = OutPacket.create(SendOpcode.MAPLELIFE_ERROR); + p.writeByte(0); + p.writeInt(code); + return p; + } + + 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 Packet addNewCharEntry(MapleCharacter chr) { + final OutPacket p = OutPacket.create(SendOpcode.ADD_NEW_CHAR_ENTRY); + p.writeByte(0); + addCharEntry(p, chr, false); + return p; + } + + /** + * 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 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 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 Packet sendRecommended(List> worlds) { + final OutPacket p = OutPacket.create(SendOpcode.RECOMMENDED_WORLD_MESSAGE); + p.writeByte(worlds.size());//size + for (Pair world : worlds) { + p.writeInt(world.getLeft()); + p.writeString(world.getRight()); + } + return p; + } + + /** + * @param chr + * @param isSelf + * @return + */ + 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 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) { + MapleGuild mg = Server.getInstance().getGuild(chr.getGuildId()); + guildName = mg.getName(); + + MapleAlliance alliance = Server.getInstance().getAlliance(chr.getGuild().getAllianceId()); + if (alliance != null) { + allianceName = alliance.getName(); + } + } + 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) { + 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); + } + } + 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(); + p.writeByte(mmount.getId()); //mount + p.writeInt(mmount.getLevel()); //level + p.writeInt(mmount.getExp()); //exp + p.writeInt(mmount.getTiredness()); //tiredness + } else { + p.writeByte(0); + } + p.writeByte(chr.getCashShop().getWishList().size()); + for (int sn : chr.getCashShop().getWishList()) { + p.writeInt(sn); + } + + MonsterBook book = chr.getMonsterBook(); + 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) { + p.writeInt(medal.getItemId()); + } else { + p.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); + p.writeShort(medalQuests.size()); + for (Short s : medalQuests) { + p.writeShort(s); + } + return p; + } + + /** + * 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 Packet giveBuff(int buffid, int bufflength, List> statups) { + final OutPacket p = OutPacket.create(SendOpcode.GIVE_BUFF); + boolean special = false; + writeLongMask(p, statups); + for (Pair statup : statups) { + if (statup.getLeft().equals(MapleBuffStat.MONSTER_RIDING) || statup.getLeft().equals(MapleBuffStat.HOMING_BEACON)) { + special = true; + } + p.writeShort(statup.getRight().shortValue()); + p.writeInt(buffid); + p.writeInt(bufflength); + } + p.writeInt(0); + p.writeByte(0); + p.writeInt(statups.get(0).getRight()); //Homing beacon ... + + if (special) { + p.skip(3); + } + return p; + } + + /** + * @param cid + * @param statups + * @param mount + * @return + */ + 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; + } + /* p.writeInt(cid); + writeLongMask(mplew, statups); + for (Pair statup : statups) { + if (morph) { + p.writeInt(statup.getRight().intValue()); + } else { + p.writeShort(statup.getRight().shortValue()); + } + } + p.writeShort(0); + p.writeByte(0);*/ + + /** + * @param c + * @param quest + * @return + */ + 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; + } + + /** + * @param c + * @param quest + * @return + */ + 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; + } + + /** + * @param c + * @param quest + * @param npc + * @param progress + * @return + */ + + 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 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 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 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()); + p.writeShort(iqs.getQuestID()); + p.writeByte(1); + p.writeString(iqs.getProgressData()); + } else { + p.writeShort(qs.getQuest().getId()); + p.writeByte(qs.getStatus().getId()); + p.writeString(qs.getProgressData()); + } + p.skip(5); + return p; + } + + private static void writeLongMaskD(final OutPacket p, 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(); + } + } + p.writeLong(firstmask); + p.writeLong(secondmask); + } + + public static Packet giveDebuff(List> statups, MobSkill skill) { + final OutPacket p = OutPacket.create(SendOpcode.GIVE_BUFF); + writeLongMaskD(p, statups); + for (Pair statup : statups) { + p.writeShort(statup.getRight().shortValue()); + p.writeShort(skill.getSkillId()); + p.writeShort(skill.getSkillLevel()); + p.writeInt((int) skill.getDuration()); + } + p.writeShort(0); // ??? wk charges have 600 here o.o + p.writeShort(900);//Delay + p.writeByte(1); + return p; + } + + 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 + OutPacket p = OutPacket.create(SendOpcode.GIVE_FOREIGN_BUFF); + p.writeInt(chrId); + writeLongMaskD(p, statups); + for (Pair statup : statups) { + if (statup.getLeft() == MapleDisease.POISON) { + p.writeShort(statup.getRight().shortValue()); + } + p.writeShort(skill.getSkillId()); + p.writeShort(skill.getSkillLevel()); + } + p.writeShort(0); // same as give_buff + p.writeShort(900);//Delay + return p; + } + + 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 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 Packet giveForeignBuff(int chrId, List> statups) { + OutPacket p = OutPacket.create(SendOpcode.GIVE_FOREIGN_BUFF); + p.writeInt(chrId); + writeLongMask(p, statups); + for (Pair statup : statups) { + p.writeShort(statup.getRight().shortValue()); + } + p.writeInt(0); + p.writeShort(0); + return p; + } + + 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 Packet cancelBuff(List statups) { + OutPacket p = OutPacket.create(SendOpcode.CANCEL_BUFF); + writeLongMaskFromList(p, statups); + p.writeByte(1);//? + return p; + } + + private static void writeLongMask(final OutPacket p, 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(); + } + } + p.writeLong(firstmask); + p.writeLong(secondmask); + } + + private static void writeLongMaskFromList(OutPacket p, List statups) { + long firstmask = 0; + long secondmask = 0; + for (MapleBuffStat statup : statups) { + if (statup.isFirst()) { + firstmask |= statup.getValue(); + } else { + secondmask |= statup.getValue(); + } + } + p.writeLong(firstmask); + p.writeLong(secondmask); + } + + private static void writeLongEncodeTemporaryMask(final OutPacket p, 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; + } + } + + for (int mask : masks) { + p.writeInt(mask); + } + } + + 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 OutPacket p) { + p.writeInt(0); + p.writeInt(2048); + p.writeLong(0); + } + + 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) { + p.writeShort(statup.getRight().shortValue()); + } + p.writeShort(skill.getSkillId()); + p.writeShort(skill.getSkillLevel()); + } + p.writeShort(0); // same as give_buff + p.writeShort(900);//Delay + return p; + } + + 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(OutPacket p) { + p.writeInt(0); + p.writeInt(262144); + p.writeLong(0); + } + + public static Packet giveForeignChairSkillEffect(int cid) { + final OutPacket p = OutPacket.create(SendOpcode.GIVE_FOREIGN_BUFF); + p.writeInt(cid); + writeLongMaskChair(p); + + p.writeShort(0); + p.writeShort(0); + p.writeShort(100); + p.writeShort(1); + + p.writeShort(0); + p.writeShort(900); + + p.skip(7); + + return p; + } + + // packet found thanks to Ronan + 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 Packet cancelForeignChairSkillEffect(int chrId) { + OutPacket p = OutPacket.create(SendOpcode.CANCEL_FOREIGN_BUFF); + p.writeInt(chrId); + writeLongMaskChair(p); + return p; + } + + 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 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 Packet getPlayerShopRemoveVisitor(int slot) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.EXIT.getCode()); + if (slot != 0) { + p.writeShort(slot); + } + return p; + } + + 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 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 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 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 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()) { + p.writeShort(item.getBundles()); + p.writeShort(item.getItem().getQuantity()); + p.writeInt(item.getPrice()); + addItemInfo(p, item.getItem(), true); + } + return p; + } + + 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 p; + } + + /** + * @param c + * @param shop + * @param owner + * @return + */ + 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(); + p.writeByte(sold.size()); + for (MaplePlayerShop.SoldItem s : sold) { + p.writeInt(s.getItemId()); + p.writeShort(s.getQuantity()); + p.writeInt(s.getMesos()); + p.writeString(s.getBuyer()); + } + } else { + p.writeByte(0); + } + + 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) { + p.writeByte(i + 1); + addCharLook(p, visitors[i], false); + p.writeString(visitors[i].getName()); + } + } + + p.writeByte(0xFF); + p.writeString(shop.getDescription()); + List items = shop.getItems(); + p.writeByte(0x10); //TODO SLOTS, which is 16 for most stores...slotMax + p.writeByte(items.size()); + for (MaplePlayerShopItem item : items) { + p.writeShort(item.getBundles()); + p.writeShort(item.getItem().getQuantity()); + p.writeInt(item.getPrice()); + addItemInfo(p, item.getItem(), true); + } + return p; + } + + 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) { + p.writeByte(0); + addCharLook(p, trade.getPartner().getChr(), false); + p.writeString(trade.getPartner().getChr().getName()); + } + p.writeByte(number); + addCharLook(p, c.getPlayer(), false); + p.writeString(c.getPlayer().getName()); + p.writeByte(0xFF); + return p; + } + + public static Packet getTradeConfirmation() { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.CONFIRM.getCode()); + return p; + } + + /** + * 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 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; + } + + /** + * 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 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 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 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) { + p.writeInt(style); + } + return p; + } + + 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 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 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 + p.writeString(sTitle); + p.writeString(sProblemText); + p.writeString(sHintText); + p.writeShort(nMinInput); + p.writeShort(nMaxInput); + p.writeInt(tRemainInitialQuiz); + } + return p; + } + + 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 + p.writeInt(nType); + p.writeInt(dwAnswer); + p.writeInt(nCorrect); + p.writeInt(nRemain); + p.writeInt(tRemainInitialQuiz); + } + return p; + } + + public static Packet showBuffEffect(int chrId, int skillId, int effectId) { + return showBuffEffect(chrId, skillId, effectId, (byte) 3); + } + + 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 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 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 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 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 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 Packet getShowQuestCompletion(int id) { + final OutPacket p = OutPacket.create(SendOpcode.QUEST_CLEAR); + p.writeShort(id); + return p; + } + + 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) { + p.writeByte(binding.getType()); + p.writeInt(binding.getAction()); + } else { + p.writeByte(0); + p.writeInt(0); + } + } + return p; + } + + public static Packet QuickslotMappedInit(MapleQuickslotBinding pQuickslot) { + OutPacket p = OutPacket.create(SendOpcode.QUICKSLOT_INIT); + pQuickslot.encode(p); + return p; + } + + public static Packet getInventoryFull() { + return modifyInventory(true, Collections.emptyList()); + } + + public static Packet getShowInventoryFull() { + return getShowInventoryStatus(0xff); + } + + public static Packet showItemUnavailable() { + return getShowInventoryStatus(0xfe); + } + + 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 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(p, item, true); + } + p.writeShort(0); + p.writeByte(0); + return p; + } + + /* + * 0x0A = Inv full + * 0x0B = You do not have enough mesos + * 0x0C = One-Of-A-Kind error + */ + public static Packet getStorageError(byte i) { + final OutPacket p = OutPacket.create(SendOpcode.STORAGE); + p.writeByte(i); + return p; + } + + 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 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(p, item, true); + } + return p; + } + + 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(p, item, true); + } + return p; + } + + 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(p, item, true); + } + p.writeByte(0); + return p; + } + + /** + * @param oid + * @param remhppercentage + * @return + */ + 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 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) { + 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 Packet customShowBossHP(byte call, int oid, long currHP, long maxHP, byte tagColor, byte tagBgColor) { + Pair customHP = normalizedCustomMaxHP(currHP, maxHP); + + 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 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; + } + + /** + * 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 Packet giveFameErrorResponse(int status) { + final OutPacket p = OutPacket.create(SendOpcode.FAME_RESPONSE); + p.writeByte(status); + return p; + } + + 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 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) { + MapleDoor door = partyDoors.get(partycharid); + + if (door != null) { + MapleDoorObject mdo = door.getAreaDoor(); + p.writeInt(mdo.getTo().getId()); + p.writeInt(mdo.getFrom().getId()); + p.writeInt(mdo.getPosition().x); + p.writeInt(mdo.getPosition().y); + } else { + p.writeInt(999999999); + p.writeInt(999999999); + p.writeInt(0); + p.writeInt(0); + } + } else { + p.writeInt(999999999); + p.writeInt(999999999); + p.writeInt(0); + p.writeInt(0); + } + return p; + } + + 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 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; + } + + /** + * 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 Packet partyStatusMessage(int message) { + final OutPacket p = OutPacket.create(SendOpcode.PARTY_OPERATION); + p.writeByte(message); + return p; + } + + /** + * 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 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, OutPacket p, boolean leaving) { + List partymembers = new ArrayList<>(party.getMembers()); + while (partymembers.size() < 6) { + partymembers.add(new MaplePartyCharacter()); + } + for (MaplePartyCharacter partychar : partymembers) { + p.writeInt(partychar.getId()); + } + for (MaplePartyCharacter partychar : partymembers) { + p.writeFixedString(getRightPaddedStr(partychar.getName(), '\0', 13)); + } + for (MaplePartyCharacter partychar : partymembers) { + p.writeInt(partychar.getJobId()); + } + for (MaplePartyCharacter partychar : partymembers) { + p.writeInt(partychar.getLevel()); + } + for (MaplePartyCharacter partychar : partymembers) { + if (partychar.isOnline()) { + p.writeInt(partychar.getChannel() - 1); + } else { + p.writeInt(-2); + } + } + p.writeInt(party.getLeader().getId()); + for (MaplePartyCharacter partychar : partymembers) { + if (partychar.getChannel() == forchannel) { + p.writeInt(partychar.getMapId()); + } else { + p.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(); + p.writeInt(mdo.getTown().getId()); + p.writeInt(mdo.getArea().getId()); + p.writeInt(mdo.getPosition().x); + p.writeInt(mdo.getPosition().y); + } else { + p.writeInt(999999999); + p.writeInt(999999999); + p.writeInt(0); + p.writeInt(0); + } + } else { + p.writeInt(999999999); + p.writeInt(999999999); + p.writeInt(0); + p.writeInt(0); + } + } else { + p.writeInt(999999999); + p.writeInt(999999999); + p.writeInt(0); + p.writeInt(0); + } + } + } + + 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: + p.writeByte(0x0C); + p.writeInt(party.getId()); + p.writeInt(target.getId()); + if (op == PartyOperation.DISBAND) { + p.writeByte(0); + p.writeInt(party.getId()); + } else { + p.writeByte(1); + if (op == PartyOperation.EXPEL) { + p.writeByte(1); + } else { + p.writeByte(0); + } + p.writeString(target.getName()); + addPartyStatus(forChannel, party, p, false); + } + break; + case JOIN: + p.writeByte(0xF); + p.writeInt(party.getId()); + p.writeString(target.getName()); + addPartyStatus(forChannel, party, p, false); + break; + case SILENT_UPDATE: + case LOG_ONOFF: + p.writeByte(0x7); + p.writeInt(party.getId()); + addPartyStatus(forChannel, party, p, false); + break; + case CHANGE_LEADER: + p.writeByte(0x1B); + p.writeInt(target.getId()); + p.writeByte(0); + break; + } + return p; + } + + 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 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; + } + + /** + * mode: 0 buddychat; 1 partychat; 2 guildchat + * + * @param name + * @param chattext + * @param mode + * @return + */ + 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(OutPacket p, Map stats) { + int firstmask = 0; + int secondmask = 0; + for (MonsterStatus stat : stats.keySet()) { + if (stat.isFirst()) { + firstmask |= stat.getValue(); + } else { + secondmask |= stat.getValue(); + } + } + p.writeInt(firstmask); + p.writeInt(secondmask); + } + + public static Packet applyMonsterStatus(final int oid, final MonsterStatusEffect mse, final List reflection) { + Map stati = mse.getStati(); + final OutPacket p = OutPacket.create(SendOpcode.APPLY_MONSTER_STATUS); + p.writeInt(oid); + p.writeLong(0); + writeIntMask(p, stati); + for (Map.Entry stat : stati.entrySet()) { + p.writeShort(stat.getValue()); + if (mse.isMonsterSkill()) { + p.writeShort(mse.getMobSkill().getSkillId()); + p.writeShort(mse.getMobSkill().getSkillLevel()); + } else { + p.writeInt(mse.getSkill().getId()); + } + 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) { + p.writeInt(ref); + } + if (reflection.size() > 0) { + size /= 2; // This gives 2 buffs per reflection but it's really one buff + } + } + p.writeByte(size); // size + p.writeInt(0); + return p; + } + + 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 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 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 Packet removeClock() { + final OutPacket p = OutPacket.create(SendOpcode.STOP_CLOCK); + p.writeByte(0); + return p; + } + + 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 Packet removeMist(int objId) { + OutPacket p = OutPacket.create(SendOpcode.REMOVE_MIST); + p.writeInt(objId); + return p; + } + + 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 Packet damageMonster(int oid, int damage) { + return damageMonster(oid, damage, 0, 0); + } + + public static Packet healMonster(int oid, int heal, int curhp, int maxhp) { + return damageMonster(oid, -heal, curhp, maxhp); + } + + 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 Packet updateBuddylist(Collection buddylist) { + OutPacket p = OutPacket.create(SendOpcode.BUDDYLIST); + p.writeByte(7); + p.writeByte(buddylist.size()); + for (BuddylistEntry buddy : buddylist) { + if (buddy.isVisible()) { + 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++) { + p.writeInt(0);//mapid? + } + return p; + } + + public static Packet buddylistMessage(byte message) { + final OutPacket p = OutPacket.create(SendOpcode.BUDDYLIST); + p.writeByte(message); + return p; + } + + 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 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 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 Packet updateBuddyCapacity(int capacity) { + final OutPacket p = OutPacket.create(SendOpcode.BUDDYLIST); + p.writeByte(0x15); + p.writeByte(capacity); + return p; + } + + 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 Packet cancelChair(int id) { + final OutPacket p = OutPacket.create(SendOpcode.CANCEL_CHAIR); + if (id < 0) { + p.writeByte(0); + } else { + p.writeByte(1); + p.writeShort(id); + } + return p; + } + + // is there a way to spawn reactors non-animated? + 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 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 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 Packet musicChange(String song) { + return environmentChange(song, 6); + } + + public static Packet showEffect(String effect) { + return environmentChange(effect, 3); + } + + public static Packet playSound(String sound) { + return environmentChange(sound, 4); + } + + 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 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 Packet environmentMoveList(Set> envList) { + OutPacket p = OutPacket.create(SendOpcode.FIELD_OBSTACLE_ONOFF_LIST); + p.writeInt(envList.size()); + + for (Entry envMove : envList) { + p.writeString(envMove.getKey()); + p.writeInt(envMove.getValue()); + } + + return p; + } + + public static Packet environmentMoveReset() { + return OutPacket.create(SendOpcode.FIELD_OBSTACLE_ALL_RESET); + } + + 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) { + p.writeString(msg); + } + return p; + } + + public static Packet removeMapEffect() { + OutPacket p = OutPacket.create(SendOpcode.BLOW_WEATHER); + p.writeByte(0); + p.writeInt(0); + return p; + } + + public static Packet mapEffect(String path) { + final OutPacket p = OutPacket.create(SendOpcode.FIELD_EFFECT); + p.writeByte(3); + p.writeString(path); + return p; + } + + public static Packet mapSound(String path) { + final OutPacket p = OutPacket.create(SendOpcode.FIELD_EFFECT); + p.writeByte(4); + p.writeString(path); + return p; + } + + 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 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 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 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; + } + + /** + * 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 Packet 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 OutPacket p = OutPacket.create(SendOpcode.PLAYER_HINT); + p.writeString(hint); + p.writeShort(width); + p.writeShort(height); + p.writeByte(1); + return p; + } + + 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 Packet sendSpouseChat(MapleCharacter partner, String msg) { + OutPacket p = OutPacket.create(SendOpcode); + SPOUSE_CHAT); + p.writeString(partner.getName()); + p.writeString(msg); + return p; + } + */ + + 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 ) { + p.writeString(fiance); + } + p.writeByte(spouse ? 5 : 1); + p.writeString(text); + return p; + } + + 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 Packet removeMessengerPlayer(int position) { + final OutPacket p = OutPacket.create(SendOpcode.MESSENGER); + p.writeByte(0x02); + p.writeByte(position); + return p; + } + + 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 Packet joinMessenger(int position) { + final OutPacket p = OutPacket.create(SendOpcode.MESSENGER); + p.writeByte(0x01); + p.writeByte(position); + return p; + } + + public static Packet messengerChat(String text) { + final OutPacket p = OutPacket.create(SendOpcode.MESSENGER); + p.writeByte(0x06); + p.writeString(text); + return p; + } + + 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 OutPacket p, MaplePet pet, boolean showpet) { + p.writeByte(1); + if (showpet) { + p.writeByte(0); + } + + 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 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) { + p.writeByte(0); + p.writeBool(hunger); + } else { + addPetInfo(p, pet, true); + } + return p; + } + + 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 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 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 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 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 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 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 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) { + p.writeInt(ids); + } + return p; + } + + public static Packet petStatUpdate(MapleCharacter chr) { + // this actually does nothing... packet structure and stats needs to be uncovered + + final OutPacket p = OutPacket.create(SendOpcode.STAT_CHANGED); + int mask = 0; + mask |= MapleStat.PET.getValue(); + p.writeByte(0); + p.writeInt(mask); + MaplePet[] pets = chr.getPets(); + for (int i = 0; i < 3; i++) { + if (pets[i] != null) { + p.writeLong(pets[i].getUniqueId()); + } else { + p.writeLong(0); + } + } + p.writeByte(0); + return p; + } + + public static Packet showForcedEquip(int team) { + OutPacket p = OutPacket.create(SendOpcode.FORCED_MAP_EQUIP); + if (team > -1) { + p.writeByte(team); // 00 = red, 01 = blue + } + return p; + } + + 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 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 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 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++; + } + } + p.writeByte(count); + for (int i = 0; i < 5; i++) { + SkillMacro macro = macros[i]; + if (macro != null) { + p.writeString(macro.getName()); + p.writeByte(macro.getShout()); + p.writeInt(macro.getSkill1()); + p.writeInt(macro.getSkill2()); + p.writeInt(macro.getSkill3()); + } + } + return p; + } + + 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(p, chr, true); + } + p.writeByte(usePic ? 1 : 2); + return p; + } + + 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 Packet crogBoatPacket(boolean type) { + OutPacket p = OutPacket.create(SendOpcode.CONTI_MOVE); + p.writeByte(10); + p.writeByte(type ? 4 : 5); + return p; + } + + 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 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(); + p.writeByte(1); + addCharLook(p, visitor, false); + p.writeString(visitor.getName()); + } + 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(); + 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()); + } + p.writeByte(0xFF); + p.writeString(minigame.getDescription()); + p.writeByte(piece); + p.writeByte(0); + return p; + } + + public static Packet getMiniGameReady(MapleMiniGame game) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.READY.getCode()); + return p; + } + + public static Packet getMiniGameUnReady(MapleMiniGame game) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.UN_READY.getCode()); + return p; + } + + 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 Packet getMiniGameSkipOwner(MapleMiniGame game) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.SKIP.getCode()); + p.writeByte(0x01); + return p; + } + + public static Packet getMiniGameRequestTie(MapleMiniGame game) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.REQUEST_TIE.getCode()); + return p; + } + + public static Packet getMiniGameDenyTie(MapleMiniGame game) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.ANSWER_TIE.getCode()); + return p; + } + + /** + * 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 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 Packet getMiniGameSkipVisitor(MapleMiniGame game) { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeShort(PlayerInteractionHandler.Action.SKIP.getCode()); + return p; + } + + 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 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 Packet getMiniGameRemoveVisitor() { + OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.EXIT.getCode()); + p.writeByte(1); + return p; + } + + 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) { + matchResultType = 0; + } else if (tie != 0) { + matchResultType = 1; + } else { + matchResultType = 2; + } + + p.writeByte(matchResultType); + p.writeBool(result == 2); // host/visitor wins + + boolean omok = game.isOmok(); + if (matchResultType == 1) { + 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 + + 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 { + 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 p; + } + + public static Packet getMiniGameOwnerWin(MapleMiniGame game, boolean forfeit) { + return getMiniGameResult(game, 0, 1, forfeit ? 1 : 0); + } + + public static Packet getMiniGameVisitorWin(MapleMiniGame game, boolean forfeit) { + return getMiniGameResult(game, 0, 2, forfeit ? 1 : 0); + } + + public static Packet getMiniGameTie(MapleMiniGame game) { + return getMiniGameResult(game, 1, 3, 0); + } + + 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 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(); + p.writeByte(1); + addCharLook(p, visitor, false); + p.writeString(visitor.getName()); + } + 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 + p.writeInt(minigame.getOwnerScore()); + if (minigame.getVisitor() != null) { + MapleCharacter visitor = minigame.getVisitor(); + 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()); + } + p.writeByte(0xFF); + p.writeString(minigame.getDescription()); + p.writeByte(piece); + p.writeByte(0); + return p; + } + + 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) { + last = 30; + } else if (game.getMatchesToWin() > 6) { + last = 20; + } else { + last = 12; + } + + p.writeByte(last); + for (int i = 0; i < last; i++) { + p.writeInt(game.getCardId(i)); + } + return p; + } + + 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 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) { + p.writeByte(slot); + } else if (turn == 0) { + p.writeByte(slot); + p.writeByte(firstslot); + p.writeByte(type); + } + return p; + } + + // RPS_GAME packets thanks to Arnah (Vertisy) + public static Packet openRPSNPC() { + OutPacket p = OutPacket.create(SendOpcode.RPS_GAME); + p.writeByte(8);// open npc + p.writeInt(9000019); + return p; + } + + public static Packet rpsMesoError(int mesos) { + OutPacket p = OutPacket.create(SendOpcode.RPS_GAME); + p.writeByte(0x06); + if (mesos != -1) { + p.writeInt(mesos); + } + return p; + } + + 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 Packet rpsMode(byte mode) { + OutPacket p = OutPacket.create(SendOpcode.RPS_GAME); + p.writeByte(mode); + return p; + } + + public static Packet fredrickMessage(byte operation) { + final OutPacket p = OutPacket.create(SendOpcode.FREDRICK_MESSAGE); + p.writeByte(operation); + return p; + } + + public static Packet getFredrick(byte op) { + final OutPacket p = OutPacket.create(SendOpcode.FREDRICK); + p.writeByte(op); + + switch (op) { + case 0x24: + p.skip(8); + break; + default: + p.writeByte(0); + break; + } + + return p; + } + + 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); + p.writeByte(items.size()); + + for (Pair item : items) { + addItemInfo(p, item.getLeft(), true); + } + } catch (SQLException e) { + e.printStackTrace(); + } + p.skip(3); + return p; + } + + 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 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 Packet removeMinigameBox(MapleCharacter chr) { + OutPacket p = OutPacket.create(SendOpcode.UPDATE_CHAR_BOX); + p.writeInt(chr.getId()); + p.writeByte(0); + return p; + } + + 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 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 Packet hiredMerchantBox() { + final OutPacket p = OutPacket.create(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT); // header. + p.writeByte(0x07); + return p; + } + + // 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 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 Packet owlOfMinerva(MapleClient c, int itemId, List> hmsAvailable) { + byte itemType = ItemConstants.getInventoryType(itemId).getType(); + + 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 ps) { + MapleCharacter owner = ps.getOwner(); + + 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; + + 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); + } + + p.writeByte(itemType); + if (itemType == MapleInventoryType.EQUIP.getType()) { + addItemInfo(p, item.getItem(), true); + } + } + return p; + } + + 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) { + p.writeInt(i); + } + + return p; + } + + public static Packet retrieveFirstMessage() { + final OutPacket p = OutPacket.create(SendOpcode.ENTRUSTED_SHOP_CHECK_RESULT); // header. + p.writeByte(0x09); + return p; + } + + 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 + * 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 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) { + p.writeByte(i + 1); + addCharLook(p, visitors[i], false); + p.writeString(visitors[i].getName()); + } + } + p.writeByte(-1); + if (hm.isOwner(chr)) { + List> msgList = hm.getMessages(); + + p.writeShort(msgList.size()); + for (Pair stringBytePair : msgList) { + p.writeString(stringBytePair.getLeft()); + p.writeByte(stringBytePair.getRight()); + } + } else { + p.writeShort(0); + } + p.writeString(hm.getOwner()); + if (hm.isOwner(chr)) { + p.writeShort(0); + p.writeShort(hm.getTimeOpen()); + p.writeByte(firstTime ? 1 : 0); + List sold = hm.getSold(); + p.writeByte(sold.size()); + for (MapleHiredMerchant.SoldItem s : sold) { + p.writeInt(s.getItemId()); + p.writeShort(s.getQuantity()); + p.writeInt(s.getMesos()); + p.writeString(s.getBuyer()); + } + p.writeInt(chr.getMerchantMeso());//:D? + } + 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()) { + p.writeByte(0);//Hmm?? + } else { + for (MaplePlayerShopItem item : hm.getItems()) { + p.writeShort(item.getBundles()); + p.writeShort(item.getItem().getQuantity()); + p.writeInt(item.getPrice()); + addItemInfo(p, item.getItem(), true); + } + } + return p; + } + + 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()) { + p.writeShort(item.getBundles()); + p.writeShort(item.getItem().getQuantity()); + p.writeInt(item.getPrice()); + addItemInfo(p, item.getItem(), true); + } + return p; + } + + 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 Packet hiredMerchantVisitorLeave(int slot) { + final OutPacket p = OutPacket.create(SendOpcode.PLAYER_INTERACTION); + p.writeByte(PlayerInteractionHandler.Action.EXIT.getCode()); + if (slot != 0) { + p.writeByte(slot); + } + return p; + } + + 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 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 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 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 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 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 Packet removeHiredMerchantBox(int id) { + final OutPacket p = OutPacket.create(SendOpcode.DESTROY_HIRED_MERCHANT); + p.writeInt(id); + return p; + } + + 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 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<>(); + 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()) { + p.writeByte(entry.getKey()); + p.writeInt(entry.getValue()); + } + p.writeByte(0xFF); + for (Entry entry : maskedEquip.entrySet()) { + p.writeByte(entry.getKey()); + p.writeInt(entry.getValue()); + } + p.writeByte(0xFF); + Integer cWeapon = equip.get((byte) -111); + if (cWeapon != null) { + p.writeInt(cWeapon); + } else { + p.writeInt(0); + } + for (int i = 0; i < 3; i++) { + p.writeInt(0); + } + return p; + } + + 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 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 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; + writeLongMask(p, statups); + p.writeShort(0); + for (Pair stat : statups) { + p.writeInt(stat.getRight().shortValue()); + p.writeInt(buffid); + p.skip(infusion ? 10 : 5); + p.writeShort(duration); + } + p.skip(3); + return p; + } + + 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; + p.writeInt(cid); + writeLongMask(p, statups); + p.writeShort(0); + for (Pair statup : statups) { + p.writeInt(statup.getRight().shortValue()); + p.writeInt(buffid); + p.skip(infusion ? 10 : 5); + p.writeShort(time); + } + p.writeShort(0); + p.writeByte(2); + return p; + } + + 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(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++) { + p.writeByte(0); + } + } + p.writeByte(1); + return p; + } + + public static Packet noteSendMsg() { + OutPacket p = OutPacket.create(SendOpcode.MEMO_RESULT); + p.writeByte(4); + return p; + } + + /* + * 0 = Player online, use whisper + * 1 = Check player's name + * 2 = Receiver inbox full + */ + public static Packet noteError(byte error) { + OutPacket p = OutPacket.create(SendOpcode.MEMO_RESULT); + p.writeByte(5); + p.writeByte(error); + return p; + } + + 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++) { + 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 p; + } + + public static Packet useChalkboard(MapleCharacter chr, boolean close) { + OutPacket p = OutPacket.create(SendOpcode.CHALKBOARD); + p.writeInt(chr.getId()); + if (close) { + p.writeByte(0); + } else { + p.writeByte(1); + p.writeString(chr.getChalkboard()); + } + return p; + } + + 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) { + p.writeByte(1); + List map = chr.getVipTrockMaps(); + for (int i = 0; i < 10; i++) { + p.writeInt(map.get(i)); + } + } else { + p.writeByte(0); + List map = chr.getTrockMaps(); + for (int i = 0; i < 5; i++) { + p.writeInt(map.get(i)); + } + } + return p; + } + + /* 1: cannot find char info, + 2: cannot transfer under 20, + 3: cannot send banned, + 4: cannot send married, + 5: cannot send guild leader, + 6: cannot send if account already requested transfer, + 7: cannot transfer within 30days, + 8: must quit family, + 9: unknown error + */ + 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(); + p.writeInt(worlds.size()); + for (World world : worlds) { + p.writeString(GameConstants.WORLD_NAMES[world.getId()]); + } + } + return p; + } + + 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 + 1: name change already submitted + 2: name change within a month + 3: recently banned + 4: unknown error + */ + 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 p; + } + + /* 0: Name available + * >0: Name is in use + * <0: Unknown error + */ + + 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 + p.writeString(availableName); + p.writeBool(!canUseName); + return p; + } + + 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 Packet showNameChangeCancel(boolean success) { + OutPacket p = OutPacket.create(SendOpcode.CANCEL_NAME_CHANGE_RESULT); + p.writeBool(success); + if (!success) { + p.writeByte(0); + } + //p.writeString("Custom message."); //only if ^ != 0 + return p; + } + + public static Packet showWorldTransferCancel(boolean success) { + OutPacket p = OutPacket.create(SendOpcode.CANCEL_TRANSFER_WORLD_RESULT); + p.writeBool(success); + if (!success) { + p.writeByte(0); + } + //p.writeString("Custom message."); //only if ^ != 0 + return p; + } + + 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 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 Packet MTSConfirmSell() { + final OutPacket p = OutPacket.create(SendOpcode.MTS_OPERATION); + p.writeByte(0x1D); + return p; + } + + public static Packet MTSConfirmBuy() { + final OutPacket p = OutPacket.create(SendOpcode.MTS_OPERATION); + p.writeByte(0x33); + return p; + } + + public static Packet MTSFailBuy() { + final OutPacket p = OutPacket.create(SendOpcode.MTS_OPERATION); + p.writeByte(0x34); + p.writeByte(0x42); + return p; + } + + 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 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(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++) { + p.writeByte(0); + } + } + } else { + p.writeInt(0); + } + return p; + } + + 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(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++) { + p.writeByte(0); + } + } + } + p.writeByte(0xD0 + items.size()); + p.writeBytes(new byte[]{-1, -1, -1, 0}); + return p; + } + + 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(p, item, accountId); + } + p.writeInt(maplePoints); + p.writeInt(items.size()); + for (Pair itemPair : items) { + int quantity = itemPair.getLeft(); + p.writeShort((short) quantity); //quantity (0 = 1 for cash items) + p.writeShort(0x1F); //0 = ?, >=0x20 = ?, <0x20 = ? (does nothing?) + p.writeInt(itemPair.getRight()); + } + p.writeInt(mesos); + return p; + } + + 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 Packet 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 Packet getFindResult(MapleCharacter target, byte type, int fieldOrChannel, byte flag) { + OutPacket p = OutPacket.create(SendOpcode.WHISPER); + + p.writeByte(flag | WhisperFlag.RESULT); + p.writeString(target.getName()); + p.writeByte(type); + p.writeInt(fieldOrChannel); + + if (type == WhisperHandler.RT_SAME_CHANNEL) { + p.writeInt(target.getPosition().x); + p.writeInt(target.getPosition().y); + } + + return p; + } + + 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 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 Packet sendAutoHpPot(int itemId) { + final OutPacket p = OutPacket.create(SendOpcode.AUTO_HP_POT); + p.writeInt(itemId); + return p; + } + + public static Packet sendAutoMpPot(int itemId) { + OutPacket p = OutPacket.create(SendOpcode.AUTO_MP_POT); + p.writeInt(itemId); + return p; + } + + 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 Packet updateGender(MapleCharacter chr) { + OutPacket p = OutPacket.create(SendOpcode.SET_GENDER); + p.writeByte(chr.getGender()); + return p; + } + + public static Packet enableReport() { // thanks to snow + OutPacket p = OutPacket.create(SendOpcode.CLAIM_STATUS_CHANGED); + p.writeByte(1); + return p; + } + + 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 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]; + p.writeByte(i <= 1 ? 1 : 2); //type + p.writeInt(entitlement.getRepCost()); + p.writeInt(entitlement.getUsageLimit()); + p.writeString(entitlement.getName()); + p.writeString(entitlement.getDescription()); + } + return p; + } + + /** + * 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 Packet sendFamilyMessage(int type, int mesos) { + OutPacket p = OutPacket.create(SendOpcode.FAMILY_RESULT); + p.writeInt(type); + p.writeInt(mesos); + return p; + } + + public static Packet getFamilyInfo(MapleFamilyEntry f) { + if (f == null) { + return getEmptyFamilyInfo(); + } + + 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 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 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 + entryCount += Math.min(2, entry.getTotalSeniors()); + //needed since OutPacket 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; + } + entryCount++; + for (MapleFamilyEntry superJunior : junior.getJuniors()) { + if (superJunior == 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++; + } + 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(p, otherJunior); + } + } + if (missingEntries) { + addPedigreeEntry(p, entry); + } + for (MapleFamilyEntry junior : entry.getJuniors()) { + if (junior == null) { + continue; + } + addPedigreeEntry(p, junior); + for (MapleFamilyEntry superJunior : junior.getJuniors()) { + if (superJunior != null) { + addPedigreeEntry(p, superJunior); + } + } + } + p.writeInt(2 + superJuniors.size()); //member info count + // 0 = total seniors, -1 = total members, otherwise junior count of ID + p.writeInt(-1); + p.writeInt(entry.getFamily().getTotalMembers()); + p.writeInt(0); + p.writeInt(entry.getTotalSeniors()); //client subtracts provided seniors + for (MapleFamilyEntry superJunior : superJuniors) { + p.writeInt(superJunior.getChrId()); + p.writeInt(superJunior.getTotalJuniors()); + } + 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(OutPacket p, MapleFamilyEntry entry) { + MapleCharacter chr = entry.getChr(); + boolean isOnline = chr != null; + 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 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 Packet getGPMessage(int gpChange) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(6); + p.writeInt(gpChange); + return p; + } + + public static Packet getItemMessage(int itemid) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(7); + p.writeInt(itemid); + return p; + } + + 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 Packet showGainCard() { + OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(0x0D); + return p; + } + + public static Packet showForeignCardEffect(int id) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_FOREIGN_EFFECT); + p.writeInt(id); + p.writeByte(0x0D); + return p; + } + + public static Packet changeCover(int cardid) { + OutPacket p = OutPacket.create(SendOpcode.MONSTER_BOOK_SET_COVER); + p.writeInt(cardid); + return p; + } + + 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 Packet showIntro(String path) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(0x12); + p.writeString(path); + return p; + } + + 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 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; + } + + /** + * 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 Packet openUI(byte ui) { + OutPacket p = OutPacket.create(SendOpcode.OPEN_UI); + p.writeByte(ui); + return p; + } + + public static Packet lockUI(boolean enable) { + OutPacket p = OutPacket.create(SendOpcode.LOCK_UI); + p.writeByte(enable ? 1 : 0); + return p; + } + + public static Packet disableUI(boolean enable) { + final OutPacket p = OutPacket.create(SendOpcode.DISABLE_UI); + p.writeByte(enable ? 1 : 0); + return p; + } + + 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) { + p.writeByte(0); + } else { + p.writeByte(item.getPosition()); + addItemInfo(p, item, true); + } + return p; + } + + public static Packet removeNPC(int objId) { + OutPacket p = OutPacket.create(SendOpcode.REMOVE_NPC); + p.writeInt(objId); + return p; + } + + public static Packet removeNPCController(int objId) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_NPC_REQUEST_CONTROLLER); + p.writeByte(0); + p.writeInt(objId); + return p; + } + + /** + * 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 Packet reportResponse(byte mode) { + final OutPacket p = OutPacket.create(SendOpcode.SUE_CHARACTER_RESULT); + p.writeByte(mode); + return p; + } + + 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 Packet sendHammerMessage() { + final OutPacket p = OutPacket.create(SendOpcode.VICIOUS_HAMMER); + p.writeByte(0x3D); + p.writeInt(0); + return p; + } + + public static Packet playPortalSound() { + return showSpecialEffect(7); + } + + public static Packet showMonsterBookPickup() { + return showSpecialEffect(14); + } + + public static Packet showEquipmentLevelUp() { + return showSpecialEffect(15); + } + + public static Packet showItemLevelup() { + return showSpecialEffect(15); + } + + public static Packet showBuybackEffect() { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(11); + p.writeInt(0); + + return p; + } + + 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 p; + } + + /** + * 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 Packet showSpecialEffect(int effect) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(effect); + return p; + } + + 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 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 Packet showForeignEffect(int effect) { + return showForeignEffect(-1, effect); + } + + 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 Packet showOwnRecovery(byte heal) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(0x0A); + p.writeByte(heal); + return p; + } + + 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 Packet showWheelsLeft(int left) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_ITEM_GAIN_INCHAT); + p.writeByte(0x15); + p.writeByte(left); + return p; + } + + 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 Packet showInfoText(String text) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(9); + p.writeString(text); + return p; + } + + 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 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 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 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) { + p.writeInt(itemMade); + p.writeInt(itemCount); + } + p.writeInt(itemsLost.size()); // Loop + for (Pair item : itemsLost) { + p.writeInt(item.getLeft()); + p.writeInt(item.getRight()); + } + p.writeInt(INCBuffGems.size()); + for (Integer gem : INCBuffGems) { + p.writeInt(gem); + } + if (catalystID != -1) { + p.writeByte(1); // stimulator + p.writeInt(catalystID); + } else { + p.writeByte(0); + } + + p.writeInt(mesos); + return p; + } + + 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 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) { + p.writeInt(item.getLeft()); + p.writeInt(item.getRight()); + } + p.writeInt(mesos); // Mesos spent. + return p; + } + + 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 Packet getMultiMegaphone(String[] messages, int channel, boolean showEar) { + final OutPacket p = OutPacket.create(SendOpcode.SERVERMESSAGE); + p.writeByte(0x0A); + if (messages[0] != null) { + p.writeString(messages[0]); + } + p.writeByte(messages.length); + for (int i = 1; i < messages.length; i++) { + if (messages[i] != null) { + p.writeString(messages[i]); + } + } + for (int i = 0; i < 10; i++) { + p.writeByte(channel - 1); + } + p.writeByte(showEar ? 1 : 0); + p.writeByte(1); + return p; + } + + /** + * 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 Packet getGMEffect(int type, byte mode) { + OutPacket p = OutPacket.create(SendOpcode.ADMIN_RESULT); + p.writeByte(type); + p.writeByte(mode); + return p; + } + + 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) { + p.writeInt(extra); + } else { + p.writeByte(extra); //-1 = unable to find + } + p.writeByte(0); + return p; + } + + public static Packet disableMinimap() { + final OutPacket p = OutPacket.create(SendOpcode.ADMIN_RESULT); + p.writeShort(0x1C); + return p; + } + + 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 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 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 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 Packet getSeniorMessage(String name) { + final OutPacket p = OutPacket.create(SendOpcode.FAMILY_JOIN_ACCEPTED); + p.writeString(name); + p.writeInt(0); + return p; + } + + 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 Packet showBoughtCashPackage(List cashPackage, int accountId) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + + p.writeByte(0x89); + p.writeByte(cashPackage.size()); + + for (Item item : cashPackage) { + addCashItemInformation(p, item, accountId); + } + + p.writeShort(0); + + return p; + } + + 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 Packet onCashItemGachaponOpenFailed() { + OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_CASH_ITEM_GACHAPON_RESULT); + p.writeByte(0xE4); + return p; + } + + 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; + } + + 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 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 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 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 Packet sendDueyMSG(byte operation) { + return sendDuey(operation, null); + } + + public static Packet sendDuey(int operation, List packages) { + final OutPacket p = OutPacket.create(SendOpcode.PARCEL); + p.writeByte(operation); + if (operation == 8) { + p.writeByte(0); + p.writeByte(packages.size()); + for (DueyPackage dp : packages) { + p.writeInt(dp.getPackageId()); + p.writeFixedString(dp.getSender()); + for (int i = dp.getSender().length(); i < 13; i++) { + p.writeByte(0); + } + + p.writeInt(dp.getMesos()); + p.writeLong(getTime(dp.sentTimeInMilliseconds())); + + String msg = dp.getMessage(); + if (msg != null) { + p.writeInt(1); + p.writeFixedString(msg); + for (int i = msg.length(); i < 200; i++) { + p.writeByte(0); + } + } else { + p.writeInt(0); + p.skip(200); + } + + p.writeByte(0); + if (dp.getItem() != null) { + p.writeByte(1); + addItemInfo(p, dp.getItem(), true); + } else { + p.writeByte(0); + } + } + p.writeByte(0); + } + + return p; + } + + 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 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 Packet getDojoInfoMessage(String message) { + final OutPacket p = OutPacket.create(SendOpcode.SHOW_STATUS_INFO); + p.writeByte(9); + p.writeString(message); + return p; + } + + /** + * 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 Packet blockedMessage(int type) { + final OutPacket p = OutPacket.create(SendOpcode.BLOCKED_MAP); + p.writeByte(type); + return p; + } + + /** + * 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 Packet blockedMessage2(int type) { + final OutPacket p = OutPacket.create(SendOpcode.BLOCKED_SERVER); + p.writeByte(type); + return p; + } + + 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; + } + + /** + * 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 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 p; + } + + /** + * 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 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 p; + } + + /** + * 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 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; + } + + /** + * @param type - (0:Light&Long 1:Heavy&Short) + * @param delay - seconds + * @return + */ + 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 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 Packet dojoWarpUp() { + final OutPacket p = OutPacket.create(SendOpcode.DOJO_WARP_UP); + p.writeByte(0); + p.writeByte(6); + return p; + } + + 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) { + StringBuilder builder = new StringBuilder(in); + for (int x = in.length(); x < length; x++) { + builder.append(padchar); + } + return builder.toString(); + } + + 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 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(OutPacket p, MapleCharacter chr) { + p.writeShort(chr.getCrushRings().size()); + for (MapleRing ring : chr.getCrushRings()) { + 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.writeShort(chr.getFriendshipRings().size()); + for (MapleRing ring : chr.getFriendshipRings()) { + 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(); + + 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) { + p.writeInt(marriageRing.getItemId()); + p.writeInt(marriageRing.getItemId()); + } else { + p.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) + p.writeInt(1112803); // Engagement Ring's Outcome (doesn't matter for engagement) + } + 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 { + p.writeShort(0); + } + } + + public static Packet finishedSort(int inv) { + OutPacket p = OutPacket.create(SendOpcode.GATHER_ITEM_RESULT); + p.writeByte(0); + p.writeByte(inv); + return p; + } + + public static Packet finishedSort2(int inv) { + OutPacket p = OutPacket.create(SendOpcode.SORT_ITEM_RESULT); + p.writeByte(0); + p.writeByte(inv); + return p; + } + + 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 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 Packet showEventInstructions() { + final OutPacket p = OutPacket.create(SendOpcode.GMEVENT_INSTRUCTIONS); + p.writeByte(0); + return p; + } + + public static Packet leftKnockBack() { + return OutPacket.create(SendOpcode.LEFT_KNOCK_BACK); + } + + public static Packet rollSnowBall(boolean entermap, int state, MapleSnowball ball0, MapleSnowball ball1) { + OutPacket p = OutPacket.create(SendOpcode.SNOWBALL_STATE); + if (entermap) { + p.skip(21); + } else { + 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 p; + } + + public static Packet hitSnowBall(int what, int damage) { + OutPacket p = OutPacket.create(SendOpcode.HIT_SNOWBALL); + p.writeByte(what); + p.writeInt(damage); + return p; + } + + /** + * 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 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 Packet coconutScore(int team1, int team2) { + OutPacket p = OutPacket.create(SendOpcode.COCONUT_SCORE); + p.writeShort(team1); + p.writeShort(team2); + return p; + } + + public static Packet hitCoconut(boolean spawn, int id, int type) { + OutPacket p = OutPacket.create(SendOpcode.COCONUT_HIT); + if (spawn) { + p.writeShort(-1); + p.writeShort(5000); + p.writeByte(0); + } else { + p.writeShort(id); + p.writeShort(1000);//delay till you can attack again! + p.writeByte(type); // What action to do for the coconut. + } + return p; + } + + public static Packet customPacket(String packet) { + OutPacket p = new ByteBufOutPacket(); + p.writeBytes(HexTool.getByteArrayFromHexString(packet)); + return p; + } + + public static Packet customPacket(byte[] packet) { + OutPacket p = new ByteBufOutPacket(); + p.writeBytes(packet); + return p; + } + + public static Packet spawnGuide(boolean spawn) { + OutPacket p = OutPacket.create(SendOpcode.SPAWN_GUIDE); + p.writeBool(spawn); + return p; + } + + 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 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(OutPacket p, Item item, int accountId) { + addCashItemInformation(p, item, accountId, null); + } + + public static void addCashItemInformation(OutPacket p, 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; + } + p.writeLong(item.getPetId() > -1 ? item.getPetId() : isRing ? equip.getRingId() : item.getCashId()); + if (!isGift) { + p.writeInt(accountId); + p.writeInt(0); + } + p.writeInt(item.getItemId()); + if (!isGift) { + p.writeInt(item.getSN()); + p.writeShort(item.getQuantity()); + } + p.writeFixedString(StringUtil.getRightPaddedStr(item.getGiftFrom(), '\0', 13)); + if (isGift) { + p.writeFixedString(StringUtil.getRightPaddedStr(giftMessage, '\0', 73)); + return; + } + addExpirationTime(p, item.getExpiration()); + p.writeLong(0); + } + + public static Packet showWishList(MapleCharacter mc, boolean update) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + + if (update) { + p.writeByte(0x55); + } else { + p.writeByte(0x4F); + } + + for (int sn : mc.getCashShop().getWishList()) { + p.writeInt(sn); + } + + for (int i = mc.getCashShop().getWishList().size(); i < 10; i++) { + p.writeInt(0); + } + + return p; + } + + public static Packet showBoughtCashItem(Item item, int accountId) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + + p.writeByte(0x57); + addCashItemInformation(p, item, accountId); + + return p; + } + + 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; + } + + /* + * 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 Packet showCashShopMessage(byte message) { + OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + p.writeByte(0x5C); + p.writeByte(message); + return p; + } + + public static Packet showCashInventory(MapleClient c) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + + p.writeByte(0x4B); + p.writeShort(c.getPlayer().getCashShop().getInventory().size()); + + for (Item item : c.getPlayer().getCashShop().getInventory()) { + addCashItemInformation(p, item, c.getAccID()); + } + + p.writeShort(c.getPlayer().getStorage().getSlots()); + p.writeShort(c.getCharacterSlots()); + + return p; + } + + public static Packet showGifts(List> gifts) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + + p.writeByte(0x4D); + p.writeShort(gifts.size()); + + for (Pair gift : gifts) { + addCashItemInformation(p, gift.getLeft(), 0, gift.getRight()); + } + + return p; + } + + public static Packet showGiftSucceed(String to, CashItem item) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + + p.writeByte(0x5E); //0x5D, Couldn't be sent + p.writeString(to); + p.writeInt(item.getItemId()); + p.writeShort(item.getCount()); + p.writeInt(item.getPrice()); + + return p; + } + + public static Packet showBoughtInventorySlots(int type, short slots) { + OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + + p.writeByte(0x60); + p.writeByte(type); + p.writeShort(slots); + + return p; + } + + public static Packet showBoughtStorageSlots(short slots) { + OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + + p.writeByte(0x62); + p.writeShort(slots); + + return p; + } + + public static Packet showBoughtCharacterSlot(short slots) { + OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + + p.writeByte(0x64); + p.writeShort(slots); + + return p; + } + + public static Packet takeFromCashInventory(Item item) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + + p.writeByte(0x68); + p.writeShort(item.getPosition()); + addItemInfo(p, item, true); + + return p; + } + + 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 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 Packet putIntoCashInventory(Item item, int accountId) { + final OutPacket p = OutPacket.create(SendOpcode.CASHSHOP_OPERATION); + + p.writeByte(0x6A); + addCashItemInformation(p, item, accountId); + + return p; + } + + public static Packet openCashShop(MapleClient c, boolean mts) throws Exception { + final OutPacket p = OutPacket.create(mts ? SendOpcode.SET_ITC : SendOpcode.SET_CASH_SHOP); + + addCharacterInfo(p, c.getPlayer()); + + if (!mts) { + p.writeByte(1); + } + + p.writeString(c.getAccountName()); + if (mts) { + 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 { + p.writeInt(0); + List lsci = CashItemFactory.getSpecialCashItems(); + p.writeShort(lsci.size());//Guess what + for (SpecialCashItem sci : lsci) { + p.writeInt(sci.getSN()); + p.writeInt(sci.getModifier()); + p.writeByte(sci.getInfo()); + } + p.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) { + p.writeInt(i); + p.writeInt(j); + p.writeInt(snid); + } + } + } + + p.writeInt(0); + p.writeShort(0); + p.writeByte(0); + p.writeInt(75); + } + return p; + } + + public static Packet sendVegaScroll(int op) { + OutPacket p = OutPacket.create(SendOpcode.VEGA_SCROLL); + p.writeByte(op); + return p; + } + + public static Packet resetForcedStats() { + return OutPacket.create(SendOpcode.FORCED_STAT_RESET); + } + + public static Packet showCombo(int count) { + OutPacket p = OutPacket.create(SendOpcode.SHOW_COMBO); + p.writeInt(count); + return p; + } + + public static Packet earnTitleMessage(String msg) { + final OutPacket p = OutPacket.create(SendOpcode.SCRIPT_PROGRESS_MESSAGE); + p.writeString(msg); + return p; + } + + public static Packet CPUpdate(boolean party, int curCP, int totalCP, int team) { // CPQ + final OutPacket p; + if (!party) { + p = OutPacket.create(SendOpcode.MONSTER_CARNIVAL_OBTAINED_CP); + } else { + p = OutPacket.create(SendOpcode.MONSTER_CARNIVAL_PARTY_CP); + p.writeByte(team); // team? + } + p.writeShort(curCP); + p.writeShort(totalCP); + return p; + } + + public static Packet CPQMessage(byte message) { + OutPacket p = OutPacket.create(SendOpcode.MONSTER_CARNIVAL_MESSAGE); + p.writeByte(message); // Message + return p; + } + + 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 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 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 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 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 Packet incubatorResult() {//lol + OutPacket p = OutPacket.create(SendOpcode.INCUBATOR_RESULT); + p.skip(6); + return p; + } + + public static Packet pyramidGauge(int gauge) { + OutPacket p = OutPacket.create(SendOpcode.PYRAMID_GAUGE); + p.writeInt(gauge); + return p; + } + // f2 + + 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 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 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; + } + + /** + * Sends a request to remove Mir
+ * + * @param charid - Needs the specific Character ID + * @return The packet + */ + public static Packet removeDragon(int chrId) { + OutPacket p = OutPacket.create(SendOpcode.REMOVE_DRAGON); + p.writeInt(chrId); + return p; + } + + /** + * 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 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; + } + + /** + * 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 Packet setNPCScriptable(Map scriptableNpcIds) { // thanks to GabrielSin + OutPacket p = OutPacket.create(SendOpcode.SET_NPC_SCRIPTABLE); + p.writeByte(scriptableNpcIds.size()); + scriptableNpcIds.forEach((id, name) -> { + p.writeInt(id); + // The client needs a name for the npc conversation, which is displayed under etc when the npc has a quest available. + p.writeString(name); + p.writeInt(0); // start time + p.writeInt(Integer.MAX_VALUE); // end time + }); + return p; + } + + private static Packet MassacreResult(byte nRank, int nIncExp) { + //CField_MassacreResult__OnMassacreResult @ 0x005617C5 + 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 Packet Tournament__Tournament(byte nState, byte nSubState) { + final OutPacket p = OutPacket.create(SendOpcode.TOURNAMENT); + p.writeByte(nState); + p.writeByte(nSubState); + return p; + } + + 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 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." + p.writeByte(bSetPrize); + + p.writeByte(bHasPrize); + + if (bHasPrize != 0) { + p.writeInt(nItemID1); + p.writeInt(nItemID2); + } + + return p; + } + + 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 ?! + p.writeByte(nState); + + return p; + } + +} 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()); - } -} diff --git a/src/main/java/tools/packets/Fishing.java b/src/main/java/tools/packets/Fishing.java index d2daa766a6..32cd43a4c3 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.sendPacket(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/WeddingPackets.java similarity index 63% rename from src/main/java/tools/packets/Wedding.java rename to src/main/java/tools/packets/WeddingPackets.java index fdf8231a3b..cd0455d470 100644 --- a/src/main/java/tools/packets/Wedding.java +++ b/src/main/java/tools/packets/WeddingPackets.java @@ -6,13 +6,16 @@ package tools.packets; -import client.inventory.Item; 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 java.util.ArrayList; import java.util.List; -import tools.MaplePacketCreator; -import tools.StringUtil; -import tools.data.output.MaplePacketLittleEndianWriter; /** * CField_Wedding, CField_WeddingPhoto, CWeddingMan, OnMarriageResult, and all Wedding/Marriage enum/structs. @@ -21,15 +24,7 @@ import tools.data.output.MaplePacketLittleEndianWriter; * * Wishlists edited by Drago (Dragohe4rt) */ -public class Wedding extends MaplePacketCreator { - 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 @@ -204,13 +199,12 @@ public class Wedding extends MaplePacketCreator { * @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; } /** @@ -233,38 +227,37 @@ public class Wedding extends MaplePacketCreator { * @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; } /** @@ -275,25 +268,24 @@ public class Wedding extends MaplePacketCreator { * @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; } /** @@ -302,15 +294,14 @@ public class Wedding extends MaplePacketCreator { * @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; } /** @@ -320,13 +311,11 @@ public class Wedding extends MaplePacketCreator { * @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; } /** @@ -334,21 +323,20 @@ public class Wedding extends MaplePacketCreator { * 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; } /** @@ -358,21 +346,19 @@ public class Wedding extends MaplePacketCreator { * @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; } /** @@ -383,19 +369,18 @@ public class Wedding extends MaplePacketCreator { * @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; } @@ -404,15 +389,15 @@ public class Wedding extends MaplePacketCreator { 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; } @@ -421,6 +406,6 @@ public class Wedding extends MaplePacketCreator { 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 3673254736..a7d0611500 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(); @@ -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(); @@ -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