PHP код:
package l2p.gameserver.serverpackets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import l2p.gameserver.model.Effect;
import l2p.gameserver.model.IconEffect;
import l2p.gameserver.model.Player;
import l2p.gameserver.utils.EffectsComparator;
/**
* @author ALF
* @data 07.02.2012
*/
public class ExAbnormalStatusUpdateFromTargetPacket extends L2GameServerPacket implements IconEffectPacket
{
private int objId;
private List<IconEffect> _effects;
public ExAbnormalStatusUpdateFromTargetPacket(Player target)
{
_effects = new ArrayList<IconEffect>();
objId = target.getObjectId();
Effect[] effects = target.getEffectList().getAllFirstEffects();
Arrays.sort(effects, EffectsComparator.getInstance());
for(Effect effect : effects)
if(effect != null && effect.isInUse())
effect.addIcon(this);
}
@Override
protected void writeImpl()
{
writeEx(0xE5);
writeD(objId);
writeH(_effects.size());
for (IconEffect e : _effects)
{
writeD(e.getSkillId());
writeH(e.getLevel());
writeD(0x00);
writeD(e.getDuration());
writeD(0x00);
}
}
@Override
public void addIconEffect(int skillId, int level, int duration)
{
_effects.add(new IconEffect(skillId, level, duration));
}
}
PHP код:
package l2p.gameserver.serverpackets;
/**
* @author ALF
* @data 07.02.2012
* Интерфейс для пакетов, требующих отображение иконок эффектов
*/
public interface IconEffectPacket
{
/**
* @param skillId
* @param level
* @param duration
*/
void addIconEffect(int skillId, int level, int duration);
}
PHP код:
public void addIcon(IconEffectPacket ps)
{
if(!isActive() || isHidden())
return;
int duration = _skill.isToggle() ? AbnormalStatusUpdate.INFINITIVE_EFFECT : getTimeLeft();
ps.addIconEffect(_displayId, _displayLevel, duration);
}
PHP код:
if (newTarget != null)
{
// Add the L2Player to the _statusListener of the new target if it's a L2Character
if (newTarget.isCreature())
((Creature) newTarget).addStatusListener(this);
broadcastPacketToOthers(new TargetSelected(getObjectId(), newTarget.getObjectId(), getLoc()));
sendPacket(new MyTargetSelected(newTarget.getObjectId(), 0));
if (newTarget.isNpc())
{
NpcInstance npc = (NpcInstance) newTarget;
//sendPacket(npc.makeStatusUpdate(StatusUpdate.CUR_HP, StatusUpdate.MAX_HP));
sendPacket(new ValidateLocation(npc), ActionFail.STATIC);
}
if (newTarget.isPlayer())
sendPacket(new ExAbnormalStatusUpdateFromTargetPacket((Player) newTarget));
}
PHP код:
package l2p.gameserver.model;
/**
* @author ALF
* @data 07.02.2012
* Класс для иконки эффекта
*/
public class IconEffect
{
private final int _skillId;
private final int _level;
private final int _duration;
public IconEffect(int skillId, int level, int duration)
{
_skillId = skillId;
_level = level;
_duration = duration;
}
public int getSkillId() {
return _skillId;
}
public int getLevel() {
return _level;
}
public int getDuration() {
return _duration;
}
}