diff --git a/gameserver/build.gradle b/gameserver/build.gradle index ef38dd37..cbfef717 100644 --- a/gameserver/build.gradle +++ b/gameserver/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'com.shnok.javaserver' -version '0.0.3' +version '0.0.4' repositories { mavenCentral() diff --git a/gameserver/conf/hexid.txt b/gameserver/conf/hexid.txt index 275feb44..1b705521 100644 --- a/gameserver/conf/hexid.txt +++ b/gameserver/conf/hexid.txt @@ -1,4 +1,4 @@ #the hexID to auth into login -#Wed Jul 03 11:17:46 SGT 2024 +#Sun Jul 07 17:31:41 SGT 2024 HexID=81a8ba90db0e77d303397388e25ecefa ServerID=1 diff --git a/gameserver/conf/server.properties b/gameserver/conf/server.properties index adb7939c..97ce1d68 100644 --- a/gameserver/conf/server.properties +++ b/gameserver/conf/server.properties @@ -139,8 +139,8 @@ server.world.geodata.pathfinder.simplify-path=true # --------------------------------------------------------------------------- # Logger # --------------------------------------------------------------------------- -logger.print.server-packets=true -logger.print.client-packets=true +logger.print.server-packets=false +logger.print.client-packets=false logger.print.cryptography=false logger.print.pathfinder=false logger.print.world-region=false diff --git a/gameserver/db/l2-unity.mv.db b/gameserver/db/l2-unity.mv.db index 5bc75395..267f1a58 100644 Binary files a/gameserver/db/l2-unity.mv.db and b/gameserver/db/l2-unity.mv.db differ diff --git a/gameserver/src/main/java/com/shnok/javaserver/dto/external/serverpackets/UserInfoPacket.java b/gameserver/src/main/java/com/shnok/javaserver/dto/external/serverpackets/UserInfoPacket.java index 4fb68b77..9b0e6036 100644 --- a/gameserver/src/main/java/com/shnok/javaserver/dto/external/serverpackets/UserInfoPacket.java +++ b/gameserver/src/main/java/com/shnok/javaserver/dto/external/serverpackets/UserInfoPacket.java @@ -40,7 +40,7 @@ public UserInfoPacket(PlayerInstance player) { // Gear for (byte slot : PAPERDOLL_ORDER) { - player.getInventory().getEquippedItemId(Objects.requireNonNull(ItemSlot.getSlot(slot))); + writeI(player.getInventory().getEquippedItemId(Objects.requireNonNull(ItemSlot.getSlot(slot)))); } buildPacket(); diff --git a/gameserver/src/main/java/com/shnok/javaserver/thread/ClientPacketHandlerThread.java b/gameserver/src/main/java/com/shnok/javaserver/thread/ClientPacketHandlerThread.java index 78c3bdf6..cd7e2589 100644 --- a/gameserver/src/main/java/com/shnok/javaserver/thread/ClientPacketHandlerThread.java +++ b/gameserver/src/main/java/com/shnok/javaserver/thread/ClientPacketHandlerThread.java @@ -259,13 +259,19 @@ private void onRequestAttack() { private void onRequestCharacterMoveDirection() { RequestCharacterMoveDirection packet = new RequestCharacterMoveDirection(data); if((client.getCurrentPlayer().isAttacking() || - client.getCurrentPlayer().getAi().getIntention() == Intention.INTENTION_ATTACK) && // if player attack animation is playing + client.getCurrentPlayer().getAi().getIntention() == Intention.INTENTION_ATTACK)) { // if player attack animation is playing //client.getCurrentPlayer().getAi().getAttackTarget() != null && // if player has an attack target - packet.getDirection().getX() != 0 && packet.getDirection().getZ() != 0) { // if direction is not zero + //&& packet.getDirection().getX() != 0 && packet.getDirection().getZ() != 0) { // if direction is not zero log.warn("[{}] Player moved ({}), stop attacking. ", client.getCurrentPlayer().getId(), packet.getDirection()); client.getCurrentPlayer().getAi().notifyEvent(Event.CANCEL); } + if(packet.getDirection().getX() == 0 && packet.getDirection().getZ() == 0) { + client.getCurrentPlayer().getAi().setIntention(Intention.INTENTION_IDLE); + } else { + client.getCurrentPlayer().getAi().setIntention(Intention.INTENTION_MOVE_TO); + } + // Notify known list ObjectDirectionPacket objectDirectionPacket = new ObjectDirectionPacket( client.getCurrentPlayer().getId(), client.getCurrentPlayer().getStatus().getMoveSpeed(), packet.getDirection()); diff --git a/gameserver/src/main/java/com/shnok/javaserver/thread/GameClientThread.java b/gameserver/src/main/java/com/shnok/javaserver/thread/GameClientThread.java index 2a4883e6..a4fb331a 100644 --- a/gameserver/src/main/java/com/shnok/javaserver/thread/GameClientThread.java +++ b/gameserver/src/main/java/com/shnok/javaserver/thread/GameClientThread.java @@ -140,29 +140,33 @@ public boolean sendPacket(SendablePacket packet) { } } + byte[] data = packet.getData(); + if(isCryptEnabled()) { - NewCrypt.appendChecksum(packet.getData()); + data = Arrays.copyOf(packet.getData(), packet.getData().length); + + NewCrypt.appendChecksum(data); if(printCryptography) { - log.debug("---> [CLIENT] Clear packet {} : {}", packet.getData().length, - Arrays.toString(packet.getData())); + log.debug("---> [CLIENT] Clear packet {} : {}", data.length, + Arrays.toString(data)); } - gameCrypt.encrypt(packet.getData(), 0, packet.getData().length); + gameCrypt.encrypt(data, 0, data.length); if(printCryptography) { - log.debug("---> [CLIENT] Encrypted packet {} : {}", packet.getData().length, - Arrays.toString(packet.getData())); + log.debug("---> [CLIENT] Encrypted packet {} : {}", data.length, + Arrays.toString(data)); } } else if(printCryptography) { - log.debug("---> [CLIENT] Clear packet {} : {}", packet.getData().length, - Arrays.toString(packet.getData())); + log.debug("---> [CLIENT] Clear packet {} : {}", data.length, + Arrays.toString(data)); } try { synchronized (out) { - out.write((byte)(packet.getData().length) & 0xff); - out.write((byte)((packet.getData().length) >> 8) & 0xff); + out.write((byte)(data.length) & 0xff); + out.write((byte)((data.length) >> 8) & 0xff); - for (byte b : packet.getData()) { + for (byte b : data) { out.write(b & 0xFF); } out.flush(); diff --git a/gameserver/src/main/java/com/shnok/javaserver/thread/ai/BaseAI.java b/gameserver/src/main/java/com/shnok/javaserver/thread/ai/BaseAI.java index 218f4fbe..f4b37836 100644 --- a/gameserver/src/main/java/com/shnok/javaserver/thread/ai/BaseAI.java +++ b/gameserver/src/main/java/com/shnok/javaserver/thread/ai/BaseAI.java @@ -46,6 +46,9 @@ public BaseAI(Entity owner) { ========================= */ public void notifyEvent(Event evt) { + if(server.printAi()) { + log.debug("[AI][{}] New event: {}", getOwner().getId(), evt); + } notifyEvent(evt, null); } diff --git a/gameserver/src/main/java/com/shnok/javaserver/thread/ai/PlayerAI.java b/gameserver/src/main/java/com/shnok/javaserver/thread/ai/PlayerAI.java index ea3b8e3d..8f8dee81 100644 --- a/gameserver/src/main/java/com/shnok/javaserver/thread/ai/PlayerAI.java +++ b/gameserver/src/main/java/com/shnok/javaserver/thread/ai/PlayerAI.java @@ -81,7 +81,8 @@ protected void onEvtReadyToAct() { @Override protected void onEvtCancel() { - // setIntention(Intention.INTENTION_IDLE); - clientStopAutoAttack(); + if(getIntention() == Intention.INTENTION_ATTACK) { + clientStopAutoAttack(); + } } }