Jump to content
  • 0

Need Help To Fix In Exception In Thread "aistpool-5".


Question

Posted

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 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));
	}

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

...
			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.

 

Maybe anyone know how to solve this problem?
 

Recommended Posts

  • 0
Posted (edited)

Yeah, that overflows the call stack. It's a very powerful techique, which can kill your app if not used correctly. :lol:

Edited by Tessa
  • 0
Posted

Yeah, that overflows the call stack. It's a very powerful techique, which can kill your app if not used correctly. :lol:

maybe you see it in code in me thread? :D

  • 0
Posted (edited)

No, I'm not familiar with aCis's design.

hmm i think java is java just changed function name and make little different from other packs :D

i will fixed it self if i know how to start this bug in game to see :D

Edited by wongerlt
  • 0
Posted

Well, you need to get familiar with the software you working on, before you try to fix something. :D

Bullshit. Tell this to ganja..  :happyforever:

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...