From ade50bad5e5d95a9d57fbfb8175e6c5f4fe6a838 Mon Sep 17 00:00:00 2001 From: RubenD96 Date: Thu, 22 Apr 2021 22:03:59 +0200 Subject: [PATCH] Chase functionality (/c name) to warp to the exact location of the target --- src/main/java/client/MapleCharacter.java | 10 +++++++++- .../net/server/channel/handlers/ChangeMapHandler.java | 9 ++++++++- src/main/java/tools/MaplePacketCreator.java | 7 ++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/java/client/MapleCharacter.java b/src/main/java/client/MapleCharacter.java index f3fc390ed5..a6c0ab1094 100644 --- a/src/main/java/client/MapleCharacter.java +++ b/src/main/java/client/MapleCharacter.java @@ -255,6 +255,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { private long lastExpGainTime; private boolean pendingNameChange; //only used to change name on logout, not to be relied upon elsewhere private long loginTime; + private boolean chasing = false; private MapleCharacter() { super.setListener(new AbstractCharacterListener() { @@ -11323,5 +11324,12 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public int getLanguage() { return getClient().getLanguage(); } - + + public boolean isChasing() { + return chasing; + } + + public void setChasing(boolean chasing) { + this.chasing = chasing; + } } diff --git a/src/main/java/net/server/channel/handlers/ChangeMapHandler.java b/src/main/java/net/server/channel/handlers/ChangeMapHandler.java index 2e89f9906f..5ea0701d62 100644 --- a/src/main/java/net/server/channel/handlers/ChangeMapHandler.java +++ b/src/main/java/net/server/channel/handlers/ChangeMapHandler.java @@ -33,6 +33,7 @@ import tools.FilePrinter; import tools.MaplePacketCreator; import tools.data.input.SeekableLittleEndianAccessor; +import java.awt.*; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Calendar; @@ -79,7 +80,13 @@ public final class ChangeMapHandler extends AbstractMaplePacketHandler { String startwp = slea.readMapleAsciiString(); MaplePortal portal = chr.getMap().getPortal(startwp); slea.readByte(); - boolean wheel = slea.readShort() > 0; + boolean wheel = slea.readByte() > 0; + + boolean chasing = slea.readByte() == 1 && chr.isGM(); + if (chasing) { + chr.setChasing(true); + chr.setPosition(new Point(slea.readInt(), slea.readInt())); + } if (targetid != -1) { if (!chr.isAlive()) { diff --git a/src/main/java/tools/MaplePacketCreator.java b/src/main/java/tools/MaplePacketCreator.java index aa65dd57b4..e4aa062ea4 100644 --- a/src/main/java/tools/MaplePacketCreator.java +++ b/src/main/java/tools/MaplePacketCreator.java @@ -1037,7 +1037,12 @@ public class MaplePacketCreator { mplew.writeInt(to.getId()); mplew.write(spawnPoint); mplew.writeShort(chr.getHp()); - mplew.writeBool(false); + mplew.writeBool(chr.isChasing()); + if (chr.isChasing()) { + chr.setChasing(false); + mplew.writeInt(chr.getPosition().x); + mplew.writeInt(chr.getPosition().y); + } mplew.writeLong(getTime(Server.getInstance().getCurrentTime())); return mplew.getPacket(); }