Handlers read from InPacket instead of SeekableLittleEndianAccessor

This commit is contained in:
P0nk
2021-08-22 22:10:19 +02:00
parent 2232022cf1
commit da2d8abc56
182 changed files with 1223 additions and 1230 deletions

View File

@@ -63,8 +63,6 @@ import server.maps.FieldLimit;
import server.maps.MapleMap;
import server.maps.MapleMiniDungeonInfo;
import tools.*;
import tools.data.input.ByteArrayByteStream;
import tools.data.input.GenericSeekableLittleEndianAccessor;
import javax.script.ScriptEngine;
import java.io.IOException;
@@ -199,15 +197,11 @@ public class MapleClient extends ChannelInboundHandlerAdapter {
}
if (handler != null && handler.validateState(this)) {
// TODO: pass InPacket directly to handler once all handlers have been ported,
// this is just a temporary workaround
final byte[] content = packet.getBytes();
GenericSeekableLittleEndianAccessor accessor = new GenericSeekableLittleEndianAccessor(new ByteArrayByteStream(content));
try {
MapleLogger.logRecv(this, opcode, content);
handler.handlePacket(accessor, this);
MapleLogger.logRecv(this, opcode, packet.getBytes());
handler.handlePacket(packet, 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);
FilePrinter.printError(FilePrinter.PACKET_HANDLER + handler.getClass().getName() + ".txt", t, "Error for " + (getPlayer() == null ? "" : "player ; " + getPlayer() + " on map ; " + getPlayer().getMapId() + " - ") + "account ; " + getAccountName() + "\r\n" + packet);
//client.sendPacket(PacketCreator.enableActions());//bugs sometimes
}
}

View File

@@ -26,15 +26,13 @@ package client.command.commands.gm3;
import client.MapleCharacter;
import client.MapleClient;
import client.command.Command;
import io.netty.buffer.Unpooled;
import net.MaplePacketHandler;
import net.PacketProcessor;
import net.packet.ByteBufOutPacket;
import net.packet.OutPacket;
import net.packet.ByteBufInPacket;
import net.packet.InPacket;
import tools.FilePrinter;
import tools.HexTool;
import tools.data.input.ByteArrayByteStream;
import tools.data.input.GenericSeekableLittleEndianAccessor;
import tools.data.input.SeekableLittleEndianAccessor;
import java.io.FileReader;
import java.io.IOException;
@@ -62,17 +60,17 @@ public class PeCommand extends Command {
return;
}
OutPacket p = new ByteBufOutPacket();
p.writeBytes(HexTool.getByteArrayFromHexString(packet));
SeekableLittleEndianAccessor slea = new GenericSeekableLittleEndianAccessor(new ByteArrayByteStream(p.getBytes()));
short packetId = slea.readShort();
byte[] packetContent = HexTool.getByteArrayFromHexString(packet);
InPacket inPacket = new ByteBufInPacket(Unpooled.wrappedBuffer(packetContent));
short packetId = inPacket.readShort();
final MaplePacketHandler packetHandler = PacketProcessor.getProcessor(0, c.getChannel()).getHandler(packetId);
if (packetHandler != null && packetHandler.validateState(c)) {
try {
player.yellowMessage("Receiving: " + packet);
packetHandler.handlePacket(slea, c);
packetHandler.handlePacket(inPacket, c);
} catch (final Throwable t) {
FilePrinter.printError(FilePrinter.PACKET_HANDLER + packetHandler.getClass().getName() + ".txt", t, "Error for " + (c.getPlayer() == null ? "" : "player ; " + c.getPlayer() + " on map ; " + c.getPlayer().getMapId() + " - ") + "account ; " + c.getAccountName() + "\r\n" + slea.toString());
FilePrinter.printError(FilePrinter.PACKET_HANDLER + packetHandler.getClass().getName() + ".txt", t, "Error for " + (c.getPlayer() == null ? "" : "player ; " + c.getPlayer() + " on map ; " + c.getPlayer().getMapId() + " - ") + "account ; " + c.getAccountName() + "\r\n" + inPacket);
}
}
}

View File

@@ -28,6 +28,7 @@ import client.inventory.manipulator.MapleInventoryManipulator;
import config.YamlConfig;
import constants.game.GameConstants;
import constants.inventory.ItemConstants;
import net.packet.InPacket;
import server.MakerItemFactory;
import server.MakerItemFactory.MakerItemCreateEntry;
import server.MapleItemInformationProvider;
@@ -49,11 +50,11 @@ public class MakerProcessor {
private static MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
public static void makerAction(SeekableLittleEndianAccessor slea, MapleClient c) {
public static void makerAction(InPacket p, MapleClient c) {
if (c.tryacquireClient()) {
try {
int type = slea.readInt();
int toCreate = slea.readInt();
int type = p.readInt();
int toCreate = p.readInt();
int toDisassemble = -1, pos = -1;
boolean makerSucceeded = true;
@@ -72,16 +73,16 @@ public class MakerProcessor {
recipe = MakerItemFactory.generateLeftoverCrystalEntry(fromLeftover, toCreate);
} else if(type == 4) { // disassembling
slea.readInt(); // 1... probably inventory type
pos = slea.readInt();
p.readInt(); // 1... probably inventory type
pos = p.readInt();
Item it = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) pos);
if(it != null && it.getItemId() == toCreate) {
toDisassemble = toCreate;
Pair<Integer, List<Pair<Integer, Integer>>> p = generateDisassemblyInfo(toDisassemble);
if(p != null) {
recipe = MakerItemFactory.generateDisassemblyCrystalEntry(toDisassemble, p.getLeft(), p.getRight());
Pair<Integer, List<Pair<Integer, Integer>>> pair = generateDisassemblyInfo(toDisassemble);
if(pair != null) {
recipe = MakerItemFactory.generateDisassemblyCrystalEntry(toDisassemble, pair.getLeft(), pair.getRight());
} else {
c.sendPacket(PacketCreator.serverNotice(1, ii.getName(toCreate) + " is unavailable for Monster Crystal disassembly."));
c.sendPacket(PacketCreator.makerEnableActions());
@@ -94,16 +95,16 @@ public class MakerProcessor {
}
} else {
if(ItemConstants.isEquipment(toCreate)) { // only equips uses stimulant and reagents
if(slea.readByte() != 0) { // stimulant
if(p.readByte() != 0) { // stimulant
stimulantid = ii.getMakerStimulant(toCreate);
if(!c.getAbstractPlayerInteraction().haveItem(stimulantid)) {
stimulantid = -1;
}
}
int reagents = Math.min(slea.readInt(), getMakerReagentSlots(toCreate));
int reagents = Math.min(p.readInt(), getMakerReagentSlots(toCreate));
for(int i = 0; i < reagents; i++) { // crystals
int reagentid = slea.readInt();
int reagentid = p.readInt();
if(ItemConstants.isMakerReagent(reagentid)) {
Short rs = reagentids.get(reagentid);
if(rs == null) {
@@ -184,8 +185,8 @@ public class MakerProcessor {
if(toDisassemble != -1) {
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.EQUIP, (short) pos, (short) 1, false);
} else {
for (Pair<Integer, Integer> p : recipe.getReqItems()) {
c.getAbstractPlayerInteraction().gainItem(p.getLeft(), (short) -p.getRight(), false);
for (Pair<Integer, Integer> pair : recipe.getReqItems()) {
c.getAbstractPlayerInteraction().gainItem(pair.getLeft(), (short) -pair.getRight(), false);
}
}
@@ -193,9 +194,9 @@ public class MakerProcessor {
if(stimulantid == -1 && reagentids.isEmpty()) {
if(cost > 0) c.getPlayer().gainMeso(-cost, false);
for (Pair<Integer, Integer> p : recipe.getGainItems()) {
for (Pair<Integer, Integer> pair : recipe.getGainItems()) {
c.getPlayer().setCS(true);
c.getAbstractPlayerInteraction().gainItem(p.getLeft(), p.getRight().shortValue(), false);
c.getAbstractPlayerInteraction().gainItem(pair.getLeft(), pair.getRight().shortValue(), false);
c.getPlayer().setCS(false);
}
} else {

View File

@@ -31,6 +31,7 @@ import client.inventory.manipulator.MapleInventoryManipulator;
import client.inventory.manipulator.MapleKarmaManipulator;
import config.YamlConfig;
import constants.inventory.ItemConstants;
import net.packet.InPacket;
import server.MapleItemInformationProvider;
import server.MapleStorage;
import tools.FilePrinter;
@@ -44,11 +45,11 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public class StorageProcessor {
public static void storageAction(SeekableLittleEndianAccessor slea, MapleClient c) {
public static void storageAction(InPacket p, MapleClient c) {
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
MapleCharacter chr = c.getPlayer();
MapleStorage storage = chr.getStorage();
byte mode = slea.readByte();
byte mode = p.readByte();
if (chr.getLevel() < 15){
chr.dropMessage(1, "You may only use the storage once you have reached level 15.");
@@ -59,8 +60,8 @@ public class StorageProcessor {
if (c.tryacquireClient()) {
try {
if (mode == 4) { // take out
byte type = slea.readByte();
byte slot = slea.readByte();
byte type = p.readByte();
byte slot = p.readByte();
if (slot < 0 || slot > storage.getSlots()) { // removal starts at zero
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit with storage.");
FilePrinter.print(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to work with storage slot " + slot);
@@ -103,9 +104,9 @@ public class StorageProcessor {
}
}
} else if (mode == 5) { // store
short slot = slea.readShort();
int itemId = slea.readInt();
short quantity = slea.readShort();
short slot = p.readShort();
int itemId = p.readInt();
short quantity = p.readShort();
MapleInventoryType invType = ItemConstants.getInventoryType(itemId);
MapleInventory inv = chr.getInventory(invType);
if (slot < 1 || slot > inv.getSlotLimit()) { //player inv starts at one
@@ -170,7 +171,7 @@ public class StorageProcessor {
if(YamlConfig.config.server.USE_STORAGE_ITEM_SORT) storage.arrangeItems(c);
c.sendPacket(PacketCreator.enableActions());
} else if (mode == 7) { // meso
int meso = slea.readInt();
int meso = p.readInt();
int storageMesos = storage.getMeso();
int playerMesos = chr.getMeso();
if ((meso > 0 && storageMesos >= meso) || (meso < 0 && playerMesos >= -meso)) {

View File

@@ -30,6 +30,7 @@ import client.inventory.Item;
import client.inventory.MapleInventoryType;
import config.YamlConfig;
import constants.skills.*;
import net.packet.InPacket;
import tools.PacketCreator;
import tools.Randomizer;
import tools.data.input.SeekableLittleEndianAccessor;
@@ -45,7 +46,7 @@ import java.util.List;
*/
public class AssignAPProcessor {
public static void APAutoAssignAction(SeekableLittleEndianAccessor slea, MapleClient c) {
public static void APAutoAssignAction(InPacket inPacket, MapleClient c) {
MapleCharacter chr = c.getPlayer();
if (chr.getRemainingAp() < 1) return;
@@ -58,12 +59,12 @@ public class AssignAPProcessor {
statGain[0] = 0; statGain[1] = 0; statGain[2] = 0; statGain[3] = 0;
int remainingAp = chr.getRemainingAp();
slea.skip(8);
inPacket.skip(8);
if(YamlConfig.config.server.USE_SERVER_AUTOASSIGNER) {
// --------- Ronan Lana's AUTOASSIGNER ---------
// This method excels for assigning APs in such a way to cover all equipments AP requirements.
byte opt = slea.readByte(); // useful for pirate autoassigning
byte opt = inPacket.readByte(); // useful for pirate autoassigning
int str = 0, dex = 0, luk = 0, int_ = 0;
List<Short> eqpStrList = new ArrayList<>();
@@ -335,7 +336,7 @@ public class AssignAPProcessor {
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) {
if(inPacket.available() < 16) {
AutobanFactory.PACKET_EDIT.alert(chr, "Didn't send full packet for Auto Assign.");
c.disconnect(true, false);
@@ -343,8 +344,8 @@ public class AssignAPProcessor {
}
for (int i = 0; i < 2; i++) {
int type = slea.readInt();
int tempVal = slea.readInt();
int type = inPacket.readInt();
int tempVal = inPacket.readInt();
if (tempVal < 0 || tempVal > remainingAp) {
return;
}

View File

@@ -22,9 +22,10 @@
package net;
import client.MapleClient;
import net.packet.InPacket;
import tools.data.input.SeekableLittleEndianAccessor;
public interface MaplePacketHandler {
void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c);
void handlePacket(InPacket p, MapleClient c);
boolean validateState(MapleClient c);
}

View File

@@ -38,7 +38,7 @@ public class ByteBufInPacket implements InPacket {
}
@Override
public Point readPoint() {
public Point readPos() {
final short x = byteBuf.readShortLE();
final short y = byteBuf.readShortLE();
return new Point(x, y);

View File

@@ -7,7 +7,7 @@ public interface InPacket extends Packet {
short readShort();
int readInt();
long readLong();
Point readPoint();
Point readPos();
String readString();
byte[] readBytes(int numberOfBytes);
void skip(int numberOfBytes);

View File

@@ -29,6 +29,7 @@ import config.YamlConfig;
import constants.game.GameConstants;
import constants.skills.*;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.PlayerBuffValueHolder;
import scripting.AbstractPlayerInteraction;
import server.MapleStatEffect;
@@ -524,15 +525,15 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
}
}
protected AttackInfo parseDamage(LittleEndianAccessor lea, MapleCharacter chr, boolean ranged, boolean magic) {
protected AttackInfo parseDamage(InPacket p, MapleCharacter chr, boolean ranged, boolean magic) {
//2C 00 00 01 91 A1 12 00 A5 57 62 FC E2 75 99 10 00 47 80 01 04 01 C6 CC 02 DD FF 5F 00
AttackInfo ret = new AttackInfo();
lea.readByte();
ret.numAttackedAndDamage = lea.readByte();
p.readByte();
ret.numAttackedAndDamage = p.readByte();
ret.numAttacked = (ret.numAttackedAndDamage >>> 4) & 0xF;
ret.numDamage = ret.numAttackedAndDamage & 0xF;
ret.allDamage = new HashMap<>();
ret.skill = lea.readInt();
ret.skill = p.readInt();
ret.ranged = ranged;
ret.magic = magic;
@@ -542,45 +543,45 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
}
if (ret.skill == Evan.ICE_BREATH || ret.skill == Evan.FIRE_BREATH || ret.skill == FPArchMage.BIG_BANG || ret.skill == ILArchMage.BIG_BANG || ret.skill == Bishop.BIG_BANG || ret.skill == Gunslinger.GRENADE || ret.skill == Brawler.CORKSCREW_BLOW || ret.skill == ThunderBreaker.CORKSCREW_BLOW || ret.skill == NightWalker.POISON_BOMB) {
ret.charge = lea.readInt();
ret.charge = p.readInt();
} else {
ret.charge = 0;
}
lea.skip(8);
ret.display = lea.readByte();
ret.direction = lea.readByte();
ret.stance = lea.readByte();
p.skip(8);
ret.display = p.readByte();
ret.direction = p.readByte();
ret.stance = p.readByte();
if (ret.skill == ChiefBandit.MESO_EXPLOSION) {
if (ret.numAttackedAndDamage == 0) {
lea.skip(10);
int bullets = lea.readByte();
p.skip(10);
int bullets = p.readByte();
for (int j = 0; j < bullets; j++) {
int mesoid = lea.readInt();
lea.skip(1);
int mesoid = p.readInt();
p.skip(1);
ret.allDamage.put(mesoid, null);
}
return ret;
} else {
lea.skip(6);
p.skip(6);
}
for (int i = 0; i < ret.numAttacked + 1; i++) {
int oid = lea.readInt();
int oid = p.readInt();
if (i < ret.numAttacked) {
lea.skip(12);
int bullets = lea.readByte();
p.skip(12);
int bullets = p.readByte();
List<Integer> allDamageNumbers = new ArrayList<>();
for (int j = 0; j < bullets; j++) {
int damage = lea.readInt();
int damage = p.readInt();
allDamageNumbers.add(damage);
}
ret.allDamage.put(oid, allDamageNumbers);
lea.skip(4);
p.skip(4);
} else {
int bullets = lea.readByte();
int bullets = p.readByte();
for (int j = 0; j < bullets; j++) {
int mesoid = lea.readInt();
lea.skip(1);
int mesoid = p.readInt();
p.skip(1);
ret.allDamage.put(mesoid, null);
}
}
@@ -588,18 +589,18 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
return ret;
}
if (ranged) {
lea.readByte();
ret.speed = lea.readByte();
lea.readByte();
ret.rangedirection = lea.readByte();
lea.skip(7);
p.readByte();
ret.speed = p.readByte();
p.readByte();
ret.rangedirection = p.readByte();
p.skip(7);
if (ret.skill == Bowmaster.HURRICANE || ret.skill == Marksman.PIERCING_ARROW || ret.skill == Corsair.RAPID_FIRE || ret.skill == WindArcher.HURRICANE) {
lea.skip(4);
p.skip(4);
}
} else {
lea.readByte();
ret.speed = lea.readByte();
lea.skip(4);
p.readByte();
ret.speed = p.readByte();
p.skip(4);
}
// Find the base damage to base futher calculations on.
@@ -739,8 +740,8 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
calcDmgMax = fixed;
}
for (int i = 0; i < ret.numAttacked; i++) {
int oid = lea.readInt();
lea.skip(14);
int oid = p.readInt();
p.skip(14);
List<Integer> allDamageNumbers = new ArrayList<>();
MapleMonster monster = chr.getMap().getMonsterByOid(oid);
@@ -814,7 +815,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
}
for (int j = 0; j < ret.numDamage; j++) {
int damage = lea.readInt();
int damage = p.readInt();
long hitDmgMax = calcDmgMax;
if(ret.skill == Buccaneer.BARRAGE || ret.skill == ThunderBreaker.BARRAGE) {
if(j > 3)
@@ -857,13 +858,13 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
allDamageNumbers.add(damage);
}
if (ret.skill != Corsair.RAPID_FIRE || ret.skill != Aran.HIDDEN_FULL_DOUBLE || ret.skill != Aran.HIDDEN_FULL_TRIPLE || ret.skill != Aran.HIDDEN_OVER_DOUBLE || ret.skill != Aran.HIDDEN_OVER_TRIPLE) {
lea.skip(4);
p.skip(4);
}
ret.allDamage.put(oid, allDamageNumbers);
}
if (ret.skill == NightWalker.POISON_BOMB) { // Poison Bomb
lea.skip(4);
ret.position.setLocation(lea.readShort(), lea.readShort());
p.skip(4);
ret.position.setLocation(p.readShort(), p.readShort());
}
return ret;
}

View File

@@ -26,6 +26,7 @@ import java.util.ArrayList;
import java.util.List;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.maps.AnimatedMapleMapObject;
import server.movement.AbsoluteLifeMovement;
import server.movement.ChangeEquip;
@@ -38,23 +39,23 @@ import tools.exceptions.EmptyMovementException;
public abstract class AbstractMovementPacketHandler extends AbstractMaplePacketHandler {
protected List<LifeMovementFragment> parseMovement(LittleEndianAccessor lea) throws EmptyMovementException {
protected List<LifeMovementFragment> parseMovement(InPacket p) throws EmptyMovementException {
List<LifeMovementFragment> res = new ArrayList<>();
byte numCommands = lea.readByte();
if (numCommands < 1) throw new EmptyMovementException(lea);
byte numCommands = p.readByte();
if (numCommands < 1) throw new EmptyMovementException(p);
for (byte i = 0; i < numCommands; i++) {
byte command = lea.readByte();
byte command = p.readByte();
switch (command) {
case 0: // normal move
case 5:
case 17: { // Float
short xpos = lea.readShort();
short ypos = lea.readShort();
short xwobble = lea.readShort();
short ywobble = lea.readShort();
short fh = lea.readShort();
byte newstate = lea.readByte();
short duration = lea.readShort();
short xpos = p.readShort();
short ypos = p.readShort();
short xwobble = p.readShort();
short ywobble = p.readShort();
short fh = p.readShort();
byte newstate = p.readByte();
short duration = p.readShort();
AbsoluteLifeMovement alm = new AbsoluteLifeMovement(command, new Point(xpos, ypos), duration, newstate);
alm.setFh(fh);
alm.setPixelsPerSecond(new Point(xwobble, ywobble));
@@ -71,10 +72,10 @@ public abstract class AbstractMovementPacketHandler extends AbstractMaplePacketH
case 19: // Springs on maps
case 20: // Aran Combat Step
case 22: {
short xpos = lea.readShort();
short ypos = lea.readShort();
byte newstate = lea.readByte();
short duration = lea.readShort();
short xpos = p.readShort();
short ypos = p.readShort();
byte newstate = p.readByte();
short duration = p.readShort();
RelativeLifeMovement rlm = new RelativeLifeMovement(command, new Point(xpos, ypos), duration, newstate);
res.add(rlm);
break;
@@ -87,21 +88,21 @@ public abstract class AbstractMovementPacketHandler extends AbstractMaplePacketH
case 11: //chair
{
// case 14: {
short xpos = lea.readShort();
short ypos = lea.readShort();
short xwobble = lea.readShort();
short ywobble = lea.readShort();
byte newstate = lea.readByte();
short xpos = p.readShort();
short ypos = p.readShort();
short xwobble = p.readShort();
short ywobble = p.readShort();
byte newstate = p.readByte();
TeleportMovement tm = new TeleportMovement(command, new Point(xpos, ypos), newstate);
tm.setPixelsPerSecond(new Point(xwobble, ywobble));
res.add(tm);
break;
}
case 14:
lea.skip(9); // jump down (?)
p.skip(9); // jump down (?)
break;
case 10: // Change Equip
res.add(new ChangeEquip(lea.readByte()));
res.add(new ChangeEquip(p.readByte()));
break;
/*case 11: { // Chair
short xpos = lea.readShort();
@@ -115,14 +116,14 @@ public abstract class AbstractMovementPacketHandler extends AbstractMaplePacketH
break;
}*/
case 15: {
short xpos = lea.readShort();
short ypos = lea.readShort();
short xwobble = lea.readShort();
short ywobble = lea.readShort();
short fh = lea.readShort();
short ofh = lea.readShort();
byte newstate = lea.readByte();
short duration = lea.readShort();
short xpos = p.readShort();
short ypos = p.readShort();
short xwobble = p.readShort();
short ywobble = p.readShort();
short fh = p.readShort();
short ofh = p.readShort();
byte newstate = p.readByte();
short duration = p.readShort();
JumpDownMovement jdm = new JumpDownMovement(command, new Point(xpos, ypos), duration, newstate);
jdm.setFh(fh);
jdm.setPixelsPerSecond(new Point(xwobble, ywobble));
@@ -135,39 +136,39 @@ public abstract class AbstractMovementPacketHandler extends AbstractMaplePacketH
short unk = lea.readShort();
AranMovement am = new AranMovement(command, null, unk, newstate);
res.add(am);*/
lea.skip(3);
p.skip(3);
break;
}
default:
System.out.println("Unhandled Case:" + command);
throw new EmptyMovementException(lea);
throw new EmptyMovementException(p);
}
}
if (res.isEmpty()) {
throw new EmptyMovementException(lea);
throw new EmptyMovementException(p);
}
return res;
}
protected void updatePosition(LittleEndianAccessor lea, AnimatedMapleMapObject target, int yOffset) throws EmptyMovementException {
protected void updatePosition(InPacket p, AnimatedMapleMapObject target, int yOffset) throws EmptyMovementException {
byte numCommands = lea.readByte();
if (numCommands < 1) throw new EmptyMovementException(lea);
byte numCommands = p.readByte();
if (numCommands < 1) throw new EmptyMovementException(p);
for (byte i = 0; i < numCommands; i++) {
byte command = lea.readByte();
byte command = p.readByte();
switch (command) {
case 0: // normal move
case 5:
case 17: { // Float
//Absolute movement - only this is important for the server, other movement can be passed to the client
short xpos = lea.readShort(); //is signed fine here?
short ypos = lea.readShort();
short xpos = p.readShort(); //is signed fine here?
short ypos = p.readShort();
target.setPosition(new Point(xpos, ypos + yOffset));
lea.skip(6); //xwobble = lea.readShort(); ywobble = lea.readShort(); fh = lea.readShort();
byte newstate = lea.readByte();
p.skip(6); //xwobble = lea.readShort(); ywobble = lea.readShort(); fh = lea.readShort();
byte newstate = p.readByte();
target.setStance(newstate);
lea.readShort(); //duration
p.readShort(); //duration
break;
}
case 1:
@@ -181,10 +182,10 @@ public abstract class AbstractMovementPacketHandler extends AbstractMaplePacketH
case 20: // Aran Combat Step
case 22: {
//Relative movement - server only cares about stance
lea.skip(4); //xpos = lea.readShort(); ypos = lea.readShort();
byte newstate = lea.readByte();
p.skip(4); //xpos = lea.readShort(); ypos = lea.readShort();
byte newstate = p.readByte();
target.setStance(newstate);
lea.readShort(); //duration
p.readShort(); //duration
break;
}
case 3:
@@ -196,17 +197,17 @@ public abstract class AbstractMovementPacketHandler extends AbstractMaplePacketH
{
// case 14: {
//Teleport movement - same as above
lea.skip(8); //xpos = lea.readShort(); ypos = lea.readShort(); xwobble = lea.readShort(); ywobble = lea.readShort();
byte newstate = lea.readByte();
p.skip(8); //xpos = lea.readShort(); ypos = lea.readShort(); xwobble = lea.readShort(); ywobble = lea.readShort();
byte newstate = p.readByte();
target.setStance(newstate);
break;
}
case 14:
lea.skip(9); // jump down (?)
p.skip(9); // jump down (?)
break;
case 10: // Change Equip
//ignored server-side
lea.readByte();
p.readByte();
break;
/*case 11: { // Chair
short xpos = lea.readShort();
@@ -221,10 +222,10 @@ public abstract class AbstractMovementPacketHandler extends AbstractMaplePacketH
}*/
case 15: {
//Jump down movement - stance only
lea.skip(12); //short xpos = lea.readShort(); ypos = lea.readShort(); xwobble = lea.readShort(); ywobble = lea.readShort(); fh = lea.readShort(); ofh = lea.readShort();
byte newstate = lea.readByte();
p.skip(12); //short xpos = lea.readShort(); ypos = lea.readShort(); xwobble = lea.readShort(); ywobble = lea.readShort(); fh = lea.readShort(); ofh = lea.readShort();
byte newstate = p.readByte();
target.setStance(newstate);
lea.readShort(); // duration
p.readShort(); // duration
break;
}
case 21: {//Causes aran to do weird stuff when attacking o.o
@@ -232,12 +233,12 @@ public abstract class AbstractMovementPacketHandler extends AbstractMaplePacketH
short unk = lea.readShort();
AranMovement am = new AranMovement(command, null, unk, newstate);
res.add(am);*/
lea.skip(3);
p.skip(3);
break;
}
default:
System.out.println("Unhandled Case:" + command);
throw new EmptyMovementException(lea);
throw new EmptyMovementException(p);
}
}
}

View File

@@ -27,6 +27,7 @@ import client.MapleFamily;
import client.MapleFamilyEntry;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.coordinator.world.MapleInviteCoordinator;
import net.server.coordinator.world.MapleInviteCoordinator.InviteResult;
import net.server.coordinator.world.MapleInviteCoordinator.InviteType;
@@ -34,7 +35,6 @@ import net.server.coordinator.world.MapleInviteCoordinator.MapleInviteResult;
import tools.DatabaseConnection;
import tools.FilePrinter;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -48,14 +48,14 @@ import java.sql.SQLException;
public final class AcceptFamilyHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) {
return;
}
MapleCharacter chr = c.getPlayer();
int inviterId = slea.readInt();
slea.readMapleAsciiString();
boolean accept = slea.readByte() != 0;
int inviterId = p.readInt();
p.readString();
boolean accept = p.readByte() != 0;
// String inviterName = slea.readMapleAsciiString();
MapleCharacter inviter = c.getWorldServer().getPlayerStorage().getCharacterById(inviterId);
if(inviter != null) {

View File

@@ -3,10 +3,10 @@ package net.server.channel.handlers;
import client.MapleClient;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.packet.Packet;
import tools.LogHelper;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -15,14 +15,14 @@ import tools.data.input.SeekableLittleEndianAccessor;
public class AdminChatHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
if (!c.getPlayer().isGM()) {//if ( (signed int)CWvsContext::GetAdminLevel((void *)v294) > 2 )
return;
}
byte mode = slea.readByte();
byte mode = p.readByte();
//not saving slides...
String message = slea.readMapleAsciiString();
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 :)
String message = p.readString();
Packet packet = PacketCreator.serverNotice(p.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);

View File

@@ -27,6 +27,7 @@ import client.inventory.MapleInventory;
import client.inventory.MapleInventoryType;
import client.inventory.manipulator.MapleInventoryManipulator;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.MapleItemInformationProvider;
import server.life.MapleLifeFactory;
import server.life.MapleMonster;
@@ -35,7 +36,6 @@ import server.maps.MapleMapObjectType;
import server.quest.MapleQuest;
import tools.PacketCreator;
import tools.Randomizer;
import tools.data.input.SeekableLittleEndianAccessor;
import java.util.Arrays;
import java.util.List;
@@ -43,16 +43,16 @@ import java.util.List;
public final class AdminCommandHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
if (!c.getPlayer().isGM()) {
return;
}
byte mode = slea.readByte();
byte mode = p.readByte();
String victim;
MapleCharacter target;
switch (mode) {
case 0x00: // Level1~Level8 & Package1~Package2
int[][] toSpawn = MapleItemInformationProvider.getInstance().getSummonMobs(slea.readInt());
int[][] toSpawn = MapleItemInformationProvider.getInstance().getSummonMobs(p.readInt());
for (int[] toSpawnChild : toSpawn) {
if (Randomizer.nextInt(100) < toSpawnChild[1]) {
c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(toSpawnChild[0]), c.getPlayer().getPosition());
@@ -61,7 +61,7 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler {
c.sendPacket(PacketCreator.enableActions());
break;
case 0x01: { // /d (inv)
byte type = slea.readByte();
byte type = p.readByte();
MapleInventory in = c.getPlayer().getInventory(MapleInventoryType.getByType(type));
for (short i = 1; i <= in.getSlotLimit(); i++) { //TODO What is the point of this loop?
if (in.getItem(i) != null) {
@@ -72,16 +72,16 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler {
break;
}
case 0x02: // Exp
c.getPlayer().setExp(slea.readInt());
c.getPlayer().setExp(p.readInt());
break;
case 0x03: // /ban <name>
c.getPlayer().yellowMessage("Please use !ban <IGN> <Reason>");
break;
case 0x04: // /block <name> <duration (in days)> <HACK/BOT/AD/HARASS/CURSE/SCAM/MISCONDUCT/SELL/ICASH/TEMP/GM/IPROGRAM/MEGAPHONE>
victim = slea.readMapleAsciiString();
int type = slea.readByte(); //reason
int duration = slea.readInt();
String description = slea.readMapleAsciiString();
victim = p.readString();
int type = p.readByte(); //reason
int duration = p.readInt();
String description = p.readString();
String reason = c.getPlayer().getName() + " used /ban to ban";
target = c.getChannelServer().getPlayerStorage().getCharacterByName(victim);
if (target != null) {
@@ -102,10 +102,10 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler {
}
break;
case 0x10: // /h, information added by vana -- <and tele mode f1> ... hide ofcourse
c.getPlayer().Hide(slea.readByte() == 1);
c.getPlayer().Hide(p.readByte() == 1);
break;
case 0x11: // Entering a map
switch (slea.readByte()) {
switch (p.readByte()) {
case 0:// /u
StringBuilder sb = new StringBuilder("USERS ON THIS MAP: ");
for (MapleCharacter mc : c.getPlayer().getMap().getCharacters()) {
@@ -119,13 +119,13 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler {
}
break;
case 0x12: // Send
victim = slea.readMapleAsciiString();
int mapId = slea.readInt();
victim = p.readString();
int mapId = p.readInt();
c.getChannelServer().getPlayerStorage().getCharacterByName(victim).changeMap(c.getChannelServer().getMapFactory().getMap(mapId));
break;
case 0x15: // Kill
int mobToKill = slea.readInt();
int amount = slea.readInt();
int mobToKill = p.readInt();
int amount = p.readInt();
List<MapleMapObject> monsterx = c.getPlayer().getMap().getMapObjectsInRange(c.getPlayer().getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
for (int x = 0; x < amount; x++) {
MapleMonster monster = (MapleMonster) monsterx.get(x);
@@ -135,17 +135,17 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler {
}
break;
case 0x16: // Questreset
MapleQuest.getInstance(slea.readShort()).reset(c.getPlayer());
MapleQuest.getInstance(p.readShort()).reset(c.getPlayer());
break;
case 0x17: // Summon
int mobId = slea.readInt();
int quantity = slea.readInt();
int mobId = p.readInt();
int quantity = p.readInt();
for (int i = 0; i < quantity; i++) {
c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(mobId), c.getPlayer().getPosition());
}
break;
case 0x18: // Maple & Mobhp
int mobHp = slea.readInt();
int mobHp = p.readInt();
c.getPlayer().dropMessage("Monsters HP");
List<MapleMapObject> monsters = c.getPlayer().getMap().getMapObjectsInRange(c.getPlayer().getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
for (MapleMapObject mobs : monsters) {
@@ -156,8 +156,8 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler {
}
break;
case 0x1E: // Warn
victim = slea.readMapleAsciiString();
String message = slea.readMapleAsciiString();
victim = p.readString();
String message = p.readString();
target = c.getChannelServer().getPlayerStorage().getCharacterByName(victim);
if (target != null) {
target.getClient().sendPacket(PacketCreator.serverNotice(1, message));
@@ -169,14 +169,14 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler {
case 0x24:// /Artifact Ranking
break;
case 0x77: //Testing purpose
if (slea.available() == 4) {
System.out.println(slea.readInt());
} else if (slea.available() == 2) {
System.out.println(slea.readShort());
if (p.available() == 4) {
System.out.println(p.readInt());
} else if (p.available() == 2) {
System.out.println(p.readShort());
}
break;
default:
System.out.println("New GM packet encountered (MODE : " + mode + ": " + slea.toString());
System.out.println("New GM packet encountered (MODE : " + mode + ": " + p.toString());
break;
}
}

View File

@@ -23,12 +23,12 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
public final class AdminLogHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
//harhar
}
}

View File

@@ -24,13 +24,13 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
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.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -39,7 +39,7 @@ import tools.data.input.SeekableLittleEndianAccessor;
public final class AllianceOperationHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleAlliance alliance = null;
MapleCharacter chr = c.getPlayer();
@@ -52,7 +52,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler {
alliance = chr.getAlliance();
}
byte b = slea.readByte();
byte b = p.readByte();
if (alliance == null) {
if (b != 4) {
c.sendPacket(PacketCreator.enableActions());
@@ -85,7 +85,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler {
break;
}
case 0x03: // Send Invite
String guildName = slea.readMapleAsciiString();
String guildName = p.readString();
if (alliance.getGuilds().size() == alliance.getCapacity()) {
chr.dropMessage(5, "Your alliance cannot comport any more guilds at the moment.");
@@ -100,7 +100,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler {
return;
}
int allianceid = slea.readInt();
int allianceid = p.readInt();
//slea.readMapleAsciiString(); //recruiter's guild name
alliance = Server.getInstance().getAlliance(allianceid);
@@ -138,8 +138,8 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler {
break;
}
case 0x06: { // Expel Guild
int guildid = slea.readInt();
int allianceid = slea.readInt();
int guildid = p.readInt();
int allianceid = p.readInt();
if (chr.getGuild().getAllianceId() == 0 || chr.getGuild().getAllianceId() != allianceid) {
return;
}
@@ -158,7 +158,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler {
if (chr.getGuild().getAllianceId() == 0 || chr.getGuildId() < 1) {
return;
}
int victimid = slea.readInt();
int victimid = p.readInt();
MapleCharacter player = Server.getInstance().getWorld(c.getWorld()).getPlayerStorage().getCharacterById(victimid);
if (player.getAllianceRank() != 2) {
return;
@@ -171,14 +171,14 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler {
case 0x08:
String[] ranks = new String[5];
for (int i = 0; i < 5; i++) {
ranks[i] = slea.readMapleAsciiString();
ranks[i] = p.readString();
}
Server.getInstance().setAllianceRanks(alliance.getId(), ranks);
Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.changeAllianceRankTitle(alliance.getId(), ranks), -1, -1);
break;
case 0x09: {
int int1 = slea.readInt();
byte byte1 = slea.readByte();
int int1 = p.readInt();
byte byte1 = p.readByte();
//Server.getInstance().allianceMessage(alliance.getId(), sendChangeRank(chr.getGuild().getAllianceId(), chr.getId(), int1, byte1), -1, -1);
MapleCharacter player = Server.getInstance().getWorld(c.getWorld()).getPlayerStorage().getCharacterById(int1);
@@ -187,7 +187,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler {
break;
}
case 0x0A:
String notice = slea.readMapleAsciiString();
String notice = p.readString();
Server.getInstance().setAllianceNotice(alliance.getId(), notice);
Server.getInstance().allianceMessage(alliance.getId(), GuildPackets.allianceNotice(alliance.getId(), notice), -1, -1);

View File

@@ -27,12 +27,12 @@ import client.SkillFactory;
import constants.game.GameConstants;
import constants.skills.Aran;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
public class AranComboHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public void handlePacket(InPacket p, MapleClient c) {
final MapleCharacter player = c.getPlayer();
int skillLevel = player.getSkillLevel(SkillFactory.getSkill(Aran.COMBO_ABILITY));
if (GameConstants.isAran(player.getJob().getId()) && (skillLevel > 0 || player.getJob().getId() == 2000)) {

View File

@@ -23,20 +23,20 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.life.MapleMonster;
import server.maps.MapleMap;
import tools.data.input.SeekableLittleEndianAccessor;
import client.MapleCharacter;
public final class AutoAggroHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter player = c.getPlayer();
if (player.isHidden()) return; // Don't auto aggro GM's in hide...
MapleMap map = player.getMap();
int oid = slea.readInt();
int oid = p.readInt();
MapleMonster monster = map.getMonsterByOid(oid);
if (monster != null) {

View File

@@ -24,7 +24,7 @@ package net.server.channel.handlers;
import client.MapleClient;
import client.processor.stat.AssignAPProcessor;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
/**
*
@@ -33,7 +33,7 @@ import tools.data.input.SeekableLittleEndianAccessor;
public class AutoAssignHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
AssignAPProcessor.APAutoAssignAction(slea, c);
public void handlePacket(InPacket p, MapleClient c) {
AssignAPProcessor.APAutoAssignAction(p, c);
}
}

View File

@@ -24,9 +24,9 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.guild.GuildPackets;
import tools.DatabaseConnection;
import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -40,22 +40,22 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler {
}
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
if (c.getPlayer().getGuildId() < 1) {
return;
}
byte mode = slea.readByte();
byte mode = p.readByte();
int localthreadid = 0;
switch (mode) {
case 0:
boolean bEdit = slea.readByte() == 1;
boolean bEdit = p.readByte() == 1;
if (bEdit) {
localthreadid = slea.readInt();
localthreadid = p.readInt();
}
boolean bNotice = slea.readByte() == 1;
String title = correctLength(slea.readMapleAsciiString(), 25);
String text = correctLength(slea.readMapleAsciiString(), 600);
int icon = slea.readInt();
boolean bNotice = p.readByte() == 1;
String title = correctLength(p.readString(), 25);
String text = correctLength(p.readString(), 600);
int icon = p.readInt();
if (icon >= 0x64 && icon <= 0x6a) {
if (!c.getPlayer().haveItemWithId(5290000 + icon - 0x64, false)) {
return;
@@ -70,25 +70,25 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler {
}
break;
case 1:
localthreadid = slea.readInt();
localthreadid = p.readInt();
deleteBBSThread(c, localthreadid);
break;
case 2:
int start = slea.readInt();
int start = p.readInt();
listBBSThreads(c, start * 10);
break;
case 3: // list thread + reply, following by id (int)
localthreadid = slea.readInt();
localthreadid = p.readInt();
displayThread(c, localthreadid);
break;
case 4: // reply
localthreadid = slea.readInt();
text = correctLength(slea.readMapleAsciiString(), 25);
localthreadid = p.readInt();
text = correctLength(p.readString(), 25);
newBBSReply(c, localthreadid, text);
break;
case 5: // delete reply
slea.readInt(); // we don't use this
int replyid = slea.readInt();
p.readInt(); // we don't use this
int replyid = p.readInt();
deleteBBSReply(c, replyid);
break;
default:

View File

@@ -25,8 +25,8 @@ import client.MapleClient;
import constants.skills.DarkKnight;
import java.util.Collection;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.maps.MapleSummon;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -35,10 +35,10 @@ import tools.data.input.SeekableLittleEndianAccessor;
public final class BeholderHandler extends AbstractMaplePacketHandler {//Summon Skills noobs
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
//System.out.println(slea.toString());
Collection<MapleSummon> summons = c.getPlayer().getSummonsValues();
int oid = slea.readInt();
int oid = p.readInt();
MapleSummon summon = null;
for (MapleSummon sum : summons) {
if (sum.getObjectId() == oid) {
@@ -46,11 +46,11 @@ public final class BeholderHandler extends AbstractMaplePacketHandler {//Summon
}
}
if (summon != null) {
int skillId = slea.readInt();
int skillId = p.readInt();
if (skillId == DarkKnight.AURA_OF_BEHOLDER) {
slea.readShort(); //Not sure.
p.readShort(); //Not sure.
} else if (skillId == DarkKnight.HEX_OF_BEHOLDER) {
slea.readByte(); //Not sure.
p.readByte(); //Not sure.
} //show to others here
} else {
c.getPlayer().clearSummons();

View File

@@ -25,10 +25,10 @@ import client.*;
import client.BuddyList.BuddyAddResult;
import client.BuddyList.BuddyOperation;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.world.World;
import tools.DatabaseConnection;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -76,13 +76,13 @@ public class BuddylistModifyHandler extends AbstractMaplePacketHandler {
}
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int mode = slea.readByte();
public void handlePacket(InPacket p, MapleClient c) {
int mode = p.readByte();
MapleCharacter player = c.getPlayer();
BuddyList buddylist = player.getBuddylist();
if (mode == 1) { // add
String addName = slea.readMapleAsciiString();
String group = slea.readMapleAsciiString();
String addName = p.readString();
String group = p.readString();
if (group.length() > 16 || addName.length() < 4 || addName.length() > 13) {
return; //hax.
}
@@ -165,7 +165,7 @@ public class BuddylistModifyHandler extends AbstractMaplePacketHandler {
c.sendPacket(PacketCreator.updateBuddylist(buddylist.getBuddies()));
}
} else if (mode == 2) { // accept buddy
int otherCid = slea.readInt();
int otherCid = p.readInt();
if (!buddylist.isFull()) {
try {
int channel = c.getWorldServer().find(otherCid);//worldInterface.find(otherCid);
@@ -196,7 +196,7 @@ public class BuddylistModifyHandler extends AbstractMaplePacketHandler {
}
nextPendingRequest(c);
} else if (mode == 3) { // delete
int otherCid = slea.readInt();
int otherCid = p.readInt();
player.deleteBuddy(otherCid);
}
}

View File

@@ -26,14 +26,14 @@ import client.SkillFactory;
import constants.skills.*;
import net.AbstractMaplePacketHandler;
import net.MaplePacketHandler;
import net.packet.InPacket;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class CancelBuffHandler extends AbstractMaplePacketHandler implements MaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int sourceid = slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
int sourceid = p.readInt();
switch (sourceid) {
case FPArchMage.BIG_BANG:

View File

@@ -24,13 +24,13 @@ package net.server.channel.handlers;
import client.MapleClient;
import client.MapleCharacter;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
public final class CancelChairHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int id = slea.readShort();
public final void handlePacket(InPacket p, MapleClient c) {
int id = p.readShort();
MapleCharacter mc = c.getPlayer();
if (id >= mc.getMap().getSeats()) {

View File

@@ -23,12 +23,12 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
public final class CancelDebuffHandler extends AbstractMaplePacketHandler {//TIP: BAD STUFF LOL!
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
/*List<MapleDisease> diseases = c.getPlayer().getDiseases();
List<MapleDisease> diseases_ = new ArrayList<MapleDisease>();
for (MapleDisease disease : diseases) {

View File

@@ -23,14 +23,14 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.MapleItemInformationProvider;
import tools.data.input.SeekableLittleEndianAccessor;
public final class CancelItemEffectHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int itemId = -slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
int itemId = -p.readInt();
if (MapleItemInformationProvider.getInstance().noCancelMouse(itemId)) {
return;
}

View File

@@ -32,6 +32,7 @@ import client.inventory.manipulator.MapleInventoryManipulator;
import config.YamlConfig;
import constants.inventory.ItemConstants;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.Server;
import server.CashShop;
import server.CashShop.CashItem;
@@ -40,7 +41,6 @@ import server.MapleItemInformationProvider;
import tools.FilePrinter;
import tools.PacketCreator;
import tools.Pair;
import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.SQLException;
import java.util.Calendar;
@@ -50,7 +50,7 @@ import java.util.Map;
public final class CashOperationHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter chr = c.getPlayer();
CashShop cs = chr.getCashShop();
@@ -61,11 +61,11 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
if (c.tryacquireClient()) { // thanks Thora for finding out an exploit within cash operations
try {
final int action = slea.readByte();
final int action = p.readByte();
if (action == 0x03 || action == 0x1E) {
slea.readByte();
final int useNX = slea.readInt();
final int snCS = slea.readInt();
p.readByte();
final int useNX = p.readInt();
final int snCS = p.readInt();
CashItem cItem = CashItemFactory.getItem(snCS);
if (!canBuy(chr, cItem, cs.getCash(useNX))) {
FilePrinter.printError(FilePrinter.ITEM, "Denied to sell cash item with SN " + snCS); // preventing NPE here thanks to MedicOP
@@ -101,10 +101,10 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
}
c.sendPacket(PacketCreator.showCash(chr));
} else if (action == 0x04) {//TODO check for gender
int birthday = slea.readInt();
CashItem cItem = CashItemFactory.getItem(slea.readInt());
Map<String, String> recipient = MapleCharacter.getCharacterFromDatabase(slea.readMapleAsciiString());
String message = slea.readMapleAsciiString();
int birthday = p.readInt();
CashItem cItem = CashItemFactory.getItem(p.readInt());
Map<String, String> recipient = MapleCharacter.getCharacterFromDatabase(p.readString());
String message = p.readString();
if (!canBuy(chr, cItem, cs.getCash(4)) || message.length() < 1 || message.length() > 73) {
c.enableCSActions();
return;
@@ -133,7 +133,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
} else if (action == 0x05) { // Modify wish list
cs.clearWishList();
for (byte i = 0; i < 10; i++) {
int sn = slea.readInt();
int sn = p.readInt();
CashItem cItem = CashItemFactory.getItem(sn);
if (cItem != null && cItem.isOnSale() && sn != 0) {
cs.addToWishList(sn);
@@ -141,11 +141,11 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
}
c.sendPacket(PacketCreator.showWishList(chr, true));
} else if (action == 0x06) { // Increase Inventory Slots
slea.skip(1);
int cash = slea.readInt();
byte mode = slea.readByte();
p.skip(1);
int cash = p.readInt();
byte mode = p.readByte();
if (mode == 0) {
byte type = slea.readByte();
byte type = p.readByte();
if (cs.getCash(cash) < 4000) {
c.enableCSActions();
return;
@@ -163,7 +163,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
FilePrinter.printError(FilePrinter.CASHITEM_BOUGHT, "Could not add " + qty + " slots of type " + type + " for player " + MapleCharacter.makeMapleReadable(chr.getName()));
}
} else {
CashItem cItem = CashItemFactory.getItem(slea.readInt());
CashItem cItem = CashItemFactory.getItem(p.readInt());
int type = (cItem.getItemId() - 9110000) / 1000;
if (!canBuy(chr, cItem, cs.getCash(cash))) {
c.enableCSActions();
@@ -183,9 +183,9 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
}
}
} else if (action == 0x07) { // Increase Storage Slots
slea.skip(1);
int cash = slea.readInt();
byte mode = slea.readByte();
p.skip(1);
int cash = p.readInt();
byte mode = p.readByte();
if (mode == 0) {
if (cs.getCash(cash) < 4000) {
c.enableCSActions();
@@ -207,7 +207,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
FilePrinter.printError(FilePrinter.CASHITEM_BOUGHT, "Could not add " + qty + " slots to " + MapleCharacter.makeMapleReadable(chr.getName()) + "'s account.");
}
} else {
CashItem cItem = CashItemFactory.getItem(slea.readInt());
CashItem cItem = CashItemFactory.getItem(p.readInt());
if (!canBuy(chr, cItem, cs.getCash(cash))) {
c.enableCSActions();
@@ -230,9 +230,9 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
}
}
} else if (action == 0x08) { // Increase Character Slots
slea.skip(1);
int cash = slea.readInt();
CashItem cItem = CashItemFactory.getItem(slea.readInt());
p.skip(1);
int cash = p.readInt();
CashItem cItem = CashItemFactory.getItem(p.readInt());
if (!canBuy(chr, cItem, cs.getCash(cash))) {
c.enableCSActions();
@@ -253,7 +253,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
return;
}
} else if (action == 0x0D) { // Take from Cash Inventory
Item item = cs.findByCashId(slea.readInt());
Item item = cs.findByCashId(p.readInt());
if (item == null) {
c.enableCSActions();
return;
@@ -271,10 +271,10 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
}
}
} else if (action == 0x0E) { // Put into Cash Inventory
int cashId = slea.readInt();
slea.skip(4);
int cashId = p.readInt();
p.skip(4);
byte invType = slea.readByte();
byte invType = p.readByte();
if (invType < 1 || invType > 5) {
c.disconnect(false, false);
return;
@@ -298,12 +298,12 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
mi.removeSlot(item.getPosition());
c.sendPacket(PacketCreator.putIntoCashInventory(item, c.getAccID()));
} else if (action == 0x1D) { //crush ring (action 28)
int birthday = slea.readInt();
int birthday = p.readInt();
if (checkBirthday(c, birthday)) {
int toCharge = slea.readInt();
int SN = slea.readInt();
String recipientName = slea.readMapleAsciiString();
String text = slea.readMapleAsciiString();
int toCharge = p.readInt();
int SN = p.readInt();
String recipientName = p.readString();
String text = p.readString();
CashItem itemRing = CashItemFactory.getItem(SN);
MapleCharacter partner = c.getChannelServer().getPlayerStorage().getCharacterByName(recipientName);
if (partner == null) {
@@ -339,7 +339,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
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.
int serialNumber = p.readInt(); // thanks GabrielSin for detecting a potential exploit with 1 meso cash items.
if (serialNumber / 10000000 != 8) {
c.sendPacket(PacketCreator.showCashShopMessage((byte) 0xC0));
return;
@@ -367,16 +367,14 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
}
c.sendPacket(PacketCreator.showCash(c.getPlayer()));
} else if (action == 0x23) { //Friendship :3
int birthday = slea.readInt();
int birthday = p.readInt();
if (checkBirthday(c, birthday)) {
int payment = slea.readByte();
slea.skip(3); //0s
int snID = slea.readInt();
int payment = p.readByte();
p.skip(3); //0s
int snID = p.readInt();
CashItem itemRing = CashItemFactory.getItem(snID);
String sentTo = slea.readMapleAsciiString();
int available = slea.readShort() - 1;
String text = slea.readAsciiString(available);
slea.readByte();
String sentTo = p.readString();
String text = p.readString();
MapleCharacter partner = c.getChannelServer().getPlayerStorage().getCharacterByName(sentTo);
if (partner == null) {
c.sendPacket(PacketCreator.showCashShopMessage((byte)0xBE));
@@ -405,15 +403,15 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
c.sendPacket(PacketCreator.showCash(c.getPlayer()));
} else if (action == 0x2E) { //name change
CashItem cItem = CashItemFactory.getItem(slea.readInt());
CashItem cItem = CashItemFactory.getItem(p.readInt());
if (cItem == null || !canBuy(chr, cItem, cs.getCash(4))) {
c.sendPacket(PacketCreator.showCashShopMessage((byte)0));
c.enableCSActions();
return;
}
if(cItem.getSN() == 50600000 && YamlConfig.config.server.ALLOW_CASHSHOP_NAME_CHANGE) {
slea.readMapleAsciiString(); //old name
String newName = slea.readMapleAsciiString();
p.readString(); //old name
String newName = p.readString();
if(!MapleCharacter.canCreateChar(newName) || chr.getLevel() < 10) { //(longest ban duration isn't tracked currently)
c.sendPacket(PacketCreator.showCashShopMessage((byte)0));
c.enableCSActions();
@@ -434,14 +432,14 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
}
c.enableCSActions();
} else if(action == 0x31) { //world transfer
CashItem cItem = CashItemFactory.getItem(slea.readInt());
CashItem cItem = CashItemFactory.getItem(p.readInt());
if (cItem == null || !canBuy(chr, cItem, cs.getCash(4))) {
c.sendPacket(PacketCreator.showCashShopMessage((byte)0));
c.enableCSActions();
return;
}
if(cItem.getSN() == 50600001 && YamlConfig.config.server.ALLOW_CASHSHOP_WORLD_TRANSFER) {
int newWorldSelection = slea.readInt();
int newWorldSelection = p.readInt();
int worldTransferError = chr.checkWorldTransferEligibility();
if(worldTransferError != 0 || newWorldSelection >= Server.getInstance().getWorldsSize() || Server.getInstance().getWorldsSize() <= 1) {
@@ -464,7 +462,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
}
c.enableCSActions();
} else {
System.out.println("Unhandled action: " + action + "\n" + slea);
System.out.println("Unhandled action: " + action + "\n" + p);
}
} finally {
c.releaseClient();

View File

@@ -22,10 +22,10 @@ package net.server.channel.handlers;
import client.MapleClient;
import client.inventory.Item;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.CashShop;
import tools.PacketCreator;
import tools.Pair;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -33,7 +33,7 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public class CashShopSurpriseHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
CashShop cs = c.getPlayer().getCashShop();
if(cs.isOpened()) {

View File

@@ -22,7 +22,7 @@
package net.server.channel.handlers;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
import client.MapleClient;
import client.autoban.AutobanFactory;
import net.server.Server;
@@ -34,9 +34,9 @@ import net.server.Server;
public final class ChangeChannelHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int channel = slea.readByte() + 1;
slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
int channel = p.readByte() + 1;
p.readInt();
c.getPlayer().getAutobanManager().setTimestamp(6, Server.getInstance().getCurrentTimestamp(), 3);
if(c.getChannel() == channel) {
AutobanFactory.GENERAL.alert(c.getPlayer(), "CCing to same channel.");

View File

@@ -26,12 +26,12 @@ import client.MapleClient;
import client.inventory.MapleInventoryType;
import client.inventory.manipulator.MapleInventoryManipulator;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.MapleTrade;
import server.maps.MapleMap;
import server.maps.MaplePortal;
import tools.FilePrinter;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.awt.*;
import java.net.InetAddress;
@@ -41,7 +41,7 @@ import java.util.Calendar;
public final class ChangeMapHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter chr = c.getPlayer();
if (chr.isChangingMaps() || chr.isBanned()) {
@@ -55,7 +55,7 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler {
if (chr.getTrade() != null) {
MapleTrade.cancelTrade(chr, MapleTrade.TradeResult.UNSUCCESSFUL_ANOTHER_MAP);
}
if (slea.available() == 0) { //Cash Shop :)
if (p.available() == 0) { //Cash Shop :)
if (!chr.getCashShop().isOpened()) {
c.disconnect(false, false);
return;
@@ -75,17 +75,17 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler {
return;
}
try {
slea.readByte(); // 1 = from dying 0 = regular portals
int targetid = slea.readInt();
String startwp = slea.readMapleAsciiString();
p.readByte(); // 1 = from dying 0 = regular portals
int targetid = p.readInt();
String startwp = p.readString();
MaplePortal portal = chr.getMap().getPortal(startwp);
slea.readByte();
boolean wheel = slea.readByte() > 0;
p.readByte();
boolean wheel = p.readByte() > 0;
boolean chasing = slea.readByte() == 1 && chr.isGM();
boolean chasing = p.readByte() == 1 && chr.isGM();
if (chasing) {
chr.setChasing(true);
chr.setPosition(new Point(slea.readInt(), slea.readInt()));
chr.setPosition(new Point(p.readInt(), p.readInt()));
}
if (targetid != -1) {

View File

@@ -23,18 +23,18 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.MapleTrade;
import server.MapleTrade.TradeResult;
import server.maps.MaplePortal;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class ChangeMapSpecialHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
slea.readByte();
String startwp = slea.readMapleAsciiString();
slea.readShort();
public final void handlePacket(InPacket p, MapleClient c) {
p.readByte();
String startwp = p.readString();
p.readShort();
MaplePortal portal = c.getPlayer().getMap().getPortal(startwp);
if (portal == null || c.getPlayer().portalDelay() > currentServerTime() || c.getPlayer().getBlockedPortals().contains(portal.getScriptName())) {
c.sendPacket(PacketCreator.enableActions());

View File

@@ -24,16 +24,16 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.maps.MapleMapObject;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class CharInfoRequestHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
slea.skip(4);
int cid = slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
p.skip(4);
int cid = p.readInt();
MapleMapObject target = c.getPlayer().getMap().getMapObject(cid);
if (target != null) {
if (target instanceof MapleCharacter) {

View File

@@ -25,8 +25,8 @@ package net.server.channel.handlers;
import client.MapleClient;
import client.MapleJob;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import scripting.npc.NPCScriptManager;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -34,7 +34,7 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public class ClickGuideHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public void handlePacket(InPacket p, MapleClient c) {
if (c.getPlayer().getJob().equals(MapleJob.NOBLESSE)) {
NPCScriptManager.getInstance().start(c, 1101008, null);
} else {

View File

@@ -23,8 +23,8 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -33,7 +33,7 @@ import tools.data.input.SeekableLittleEndianAccessor;
public final class CloseChalkboardHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
c.getPlayer().setChalkboard(null);
c.getPlayer().getMap().broadcastMessage(PacketCreator.useChalkboard(c.getPlayer(), true));
}

View File

@@ -25,10 +25,10 @@ import client.*;
import config.YamlConfig;
import constants.game.GameConstants;
import constants.skills.*;
import net.packet.InPacket;
import server.MapleStatEffect;
import tools.PacketCreator;
import tools.Pair;
import tools.data.input.SeekableLittleEndianAccessor;
import java.util.Collections;
import java.util.Iterator;
@@ -37,7 +37,7 @@ import java.util.List;
public final class CloseRangeDamageHandler extends AbstractDealDamageHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter chr = c.getPlayer();
/*long timeElapsed = currentServerTime() - chr.getAutobanManager().getLastSpam(8);
@@ -46,7 +46,7 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler {
}
chr.getAutobanManager().spam(8);*/
AttackInfo attack = parseDamage(slea, chr, false, false);
AttackInfo attack = parseDamage(p, chr, false, false);
if (chr.getBuffEffect(MapleBuffStat.MORPH) != null) {
if(chr.getBuffEffect(MapleBuffStat.MORPH).isMorphWithoutAttack()) {
// How are they attacking when the client won't let them?

View File

@@ -24,23 +24,23 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.events.gm.MapleCoconut;
import server.events.gm.MapleCoconuts;
import server.maps.MapleMap;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
* @author kevintjuh93
*/
public final class CoconutHandler extends AbstractMaplePacketHandler {
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
/*CB 00 A6 00 06 01
* A6 00 = coconut id
* 06 01 = ?
*/
int id = slea.readShort();
int id = p.readShort();
MapleMap map = c.getPlayer().getMap();
MapleCoconut event = map.getCoconut();
MapleCoconuts nut = event.getCoconut(id);

View File

@@ -28,6 +28,7 @@ import client.MapleClient;
import client.inventory.Item;
import client.inventory.manipulator.MapleInventoryManipulator;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.Server;
import server.CashShop;
import server.MapleItemInformationProvider;
@@ -35,7 +36,6 @@ import tools.DatabaseConnection;
import tools.FilePrinter;
import tools.PacketCreator;
import tools.Pair;
import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -179,9 +179,9 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler {
}
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
slea.skip(2);
String code = slea.readMapleAsciiString();
public final void handlePacket(InPacket p, MapleClient c) {
p.skip(2);
String code = p.readString();
if (c.tryacquireClient()) {
try {
@@ -197,9 +197,9 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler {
int nxPrepaid = 0;
int mesos = 0;
for (Pair<Integer, Pair<Integer, Integer>> p : codeRes.getRight()) {
type = p.getLeft();
int quantity = p.getRight().getRight();
for (Pair<Integer, Pair<Integer, Integer>> pair : codeRes.getRight()) {
type = pair.getLeft();
int quantity = pair.getRight().getRight();
CashShop cs = c.getPlayer().getCashShop();
switch (type) {
@@ -227,7 +227,7 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler {
break;
default:
int item = p.getRight().getLeft();
int item = pair.getRight().getLeft();
short qty;
if (quantity > Short.MAX_VALUE) {

View File

@@ -25,18 +25,18 @@ import client.MapleBuffStat;
import client.MapleCharacter;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.maps.MapleMapObject;
import server.maps.MapleSummon;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class DamageSummonHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int oid = slea.readInt();
slea.skip(1); // -1
int damage = slea.readInt();
int monsterIdFrom = slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
int oid = p.readInt();
p.skip(1); // -1
int damage = p.readInt();
int monsterIdFrom = p.readInt();
MapleCharacter player = c.getPlayer();
MapleMapObject mmo = player.getMap().getMapObject(oid);

View File

@@ -22,8 +22,8 @@ package net.server.channel.handlers;
import client.MapleClient;
import client.MapleCharacter;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.guild.MapleAlliance;
import tools.data.input.SeekableLittleEndianAccessor;
/**
* @author Ronan
@@ -31,10 +31,10 @@ import tools.data.input.SeekableLittleEndianAccessor;
public final class DenyAllianceRequestHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
slea.readByte();
String inviterName = slea.readMapleAsciiString();
String guildName = slea.readMapleAsciiString();
public final void handlePacket(InPacket p, MapleClient c) {
p.readByte();
String inviterName = p.readString();
String guildName = p.readString();
MapleCharacter chr = c.getWorldServer().getPlayerStorage().getCharacterByName(inviterName);
if (chr != null) {

View File

@@ -24,8 +24,8 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.guild.MapleGuild;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -34,9 +34,9 @@ import tools.data.input.SeekableLittleEndianAccessor;
public final class DenyGuildRequestHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
slea.readByte();
MapleCharacter cfrom = c.getWorldServer().getPlayerStorage().getCharacterByName(slea.readMapleAsciiString());
public final void handlePacket(InPacket p, MapleClient c) {
p.readByte();
MapleCharacter cfrom = c.getWorldServer().getPlayerStorage().getCharacterByName(p.readString());
if (cfrom != null) {
MapleGuild.answerInvitation(c.getPlayer().getId(), c.getPlayer().getName(), cfrom.getGuildId(), false);
}

View File

@@ -24,18 +24,18 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.coordinator.world.MapleInviteCoordinator;
import net.server.coordinator.world.MapleInviteCoordinator.InviteResult;
import net.server.coordinator.world.MapleInviteCoordinator.InviteType;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class DenyPartyRequestHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
slea.readByte();
String[] cname = slea.readMapleAsciiString().split("PS: ");
public final void handlePacket(InPacket p, MapleClient c) {
p.readByte();
String[] cname = p.readString().split("PS: ");
MapleCharacter cfrom = c.getChannelServer().getPlayerStorage().getCharacterByName(cname[cname.length - 1]);
if (cfrom != null) {

View File

@@ -24,14 +24,14 @@ package net.server.channel.handlers;
import client.MapleClient;
import client.processor.stat.AssignAPProcessor;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
public final class DistributeAPHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
slea.readInt();
int num = slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
p.readInt();
int num = p.readInt();
AssignAPProcessor.APAssignAction(c, num);
}

View File

@@ -24,13 +24,13 @@ package net.server.channel.handlers;
import client.MapleClient;
import client.processor.stat.AssignSPProcessor;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
public final class DistributeSPHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
slea.readInt();
int skillid = slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
p.readInt();
int skillid = p.readInt();
AssignSPProcessor.SPAssignAction(c, skillid);
}

View File

@@ -24,10 +24,10 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.maps.MapleDoorObject;
import server.maps.MapleMapObject;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -35,9 +35,9 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public final class DoorHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int ownerid = slea.readInt();
slea.readByte(); // specifies if backwarp or not, 1 town to target, 0 target to town
public final void handlePacket(InPacket p, MapleClient c) {
int ownerid = p.readInt();
p.readByte(); // specifies if backwarp or not, 1 town to target, 0 target to town
MapleCharacter chr = c.getPlayer();
if (chr.isChangingMaps() || chr.isBanned()) {

View File

@@ -25,37 +25,37 @@ import client.MapleClient;
import client.processor.npc.DueyProcessor;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class DueyHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
if (!YamlConfig.config.server.USE_DUEY){
c.sendPacket(PacketCreator.enableActions());
return;
}
byte operation = slea.readByte();
byte operation = p.readByte();
if (operation == DueyProcessor.Actions.TOSERVER_RECV_ITEM.getCode()) { // on click 'O' Button, thanks inhyuk
DueyProcessor.dueySendTalk(c, false);
} else if (operation == DueyProcessor.Actions.TOSERVER_SEND_ITEM.getCode()) {
byte inventId = slea.readByte();
short itemPos = slea.readShort();
short amount = slea.readShort();
int mesos = slea.readInt();
String recipient = slea.readMapleAsciiString();
boolean quick = slea.readByte() != 0;
String message = quick ? slea.readMapleAsciiString() : null;
byte inventId = p.readByte();
short itemPos = p.readShort();
short amount = p.readShort();
int mesos = p.readInt();
String recipient = p.readString();
boolean quick = p.readByte() != 0;
String message = quick ? p.readString() : null;
DueyProcessor.dueySendItem(c, inventId, itemPos, amount, mesos, message, recipient, quick);
} else if (operation == DueyProcessor.Actions.TOSERVER_REMOVE_PACKAGE.getCode()) {
int packageid = slea.readInt();
int packageid = p.readInt();
DueyProcessor.dueyRemovePackage(c, packageid, true);
} else if (operation == DueyProcessor.Actions.TOSERVER_CLAIM_PACKAGE.getCode()) {
int packageid = slea.readInt();
int packageid = p.readInt();
DueyProcessor.dueyClaimPackage(c, packageid);
} else if (operation == DueyProcessor.Actions.TOSERVER_CLAIM_PACKAGE.getCode()) {

View File

@@ -24,10 +24,10 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.Server;
import server.maps.MapleMiniDungeonInfo;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -35,7 +35,7 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public class EnterCashShopHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public void handlePacket(InPacket p, MapleClient c) {
try {
MapleCharacter mc = c.getPlayer();

View File

@@ -28,13 +28,13 @@ import client.inventory.Item;
import client.processor.action.BuybackProcessor;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.Server;
import server.MTSItemInfo;
import server.maps.FieldLimit;
import server.maps.MapleMiniDungeonInfo;
import tools.DatabaseConnection;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -46,7 +46,7 @@ import java.util.List;
public final class EnterMTSHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter chr = c.getPlayer();
if(!chr.isAlive() && YamlConfig.config.server.USE_BUYBACK_SYSTEM) {

View File

@@ -25,13 +25,13 @@ import client.MapleClient;
import client.MapleCharacter;
import constants.inventory.ItemConstants;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
public final class FaceExpressionHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter chr = c.getPlayer();
int emote = slea.readInt();
int emote = p.readInt();
if (emote > 7) {
int itemid = 5159992 + emote; // thanks RajanGrewal (Darter) for reporting unchecked emote itemid

View File

@@ -25,10 +25,10 @@ import client.MapleCharacter;
import client.MapleClient;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.coordinator.world.MapleInviteCoordinator;
import net.server.coordinator.world.MapleInviteCoordinator.InviteType;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -37,11 +37,11 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public final class FamilyAddHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) {
return;
}
String toAdd = slea.readMapleAsciiString();
String toAdd = p.readString();
MapleCharacter addChr = c.getChannelServer().getPlayerStorage().getCharacterByName(toAdd);
MapleCharacter chr = c.getPlayer();
if(addChr == null) {

View File

@@ -3,17 +3,17 @@ package net.server.channel.handlers;
import client.MapleClient;
import client.MapleFamily;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public class FamilyPreceptsHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public void handlePacket(InPacket p, MapleClient c) {
MapleFamily family = c.getPlayer().getFamily();
if(family == null) return;
if(family.getLeader().getChr() != c.getPlayer()) return; //only the leader can set the precepts
String newPrecepts = slea.readMapleAsciiString();
String newPrecepts = p.readString();
if(newPrecepts.length() > 200) return;
family.setMessage(newPrecepts, true);
//family.broadcastFamilyInfoUpdate(); //probably don't need to broadcast for this?

View File

@@ -24,20 +24,20 @@ import client.MapleFamily;
import client.MapleFamilyEntry;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public class FamilySeparateHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public void handlePacket(InPacket p, MapleClient c) {
if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) return;
MapleFamily oldFamily = c.getPlayer().getFamily();
if(oldFamily == null) return;
MapleFamilyEntry forkOn = null;
boolean isSenior;
if(slea.available() > 0) { //packet 0x95 doesn't send id, since there is only one senior
forkOn = c.getPlayer().getFamily().getEntryByID(slea.readInt());
if(p.available() > 0) { //packet 0x95 doesn't send id, since there is only one senior
forkOn = c.getPlayer().getFamily().getEntryByID(p.readInt());
if(!c.getPlayer().getFamilyEntry().isJunior(forkOn)) return; //packet editing?
isSenior = true;
} else {

View File

@@ -6,21 +6,21 @@ import client.MapleFamilyEntitlement;
import client.MapleFamilyEntry;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
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 server.maps.MapleMap;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public class FamilySummonResponseHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public void handlePacket(InPacket p, MapleClient c) {
if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) return;
slea.readMapleAsciiString(); //family name
boolean accept = slea.readByte() != 0;
p.readString(); //family name
boolean accept = p.readByte() != 0;
MapleInviteResult inviteResult = MapleInviteCoordinator.answerInvite(InviteType.FAMILY_SUMMON, c.getPlayer().getId(), c.getPlayer(), accept);
if(inviteResult.result == InviteResult.NOT_FOUND) return;
MapleCharacter inviter = inviteResult.from;

View File

@@ -27,12 +27,12 @@ import client.MapleFamilyEntitlement;
import client.MapleFamilyEntry;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.coordinator.world.MapleInviteCoordinator;
import net.server.coordinator.world.MapleInviteCoordinator.InviteType;
import server.maps.FieldLimit;
import server.maps.MapleMap;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -41,11 +41,11 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public final class FamilyUseHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) {
return;
}
MapleFamilyEntitlement type = MapleFamilyEntitlement.values()[slea.readInt()];
MapleFamilyEntitlement type = MapleFamilyEntitlement.values()[p.readInt()];
int cost = type.getRepCost();
MapleFamilyEntry entry = c.getPlayer().getFamilyEntry();
if(entry.getReputation() < cost || entry.isEntitlementUsed(type)) {
@@ -54,7 +54,7 @@ public final class FamilyUseHandler extends AbstractMaplePacketHandler {
c.sendPacket(PacketCreator.getFamilyInfo(entry));
MapleCharacter victim;
if(type == MapleFamilyEntitlement.FAMILY_REUINION || type == MapleFamilyEntitlement.SUMMON_FAMILY) {
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(slea.readMapleAsciiString());
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(p.readString());
if(victim != null && victim != c.getPlayer()) {
if(victim.getFamily() == c.getPlayer().getFamily()) {
MapleMap targetMap = victim.getMap();

View File

@@ -23,19 +23,19 @@ import client.MapleCharacter;
import client.MapleClient;
import constants.game.GameConstants;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.life.MapleMonster;
import server.life.MapleMonsterInformationProvider;
import server.maps.MapleMap;
import tools.FilePrinter;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public class FieldDamageMobHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int mobOid = slea.readInt(); // packet structure found thanks to Darter (Rajan)
int dmg = slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
int mobOid = p.readInt(); // packet structure found thanks to Darter (Rajan)
int dmg = p.readInt();
MapleCharacter chr = c.getPlayer();
MapleMap map = chr.getMap();

View File

@@ -25,7 +25,7 @@ import client.MapleCharacter;
import client.MapleClient;
import client.processor.npc.FredrickProcessor;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
/**
*
@@ -34,9 +34,9 @@ import tools.data.input.SeekableLittleEndianAccessor;
public class FredrickHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public void handlePacket(InPacket p, MapleClient c) {
MapleCharacter chr = c.getPlayer();
byte operation = slea.readByte();
byte operation = p.readByte();
switch (operation) {
case 0x19: //Will never come...

View File

@@ -27,15 +27,15 @@ import client.autoban.AutobanFactory;
import client.command.CommandsExecutor;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.FilePrinter;
import tools.LogHelper;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class GeneralChatHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
String s = slea.readMapleAsciiString();
public final void handlePacket(InPacket p, MapleClient c) {
String s = p.readString();
MapleCharacter chr = c.getPlayer();
if(chr.getAutobanManager().getLastSpam(7) + 200 > currentServerTime()) {
c.sendPacket(PacketCreator.enableActions());
@@ -51,7 +51,7 @@ public final class GeneralChatHandler extends AbstractMaplePacketHandler {
if (CommandsExecutor.isCommand(c, s)) {
CommandsExecutor.getInstance().handle(c, s);
} else if (heading != '/') {
int show = slea.readByte();
int show = p.readByte();
if(chr.getMap().isMuted() && !chr.isGM()) {
chr.dropMessage(5, "The map you are in is currently muted. Please try again later.");
return;

View File

@@ -26,16 +26,16 @@ import client.MapleCharacter.FameStatus;
import client.MapleClient;
import client.autoban.AutobanFactory;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.FilePrinter;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class GiveFameHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
MapleCharacter target = (MapleCharacter) c.getPlayer().getMap().getMapObject(slea.readInt());
int mode = slea.readByte();
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter target = (MapleCharacter) c.getPlayer().getMap().getMapObject(p.readInt());
int mode = p.readByte();
int famechange = 2 * mode - 1;
MapleCharacter player = c.getPlayer();
if (target == null || target.getId() == player.getId() || player.getLevel() < 15) {

View File

@@ -24,9 +24,9 @@ import client.MapleClient;
import constants.skills.Gunslinger;
import constants.skills.NightWalker;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.FilePrinter;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.awt.*;
@@ -36,11 +36,11 @@ import java.awt.*;
public class GrenadeEffectHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public void handlePacket(InPacket p, MapleClient c) {
MapleCharacter chr = c.getPlayer();
Point position = new Point(slea.readInt(), slea.readInt());
int keyDown = slea.readInt();
int skillId = slea.readInt();
Point position = new Point(p.readInt(), p.readInt());
int keyDown = p.readInt();
int skillId = p.readInt();
switch (skillId) {
case NightWalker.POISON_BOMB:

View File

@@ -26,6 +26,7 @@ import client.MapleClient;
import config.YamlConfig;
import constants.game.GameConstants;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.Server;
import net.server.coordinator.matchchecker.MatchCheckerListenerFactory.MatchCheckerType;
import net.server.guild.GuildPackets;
@@ -35,7 +36,6 @@ import net.server.guild.MapleGuildResponse;
import net.server.world.MapleParty;
import net.server.world.World;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.util.HashSet;
import java.util.Set;
@@ -54,9 +54,9 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
}
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter mc = c.getPlayer();
byte type = slea.readByte();
byte type = p.readByte();
int allianceId = -1;
switch (type) {
case 0x00:
@@ -71,7 +71,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
mc.dropMessage(1, "You do not have " + GameConstants.numberWithCommas(YamlConfig.config.server.CREATE_GUILD_COST) + " mesos to create a Guild.");
return;
}
String guildName = slea.readMapleAsciiString();
String guildName = p.readString();
if (!isGuildNameAcceptable(guildName)) {
mc.dropMessage(1, "The Guild name you have chosen is not accepted.");
return;
@@ -107,7 +107,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
return;
}
String targetName = slea.readMapleAsciiString();
String targetName = p.readString();
MapleGuildResponse mgr = MapleGuild.sendInvitation(c, targetName);
if (mgr != null) {
c.sendPacket(mgr.getPacket(targetName));
@@ -119,8 +119,8 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
System.out.println("[Hack] " + mc.getName() + " attempted to join a guild when s/he is already in one.");
return;
}
int gid = slea.readInt();
int cid = slea.readInt();
int gid = p.readInt();
int cid = p.readInt();
if (cid != mc.getId()) {
System.out.println("[Hack] " + mc.getName() + " attempted to join a guild with a different character id.");
return;
@@ -151,8 +151,8 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
mc.getMap().broadcastPacket(mc, GuildPackets.guildMarkChanged(mc.getId(), mc.getGuild()));
break;
case 0x07:
cid = slea.readInt();
String name = slea.readMapleAsciiString();
cid = p.readInt();
String name = p.readString();
if (cid != mc.getId() || !name.equals(mc.getName()) || mc.getGuildId() <= 0) {
System.out.println("[Hack] " + mc.getName() + " tried to quit guild under the name \"" + name + "\" and current guild id of " + mc.getGuildId() + ".");
return;
@@ -174,8 +174,8 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
case 0x08:
allianceId = mc.getGuild().getAllianceId();
cid = slea.readInt();
name = slea.readMapleAsciiString();
cid = p.readInt();
name = p.readString();
if (mc.getGuildRank() > 2 || mc.getGuildId() <= 0) {
System.out.println("[Hack] " + mc.getName() + " is trying to expel without rank 1 or 2.");
return;
@@ -191,14 +191,14 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
}
String[] ranks = new String[5];
for (int i = 0; i < 5; i++) {
ranks[i] = slea.readMapleAsciiString();
ranks[i] = p.readString();
}
Server.getInstance().changeRankTitle(mc.getGuildId(), ranks);
break;
case 0x0e:
cid = slea.readInt();
byte newRank = slea.readByte();
cid = p.readInt();
byte newRank = p.readByte();
if (mc.getGuildRank() > 2 || (newRank <= 2 && mc.getGuildRank() != 1) || mc.getGuildId() <= 0) {
System.out.println("[Hack] " + mc.getName() + " is trying to change rank outside of his/her permissions.");
return;
@@ -217,10 +217,10 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
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();
byte bgcolor = slea.readByte();
short logo = slea.readShort();
byte logocolor = slea.readByte();
short bg = p.readShort();
byte bgcolor = p.readByte();
short logo = p.readShort();
byte logocolor = p.readByte();
Server.getInstance().setGuildEmblem(mc.getGuildId(), bg, bgcolor, logo, logocolor);
if (mc.getGuild() != null && mc.getGuild().getAllianceId() > 0) {
@@ -237,14 +237,14 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
if(mc.getGuildId() <= 0) System.out.println("[Hack] " + mc.getName() + " tried to change guild notice while not in a guild.");
return;
}
String notice = slea.readMapleAsciiString();
String notice = p.readString();
if (notice.length() > 100) {
return;
}
Server.getInstance().setGuildNotice(mc.getGuildId(), notice);
break;
case 0x1E:
slea.readInt();
p.readInt();
World wserv = c.getWorldServer();
if (mc.getParty() != null) {
@@ -254,7 +254,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
int leaderid = wserv.getMatchCheckerCoordinator().getMatchConfirmationLeaderid(mc.getId());
if (leaderid != -1) {
boolean result = slea.readByte() != 0;
boolean result = p.readByte() != 0;
if (result && wserv.getMatchCheckerCoordinator().isMatchConfirmationActive(mc.getId())) {
MapleCharacter leader = wserv.getPlayerStorage().getCharacterById(leaderid);
if (leader != null) {
@@ -270,7 +270,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
break;
default:
System.out.println("Unhandled GUILD_OPERATION packet: \n" + slea.toString());
System.out.println("Unhandled GUILD_OPERATION packet: \n" + p.toString());
}
}
}

View File

@@ -26,22 +26,22 @@ import client.MapleClient;
import client.autoban.AutobanFactory;
import client.autoban.AutobanManager;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.Server;
import server.maps.MapleMap;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class HealOvertimeHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter chr = c.getPlayer();
if(!chr.isLoggedinWorld()) return;
AutobanManager abm = chr.getAutobanManager();
int timestamp = Server.getInstance().getCurrentTimestamp();
slea.skip(8);
p.skip(8);
short healHP = slea.readShort();
short healHP = p.readShort();
if (healHP != 0) {
abm.setTimestamp(8, timestamp, 28); // thanks Vcoc & Thora for pointing out d/c happening here
if ((abm.getLastSpam(0) + 1500) > timestamp) AutobanFactory.FAST_HP_HEALING.addPoint(abm, "Fast hp healing");
@@ -57,7 +57,7 @@ public final class HealOvertimeHandler extends AbstractMaplePacketHandler {
chr.getMap().broadcastMessage(chr, PacketCreator.showHpHealed(chr.getId(), healHP), false);
abm.spam(0, timestamp);
}
short healMP = slea.readShort();
short healMP = p.readShort();
if (healMP != 0 && healMP < 1000) {
abm.setTimestamp(9, timestamp, 28);
if ((abm.getLastSpam(1) + 1500) > timestamp) {

View File

@@ -26,12 +26,12 @@ import client.MapleClient;
import client.inventory.ItemFactory;
import constants.game.GameConstants;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.maps.MapleMapObject;
import server.maps.MapleMapObjectType;
import server.maps.MaplePlayerShop;
import server.maps.MaplePortal;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.awt.*;
import java.sql.SQLException;
@@ -43,7 +43,7 @@ import java.util.Arrays;
*/
public final class HiredMerchantRequest extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter chr = c.getPlayer();
try {

View File

@@ -23,7 +23,7 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
/**
*
@@ -31,6 +31,6 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public final class InnerPortalHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
}
}

View File

@@ -29,17 +29,17 @@ import client.inventory.MapleInventoryType;
import client.inventory.manipulator.MapleInventoryManipulator;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.Server;
import server.MapleItemInformationProvider;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class InventoryMergeHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter chr = c.getPlayer();
slea.readInt();
p.readInt();
chr.getAutobanManager().setTimestamp(2, Server.getInstance().getCurrentTimestamp(), 4);
if(!YamlConfig.config.server.USE_ITEM_SORT) {
@@ -47,7 +47,7 @@ public final class InventoryMergeHandler extends AbstractMaplePacketHandler {
return;
}
byte invType = slea.readByte();
byte invType = p.readByte();
if (invType < 1 || invType > 5) {
c.disconnect(false, false);
return;

View File

@@ -26,10 +26,10 @@ import client.MapleClient;
import client.inventory.*;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.Server;
import server.MapleItemInformationProvider;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.util.ArrayList;
import java.util.List;
@@ -261,9 +261,9 @@ class PairedQuicksort {
public final class InventorySortHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter chr = c.getPlayer();
slea.readInt();
p.readInt();
chr.getAutobanManager().setTimestamp(3, Server.getInstance().getCurrentTimestamp(), 4);
if(!YamlConfig.config.server.USE_ITEM_SORT) {
@@ -271,7 +271,7 @@ public final class InventorySortHandler extends AbstractMaplePacketHandler {
return;
}
byte invType = slea.readByte();
byte invType = p.readByte();
if (invType < 1 || invType > 5) {
c.disconnect(false, false);
return;

View File

@@ -25,8 +25,8 @@ import client.MapleClient;
import client.inventory.MapleInventoryType;
import client.inventory.manipulator.MapleInventoryManipulator;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -34,17 +34,17 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public final class ItemMoveHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
slea.skip(4);
public final void handlePacket(InPacket p, MapleClient c) {
p.skip(4);
if(c.getPlayer().getAutobanManager().getLastSpam(6) + 300 > currentServerTime()) {
c.sendPacket(PacketCreator.enableActions());
return;
}
MapleInventoryType type = MapleInventoryType.getByType(slea.readByte());
short src = slea.readShort(); //is there any reason to use byte instead of short in src and action?
short action = slea.readShort();
short quantity = slea.readShort();
MapleInventoryType type = MapleInventoryType.getByType(p.readByte());
short src = p.readShort(); //is there any reason to use byte instead of short in src and action?
short action = p.readShort();
short quantity = p.readShort();
if (src < 0 && action > 0) {
MapleInventoryManipulator.unequip(c, src, action);

View File

@@ -22,8 +22,8 @@
package net.server.channel.handlers;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.maps.MapleMapObject;
import tools.data.input.SeekableLittleEndianAccessor;
import client.MapleCharacter;
import client.MapleClient;
import java.awt.Point;
@@ -37,11 +37,11 @@ import tools.FilePrinter;
public final class ItemPickupHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(final SeekableLittleEndianAccessor slea, final MapleClient c) {
slea.readInt(); //Timestamp
slea.readByte();
slea.readPos(); //cpos
int oid = slea.readInt();
public final void handlePacket(final InPacket p, final MapleClient c) {
p.readInt(); //Timestamp
p.readByte();
p.readPos(); //cpos
int oid = p.readInt();
MapleCharacter chr = c.getPlayer();
MapleMapObject ob = chr.getMap().getMapObject(oid);
if(ob == null) return;

View File

@@ -27,13 +27,13 @@ import client.inventory.MapleInventoryType;
import client.inventory.manipulator.MapleInventoryManipulator;
import constants.inventory.ItemConstants;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.Server;
import server.MapleItemInformationProvider;
import server.MapleItemInformationProvider.RewardItem;
import tools.PacketCreator;
import tools.Pair;
import tools.Randomizer;
import tools.data.input.SeekableLittleEndianAccessor;
import java.util.List;
@@ -43,9 +43,9 @@ import java.util.List;
*/
public final class ItemRewardHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
byte slot = (byte) slea.readShort();
int itemId = slea.readInt(); // will load from xml I don't care.
public final void handlePacket(InPacket p, MapleClient c) {
byte slot = (byte) p.readShort();
int itemId = p.readInt(); // will load from xml I don't care.
Item it = c.getPlayer().getInventory(MapleInventoryType.USE).getItem(slot); // null check here thanks to Thora
if (it == null || it.getItemId() != itemId || c.getPlayer().getInventory(MapleInventoryType.USE).countById(itemId) < 1) return;

View File

@@ -26,23 +26,21 @@ import client.MapleClient;
import client.keybind.MapleKeyBinding;
import client.Skill;
import client.SkillFactory;
import client.autoban.AutobanFactory;
import client.inventory.MapleInventoryType;
import net.AbstractMaplePacketHandler;
import tools.FilePrinter;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
public final class KeymapChangeHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
if (slea.available() >= 8) {
int mode = slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
if (p.available() >= 8) {
int mode = p.readInt();
if(mode == 0) {
int numChanges = slea.readInt();
int numChanges = p.readInt();
for (int i = 0; i < numChanges; i++) {
int key = slea.readInt();
int type = slea.readByte();
int action = slea.readInt();
int key = p.readInt();
int type = p.readByte();
int action = p.readInt();
if(type == 1) {
Skill skill = SkillFactory.getSkill(action);
@@ -66,14 +64,14 @@ public final class KeymapChangeHandler extends AbstractMaplePacketHandler {
c.getPlayer().changeKeybinding(key, new MapleKeyBinding(type, action));
}
} else if(mode == 1) { // Auto HP Potion
int itemID = slea.readInt();
int itemID = p.readInt();
if(itemID != 0 && c.getPlayer().getInventory(MapleInventoryType.USE).findById(itemID) == null) {
c.disconnect(false, false); // Don't let them send a packet with a use item they dont have.
return;
}
c.getPlayer().changeKeybinding(91, new MapleKeyBinding(7, itemID));
} else if(mode == 2) { // Auto MP Potion
int itemID = slea.readInt();
int itemID = p.readInt();
if(itemID != 0 && c.getPlayer().getInventory(MapleInventoryType.USE).findById(itemID) == null) {
c.disconnect(false, false); // Don't let them send a packet with a use item they dont have.
return;

View File

@@ -24,15 +24,15 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
* @author kevintjuh93
*/
public class LeftKnockbackHandler extends AbstractMaplePacketHandler {
public void handlePacket(SeekableLittleEndianAccessor slea, final MapleClient c) {
public void handlePacket(InPacket p, final MapleClient c) {
c.sendPacket(PacketCreator.leftKnockBack());
c.sendPacket(PacketCreator.enableActions());
}

View File

@@ -29,6 +29,7 @@ import client.inventory.MapleInventoryType;
import client.inventory.manipulator.MapleInventoryManipulator;
import constants.inventory.ItemConstants;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.packet.Packet;
import net.server.Server;
import net.server.channel.Channel;
@@ -37,7 +38,6 @@ import server.MapleItemInformationProvider;
import tools.DatabaseConnection;
import tools.PacketCreator;
import tools.Pair;
import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -50,52 +50,52 @@ import java.util.List;
public final class MTSHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
// TODO add karma-to-untradeable flag on sold items here
if (!c.getPlayer().getCashShop().isOpened()) {
return;
}
if (slea.available() > 0) {
byte op = slea.readByte();
if (p.available() > 0) {
byte op = p.readByte();
if (op == 2) { //put item up for sale
byte itemtype = slea.readByte();
int itemid = slea.readInt();
slea.readShort();
slea.skip(7);
byte itemtype = p.readByte();
int itemid = p.readInt();
p.readShort();
p.skip(7);
short stars = 1;
if (itemtype == 1) {
slea.skip(32);
p.skip(32);
} else {
stars = slea.readShort();
stars = p.readShort();
}
slea.readMapleAsciiString(); //another useless thing (owner)
p.readString(); //another useless thing (owner)
if (itemtype == 1) {
slea.skip(32);
p.skip(32);
} else {
slea.readShort();
p.readShort();
}
short slot;
short quantity;
if (itemtype != 1) {
if (itemid / 10000 == 207 || itemid / 10000 == 233) {
slea.skip(8);
p.skip(8);
}
slot = (short) slea.readInt();
slot = (short) p.readInt();
} else {
slot = (short) slea.readInt();
slot = (short) p.readInt();
}
if (itemtype != 1) {
if (itemid / 10000 == 207 || itemid / 10000 == 233) {
quantity = stars;
slea.skip(4);
p.skip(4);
} else {
quantity = (short) slea.readInt();
quantity = (short) p.readInt();
}
} else {
quantity = (byte) slea.readInt();
quantity = (byte) p.readInt();
}
int price = slea.readInt();
int price = p.readInt();
if (itemtype == 1) {
quantity = 1;
}
@@ -228,15 +228,15 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
}
} else if (op == 3) { //send offer for wanted item
} else if (op == 4) { //list wanted item
slea.readInt();
slea.readInt();
slea.readInt();
slea.readShort();
slea.readMapleAsciiString();
p.readInt();
p.readInt();
p.readInt();
p.readShort();
p.readString();
} else if (op == 5) { //change page
int tab = slea.readInt();
int type = slea.readInt();
int page = slea.readInt();
int tab = p.readInt();
int type = p.readInt();
int page = p.readInt();
c.getPlayer().changePage(page);
if (tab == 4 && type == 0) {
c.sendPacket(getCart(c.getPlayer().getId()));
@@ -252,11 +252,11 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
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();
slea.readInt();
int ci = slea.readInt();
String search = slea.readMapleAsciiString();
int tab = p.readInt();
int type = p.readInt();
p.readInt();
int ci = p.readInt();
String search = p.readString();
c.getPlayer().setSearch(search);
c.getPlayer().changeTab(tab);
c.getPlayer().changeType(type);
@@ -268,7 +268,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
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
int id = p.readInt(); //id of the item
Connection con = null;
try {
con = DatabaseConnection.getConnection();
@@ -290,7 +290,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
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
int id = p.readInt(); //id of the item
Connection con = null;
PreparedStatement ps;
ResultSet rs;
@@ -358,7 +358,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
System.out.println("MTS Transfer error: " + e);
}
} else if (op == 9) { //add to cart
int id = slea.readInt(); //id of the item
int id = p.readInt(); //id of the item
Connection con;
try {
con = DatabaseConnection.getConnection();
@@ -392,7 +392,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
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
int id = p.readInt(); //id of the item
Connection con = null;
try {
con = DatabaseConnection.getConnection();
@@ -413,7 +413,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
} else if (op == 13) { //cancel wanted cart thing
} else if (op == 14) { //buy auction item now
} else if (op == 16) { //buy
int id = slea.readInt(); //id of the item
int id = p.readInt(); //id of the item
Connection con = null;
PreparedStatement ps;
ResultSet rs;
@@ -477,7 +477,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
c.sendPacket(PacketCreator.MTSFailBuy());
}
} else if (op == 17) { //buy from cart
int id = slea.readInt(); //id of the item
int id = p.readInt(); //id of the item
Connection con = null;
PreparedStatement ps;
ResultSet rs;
@@ -537,7 +537,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
c.sendPacket(PacketCreator.MTSFailBuy());
}
} else {
System.out.println("Unhandled OP(MTS): " + op + " Packet: " + slea.toString());
System.out.println("Unhandled OP(MTS): " + op + " Packet: " + p.toString());
}
} else {
c.sendPacket(PacketCreator.showMTSCash(c.getPlayer()));

View File

@@ -28,14 +28,14 @@ import constants.skills.Bishop;
import constants.skills.Evan;
import constants.skills.FPArchMage;
import constants.skills.ILArchMage;
import net.packet.InPacket;
import net.packet.Packet;
import server.MapleStatEffect;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class MagicDamageHandler extends AbstractDealDamageHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter chr = c.getPlayer();
/*long timeElapsed = currentServerTime() - chr.getAutobanManager().getLastSpam(8);
@@ -44,7 +44,7 @@ public final class MagicDamageHandler extends AbstractDealDamageHandler {
}
chr.getAutobanManager().spam(8);*/
AttackInfo attack = parseDamage(slea, chr, false, true);
AttackInfo attack = parseDamage(p, chr, false, true);
if (chr.getBuffEffect(MapleBuffStat.MORPH) != null) {
if(chr.getBuffEffect(MapleBuffStat.MORPH).isMorphWithoutAttack()) {

View File

@@ -24,7 +24,7 @@ package net.server.channel.handlers;
import client.MapleClient;
import client.processor.action.MakerProcessor;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
/**
*
@@ -33,7 +33,7 @@ import tools.data.input.SeekableLittleEndianAccessor;
public final class MakerSkillHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
MakerProcessor.makerAction(slea, c);
public final void handlePacket(InPacket p, MapleClient c) {
MakerProcessor.makerAction(p, c);
}
}

View File

@@ -24,8 +24,8 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -34,14 +34,14 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public final class MesoDropHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter player = c.getPlayer();
if (!player.isAlive()) {
c.sendPacket(PacketCreator.enableActions());
return;
}
slea.skip(4);
int meso = slea.readInt();
p.skip(4);
int meso = p.readInt();
if (c.tryacquireClient()) { // thanks imbee for noticing players not being able to throw mesos too fast
try {

View File

@@ -24,6 +24,7 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.coordinator.world.MapleInviteCoordinator;
import net.server.coordinator.world.MapleInviteCoordinator.InviteResult;
import net.server.coordinator.world.MapleInviteCoordinator.InviteType;
@@ -32,21 +33,20 @@ import net.server.world.MapleMessenger;
import net.server.world.MapleMessengerCharacter;
import net.server.world.World;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class MessengerHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
if (c.tryacquireClient()) {
try {
String input;
byte mode = slea.readByte();
byte mode = p.readByte();
MapleCharacter player = c.getPlayer();
World world = c.getWorldServer();
MapleMessenger messenger = player.getMessenger();
switch (mode) {
case 0x00:
int messengerid = slea.readInt();
int messengerid = p.readInt();
if (messenger == null) {
if (messengerid == 0) {
MapleInviteCoordinator.removeInvite(InviteType.MESSENGER, player.getId());
@@ -84,7 +84,7 @@ public final class MessengerHandler extends AbstractMaplePacketHandler {
if (messenger == null) {
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();
input = p.readString();
MapleCharacter target = c.getChannelServer().getPlayerStorage().getCharacterByName(input);
if (target != null) {
if (target.getMessenger() == null) {
@@ -109,13 +109,13 @@ public final class MessengerHandler extends AbstractMaplePacketHandler {
}
break;
case 0x05:
String targeted = slea.readMapleAsciiString();
String targeted = p.readString();
world.declineChat(targeted, player);
break;
case 0x06:
if (messenger != null) {
MapleMessengerCharacter messengerplayer = new MapleMessengerCharacter(player, player.getMessengerPosition());
input = slea.readMapleAsciiString();
input = p.readString();
world.messengerChat(messenger, input, messengerplayer.getName());
}
break;

View File

@@ -21,16 +21,16 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.packet.InPacket;
import server.life.MapleMonster;
import server.life.MapleLifeFactory.BanishInfo;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
public final class MobBanishPlayerHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int mobid = slea.readInt(); // mob banish handling detected thanks to MedicOP
public final void handlePacket(InPacket p, MapleClient c) {
int mobid = p.readInt(); // mob banish handling detected thanks to MedicOP
MapleCharacter chr = c.getPlayer();
MapleMonster mob = chr.getMap().getMonsterById(mobid);

View File

@@ -23,12 +23,12 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import scripting.event.EventInstanceManager;
import server.life.MapleMonster;
import server.maps.MapleMap;
import tools.PacketCreator;
import tools.Randomizer;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -37,10 +37,10 @@ import tools.data.input.SeekableLittleEndianAccessor;
public final class MobDamageMobFriendlyHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int attacker = slea.readInt();
slea.readInt();
int damaged = slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
int attacker = p.readInt();
p.readInt();
int damaged = p.readInt();
MapleMap map = c.getPlayer().getMap();
MapleMonster monster = map.getMonsterByOid(damaged);

View File

@@ -27,12 +27,12 @@ import client.autoban.AutobanFactory;
import client.status.MonsterStatus;
import client.status.MonsterStatusEffect;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.life.MapleMonster;
import server.life.MapleMonsterInformationProvider;
import server.maps.MapleMap;
import tools.FilePrinter;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.util.Map;
@@ -43,12 +43,12 @@ import java.util.Map;
*/
public final class MobDamageMobHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int from = slea.readInt();
slea.readInt();
int to = slea.readInt();
boolean magic = slea.readByte() == 0;
int dmg = slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
int from = p.readInt();
p.readInt();
int to = p.readInt();
boolean magic = p.readByte() == 0;
int dmg = p.readInt();
MapleCharacter chr = c.getPlayer();
MapleMap map = chr.getMap();

View File

@@ -23,14 +23,14 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.life.MapleMonster;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class MonsterBombHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int oid = slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
int oid = p.readInt();
MapleMonster monster = c.getPlayer().getMap().getMonsterByOid(oid);
if (!c.getPlayer().isAlive() || monster == null) {
return;

View File

@@ -23,12 +23,12 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class MonsterBookCoverHandler extends AbstractMaplePacketHandler {
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int id = slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
int id = p.readInt();
if (id == 0 || id / 10000 == 238) {
c.getPlayer().setMonsterBookCover(id);
c.sendPacket(PacketCreator.changeCover(id));

View File

@@ -25,6 +25,7 @@ import client.MapleCharacter;
import client.MapleClient;
import client.MapleDisease;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.world.MapleParty;
import net.server.world.MaplePartyCharacter;
import server.life.MapleLifeFactory;
@@ -34,7 +35,6 @@ import server.partyquest.MapleCarnivalFactory.MCSkill;
import server.partyquest.MonsterCarnival;
import tools.PacketCreator;
import tools.Pair;
import tools.data.input.SeekableLittleEndianAccessor;
import java.awt.*;
import java.util.List;
@@ -47,12 +47,12 @@ import java.util.List;
public final class MonsterCarnivalHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public void handlePacket(InPacket p, MapleClient c) {
if (c.tryacquireClient()) {
try {
try {
int tab = slea.readByte();
int num = slea.readByte();
int tab = p.readByte();
int num = p.readByte();
int neededCP = 0;
if (tab == 0) {
final List<Pair<Integer, Integer>> mobs = c.getPlayer().getMap().getMobsToSpawn();

View File

@@ -23,9 +23,9 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.packet.InPacket;
import server.maps.MapleDragon;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import tools.exceptions.EmptyMovementException;
import java.awt.*;
@@ -33,21 +33,21 @@ import java.awt.*;
public class MoveDragonHandler extends AbstractMovementPacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public void handlePacket(InPacket p, MapleClient c) {
final MapleCharacter chr = c.getPlayer();
final Point startPos = new Point(slea.readShort(), slea.readShort());
final Point startPos = new Point(p.readShort(), p.readShort());
final MapleDragon dragon = chr.getDragon();
if (dragon != null) {
try {
long movementDataStart = slea.getPosition();
updatePosition(slea, dragon, 0);
long movementDataLength = slea.getPosition() - movementDataStart; //how many bytes were read by updatePosition
slea.seek(movementDataStart);
int movementDataStart = p.getPosition();
updatePosition(p, dragon, 0);
long movementDataLength = p.getPosition() - movementDataStart; //how many bytes were read by updatePosition
p.seek(movementDataStart);
if (chr.isHidden()) {
chr.getMap().broadcastGMPacket(chr, PacketCreator.moveDragon(dragon, startPos, slea, movementDataLength));
chr.getMap().broadcastGMPacket(chr, PacketCreator.moveDragon(dragon, startPos, p, movementDataLength));
} else {
chr.getMap().broadcastMessage(chr, PacketCreator.moveDragon(dragon, startPos, slea, movementDataLength), dragon.getPosition());
chr.getMap().broadcastMessage(chr, PacketCreator.moveDragon(dragon, startPos, p, movementDataLength), dragon.getPosition());
}
} catch (EmptyMovementException e) {}
}

View File

@@ -24,6 +24,7 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import config.YamlConfig;
import net.packet.InPacket;
import server.life.MapleMonster;
import server.life.MapleMonsterInformationProvider;
import server.life.MobSkill;
@@ -34,7 +35,6 @@ import server.maps.MapleMapObjectType;
import tools.PacketCreator;
import tools.Pair;
import tools.Randomizer;
import tools.data.input.SeekableLittleEndianAccessor;
import tools.exceptions.EmptyMovementException;
import java.awt.*;
@@ -49,7 +49,7 @@ import java.util.List;
public final class MoveLifeHandler extends AbstractMovementPacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter player = c.getPlayer();
MapleMap map = player.getMap();
@@ -57,8 +57,8 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler {
return;
}
int objectid = slea.readInt();
short moveid = slea.readShort();
int objectid = p.readInt();
short moveid = p.readShort();
MapleMapObject mmo = map.getMapObject(objectid);
if (mmo == null || mmo.getType() != MapleMapObjectType.MONSTER) {
return;
@@ -67,12 +67,12 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler {
MapleMonster monster = (MapleMonster) mmo;
List<MapleCharacter> banishPlayers = null;
byte pNibbles = slea.readByte();
byte rawActivity = slea.readByte();
int skillId = slea.readByte() & 0xff;
int skillLv = slea.readByte() & 0xff;
short pOption = slea.readShort();
slea.skip(8);
byte pNibbles = p.readByte();
byte rawActivity = p.readByte();
int skillId = p.readByte() & 0xff;
int skillLv = p.readByte() & 0xff;
short pOption = p.readShort();
p.skip(8);
if (rawActivity >= 0) {
rawActivity = (byte) (rawActivity & 0xFF >> 1);
@@ -139,10 +139,10 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler {
}
}
slea.readByte();
slea.readInt(); // whatever
short start_x = slea.readShort(); // hmm.. startpos?
short start_y = slea.readShort(); // hmm...
p.readByte();
p.readInt(); // whatever
short start_x = p.readShort(); // hmm.. startpos?
short start_y = p.readShort(); // hmm...
Point startPos = new Point(start_x, start_y - 2);
Point serverStartPos = new Point(monster.getPosition());
@@ -157,16 +157,16 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler {
try {
long movementDataStart = slea.getPosition();
updatePosition(slea, monster, -2); // Thanks Doodle & ZERO傑洛 for noticing sponge-based bosses moving out of stage in case of no-offset applied
long movementDataLength = slea.getPosition() - movementDataStart; //how many bytes were read by updatePosition
slea.seek(movementDataStart);
int movementDataStart = p.getPosition();
updatePosition(p, monster, -2); // Thanks Doodle & ZERO傑洛 for noticing sponge-based bosses moving out of stage in case of no-offset applied
long movementDataLength = p.getPosition() - movementDataStart; //how many bytes were read by updatePosition
p.seek(movementDataStart);
if (YamlConfig.config.server.USE_DEBUG_SHOW_RCVD_MVLIFE) {
System.out.println((isSkill ? "SKILL " : (isAttack ? "ATTCK " : " ")) + "castPos: " + castPos + " rawAct: " + rawActivity + " opt: " + pOption + " skillID: " + useSkillId + " skillLV: " + useSkillLevel + " " + "allowSkill: " + nextMovementCouldBeSkill + " mobMp: " + mobMp);
}
map.broadcastMessage(player, PacketCreator.moveMonster(objectid, nextMovementCouldBeSkill, rawActivity, useSkillId, useSkillLevel, pOption, startPos, slea, movementDataLength), serverStartPos);
map.broadcastMessage(player, PacketCreator.moveMonster(objectid, nextMovementCouldBeSkill, rawActivity, useSkillId, useSkillLevel, pOption, startPos, p, 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) {}

View File

@@ -23,23 +23,23 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.packet.InPacket;
import server.movement.LifeMovementFragment;
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) {
int petId = slea.readInt();
slea.readLong();
public final void handlePacket(InPacket p, MapleClient c) {
int petId = p.readInt();
p.readLong();
// Point startPos = StreamUtil.readShortPoint(slea);
List<LifeMovementFragment> res;
try {
res = parseMovement(slea);
res = parseMovement(p);
} catch (EmptyMovementException e) {
return;
}

View File

@@ -22,25 +22,25 @@
package net.server.channel.handlers;
import client.MapleClient;
import net.packet.InPacket;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import tools.exceptions.EmptyMovementException;
public final class MovePlayerHandler extends AbstractMovementPacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
slea.skip(9);
public final void handlePacket(InPacket p, MapleClient c) {
p.skip(9);
try { // thanks Sa for noticing empty movement sequences crashing players
long movementDataStart = slea.getPosition();
updatePosition(slea, c.getPlayer(), 0);
long movementDataLength = slea.getPosition() - movementDataStart; //how many bytes were read by updatePosition
slea.seek(movementDataStart);
int movementDataStart = p.getPosition();
updatePosition(p, c.getPlayer(), 0);
long movementDataLength = p.getPosition() - movementDataStart; //how many bytes were read by updatePosition
p.seek(movementDataStart);
c.getPlayer().getMap().movePlayer(c.getPlayer(), c.getPlayer().getPosition());
if (c.getPlayer().isHidden()) {
c.getPlayer().getMap().broadcastGMMessage(c.getPlayer(), PacketCreator.movePlayer(c.getPlayer().getId(), slea, movementDataLength), false);
c.getPlayer().getMap().broadcastGMMessage(c.getPlayer(), PacketCreator.movePlayer(c.getPlayer().getId(), p, movementDataLength), false);
} else {
c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.movePlayer(c.getPlayer().getId(), slea, movementDataLength), false);
c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.movePlayer(c.getPlayer().getId(), p, movementDataLength), false);
}
} catch (EmptyMovementException e) {}
}

View File

@@ -23,9 +23,9 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.packet.InPacket;
import server.maps.MapleSummon;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import tools.exceptions.EmptyMovementException;
import java.awt.*;
@@ -33,9 +33,9 @@ import java.util.Collection;
public final class MoveSummonHandler extends AbstractMovementPacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int oid = slea.readInt();
Point startPos = new Point(slea.readShort(), slea.readShort());
public final void handlePacket(InPacket p, MapleClient c) {
int oid = p.readInt();
Point startPos = new Point(p.readShort(), p.readShort());
MapleCharacter player = c.getPlayer();
Collection<MapleSummon> summons = player.getSummonsValues();
MapleSummon summon = null;
@@ -47,12 +47,12 @@ public final class MoveSummonHandler extends AbstractMovementPacketHandler {
}
if (summon != null) {
try {
long movementDataStart = slea.getPosition();
updatePosition(slea, summon, 0);
long movementDataLength = slea.getPosition() - movementDataStart; //how many bytes were read by updatePosition
slea.seek(movementDataStart);
int movementDataStart = p.getPosition();
updatePosition(p, summon, 0);
long movementDataLength = p.getPosition() - movementDataStart; //how many bytes were read by updatePosition
p.seek(movementDataStart);
player.getMap().broadcastMessage(player, PacketCreator.moveSummon(player.getId(), oid, startPos, slea, movementDataLength), summon.getPosition());
player.getMap().broadcastMessage(player, PacketCreator.moveSummon(player.getId(), oid, startPos, p, movementDataLength), summon.getPosition());
} catch (EmptyMovementException e) {}
}
}

View File

@@ -26,28 +26,28 @@ import client.MapleClient;
import client.autoban.AutobanFactory;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.Server;
import net.server.world.World;
import tools.FilePrinter;
import tools.LogHelper;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class MultiChatHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
MapleCharacter player = c.getPlayer();
if(player.getAutobanManager().getLastSpam(7) + 200 > currentServerTime()) {
return;
}
int type = slea.readByte(); // 0 for buddys, 1 for partys
int numRecipients = slea.readByte();
int type = p.readByte(); // 0 for buddys, 1 for partys
int numRecipients = p.readByte();
int[] recipients = new int[numRecipients];
for (int i = 0; i < numRecipients; i++) {
recipients[i] = slea.readInt();
recipients[i] = p.readInt();
}
String chattext = slea.readMapleAsciiString();
String chattext = p.readString();
if (chattext.length() > Byte.MAX_VALUE && !player.isGM()) {
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit chats.");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to send text with length of " + chattext.length());

View File

@@ -24,26 +24,26 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.opcodes.SendOpcode;
import net.packet.InPacket;
import net.packet.OutPacket;
import tools.data.input.SeekableLittleEndianAccessor;
public final class NPCAnimationHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
if (c.getPlayer().isChangingMaps()) { // possible cause of error 38 in some map transition scenarios, thanks Arnah
return;
}
OutPacket p = OutPacket.create(SendOpcode.NPC_ACTION);
int length = (int) slea.available();
OutPacket op = OutPacket.create(SendOpcode.NPC_ACTION);
int length = p.available();
if (length == 6) { // NPC Talk
p.writeInt(slea.readInt());
p.writeByte(slea.readByte()); // 2 bytes, thanks resinate
p.writeByte(slea.readByte());
op.writeInt(p.readInt());
op.writeByte(p.readByte()); // 2 bytes, thanks resinate
op.writeByte(p.readByte());
} else if (length > 6) { // NPC Move
byte[] bytes = slea.read(length - 9);
p.writeBytes(bytes);
byte[] bytes = p.readBytes(length - 9);
op.writeBytes(bytes);
}
c.sendPacket(p);
c.sendPacket(op);
}
}

View File

@@ -23,9 +23,9 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import scripting.npc.NPCScriptManager;
import scripting.quest.QuestScriptManager;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -33,12 +33,12 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public final class NPCMoreTalkHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
byte lastMsg = slea.readByte(); // 00 (last msg type I think)
byte action = slea.readByte(); // 00 = end chat, 01 == follow
public final void handlePacket(InPacket p, MapleClient c) {
byte lastMsg = p.readByte(); // 00 (last msg type I think)
byte action = p.readByte(); // 00 = end chat, 01 == follow
if (lastMsg == 2) {
if (action != 0) {
String returnText = slea.readMapleAsciiString();
String returnText = p.readString();
if (c.getQM() != null) {
c.getQM().setGetText(returnText);
if (c.getQM().isStart()) {
@@ -57,10 +57,10 @@ public final class NPCMoreTalkHandler extends AbstractMaplePacketHandler {
}
} else {
int selection = -1;
if (slea.available() >= 4) {
selection = slea.readInt();
} else if (slea.available() > 0) {
selection = slea.readByte();
if (p.available() >= 4) {
selection = p.readInt();
} else if (p.available() > 0) {
selection = p.readByte();
}
if (c.getQM() != null) {
if (c.getQM().isStart()) {

View File

@@ -25,20 +25,20 @@ import client.MapleClient;
import client.autoban.AutobanFactory;
import constants.inventory.ItemConstants;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.FilePrinter;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
* @author Matze
*/
public final class NPCShopHandler extends AbstractMaplePacketHandler {
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
byte bmode = slea.readByte();
public final void handlePacket(InPacket p, MapleClient c) {
byte bmode = p.readByte();
if (bmode == 0) { // mode 0 = buy :)
short slot = slea.readShort();// slot
int itemId = slea.readInt();
short quantity = slea.readShort();
short slot = p.readShort();// slot
int itemId = p.readInt();
short quantity = p.readShort();
if (quantity < 1) {
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit a npc shop.");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to buy quantity " + quantity + " of item id " + itemId);
@@ -47,12 +47,12 @@ public final class NPCShopHandler extends AbstractMaplePacketHandler {
}
c.getPlayer().getShop().buy(c, slot, itemId, quantity);
} else if (bmode == 1) { // sell ;)
short slot = slea.readShort();
int itemId = slea.readInt();
short quantity = slea.readShort();
short slot = p.readShort();
int itemId = p.readInt();
short quantity = p.readShort();
c.getPlayer().getShop().sell(c, ItemConstants.getInventoryType(itemId), slot, quantity);
} else if (bmode == 2) { // recharge ;)
byte slot = (byte) slea.readShort();
byte slot = (byte) p.readShort();
c.getPlayer().getShop().recharge(c, slot);
} else if (bmode == 3) { // leaving :(
c.getPlayer().setShop(null);

View File

@@ -25,17 +25,17 @@ import client.MapleClient;
import client.processor.npc.DueyProcessor;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import scripting.npc.NPCScriptManager;
import server.life.MapleNPC;
import server.life.MaplePlayerNPC;
import server.maps.MapleMapObject;
import tools.FilePrinter;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class NPCTalkHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
if (!c.getPlayer().isAlive()) {
c.sendPacket(PacketCreator.enableActions());
return;
@@ -46,7 +46,7 @@ public final class NPCTalkHandler extends AbstractMaplePacketHandler {
return;
}
int oid = slea.readInt();
int oid = p.readInt();
MapleMapObject obj = c.getPlayer().getMap().getMapObject(oid);
if (obj instanceof MapleNPC) {
MapleNPC npc = (MapleNPC) obj;

View File

@@ -25,10 +25,10 @@ import client.inventory.Item;
import client.newyear.NewYearCardRecord;
import constants.inventory.ItemConstants;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.Server;
import tools.DatabaseConnection;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -44,24 +44,24 @@ import java.sql.SQLException;
public final class NewYearCardHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
final MapleCharacter player = c.getPlayer();
byte reqMode = slea.readByte(); //[00] -> NewYearReq (0 = Send)
byte reqMode = p.readByte(); //[00] -> NewYearReq (0 = Send)
if(reqMode == 0) { // card has been sent
if(player.haveItem(2160101)) { // new year's card
short slot = slea.readShort(); //[00 2C] -> nPOS (Item Slot Pos)
int itemid = slea.readInt(); //[00 20 F5 E5] -> nItemID (item id)
short slot = p.readShort(); //[00 2C] -> nPOS (Item Slot Pos)
int itemid = p.readInt(); //[00 20 F5 E5] -> nItemID (item id)
int status = getValidNewYearCardStatus(itemid, player, slot);
if(status == 0) {
if(player.canHold(4300000, 1)) {
String receiver = slea.readMapleAsciiString(); //[04 00 54 65 73 74] -> sReceiverName (person to send to)
String receiver = p.readString(); //[04 00 54 65 73 74] -> sReceiverName (person to send to)
int receiverid = getReceiverId(receiver, c.getWorld());
if(receiverid != -1) {
if(receiverid != c.getPlayer().getId()) {
String message = slea.readMapleAsciiString(); //[06 00 4C 65 74 74 65 72] -> sContent (message)
String message = p.readString(); //[06 00 4C 65 74 74 65 72] -> sContent (message)
NewYearCardRecord newyear = new NewYearCardRecord(player.getId(), player.getName(), receiverid, receiver, message);
NewYearCardRecord.saveNewYearCard(newyear);
@@ -89,7 +89,7 @@ public final class NewYearCardHandler extends AbstractMaplePacketHandler {
player.sendPacket(PacketCreator.onNewYearCardRes(player, -1, 5, 0x11)); // have no card to send
}
} else { //receiver accepted the card
int cardid = slea.readInt();
int cardid = p.readInt();
NewYearCardRecord newyear = NewYearCardRecord.loadNewYearCard(cardid);

View File

@@ -23,9 +23,9 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.DatabaseConnection;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -34,11 +34,11 @@ import java.sql.SQLException;
public final class NoteActionHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int action = slea.readByte();
public final void handlePacket(InPacket p, MapleClient c) {
int action = p.readByte();
if (action == 0 && c.getPlayer().getCashShop().getAvailableNotes() > 0) {
String charname = slea.readMapleAsciiString();
String message = slea.readMapleAsciiString();
String charname = p.readString();
String message = p.readString();
try {
if (c.getPlayer().getCashShop().isOpened()) {
c.sendPacket(PacketCreator.showCashInventory(c));
@@ -50,13 +50,13 @@ public final class NoteActionHandler extends AbstractMaplePacketHandler {
e.printStackTrace();
}
} else if (action == 1) {
int num = slea.readByte();
slea.readByte();
slea.readByte();
int num = p.readByte();
p.readByte();
p.readByte();
int fame = 0;
for (int i = 0; i < num; i++) {
int id = slea.readInt();
slea.readByte(); //Fame, but we read it from the database :)
int id = p.readInt();
p.readByte(); //Fame, but we read it from the database :)
try (Connection con = DatabaseConnection.getConnection()) {
try (PreparedStatement ps = con.prepareStatement("SELECT `fame` FROM notes WHERE id=? AND deleted=0")) {

View File

@@ -23,8 +23,8 @@ import client.MapleCharacter;
import client.MapleClient;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -32,7 +32,7 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public final class OpenFamilyHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) return;
MapleCharacter chr = c.getPlayer();
c.sendPacket(PacketCreator.getFamilyInfo(chr.getFamilyEntry()));

View File

@@ -23,8 +23,8 @@ import client.MapleCharacter;
import client.MapleClient;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -32,9 +32,9 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public final class OpenFamilyPedigreeHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) return;
MapleCharacter target = c.getChannelServer().getPlayerStorage().getCharacterByName(slea.readMapleAsciiString());
MapleCharacter target = c.getChannelServer().getPlayerStorage().getCharacterByName(p.readString());
if(target != null && target.getFamily() != null) {
c.sendPacket(PacketCreator.showPedigree(target.getFamilyEntry()));
}

View File

@@ -22,10 +22,10 @@ package net.server.channel.handlers;
import client.MapleClient;
import constants.game.GameConstants;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.maps.MapleHiredMerchant;
import server.maps.MaplePlayerShop;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/*
* @author Ronan
@@ -33,9 +33,9 @@ import tools.data.input.SeekableLittleEndianAccessor;
public final class OwlWarpHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int ownerid = slea.readInt();
int mapid = slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
int ownerid = p.readInt();
int mapid = p.readInt();
if(ownerid == c.getPlayer().getId()) {
c.sendPacket(PacketCreator.serverNotice(1, "You cannot visit your own shop."));

View File

@@ -25,6 +25,7 @@ import client.MapleCharacter;
import client.MapleClient;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.coordinator.world.MapleInviteCoordinator;
import net.server.coordinator.world.MapleInviteCoordinator.InviteResult;
import net.server.coordinator.world.MapleInviteCoordinator.InviteType;
@@ -34,15 +35,14 @@ 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;
public final class PartyOperationHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int operation = slea.readByte();
public final void handlePacket(InPacket p, MapleClient c) {
int operation = p.readByte();
MapleCharacter player = c.getPlayer();
World world = c.getWorldServer();
MapleParty party = player.getParty();
@@ -62,7 +62,7 @@ public final class PartyOperationHandler extends AbstractMaplePacketHandler {
break;
}
case 3: { // join
int partyid = slea.readInt();
int partyid = p.readInt();
MapleInviteResult inviteRes = MapleInviteCoordinator.answerInvite(InviteType.PARTY, player.getId(), partyid, true);
InviteResult res = inviteRes.result;
@@ -74,7 +74,7 @@ public final class PartyOperationHandler extends AbstractMaplePacketHandler {
break;
}
case 4: { // invite
String name = slea.readMapleAsciiString();
String name = p.readString();
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
@@ -112,12 +112,12 @@ public final class PartyOperationHandler extends AbstractMaplePacketHandler {
break;
}
case 5: { // expel
int cid = slea.readInt();
int cid = p.readInt();
MapleParty.expelFromParty(party, c, cid);
break;
}
case 6: { // change leader
int newLeader = slea.readInt();
int newLeader = p.readInt();
MaplePartyCharacter newLeadr = party.getMemberById(newLeader);
world.updateParty(party.getId(), PartyOperation.CHANGE_LEADER, newLeadr);
break;

View File

@@ -22,7 +22,7 @@
package net.server.channel.handlers;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
import client.MapleClient;
/**
@@ -32,5 +32,5 @@ import client.MapleClient;
public class PartySearchRegisterHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {}
public void handlePacket(InPacket p, MapleClient c) {}
}

View File

@@ -24,10 +24,10 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import net.server.world.MapleParty;
import net.server.world.World;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
@@ -37,9 +37,9 @@ import tools.data.input.SeekableLittleEndianAccessor;
*/
public class PartySearchStartHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int min = slea.readInt();
int max = slea.readInt();
public void handlePacket(InPacket p, MapleClient c) {
int min = p.readInt();
int max = p.readInt();
MapleCharacter chr = c.getPlayer();
if (min > max) {
@@ -60,8 +60,8 @@ public class PartySearchStartHandler extends AbstractMaplePacketHandler {
return;
}
slea.readInt(); // members
int jobs = slea.readInt();
p.readInt(); // members
int jobs = p.readInt();
MapleParty party = c.getPlayer().getParty();
if (party == null || !c.getPlayer().isPartyLeader()) return;

View File

@@ -23,12 +23,12 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import net.packet.InPacket;
public final class PartySearchUpdateHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
public final void handlePacket(InPacket p, MapleClient c) {
c.getWorldServer().getPartySearchCoordinator().unregisterPartyLeader(c.getPlayer());
}
}

View File

@@ -25,19 +25,19 @@ import client.MapleCharacter;
import client.MapleClient;
import client.processor.action.PetAutopotProcessor;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import server.MapleItemInformationProvider;
import server.MapleStatEffect;
import tools.data.input.SeekableLittleEndianAccessor;
public final class PetAutoPotHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
slea.readByte();
slea.readLong();
slea.readInt();
short slot = slea.readShort();
int itemId = slea.readInt();
public final void handlePacket(InPacket p, MapleClient c) {
p.readByte();
p.readLong();
p.readInt();
short slot = p.readShort();
int itemId = p.readInt();
MapleCharacter chr = c.getPlayer();
MapleStatEffect stat = MapleItemInformationProvider.getInstance().getItemEffect(itemId);

View File

@@ -25,24 +25,24 @@ import client.MapleClient;
import client.autoban.AutobanFactory;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import net.packet.InPacket;
import tools.FilePrinter;
import tools.LogHelper;
import tools.PacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class PetChatHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int petId = slea.readInt();
slea.readInt();
slea.readByte();
int act = slea.readByte();
public final void handlePacket(InPacket p, MapleClient c) {
int petId = p.readInt();
p.readInt();
p.readByte();
int act = p.readByte();
byte pet = c.getPlayer().getPetIndex(petId);
if ((pet < 0 || pet > 3) || (act < 0 || act > 9)) {
return;
}
String text = slea.readMapleAsciiString();
String text = p.readString();
if (text.length() > Byte.MAX_VALUE) {
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit with pets.");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to send text with length of " + text.length());

Some files were not shown because too many files have changed in this diff Show More