Jump to content

Recommended Posts

Posted

I know many people have struggled with this specific issue and had trouble setting up the correct behavior for Toggle skills in aCis. By default, toggles interrupt the player's movement (retail-like), which often feels clunky to players who prefer a smoother, more modern experience.

I've prepared a clean solution that eliminates this "freeze" and allows for fluid movement while toggling your auras. Below is the code on how to achieve this. Hope it helps!

Changes in PlayerAI.java:

  • Modified doActiveIntention to properly update the active state without stalling.

  • Removed the forced stop() during toggle casting.

  • Added a MoveToLocation broadcast to ensure other players see your movement correctly (prevents visual "teleporting" or desync).

Best regards 😃

diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/ai/type/PlayerAI.java b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/ai/type/PlayerAI.java
index ba0425a..1b2658d 100644
--- a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/ai/type/PlayerAI.java
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/ai/type/PlayerAI.java
@@ -28,6 +28,7 @@
 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
 import net.sf.l2j.gameserver.network.serverpackets.AutoAttackStart;
 import net.sf.l2j.gameserver.network.serverpackets.ChairSit;
+import net.sf.l2j.gameserver.network.serverpackets.MoveToLocation;
 import net.sf.l2j.gameserver.network.serverpackets.MoveToLocationInVehicle;
 import net.sf.l2j.gameserver.network.serverpackets.MoveToPawn;
 import net.sf.l2j.gameserver.network.serverpackets.StopMove;
@@ -159,7 +160,10 @@
     @Override
     public synchronized void doActiveIntention()
     {
-        doIdleIntention();
+        prepareIntention();
+        _currentIntention.updateAsActive();
+        if (!getActor().isMoving())
+            thinkIdle();
     }
     
     @Override
@@ -280,8 +284,9 @@
         
         if (skill.isToggle())
         {
-            getActor().getMove().stop();
             getActor().getCast().doToggleCast(skill, target);
+            if (getActor().isMoving())
+                getActor().broadcastPacket(new MoveToLocation(getActor()));
         }
         else
         {


https://pastebin.com/twZujZ3Y

Posted
1 hour ago, Medson™ said:

I know many people have struggled with this specific issue and had trouble setting up the correct behavior for Toggle skills in aCis. By default, toggles interrupt the player's movement (retail-like), which often feels clunky to players who prefer a smoother, more modern experience.

I've prepared a clean solution that eliminates this "freeze" and allows for fluid movement while toggling your auras. Below is the code on how to achieve this. Hope it helps!

Changes in PlayerAI.java:

  • Modified doActiveIntention to properly update the active state without stalling.

  • Removed the forced stop() during toggle casting.

  • Added a MoveToLocation broadcast to ensure other players see your movement correctly (prevents visual "teleporting" or desync).

Best regards 😃

diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/ai/type/PlayerAI.java b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/ai/type/PlayerAI.java
index ba0425a..1b2658d 100644
--- a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/ai/type/PlayerAI.java
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/ai/type/PlayerAI.java
@@ -28,6 +28,7 @@
 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
 import net.sf.l2j.gameserver.network.serverpackets.AutoAttackStart;
 import net.sf.l2j.gameserver.network.serverpackets.ChairSit;
+import net.sf.l2j.gameserver.network.serverpackets.MoveToLocation;
 import net.sf.l2j.gameserver.network.serverpackets.MoveToLocationInVehicle;
 import net.sf.l2j.gameserver.network.serverpackets.MoveToPawn;
 import net.sf.l2j.gameserver.network.serverpackets.StopMove;
@@ -159,7 +160,10 @@
     @Override
     public synchronized void doActiveIntention()
     {
-        doIdleIntention();
+        prepareIntention();
+        _currentIntention.updateAsActive();
+        if (!getActor().isMoving())
+            thinkIdle();
     }
     
     @Override
@@ -280,8 +284,9 @@
         
         if (skill.isToggle())
         {
-            getActor().getMove().stop();
             getActor().getCast().doToggleCast(skill, target);
+            if (getActor().isMoving())
+                getActor().broadcastPacket(new MoveToLocation(getActor()));
         }
         else
         {


https://pastebin.com/twZujZ3Y

 

I think that solves the freeze thing, anyway great share! 

Posted

this is the first time i hear that anyone struggles with something that works correctly...
your "solution" is basically a bug.
and you forgot the most important thing: if you do something like that - which is changing right behaviour with wrong - it must be possible to turn it on/off

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..