Показать сообщение отдельно
Непрочитано 08.02.2012, 16:35   #161
Аватар для ALF.
Герой

По умолчанию Re: Работа над Goddess of Destruction (part 5)

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(effectsEffectsComparator.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 skillIdint levelint duration
    {
        
_effects.add(new IconEffect(skillIdlevelduration));        
    }


PHP код:
package l2p.gameserver.serverpackets;

/**
 * @author    ALF
 * @data    07.02.2012
 * Интерфейс для пакетов, требующих отображение иконок эффектов
 */
public interface IconEffectPacket 
{
    
/**
     * @param skillId
     * @param level
     * @param duration
     */
    
void addIconEffect(int skillIdint levelint duration);

PHP код:
    public void addIcon(IconEffectPacket ps)
    {
        if(!
isActive() || isHidden())
            return;
        
int duration _skill.isToggle() ? AbnormalStatusUpdate.INFINITIVE_EFFECT getTimeLeft();
        
ps.addIconEffect(_displayId_displayLevelduration);
    } 

PHP код:
        if (newTarget != null
        {
            
// Add the L2Player to the _statusListener of the new target if it's a L2Character
            
if (newTarget.isCreature())
                ((
CreaturenewTarget).addStatusListener(this);
            
            
broadcastPacketToOthers(new TargetSelected(getObjectId(), newTarget.getObjectId(), getLoc()));
            
sendPacket(new MyTargetSelected(newTarget.getObjectId(), 0));    
            
            if (
newTarget.isNpc())
            {
                
NpcInstance npc = (NpcInstancenewTarget;
                
//sendPacket(npc.makeStatusUpdate(StatusUpdate.CUR_HP, StatusUpdate.MAX_HP));
                
sendPacket(new ValidateLocation(npc), ActionFail.STATIC);
            }
             
            if (
newTarget.isPlayer())
                
sendPacket(new ExAbnormalStatusUpdateFromTargetPacket((PlayernewTarget));
        } 
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 skillIdint levelint duration)
    {
        
_skillId skillId;
        
_level level;
        
_duration duration;
    }

    public 
int getSkillId() {
        return 
_skillId;
    }

    public 
int getLevel() {
        return 
_level;
    }

    public 
int getDuration() {
        return 
_duration;
    }

ALF. вне форума Отправить сообщение для ALF. с помощью ICQ Отправить сообщение для ALF. с помощью Skype™
Сказали спасибо: