Exception in thread "AISTPool-5" java.lang.StackOverflowError
at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.startWaterTask(L2PcInstance.java:9109)
at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.checkWaterState(L2PcInstance.java:9122)
at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.revalidateZone(L2PcInstance.java:1540)
at net.sf.l2j.gameserver.ai.L2CharacterAI.onEvtArrived(L2CharacterAI.java:626)
at net.sf.l2j.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:373)
at net.sf.l2j.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:296)
at net.sf.l2j.gameserver.model.actor.L2Character.moveToLocation(L2Character.java:3586)
at net.sf.l2j.gameserver.model.actor.L2Character$AIAccessor.moveTo(L2Character.java:2819)
at net.sf.l2j.gameserver.ai.AbstractAI.moveTo(AbstractAI.java:538)
at net.sf.l2j.gameserver.ai.AbstractAI.moveToPawn(AbstractAI.java:494)
at net.sf.l2j.gameserver.ai.L2CharacterAI.maybeMoveToPawn(L2CharacterAI.java:877)
at net.sf.l2j.gameserver.ai.L2PlayerAI.thinkCast(L2PlayerAI.java:235)
at net.sf.l2j.gameserver.ai.L2PlayerAI.onEvtThink(L2PlayerAI.java:312)
at net.sf.l2j.gameserver.ai.L2CharacterAI.onEvtArrived(L2CharacterAI.java:641)
at net.sf.l2j.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:373)
at net.sf.l2j.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:296)
at net.sf.l2j.gameserver.model.actor.L2Character.moveToLocation(L2Character.java:3586)
at net.sf.l2j.gameserver.model.actor.L2Character$AIAccessor.moveTo(L2Character.java:2819)
at net.sf.l2j.gameserver.ai.AbstractAI.moveTo(AbstractAI.java:538)
at net.sf.l2j.gameserver.ai.AbstractAI.moveToPawn(AbstractAI.java:494)
at net.sf.l2j.gameserver.ai.L2CharacterAI.maybeMoveToPawn(L2CharacterAI.java:877)
at net.sf.l2j.gameserver.ai.L2PlayerAI.thinkCast(L2PlayerAI.java:235)
at net.sf.l2j.gameserver.ai.L2PlayerAI.onEvtThink(L2PlayerAI.java:312)
at net.sf.l2j.gameserver.ai.L2CharacterAI.onEvtArrived(L2CharacterAI.java:641)
at net.sf.l2j.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:373)
at net.sf.l2j.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:296)
and 100 same error like last block
L2Character.java:3586 i marked it with plus "+"
....
if (offset > 0 || distance < 1)
{
// approximation for moving closer when z coordinates are different
// TODO: handle Z axis movement better
offset -= Math.abs(dz);
if (offset < 5)
offset = 5;
// If no distance to go through, the movement is canceled
if (distance < 1 || distance - offset <= 0)
{
if (Config.DEBUG)
_log.fine("already in range, no movement needed.");
// Notify the AI that the L2Character is arrived at destination
+ getAI().notifyEvent(CtrlEvent.EVT_ARRIVED);
return;
}
....
L2Character.java:2819
public void moveTo(int x, int y, int z, int offset)
{
+ moveToLocation(x, y, z, offset);
}
AbstractAI.java:538
protected void moveTo(int x, int y, int z, int offset)
{
// Check if actor can move
if (_actor.isMovementDisabled())
{
_actor.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
// Set AI movement data
_clientMoving = true;
if (_accessor == null)
return;
// Calculate movement data for a move to location action and add the actor to
+ _accessor.moveTo(x, y, z, offset);
if (!_actor.isMoving())
{
_actor.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
// Send a Server->Client packet CharMoveToLocation to the actor and all L2PcInstance in
_actor.broadcastPacket(new MoveToLocation(_actor));
}
protected boolean maybeMoveToPawn(L2Object target, int offset)
{
if (target == null || offset < 0) // skill radius -1
return false;
offset += _actor.getTemplate().getCollisionRadius();
if (target instanceof L2Character)
offset += ((L2Character) target).getTemplate().getCollisionRadius();
if (!_actor.isInsideRadius(target, offset, false, false))
{
if (getFollowTarget() != null)
{
int foffset = offset + (((L2Character) target).isMoving() ? 100 : 0);
// allow larger hit range when the target is moving (check is run only once per second)
if (!_actor.isInsideRadius(target, foffset, false, false))
{
if (!_actor.isAttackingNow() || _actor instanceof L2Summon)
+ moveToPawn(target, offset);
return true;
}
stopFollow();
return false;
}
if (_actor.isMovementDisabled() && !(_actor instanceof L2Attackable))
{
if (getIntention() == CtrlIntention.ATTACK)
setIntention(CtrlIntention.IDLE);
return true;
}
// If not running, set the L2Character movement type to run and send Server->Client packet ChangeMoveType to all others L2PcInstance
if (!(this instanceof L2PlayerAI) && !(this instanceof L2SummonAI))
_actor.setRunning();
if ((target instanceof L2Character) && !(target instanceof L2DoorInstance))
startFollow((L2Character) target, offset);
else
{
// Move the actor to Pawn server side AND client side by sending Server->Client packet MoveToPawn (broadcast)
moveToPawn(target, offset);
}
return true;
}
stopFollow();
return false;
}
L2PlayerAI.java:235
private void thinkCast()
{
L2Character target = (L2Character) getTarget();
if (Config.DEBUG)
_log.warning("L2PlayerAI: thinkCast -> Start");
if (_skill.getTargetType() == SkillTargetType.TARGET_GROUND && _actor instanceof L2PcInstance)
{
if (maybeMoveToPosition(((L2PcInstance) _actor).getCurrentSkillWorldPosition(), _skill.getCastRange()))
{
_actor.setIsCastingNow(false);
return;
}
}
else
{
if (checkTargetLost(target))
{
// Notify the target
if (_skill.isOffensive() && getTarget() != null)
setTarget(null);
_actor.setIsCastingNow(false);
return;
}
+ if (target != null && maybeMoveToPawn(target, _skill.getCastRange()))
{
_actor.setIsCastingNow(false);
return;
}
}
L2PlayerAI.java:312
protected void onEvtThink()
{
// Check if the actor can't use skills and if a thinking action isn't already in progress
if (_thinking && getIntention() != CtrlIntention.CAST) // casting must always continue
return;
// Start thinking action
_thinking = true;
try
{
// Manage AI thoughts
switch (getIntention())
{
case ATTACK:
thinkAttack();
break;
case CAST:
+ thinkCast();
break;
case PICK_UP:
thinkPickUp();
break;
case INTERACT:
thinkInteract();
break;
}
}
finally
{
// Stop thinking action
_thinking = false;
}
}
L2CharacterAI.java:641
protected void onEvtArrived()
{
_accessor.getActor().revalidateZone(true);
if (_accessor.getActor().moveToNextRoutePoint())
return;
if (_accessor.getActor() instanceof L2Attackable)
((L2Attackable) _accessor.getActor()).setIsReturningToSpawnPoint(false);
clientStoppedMoving();
// If the Intention was MOVE_TO, set the Intention to ACTIVE
if (getIntention() == CtrlIntention.MOVE_TO)
setIntention(CtrlIntention.ACTIVE);
// Launch actions corresponding to the Event Think
+ onEvtThink();
}
AbstractAI.java:373
...
case EVT_ARRIVED:
if (!_actor.isCastingNow() && !_actor.isCastingSimultaneouslyNow())
+ onEvtArrived();
break;
...
AbstractAI.java:296
public final void notifyEvent(CtrlEvent evt)
{
+ notifyEvent(evt, null, null);
}
i get this error not only with startWaterTask i get and with others, and same error 14000 lines... one time per day.
Hello everyone, we are one of the top gaming currency stores. We work exclusively with top projects.
If you are interested in anything like Adena, Coins, Equip, write to us
Discord - pchelacoin
Telegram - https://t.me/ipchelacoin
BOHPTS, KETRAWARS, EURO-PVP, L2REBORN, E-GLOBAL, LA2DREAM
TOP PRICE !!!!!!!
L2Elixir – Patch 4 Is Live!
We’re working non-stop, day and night, to deliver the best possible quality and bring back what made L2Elixir special. This project is built with passion, not shortcuts — for the old-school players who remember, and the new ones who want to experience it properly. Thank you for being part of the journey. Together, we’re making L2Elixir great again ❤️ The legends never fade.
⚙️ General
Enabled Class Change service (same class type only)
ALT + B → Services → Character Development
Enabled Shift + Click on Treasure Chests Players can now identify real chests (Adena, scroll drops) and use Key / Unlock
Event deaths now cancel only debuffs, All self buffs are preserved, fixes issues with Root and similar effects
Bladedancer class can now log in even when Max Clients (2) is reached. Since an active Bladedancer is not available for every damage dealer and some players tried to abuse this via VPN or a second PC, this feature was added to keep things fair. protections applies, requires testing!
🎒 Items
Crystallizing enchanted items now gives the correct increased crystal amount (retail-like behavior)
Removed Agathion Seal Bracelet: Rudolph from Santa rewards (Gracia Final item)
Added Dualsword Craft Stamp into Milestone Exchange list
🧙 Skills
Fixed Banish Undead lethal chance
Hot Springs Malaria and similar effects now level up faster while being attacked
Question
wongerlt
L2J aCis.
Error:
Exception in thread "AISTPool-5" java.lang.StackOverflowError at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.startWaterTask(L2PcInstance.java:9109) at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.checkWaterState(L2PcInstance.java:9122) at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.revalidateZone(L2PcInstance.java:1540) at net.sf.l2j.gameserver.ai.L2CharacterAI.onEvtArrived(L2CharacterAI.java:626) at net.sf.l2j.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:373) at net.sf.l2j.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:296) at net.sf.l2j.gameserver.model.actor.L2Character.moveToLocation(L2Character.java:3586) at net.sf.l2j.gameserver.model.actor.L2Character$AIAccessor.moveTo(L2Character.java:2819) at net.sf.l2j.gameserver.ai.AbstractAI.moveTo(AbstractAI.java:538) at net.sf.l2j.gameserver.ai.AbstractAI.moveToPawn(AbstractAI.java:494) at net.sf.l2j.gameserver.ai.L2CharacterAI.maybeMoveToPawn(L2CharacterAI.java:877) at net.sf.l2j.gameserver.ai.L2PlayerAI.thinkCast(L2PlayerAI.java:235) at net.sf.l2j.gameserver.ai.L2PlayerAI.onEvtThink(L2PlayerAI.java:312) at net.sf.l2j.gameserver.ai.L2CharacterAI.onEvtArrived(L2CharacterAI.java:641) at net.sf.l2j.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:373) at net.sf.l2j.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:296) at net.sf.l2j.gameserver.model.actor.L2Character.moveToLocation(L2Character.java:3586) at net.sf.l2j.gameserver.model.actor.L2Character$AIAccessor.moveTo(L2Character.java:2819) at net.sf.l2j.gameserver.ai.AbstractAI.moveTo(AbstractAI.java:538) at net.sf.l2j.gameserver.ai.AbstractAI.moveToPawn(AbstractAI.java:494) at net.sf.l2j.gameserver.ai.L2CharacterAI.maybeMoveToPawn(L2CharacterAI.java:877) at net.sf.l2j.gameserver.ai.L2PlayerAI.thinkCast(L2PlayerAI.java:235) at net.sf.l2j.gameserver.ai.L2PlayerAI.onEvtThink(L2PlayerAI.java:312) at net.sf.l2j.gameserver.ai.L2CharacterAI.onEvtArrived(L2CharacterAI.java:641) at net.sf.l2j.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:373) at net.sf.l2j.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:296) and 100 same error like last blockL2Character.java:3586 i marked it with plus "+"
.... if (offset > 0 || distance < 1) { // approximation for moving closer when z coordinates are different // TODO: handle Z axis movement better offset -= Math.abs(dz); if (offset < 5) offset = 5; // If no distance to go through, the movement is canceled if (distance < 1 || distance - offset <= 0) { if (Config.DEBUG) _log.fine("already in range, no movement needed."); // Notify the AI that the L2Character is arrived at destination + getAI().notifyEvent(CtrlEvent.EVT_ARRIVED); return; } ....L2Character.java:2819
public void moveTo(int x, int y, int z, int offset) { + moveToLocation(x, y, z, offset); }AbstractAI.java:538
protected void moveTo(int x, int y, int z, int offset) { // Check if actor can move if (_actor.isMovementDisabled()) { _actor.sendPacket(ActionFailed.STATIC_PACKET); return; } // Set AI movement data _clientMoving = true; if (_accessor == null) return; // Calculate movement data for a move to location action and add the actor to + _accessor.moveTo(x, y, z, offset); if (!_actor.isMoving()) { _actor.sendPacket(ActionFailed.STATIC_PACKET); return; } // Send a Server->Client packet CharMoveToLocation to the actor and all L2PcInstance in _actor.broadcastPacket(new MoveToLocation(_actor)); }AbstractAI.java:494
protected void moveToPawn(L2Object pawn, int offset) { if (_clientMoving && _target == pawn && _actor.isOnGeodataPath() && GameTimeController.getGameTicks() < _moveToPawnTimeout) return; _target = pawn; if (_target == null) return; _moveToPawnTimeout = GameTimeController.getGameTicks() + 20; + moveTo(_target.getX(), _target.getY(), _target.getZ(), offset = offset < 10 ? 10 : offset); }L2CharacterAI.java:877
protected boolean maybeMoveToPawn(L2Object target, int offset) { if (target == null || offset < 0) // skill radius -1 return false; offset += _actor.getTemplate().getCollisionRadius(); if (target instanceof L2Character) offset += ((L2Character) target).getTemplate().getCollisionRadius(); if (!_actor.isInsideRadius(target, offset, false, false)) { if (getFollowTarget() != null) { int foffset = offset + (((L2Character) target).isMoving() ? 100 : 0); // allow larger hit range when the target is moving (check is run only once per second) if (!_actor.isInsideRadius(target, foffset, false, false)) { if (!_actor.isAttackingNow() || _actor instanceof L2Summon) + moveToPawn(target, offset); return true; } stopFollow(); return false; } if (_actor.isMovementDisabled() && !(_actor instanceof L2Attackable)) { if (getIntention() == CtrlIntention.ATTACK) setIntention(CtrlIntention.IDLE); return true; } // If not running, set the L2Character movement type to run and send Server->Client packet ChangeMoveType to all others L2PcInstance if (!(this instanceof L2PlayerAI) && !(this instanceof L2SummonAI)) _actor.setRunning(); if ((target instanceof L2Character) && !(target instanceof L2DoorInstance)) startFollow((L2Character) target, offset); else { // Move the actor to Pawn server side AND client side by sending Server->Client packet MoveToPawn (broadcast) moveToPawn(target, offset); } return true; } stopFollow(); return false; }L2PlayerAI.java:235
private void thinkCast() { L2Character target = (L2Character) getTarget(); if (Config.DEBUG) _log.warning("L2PlayerAI: thinkCast -> Start"); if (_skill.getTargetType() == SkillTargetType.TARGET_GROUND && _actor instanceof L2PcInstance) { if (maybeMoveToPosition(((L2PcInstance) _actor).getCurrentSkillWorldPosition(), _skill.getCastRange())) { _actor.setIsCastingNow(false); return; } } else { if (checkTargetLost(target)) { // Notify the target if (_skill.isOffensive() && getTarget() != null) setTarget(null); _actor.setIsCastingNow(false); return; } + if (target != null && maybeMoveToPawn(target, _skill.getCastRange())) { _actor.setIsCastingNow(false); return; } }L2PlayerAI.java:312
protected void onEvtThink() { // Check if the actor can't use skills and if a thinking action isn't already in progress if (_thinking && getIntention() != CtrlIntention.CAST) // casting must always continue return; // Start thinking action _thinking = true; try { // Manage AI thoughts switch (getIntention()) { case ATTACK: thinkAttack(); break; case CAST: + thinkCast(); break; case PICK_UP: thinkPickUp(); break; case INTERACT: thinkInteract(); break; } } finally { // Stop thinking action _thinking = false; } }L2CharacterAI.java:641
protected void onEvtArrived() { _accessor.getActor().revalidateZone(true); if (_accessor.getActor().moveToNextRoutePoint()) return; if (_accessor.getActor() instanceof L2Attackable) ((L2Attackable) _accessor.getActor()).setIsReturningToSpawnPoint(false); clientStoppedMoving(); // If the Intention was MOVE_TO, set the Intention to ACTIVE if (getIntention() == CtrlIntention.MOVE_TO) setIntention(CtrlIntention.ACTIVE); // Launch actions corresponding to the Event Think + onEvtThink(); }AbstractAI.java:373
AbstractAI.java:296
public final void notifyEvent(CtrlEvent evt) { + notifyEvent(evt, null, null); }i get this error not only with startWaterTask i get and with others, and same error 14000 lines... one time per day.
Maybe anyone know how to solve this problem?
23 answers to this question
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now