Jump to content
  • 0

Mobs wont despawn // cast error


Question

Posted

i get this error when i kill any creature IG, can someone help me resolve it? i tried to find whats wrong but there are no errors on eclipse and its the 1st time i run into it. 

 

Thanks.

 

Exception in thread "pool-2-thread-150" java.lang.ClassCastException: class org.l2jmobius.gameserver.model.actor.instance.MonsterInstance cannot be cast to class org.l2jmobius.gameserver.model.actor.instance.PlayerInstance (org.l2jmobius.gameserver.model.actor.instance.MonsterInstance and org.l2jmobius.gameserver.model.actor.instance.PlayerInstance are in unnamed module of loader 'app')
	at org.l2jmobius.gameserver.network.serverpackets.Die.<init>(Die.java:58)
	at org.l2jmobius.gameserver.ai.AbstractAI.clientNotifyDead(AbstractAI.java:660)
	at org.l2jmobius.gameserver.ai.CreatureAI.onEvtDead(CreatureAI.java:843)
	at org.l2jmobius.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:337)
	at org.l2jmobius.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:224)
	at org.l2jmobius.gameserver.model.actor.Creature.doDie(Creature.java:1620)
	at org.l2jmobius.gameserver.model.actor.Npc.doDie(Npc.java:893)
	at org.l2jmobius.gameserver.model.actor.Attackable.doDie(Attackable.java:294)
	at org.l2jmobius.gameserver.model.actor.status.CreatureStatus.reduceHp(CreatureStatus.java:188)
	at org.l2jmobius.gameserver.model.actor.status.NpcStatus.reduceHp(NpcStatus.java:57)
	at org.l2jmobius.gameserver.model.actor.status.AttackableStatus.reduceHp(AttackableStatus.java:65)
	at org.l2jmobius.gameserver.model.actor.Creature.reduceCurrentHp(Creature.java:4516)
	at org.l2jmobius.gameserver.model.actor.Attackable.reduceCurrentHp(Attackable.java:268)
	at org.l2jmobius.gameserver.model.actor.Creature.doAttack(Creature.java:4382)
	at org.l2jmobius.gameserver.model.actor.Creature.onHitTarget(Creature.java:3744)
	at org.l2jmobius.gameserver.model.actor.Creature.onFirstHitTimeForDual(Creature.java:3706)
	at org.l2jmobius.gameserver.model.actor.Creature.lambda$doAutoAttack$9(Creature.java:1120)
	at org.l2jmobius.commons.concurrent.RunnableWrapper.run(RunnableWrapper.java:38)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)

 

4 answers to this question

Recommended Posts

  • 0
Posted
/*
 * This file is part of the L2J Mobius project.
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package org.l2jmobius.gameserver.network.serverpackets;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager;
import org.l2jmobius.gameserver.model.AccessLevel;
import org.l2jmobius.gameserver.model.SiegeClan;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.entity.Castle;
import org.l2jmobius.gameserver.model.entity.Fort;
import org.l2jmobius.gameserver.model.entity.GameEvent;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.OutgoingPackets;

/**
 * @author UnAfraid, Nos
 */
public class Die implements IClientOutgoingPacket
{
	private final int _objectId;
	private boolean _toVillage;
	private boolean _toClanHall;
	private boolean _toCastle;
	private boolean _toOutpost;
	private final boolean _isSweepable;
	private boolean _useFeather;
	private boolean _toFortress;
	private boolean _hideAnimation;
	private List<Integer> _items = null;
	private boolean _itemsEnabled;
	private AccessLevel _access;
	private final int _charObjId;
	private Clan _clan;
	Creature _activeChar;
	@SuppressWarnings("unused")
	private boolean _canTeleport;
	
