/* * 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 . */ package com.l2jserver.gameserver.model.actor; import java.util.Collection; import com.l2jserver.gameserver.model.L2ItemInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.network.serverpackets.CharInfo; import com.l2jserver.gameserver.taskmanager.DecayTaskManager; import com.l2jserver.gameserver.templates.chars.L2CharTemplate; import com.l2jserver.gameserver.templates.chars.L2NpcTemplate; import com.l2jserver.gameserver.templates.item.L2Weapon; public abstract class L2Decoy extends L2Character { private L2PcInstance _owner; public L2Decoy(int objectId, L2CharTemplate template, L2PcInstance owner) { super(objectId, template); setInstanceType(InstanceType.L2Decoy); _owner = owner; setXYZInvisible(owner.getX(), owner.getY(), owner.getZ()); setIsInvul(false); } @Override public void onSpawn() { super.onSpawn(); this.getOwner().sendPacket(new CharInfo(this)); } @Override public void updateAbnormalEffect() { Collection plrs = getKnownList().getKnownPlayers().values(); //synchronized (getKnownList().getKnownPlayers()) { for (L2PcInstance player : plrs) { if (player != null) player.sendPacket(new CharInfo(this)); } } } public void stopDecay() { DecayTaskManager.getInstance().cancelDecayTask(this); } @Override public void onDecay() { deleteMe(_owner); } @Override public boolean isAutoAttackable(L2Character attacker) { return _owner.isAutoAttackable(attacker); } @Override public L2ItemInstance getActiveWeaponInstance() { return null; } @Override public L2Weapon getActiveWeaponItem() { return null; } @Override public L2ItemInstance getSecondaryWeaponInstance() { return null; } @Override public L2Weapon getSecondaryWeaponItem() { return null; } public final int getNpcId() { return getTemplate().npcId; } @Override public int getLevel() { return getTemplate().level; } public void deleteMe(L2PcInstance owner) { decayMe(); getKnownList().removeAllKnownObjects(); owner.setDecoy(null); } public synchronized void unSummon(L2PcInstance owner) { if (isVisible() && !isDead()) { if (getWorldRegion() != null) getWorldRegion().removeFromZones(this); owner.setDecoy(null); decayMe(); getKnownList().removeAllKnownObjects(); } } public final L2PcInstance getOwner() { return _owner; } @Override public L2PcInstance getActingPlayer() { return _owner; } @Override public L2NpcTemplate getTemplate() { return (L2NpcTemplate) super.getTemplate(); } @Override public void sendInfo(L2PcInstance activeChar) { activeChar.sendPacket(new CharInfo(this)); } }