	public Die(Creature creature)
	{
		_activeChar = creature;
		if (creature instanceof PlayerInstance)
		{
			PlayerInstance player = (PlayerInstance) creature;
			_access = player.getAccessLevel();
			_clan = player.getClan();
		}
		
		_charObjId = creature.getObjectId();
		_canTeleport = !(((creature instanceof PlayerInstance) && GameEvent.isOn() && GameEvent.isPlayerParticipant(_charObjId)) || creature.isPendingRevive());
		
		if (_activeChar.isOnEvent())
		{
			_canTeleport = false;
		}
		
		_objectId = creature.getObjectId();
		if (creature.isPlayer())
		{
			final Clan clan = creature.getActingPlayer().getClan();
			boolean isInCastleDefense = false;
			boolean isInFortDefense = false;
			SiegeClan siegeClan = null;
			final Castle castle = CastleManager.getInstance().getCastle(creature);
			final Fort fort = FortManager.getInstance().getFort(creature);
			if ((castle != null) && castle.getSiege().isInProgress())
			{
				siegeClan = castle.getSiege().getAttackerClan(clan);
				isInCastleDefense = (siegeClan == null) && castle.getSiege().checkIsDefender(clan);
			}
			else if ((fort != null) && fort.getSiege().isInProgress())
			{
				siegeClan = fort.getSiege().getAttackerClan(clan);
				isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan);
			}
			_toVillage = creature.canRevive() && !creature.isPendingRevive();
			_toClanHall = (clan != null) && (clan.getHideoutId() > 0);
			_toCastle = ((clan != null) && (clan.getCastleId() > 0)) || isInCastleDefense;
			_toOutpost = ((siegeClan != null) && !isInCastleDefense && !isInFortDefense && !siegeClan.getFlag().isEmpty());
			_useFeather = creature.getAccessLevel().allowFixedRes() || creature.getInventory().haveItemForSelfResurrection();
			_toFortress = ((clan != null) && (clan.getFortId() > 0)) || isInFortDefense;
		}
		_isSweepable = creature.isAttackable() && creature.isSweepActive();
	}
	
	public void setHideAnimation(boolean value)
	{
		_hideAnimation = value;
	}
	
	public void addItem(int itemId)
	{
		if (_items == null)
		{
			_items = new ArrayList<>(8);
		}
		
		if (_items.size() < 8)
		{
			_items.add(itemId);
		}
		else
		{
			throw new IndexOutOfBoundsException("Die packet doesn't support more then 8 items!");
		}
	}
	
	public List<Integer> getItems()
	{
		return _items != null ? _items : Collections.emptyList();
	}
	
	public void setItemsEnabled(boolean value)
	{
		_itemsEnabled = value;
	}
	
	@Override
	public boolean write(PacketWriter packet)
	{
		OutgoingPackets.DIE.writeId(packet);
		
		packet.writeD(_objectId);
		if (_activeChar.isInsideZone(ZoneId.PVP_FLAG))
		{
			packet.writeD(0);
			packet.writeD(_canTeleport ? 0x01 : 0x00);
			packet.writeD(0);
			packet.writeD(0);
			packet.writeD(0);
			packet.writeD(0);
			packet.writeD(0);
			packet.writeD(0);
		}
		else
		{
			packet.writeD(_toVillage ? 0x01 : 0x00);
			packet.writeD(_toClanHall ? 0x01 : 0x00);
			packet.writeD(_toCastle ? 0x01 : 0x00);
			packet.writeD(_toOutpost ? 0x01 : 0x00);
			packet.writeD(_isSweepable ? 0x01 : 0x00);
			packet.writeD(_useFeather ? 0x01 : 0x00);
			packet.writeD(_toFortress ? 0x01 : 0x00);
			
			packet.writeD(0x00); // Disables use Feather button for X seconds
			packet.writeD(0x00); // Adventure's Song
			packet.writeC(_hideAnimation ? 0x01 : 0x00);
			
			packet.writeD(_itemsEnabled ? 0x01 : 0x00);
			packet.writeD(getItems().size());
			getItems().forEach(packet::writeD);
		}
		return true;
		
	}
}
12 minutes ago, An4rchy said:

Show Die.java write() method so we know why it's trying to cast Monster to Player.

 

  • 0
Posted (edited)
7 minutes ago, Mobius said:

These sources are old AF.

Use latest?

From what hole you dug these up?

i know that these are old but im working on something after a year and i want to get it done before i have to move everything to the newest release (trying to include solo leveling (manga) story/game system as best as posible)

 

Edited by Drazeal

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

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock