Перенос кода с L2J на L2Open

Статус
В этой теме нельзя размещать новые ответы.

Fantik

Пляшущий с бубном
Участник
Сообщения
27
Розыгрыши
0
Репутация
38
Реакции
97
Баллы
278
Хроники
  1. Chaotic Throne: High Five
Исходники
Присутствуют
Сборка
L2open
Друзья всем доброго времени суток. Тыпаюсь преобразовать код написанный для l2j под l2open. Задача для меня непростая так как я не являюсь программистом и не знаю Java. А код l2j и l2open весьма разниться, имхо. Использую только логическое мышление и знание английского языка. Бьюсь уже второй день, голова пухнет.. Очень надеюсь на вашу помочь.

Итак что мы имеем. Сам код под l2j можно посмотреть тут -
Код модифицирует ядро и позволяет превращать нпс в игроков
3 файла всего.
FakePcsTable.java - вроде переделал корректно (но это не точно) По крайней мере компилятор ошибок не выдал
FakePc.java - не уверен требует ли переработки либо доработки, ошибок компилятора небыло
AbstractNpcInfo.java (l2j) - самое сложное для меня и то с чем я сейчас борюсь и никак не могу справится - тут переписываются сами пакеты ,благодаря чему собственно и происходит магия и нпс стают игроками.

Вот код оригинального NpcInfo.java (l2open)

Java:
package l2open.gameserver.serverpackets;

import l2open.config.ConfigValue;
import l2open.gameserver.instancemanager.CursedWeaponsManager;
import l2open.gameserver.model.*;
import l2open.gameserver.model.instances.L2DecoyInstance;
import l2open.gameserver.model.instances.L2NpcInstance;
import l2open.gameserver.model.instances.L2SiegeHeadquarterInstance;
import l2open.gameserver.model.items.Inventory;
import l2open.gameserver.skills.AbnormalVisualEffect;
import l2open.gameserver.skills.EffectType;
import l2open.gameserver.tables.NpcTable;
import l2open.gameserver.templates.L2NpcTemplate;
import l2open.util.*;

public class NpcInfo extends L2GameServerPacket
{
    //   ddddddddddddddddddffffdddcccccSSddd dddddccffddddccd
    private boolean can_writeImpl = false;
    private L2Character _cha;
    private L2NpcInstance _npc;
    private int _npcObjId, _npcId, running, incombat, dead, team, _showSpawnAnimation = 0;
    private int _runSpd, _walkSpd, _mAtkSpd, _pAtkSpd, _rhand, _lhand, _enchantEffect;
    private int karma, pvp_flag, _abnormalEffect, _abnormalEffect2, clan_crest_id, ally_crest_id, clanId, allyId;
    private double colHeight, colRadius, currentColHeight, currentColRadius, move_speed, attack_speed;
    private boolean _isAttackable;
    private Location _loc, decoy_fishLoc;
    private String _name = "";
    private String _title = "";
    private int _nps_string_name = -1;
    private int _nps_string_title = -1;
    private int _transformId;
    private int _HP, _maxHP, _MP, _maxMP;

    private Inventory decoy_inv;
    private int decoy_race, decoy_sex, decoy_base_class, decoy_clan_id, decoy_ally_id, _formId;
    private int decoy_noble, decoy_hair_style, decoy_hair_color, decoy_face, decoy_sitting;
    private int decoy_rec_have, decoy_rec_left, decoy_class_id, decoy_large_clan_crest_id;
    private int decoy_PledgeClass, decoy_pledge_type;
    private int decoy_NameColor, decoy_TitleColor, decoy_Transformation, decoy_Agathion;
    private int decoy_hero, decoy_mount_id, decoy_swimSpd, decoy_cw_level, decoy_clan_rep_score;
    private byte decoy_mount_type, decoy_private_store, decoy_fishing;
    private double decoy_attack_speed;
    private L2Cubic[] decoy_cubics;
    private L2Character _attacker;
    private boolean isFlying = false;
    private boolean _isNameAbove = false;
    private int curHP, maxHP, curMP, maxMP, curCP;

    private AbnormalVisualEffect[] _abnormalEffects;

    public NpcInfo(L2Player cha/*, L2Character attacker*/)
    {
        if(cha == null || cha.isInvisible())
            return;

        _cha = cha;
        //_attacker = attacker;
        _npcId = cha.getPolyid();
        L2NpcTemplate _template = NpcTable.getTemplate(_npcId);
        if(_template == null)
            return;

        currentColHeight = colHeight = _template.collisionHeight;
        currentColRadius = colRadius = _template.collisionRadius;
        _rhand = _template.rhand;
        _lhand = _template.lhand;

        _isAttackable = _attacker == null ? true : cha.isAutoAttackable(_attacker);
        _HP = (int) cha.getCurrentHp();
        _MP = (int) cha.getCurrentMp();
        _maxHP = cha.getMaxHp();
        _maxMP = cha.getMaxMp();

        _showSpawnAnimation = 0;
        _nps_string_name = -1;
        _nps_string_title = -1;
        _enchantEffect = 0;

        /*if(ConfigValue.ServerSideNpcName || cha.getDisplayId() != 0 || cha.isShowName())
            _name = cha.getName();
        if(ConfigValue.ServerSideNpcTitle || cha.getDisplayId() != 0 || cha.isShowTitle())
            _title = _title + cha.getTitle();*/

        if(_cha.getEffectList().getEffectByType(EffectType.Grow) != null)
        {
            currentColHeight = (int) (currentColHeight / 1.2);
            currentColRadius = (int) (currentColRadius / 1.2);
        }
        _npcObjId = _cha.getObjectId();
        _loc = _cha.getLoc();
        _mAtkSpd = (int)_cha.getMAtkSpd();

        attack_speed = _cha.getAttackSpeedMultiplier();
        move_speed = _cha.getMovementSpeedMultiplier();
        _runSpd = _cha.getTemplate().baseRunSpd;
        _walkSpd = _cha.getTemplate().baseWalkSpd;

        /*_runSpd = _cha.getRunSpeed();
        move_speed = _cha.getMoveMultiplier();
        _walkSpd = _cha.getWalkSpeed();*/
        karma = _cha.getKarma();
        pvp_flag = _cha.getPvpFlag();
        _pAtkSpd = (int)_cha.getPAtkSpd();
        running = _cha.isRunning() ? 1 : 0;
        incombat = _cha.isInCombat() ? 1 : 0;
        dead = _cha.isAlikeDead() ? 1 : 0;
        _abnormalEffect = _cha.getAbnormalEffect();
        _abnormalEffect2 = _cha.getAbnormalEffect2();
        _abnormalEffects = _cha.getAbnormalEffectsArray();
        isFlying = _cha.isFlying();
        _formId = _cha.getFormId();
        _isNameAbove = _cha.isNameAbove();

        if(cha.getEventMaster() == null || cha.getEventMaster().sendVisualTeam(cha))
            team = _cha.getTeam();
        else
            team = 0;

        can_writeImpl = true;
    }

    public NpcInfo(L2NpcInstance cha, L2Character attacker)
    {
        if(cha == null)
            return;
        if(ConfigValue.DumpForNpc > 0 && cha.getNpcId() == ConfigValue.DumpForNpc)
        {
            _log.info("isRunning: "+cha.isRunning()+" _runSpd="+_cha.getRunSpeed());
            Util.test();
        }
        _npc = cha;
        _cha = cha;
        _attacker = attacker;
        _npcId = cha.getDisplayId() != 0 ? cha.getDisplayId() : cha.getTemplate().npcId;
        //_isAttackable = attacker == null ? false : cha.getTemplate().can_be_attacked == 1;
        _isAttackable = attacker == null ? false : cha.isAutoAttackable(attacker);
        _rhand = cha.getRightHandItem();
        _lhand = cha.getLeftHandItem();
        _enchantEffect = cha.getWeaponEnchant();
        if(ConfigValue.ServerSideNpcName || cha.getDisplayId() != 0 || cha.isShowName())
            _name = cha.getName();
        if(ConfigValue.ServerSideNpcTitle || cha.getDisplayId() != 0 || cha.isShowTitle())
            _title = _title + cha.getTitle();
        _showSpawnAnimation = cha.isShowSpawnAnimation();
        _nps_string_name = _npc._nps_string_name;
        _nps_string_title = _npc._nps_string_title;
        _HP = (int) cha.getCurrentHp();
        _MP = (int) cha.getCurrentMp();
        _maxHP = cha.getMaxHp();
        _maxMP = cha.getMaxMp();
        common();
        can_writeImpl = true;
    }

    public NpcInfo(L2Summon cha, L2Character attacker, int showSpawnAnimation)
    {
        if(cha == null || cha.getPlayer() != null && cha.getPlayer().isInvisible())
            return;

        _showSpawnAnimation = showSpawnAnimation;
        _cha = cha;
        _attacker = attacker;
        _npcId = cha.getTemplate().npcId;
        _isAttackable = cha.isAutoAttackable(attacker); //(cha.getKarma() > 0);
        _rhand = 0;
        _lhand = 0;
        _enchantEffect = 0;
        if(ConfigValue.ServerSideNpcName || cha.isPet())
            _name = _cha.getName();
        _title = cha.getTitle();

        common();
        can_writeImpl = true;
    }

    private void common()
    {
        currentColHeight = colHeight = _cha.getColHeight();
        currentColRadius = colRadius = _cha.getColRadius();
        if (_cha.getEffectList().getEffectByType(EffectType.Grow) != null)
        {
            currentColHeight = (int) (currentColHeight / 1.2);
            currentColRadius = (int) (currentColRadius / 1.2);
        }
        _npcObjId = _cha.getObjectId();
        _loc = _cha.getLoc();
        _mAtkSpd = (int)_cha.getMAtkSpd();

        //
        if(_npc != null && _npc.isCrestEnable())
        {
            if(_npc.getCastle() != null && _npc.getCastle().getOwner() != null && _npc.getNpcId() != 36590 && _npc.getNpcId() != 35062)
                clanId = _npc.getCastle().getOwner().getClanId();
            clan_crest_id = _npc.getClanCrestId();
            if((_npc.getNpcId() == 36590 || _npc.getNpcId() == 35062) && clan_crest_id > 0)
                clanId = ((L2SiegeHeadquarterInstance)_npc).getClan().getClanId();
            //
            if(_npc.getCastle() != null && _npc.getCastle().getOwner() != null && _npc.getCastle().getOwner().getAlliance() != null && _npc.getNpcId() != 36590 && _npc.getNpcId() != 35062)
                allyId = _npc.getCastle().getOwner().getAllyId();
            ally_crest_id = _npc.getAllyCrestId();
            if((_npc.getNpcId() == 36590 || _npc.getNpcId() == 35062) && ally_crest_id > 0 && ((L2SiegeHeadquarterInstance)_npc).getClan().getAlliance() != null)
                allyId = ((L2SiegeHeadquarterInstance)_npc).getClan().getAlliance().getAllyCrestId();
        }

        if (_cha instanceof L2DecoyInstance)
            fillDecoy();
        else
        {
            move_speed = _cha.getMovementSpeedMultiplier();
            _runSpd = _cha.getTemplate().baseRunSpd;
            _walkSpd = _cha.getTemplate().baseWalkSpd;

           /* _runSpd = _cha.getRunSpeed();
            move_speed = _cha.getMoveMultiplier();
            _walkSpd = _cha.getWalkSpeed();*/
            karma = _cha.getKarma();
            pvp_flag = _cha.getPvpFlag();
            _pAtkSpd = (int)_cha.getPAtkSpd();
            running = _cha.isRunning() ? 1 : 0;
            incombat = _cha.isInCombat() ? 1 : 0;
            dead = _cha.isAlikeDead() ? 1 : 0;
            _abnormalEffect = _cha.getAbnormalEffect();
            _abnormalEffect2 = _cha.getAbnormalEffect2();
            _abnormalEffects = _cha.getAbnormalEffectsArray();
            isFlying = _cha.isFlying();
            _formId = _cha.getFormId();
            _isNameAbove = _cha.isNameAbove();

            if (_cha instanceof L2Summon)
            {
                if(_cha.getPlayer() == null || _cha.getPlayer().getEventMaster() == null || _cha.getPlayer().getEventMaster().sendVisualTeam(_cha.getPlayer()))
                {
                    if (_cha.getTeam() < 3)
                        team = _cha.getTeam();
                    else if (_attacker == null || _attacker.getTeam() == 0)
                        team = 0;
                    else if (_attacker.getTeam() == _cha.getTeam())
                        team = 1;
                    else
                        team = 2;
                }
                else
                    team = 0;
            }
            else
                team = _cha.getTeam();
        }
    }

    @Override
    protected final void writeImpl()
    {
        if(!can_writeImpl)
            return;

        if(_cha instanceof L2DecoyInstance)
        {
            writeImpl_Decoy();
            return;
        }

        writeC(0x0c);
        //ddddddddddddddddddffffdddcccccSSddddddddccffddddccd
        writeD(_npcObjId);
        writeD(_npcId + 1000000); // npctype id c4
        writeD(_isAttackable ? 1 : 0);
        writeD(_loc.x);
        writeD(_loc.y);
        writeD(_loc.z + ConfigValue.ClientZShift);
        writeD(_loc.h);
        writeD(0x00);
        writeD(_mAtkSpd);
        writeD(_pAtkSpd);
        writeD(_runSpd);
        writeD(_walkSpd);
        writeD(_runSpd /*_swimRunSpd*//*0x32*/); // swimspeed
        writeD(_walkSpd/*_swimWalkSpd*//*0x32*/); // swimspeed
        writeD(_runSpd/*_flRunSpd*/);
        writeD(_walkSpd/*_flWalkSpd*/);
        writeD(_runSpd/*_flyRunSpd*/);
        writeD(_walkSpd/*_flyWalkSpd*/);
        writeF(move_speed); // Модификатор скорости моба)
        //writeF(1.100000023841858); // взято из клиента
        writeF(_pAtkSpd / 277.478340719);
        //writeF(speed_atack);

        writeF(colRadius);
        writeF(colHeight);
        writeD(_rhand); // right hand weapon
        writeD(0); //TODO chest
        writeD(_lhand); // left hand weapon
        writeC(_isNameAbove ? 1 : 0); // 2.2: name above char 1=true ... ??; 2.3: 1 - normal, 2 - dead
        writeC(running);
        writeC(incombat);
        writeC(dead);
        writeC(_showSpawnAnimation); // invisible ?? 0=false  1=true   2=summoned (only works if model has a summon animation)
        writeD(_nps_string_name); // High Five NPCString ID 
        writeS(_name);
        writeD(_nps_string_title); // High Five NPCString ID 
        writeS(_title);
        writeD(0/*_isPet*/); // 0- светло зеленый титул(моб), 1 - светло синий(пет)/отображение текущего МП
        writeD(pvp_flag);
        writeD(karma); // hmm karma ??
        writeD(_abnormalEffect); // C2
        writeD(clanId); // clan id (клиентом не используется, но требуется для показа значка)
        writeD(clan_crest_id); // clan crest id
        writeD(allyId); // ally id (клиентом не используется, но требуется для показа значка)
        writeD(ally_crest_id); // ally crest id
        writeC(isFlying ? 2 : 0); // C2
        writeC(team); // team aura 1-blue, 2-red
        writeF(currentColRadius); // тут что-то связанное с colRadius
        writeF(currentColHeight); // тут что-то связанное с colHeight
        writeD(Math.min(_enchantEffect, 127)); // C4
        writeD(0x00); // writeD(_npc.isFlying() ? 1 : 0); // C6
        writeD(0x00);
        writeD(_formId); // great wolf type
        writeC(_npc != null && _npc.isHideName() ? 0x00 : 0x01); // влияет на возможность примененя к цели /nexttarget и /assist
        writeC(_npc != null && _npc.isHideName() ? 0x00 : 0x01); // name above char 1=true ... ??
        writeD(_abnormalEffect2);
        writeD(_npc == null ? 0 : _npc.getNpcState());
    }

    @Override
    protected boolean writeImplLindvior()
    {
        if(!can_writeImpl)
            return true;

        if(_cha instanceof L2DecoyInstance)
        {
            writeImpl_Decoy();
            return true;
        }

        writeC(0x0c);
        writeD(_npcObjId);
        writeD(_npcId + 1000000); // npctype id c4
        writeD(_isAttackable ? 1 : 0);
        writeD(_loc.x);
        writeD(_loc.y);
        writeD(_loc.z + ConfigValue.ClientZShift);
        writeD(_loc.h);
        writeD(0x00);
        writeD(_mAtkSpd);
        writeD(_pAtkSpd);
        writeD(_runSpd);
        writeD(_walkSpd);
        writeD(_runSpd /*_swimRunSpd*//*0x32*/); // swimspeed
        writeD(_walkSpd/*_swimWalkSpd*//*0x32*/); // swimspeed
        writeD(_runSpd/*_flRunSpd*/);
        writeD(_walkSpd/*_flWalkSpd*/);
        writeD(_runSpd/*_flyRunSpd*/);
        writeD(_walkSpd/*_flyWalkSpd*/);
        writeF(move_speed); // Модификатор скорости моба)
        //writeF(1.100000023841858); // взято из клиента
        writeF(_pAtkSpd / 277.478340719);
        //writeF(speed_atack);

        writeF(colRadius);
        writeF(colHeight);
        writeD(_rhand); // right hand weapon
        writeD(0); //TODO chest
        writeD(_lhand); // left hand weapon
        writeC(_isNameAbove ? 1 : 0); // 2.2: name above char 1=true ... ??; 2.3: 1 - normal, 2 - dead

        writeC(running);
        writeC(incombat);
        writeC(dead);
        writeC(_showSpawnAnimation); // invisible ?? 0=false  1=true   2=summoned (only works if model has a summon animation)
        writeD(_nps_string_name); // High Five NPCString ID 
        writeS(_name);
        writeD(_nps_string_title); // High Five NPCString ID 
        writeS(_title);

        writeD(0); // как-то связано с тайтлом, если не 0 скрывать? Title color 0=client default?

        writeD(pvp_flag);
        writeD(karma); // hmm karma ??

        writeD(clanId); // clan id (клиентом не используется, но требуется для показа значка)
        writeD(clan_crest_id); // clan crest id
        writeD(allyId); // ally id (клиентом не используется, но требуется для показа значка)
        writeD(ally_crest_id); // ally crest id
        writeD(0x00);

        writeC(isFlying ? 2 : 0); // C2
        writeC(team); // team aura 1-blue, 2-red

        writeF(currentColRadius); // тут что-то связанное с colRadius
        writeF(currentColHeight); // тут что-то связанное с colHeight

        writeD(Math.min(_enchantEffect, 127)); // C4
        writeD(isFlying ? 1 : 0);
        writeD(0x00);
        writeD(_formId); // great wolf type

        writeC(_npc != null && _npc.isHideName() ? 0x00 : 0x01); // влияет на возможность примененя к цели /nexttarget и /assist
        writeC(_npc != null && _npc.isHideName() ? 0x00 : 0x01); // name above char 1=true ... ??
        writeD(_npc == null ? 0 : _npc.getNpcState());
        writeD(_transformId);
        
        writeD(_HP);
        writeD(_maxHP);
        writeD(_MP);
        writeD(_maxMP);
        
        writeC(0x00);
        writeD(0x00); //unk GOD
        writeD(0x00); //unk GOD
        writeD(0x00); //unk GOD
        writeF(0x00); // Lindvior модификатор размера

        writeD(_abnormalEffects.length);
        for(AbnormalVisualEffect abnormal : _abnormalEffects)
            writeD(abnormal.ordinal());
 
        return true;
    }

    private void fillDecoy()
    {
        L2Player cha_owner = _cha.getPlayer();
        
        attack_speed = _cha.getAttackSpeedMultiplier();
        move_speed = cha_owner.getMovementSpeedMultiplier();
        _runSpd = cha_owner.getTemplate().baseRunSpd;
        _walkSpd = cha_owner.getTemplate().baseWalkSpd;

        //_runSpd = cha_owner.getRunSpeed();
        //_walkSpd = cha_owner.getWalkSpeed();

        karma = cha_owner.getKarma();
        pvp_flag = cha_owner.getPvpFlag();
        _pAtkSpd = (int)cha_owner.getPAtkSpd();
        running = cha_owner.isRunning() ? 1 : 0;
        incombat = cha_owner.isInCombat() ? 1 : 0;
        dead = cha_owner.isAlikeDead() ? 1 : 0;
        _abnormalEffect = cha_owner.getAbnormalEffect();
        _abnormalEffects = cha_owner.getAbnormalEffectsArray();

        if(cha_owner.getEventMaster() == null || cha_owner.getEventMaster().sendVisualTeam(cha_owner))
            team = cha_owner.getTeam();
        else
            team = 0;

        if (cha_owner.isCursedWeaponEquipped())
        {
            _name = cha_owner.getTransformationName();
            _title = "";
            clan_crest_id = 0;
            ally_crest_id = 0;
            decoy_clan_id = 0;
            decoy_ally_id = 0;
            decoy_large_clan_crest_id = 0;
            decoy_cw_level = CursedWeaponsManager.getInstance().getLevel(cha_owner.getCursedWeaponEquippedId());
        }
        else
        {
            _name = cha_owner.getName();
            _title = cha_owner.getTitle();
            clan_crest_id = cha_owner.getClanCrestId();
            ally_crest_id = cha_owner.getAllyCrestId();
            decoy_clan_id = cha_owner.getClanId();
            decoy_ally_id = cha_owner.getAllyId();
            decoy_large_clan_crest_id = cha_owner.getClanCrestLargeId();
            decoy_cw_level = 0;
        }

        if (cha_owner.isMounted())
        {
            decoy_mount_id = cha_owner.getMountNpcId() + 1000000;
            decoy_mount_type = (byte) cha_owner.getMountType();
        }
        else
        {
            decoy_mount_id = 0;
            decoy_mount_type = 0;
        }

        if (decoy_clan_id > 0 && cha_owner.getClan() != null)
            decoy_clan_rep_score = cha_owner.getClan().getReputationScore();
        else
            decoy_clan_rep_score = 0;

        decoy_fishing = cha_owner.isFishing() ? (byte) 1 : (byte) 0;
        decoy_fishLoc = cha_owner.getFishLoc();
        decoy_swimSpd = cha_owner.getSwimSpeed();
        decoy_private_store = (byte) cha_owner.getPrivateStoreType(); // 1 - sellshop
        decoy_inv = cha_owner.getInventory();
        decoy_race = cha_owner.getBaseTemplate().race.ordinal();
        decoy_sex = cha_owner.getSex();
        decoy_base_class = cha_owner.getBaseClassId();
        decoy_attack_speed = cha_owner.getAttackSpeedMultiplier();
        decoy_hair_style = cha_owner.getHairStyle();
        decoy_hair_color = cha_owner.getHairColor();
        decoy_face = cha_owner.getFace();
        decoy_sitting = cha_owner.isSitting() ? 0 : 1;
        decoy_cubics = cha_owner.getCubics().toArray(new L2Cubic[cha_owner.getCubics().size()]);
        decoy_rec_left = cha_owner.getRecommendation().getRecomLeft();
        decoy_rec_have = cha_owner.isGM() ? 0 : cha_owner.getRecommendation().getRecomHave();
        decoy_class_id = cha_owner.getClassId().getId();
        decoy_noble = cha_owner.isNoble() ? 1 : 0;
        decoy_hero = cha_owner.isHero() || cha_owner.isGM() && ConfigValue.GMHeroAura ? 1 : 0; // 0x01: Hero Aura
        decoy_NameColor = cha_owner.getNameColor();
        decoy_PledgeClass = cha_owner.getPledgeClass();
        decoy_pledge_type = cha_owner.getPledgeType();
        decoy_TitleColor = cha_owner.getTitleColor();
        decoy_Transformation = cha_owner.getTransformation();
        decoy_Agathion = cha_owner.getAgathion() != null ? cha_owner.getAgathion().getId() : 0;

        curCP = (int) cha_owner.getCurrentCp();
        curHP = (int) cha_owner.getCurrentHp();
        maxHP = cha_owner.getMaxHp();
        curMP = (int) cha_owner.getCurrentMp();
        maxMP = cha_owner.getMaxMp();

    }

    private void writeImpl_Decoy()
    {
        L2Player activeChar = getClient().getActiveChar();
        if(activeChar == null)
            return;

        writeC(0x31);
        writeD(_loc.x);
        writeD(_loc.y);
        writeD(_loc.z + ConfigValue.ClientZShift);
        writeD(_loc.h);
        writeD(_npcObjId);
        writeS(_name);
        writeD(decoy_race);
        writeD(decoy_sex);
        writeD(decoy_base_class);

        writePaperdollInfo(decoy_inv, false, false, false);

        for (byte PAPERDOLL_ID : PAPERDOLL_ORDER)
            writeD(decoy_inv.getPaperdollAugmentationId(PAPERDOLL_ID));

        writeD(0x00); // ?GraciaFinal
        writeD(0x00); // ?GraciaFinal

        writeD(pvp_flag);
        writeD(karma);

        if(getClient().isLindvior())
        {
            writeD(0); // writeD(inv.getVisualItemId(Inventory.PAPERDOLL_RHAND)); // Tauti
            writeD(0); // writeD(inv.getVisualItemId(Inventory.PAPERDOLL_LHAND)); // Tauti
            writeD(0); // Tauti
            writeD(0); // writeD(inv.getVisualItemId(Inventory.PAPERDOLL_GLOVES)); // Tauti
            writeD(0); // writeD(inv.getVisualItemId(Inventory.PAPERDOLL_CHEST)); // Tauti
            writeD(0); // writeD(inv.getVisualItemId(Inventory.PAPERDOLL_LEGS)); // Tauti
            writeD(0); // writeD(inv.getVisualItemId(Inventory.PAPERDOLL_FEET)); // Tauti
            writeD(0); // writeD(inv.getVisualItemId(Inventory.PAPERDOLL_HAIR)); // Tauti
            writeD(0); // writeD(inv.getVisualItemId(Inventory.PAPERDOLL_DHAIR)); // Tauti
        }

        writeD(_mAtkSpd);
        writeD(_pAtkSpd);

        writeD(0x00);

        writeD(_runSpd);
        writeD(_walkSpd);
        writeD(decoy_swimSpd); // swimspeed
        writeD(decoy_swimSpd); // swimspeed
        writeD(_runSpd/*_flRunSpd*/);
        writeD(_walkSpd/*_flWalkSpd*/);
        writeD(_runSpd/*_flyRunSpd*/);
        writeD(_walkSpd/*_flyWalkSpd*/);
        writeF(move_speed);
        writeF(decoy_attack_speed);
        writeF(colRadius);
        writeF(colHeight);
        writeD(decoy_hair_style);
        writeD(decoy_hair_color);
        writeD(decoy_face);
        writeS(_title);
        writeD(decoy_clan_id);
        writeD(clan_crest_id);
        writeD(decoy_ally_id);
        writeD(ally_crest_id);

        //writeD(0);

        writeC(decoy_sitting);
        writeC(running);
        writeC(incombat);
        writeC(dead);
        writeC(0);
        writeC(decoy_mount_type);
        writeC(decoy_private_store);
        writeH(decoy_cubics.length);
        for (L2Cubic cubic : decoy_cubics)
            writeH(cubic == null ? 0 : cubic.getId());
        writeC(0x00); // find party members
        if(!getClient().isLindvior())
            writeD(_abnormalEffect);
        writeC(decoy_rec_left);
        writeH(decoy_rec_have);
        writeD(decoy_mount_id);
        writeD(decoy_class_id);
        writeD(0); // ?

        writeEnchant(_cha, activeChar.send_visual_enchant);

        writeC(team);
        writeD(decoy_large_clan_crest_id);
        writeC(decoy_noble);
        writeC(decoy_hero);

        writeC(decoy_fishing);
        writeD(decoy_fishLoc.x);
        writeD(decoy_fishLoc.y);
        writeD(decoy_fishLoc.z);

        writeD(decoy_NameColor);
        writeD(_loc.h);
        writeD(decoy_PledgeClass);
        writeD(decoy_pledge_type);
        writeD(decoy_TitleColor);
        writeD(decoy_cw_level);
        writeD(decoy_clan_rep_score);
        writeD(decoy_Transformation);
        writeD(decoy_Agathion);

        writeD(0x01); // T2

        if(getClient().isLindvior())
        {
            writeD(0x00);
            writeD(0x00);
            writeD(0x00);
            writeD(curCP);
            writeD(curHP);
            writeD(maxHP);
            writeD(curMP);
            writeD(maxMP);
            writeD(0x00);
            writeD(0x00);
            writeC(0x00);

            writeD(_abnormalEffects.length);
            for(AbnormalVisualEffect abnormal : _abnormalEffects)
                writeD(abnormal.ordinal());

            writeC(0x00); // writeD(_territoryId > 0 ? 0x50 + _territoryId : 0);
        }
        else
            writeD(_abnormalEffect2);
    }

    public static final byte[] PAPERDOLL_ORDER =
    {
            Inventory.PAPERDOLL_UNDER,
            Inventory.PAPERDOLL_HEAD,
            Inventory.PAPERDOLL_RHAND,
            Inventory.PAPERDOLL_LHAND,
            Inventory.PAPERDOLL_GLOVES,
            Inventory.PAPERDOLL_CHEST,
            Inventory.PAPERDOLL_LEGS,
            Inventory.PAPERDOLL_FEET,
            Inventory.PAPERDOLL_BACK,
            Inventory.PAPERDOLL_LRHAND,
            Inventory.PAPERDOLL_HAIR,
            Inventory.PAPERDOLL_DHAIR,
            Inventory.PAPERDOLL_RBRACELET,
            Inventory.PAPERDOLL_LBRACELET,
            Inventory.PAPERDOLL_DECO1,
            Inventory.PAPERDOLL_DECO2,
            Inventory.PAPERDOLL_DECO3,
            Inventory.PAPERDOLL_DECO4,
            Inventory.PAPERDOLL_DECO5,
            Inventory.PAPERDOLL_DECO6,
            Inventory.PAPERDOLL_BELT // Пояс
    };

    @Override
    public String getType()
    {
        return super.getType() + (_cha != null ? " about " + _cha : "");
    }
}

Теперь следуя логике вырезаем этот кусок кода
Java:
        writeC(0x0c);
        //ddddddddddddddddddffffdddcccccSSddddddddccffddddccd
        writeD(_npcObjId);
        writeD(_npcId + 1000000); // npctype id c4
        writeD(_isAttackable ? 1 : 0);
        writeD(_loc.x);
        writeD(_loc.y);
        writeD(_loc.z + ConfigValue.ClientZShift);
        writeD(_loc.h);
        writeD(0x00);
        writeD(_mAtkSpd);
        writeD(_pAtkSpd);
        writeD(_runSpd);
        writeD(_walkSpd);
        writeD(_runSpd /*_swimRunSpd*//*0x32*/); // swimspeed
        writeD(_walkSpd/*_swimWalkSpd*//*0x32*/); // swimspeed
        writeD(_runSpd/*_flRunSpd*/);
        writeD(_walkSpd/*_flWalkSpd*/);
        writeD(_runSpd/*_flyRunSpd*/);
        writeD(_walkSpd/*_flyWalkSpd*/);
        writeF(move_speed); // Модификатор скорости моба)
        //writeF(1.100000023841858); // взято из клиента
        writeF(_pAtkSpd / 277.478340719);
        //writeF(speed_atack);

        writeF(colRadius);
        writeF(colHeight);
        writeD(_rhand); // right hand weapon
        writeD(0); //TODO chest
        writeD(_lhand); // left hand weapon
        writeC(_isNameAbove ? 1 : 0); // 2.2: name above char 1=true ... ??; 2.3: 1 - normal, 2 - dead
        writeC(running);
        writeC(incombat);
        writeC(dead);
        writeC(_showSpawnAnimation); // invisible ?? 0=false  1=true   2=summoned (only works if model has a summon animation)
        writeD(_nps_string_name); // High Five NPCString ID 
        writeS(_name);
        writeD(_nps_string_title); // High Five NPCString ID 
        writeS(_title);
        writeD(0/*_isPet*/); // 0- светло зеленый титул(моб), 1 - светло синий(пет)/отображение текущего МП
        writeD(pvp_flag);
        writeD(karma); // hmm karma ??
        writeD(_abnormalEffect); // C2
        writeD(clanId); // clan id (клиентом не используется, но требуется для показа значка)
        writeD(clan_crest_id); // clan crest id
        writeD(allyId); // ally id (клиентом не используется, но требуется для показа значка)
        writeD(ally_crest_id); // ally crest id
        writeC(isFlying ? 2 : 0); // C2
        writeC(team); // team aura 1-blue, 2-red
        writeF(currentColRadius); // тут что-то связанное с colRadius
        writeF(currentColHeight); // тут что-то связанное с colHeight
        writeD(Math.min(_enchantEffect, 127)); // C4
        writeD(0x00); // writeD(_npc.isFlying() ? 1 : 0); // C6
        writeD(0x00);
        writeD(_formId); // great wolf type
        writeC(_npc != null && _npc.isHideName() ? 0x00 : 0x01); // влияет на возможность примененя к цели /nexttarget и /assist
        writeC(_npc != null && _npc.isHideName() ? 0x00 : 0x01); // name above char 1=true ... ??
        writeD(_abnormalEffect2);
        writeD(_npc == null ? 0 : _npc.getNpcState());

И вставляем этот код, предварительно подогнав его под стандарты L2open
Java:
FakePc fpc = FakePcsTable.getInstance().getFakePc(_npc.getNpcId());
+           if (fpc != null)
+           {
+               writeC(0x31);
+               writeD(_x);
+               writeD(_y);
+               writeD(_z);
+               writeD(0x00); // vehicle id
+               writeD(_npc.getObjectId());
+               writeS(fpc.name); // visible name
+               writeD(fpc.race);
+               writeD(fpc.sex);
+               writeD(fpc.clazz);
+               
+               writeD(fpc.pdUnder);
+               writeD(fpc.pdHead);
+               writeD(fpc.pdRHand);
+               writeD(fpc.pdLHand);
+               writeD(fpc.pdGloves);
+               writeD(fpc.pdChest);
+               writeD(fpc.pdLegs);
+               writeD(fpc.pdFeet);
+               writeD(fpc.pdBack);
+               writeD(fpc.pdLRHand);
+               writeD(fpc.pdHair);
+               writeD(fpc.pdHair2);
+               writeD(fpc.pdRBracelet);
+               writeD(fpc.pdLBracelet);
+               writeD(fpc.pdDeco1);
+               writeD(fpc.pdDeco2);
+               writeD(fpc.pdDeco3);
+               writeD(fpc.pdDeco4);
+               writeD(fpc.pdDeco5);
+               writeD(fpc.pdDeco6);
+               writeD(0x00); // belt
+               
+               writeD(fpc.pdUnderAug);
+               writeD(fpc.pdHeadAug);
+               writeD(fpc.pdRHandAug);
+               writeD(fpc.pdLHandAug);
+               writeD(fpc.pdGlovesAug);
+               writeD(fpc.pdChestAug);
+               writeD(fpc.pdLegsAug);
+               writeD(fpc.pdFeetAug);
+               writeD(fpc.pdBackAug);
+               writeD(fpc.pdLRHandAug);
+               writeD(fpc.pdHairAug);
+               writeD(fpc.pdHair2Aug);
+               writeD(fpc.pdRBraceletAug);
+               writeD(fpc.pdLBraceletAug);
+               writeD(fpc.pdDeco1Aug);
+               writeD(fpc.pdDeco2Aug);
+               writeD(fpc.pdDeco3Aug);
+               writeD(fpc.pdDeco4Aug);
+               writeD(fpc.pdDeco5Aug);
+               writeD(fpc.pdDeco6Aug);
+               writeD(0x00); // belt aug
+               writeD(0x00);
+               writeD(0x01);
+               
+               writeD(fpc.pvpFlag);
+               writeD(fpc.karma);
+               
+               writeD(_mAtkSpd);
+               writeD(_pAtkSpd);
+               
+               writeD(0x00);
+               
+               writeD(_runSpd);
+               writeD(_walkSpd);
+               writeD(_runSpd); // swim run speed
+               writeD(_walkSpd); // swim walk speed
+               writeD(_runSpd); // fly run speed
+               writeD(_walkSpd); // fly walk speed
+               writeD(_runSpd);
+               writeD(_walkSpd);
+               writeF(_npc.getMovementSpeedMultiplier()); // _activeChar.getProperMultiplier()
+               writeF(_npc.getAttackSpeedMultiplier()); // _activeChar.getAttackSpeedMultiplier()
+               
+               // TODO: add handling of mount collision
+               L2PcTemplate pctmpl = CharTemplateTable.getInstance().getTemplate(fpc.clazz);
+               writeF(fpc.sex == 0 ? pctmpl.fCollisionRadius : pctmpl.fCollisionRadius_female);
+               writeF(fpc.sex == 0 ? pctmpl.fCollisionHeight : pctmpl.fCollisionHeight_female);
+               
+               writeD(fpc.hairStyle);
+               writeD(fpc.hairColor);
+               writeD(fpc.face);
+               
+               writeS(fpc.title); // visible title
+               
+               writeD(0x00); // clan id
+               writeD(0x00); // clan crest id
+               writeD(0x00); // ally id
+               writeD(0x00); // ally crest id
+               
+               writeC(0x01); // standing = 1  sitting = 0
+               writeC(_npc.isRunning() ? 1 : 0); // running = 1   walking = 0
+               writeC(_npc.isInCombat() ? 1 : 0);
+               writeC(_npc.isAlikeDead() ? 1 : 0);
+               
+               writeC(fpc.invisible); // invisible = 1  visible =0
+               
+               writeC(fpc.mount); // 1 on strider   2 on wyvern  3 on Great Wolf  0 no mount
+               writeC(0x00); //  1 - sellshop
+               writeH(0x00); // cubic count
+               //for (int id : allCubics)
+               //    writeH(id);
+               writeC(0x00); // find party members
+               writeD(0x00); // abnormal effect
+               writeC(0x00); // isFlying() ? 2 : 0
+               writeH(0x00); //getRecomHave(): Blue value for name (0 = white, 255 = pure blue)
+               writeD(1000000); // getMountNpcId() + 1000000
+               writeD(fpc.clazz);
+               writeD(0x00); // ?
+               writeC(fpc.enchantEffect);
+               writeC(fpc.team); //team circle around feet 1= Blue, 2 = red
+               writeD(0x00); // getClanCrestLargeId()
+               writeC(0x00); // isNoble(): Symbol on char menu ctrl+I
+               writeC(fpc.hero); // Hero Aura
+               writeC(fpc.fishing); //0x01: Fishing Mode (Cant be undone by setting back to 0)
+               writeD(fpc.fishingX);
+               writeD(fpc.fishingY);
+               writeD(fpc.fishingZ);
+               
+               writeD(fpc.nameColor);
+               writeD(_heading);
+               writeD(0x00); // pledge class
+               writeD(0x00); // pledge type
+               writeD(fpc.titleColor);
+               
+               writeD(0x00); // cursed weapon level
+               writeD(0x00); // reputation score
+               writeD(0x00); // transformation id
+               writeD(0x00); // agathion id
+               writeD(0x01); // T2 ?
+               writeD(0x00); // special effect
+               /*writeD(0x00); // territory Id
+               writeD(0x00); // is Disguised
+               writeD(0x00); // territory Id*/
+           }
+           else
+           {
+               writeC(0x0c);
+               writeD(_npc.getObjectId());
+               writeD(_idTemplate + 1000000); // npctype id
+               writeD(_isAttackable ? 1 : 0);
+               writeD(_x);
+               writeD(_y);
+               writeD(_z);
+               writeD(_heading);
+               writeD(0x00);
+               writeD(_mAtkSpd);
+               writeD(_pAtkSpd);
+               writeD(_runSpd);
+               writeD(_walkSpd);
+               writeD(_runSpd); // swim run speed
+               writeD(_walkSpd); // swim walk speed
+               writeD(_runSpd); // swim run speed
+               writeD(_walkSpd); // swim walk speed
+               writeD(_runSpd); // fly run speed
+               writeD(_walkSpd); // fly run speed
+               writeF(_npc.getMovementSpeedMultiplier());
+               writeF(_npc.getAttackSpeedMultiplier());
+               writeF(_collisionRadius);
+               writeF(_collisionHeight);
+               writeD(_rhand); // right hand weapon
+               writeD(_chest);
+               writeD(_lhand); // left hand weapon
+               writeC(1); // name above char 1=true ... ??
+               writeC(_npc.isRunning() ? 1 : 0);
+               writeC(_npc.isInCombat() ? 1 : 0);
+               writeC(_npc.isAlikeDead() ? 1 : 0);
+               writeC(_isSummoned ? 2 : 0); // 0=teleported 1=default 2=summoned
+               writeS(_name);
+               writeS(_title);
+               writeD(0x00); // Title color 0=client default
+               writeD(0x00); //pvp flag
+               writeD(0x00); // karma
+               
+               writeD(_npc.getAbnormalEffect()); // C2
+               writeD(_clanId); //clan id
+               writeD(_clanCrest); //crest id
+               writeD(_allyId); // ally id
+               writeD(_allyCrest); // all crest
+               writeC(_npc.isFlying() ? 2 : 0); // C2
+               writeC(0x00); // title color 0=client
+               
+               writeF(_collisionRadius);
+               writeF(_collisionHeight);
+               writeD(_enchantEffect); // C4
+               writeD(_npc.isFlying() ? 1 : 0); // C6
+               writeD(0x00);
+               writeD(0x00);// CT1.5 Pet form and skills
+               writeC(_npc.isHideName() ? 0x00 : 0x01);
+               writeC(_npc.isHideName() ? 0x00 : 0x01);
+               writeD(_npc.getSpecialEffect());
+               writeD(_displayEffect);
+           }

Как итог на данный момент то,что я лично сам подгонял выглядит так
Java:
FakePc fpc = FakePcsTable.getInstance().getFakePc(_npcObjId);

            if (fpc != null)

            {

                writeC(0x31);

                writeD(_loc.x);

                writeD(_loc.y);

                writeD(_loc.z + ConfigValue.ClientZShift);

                writeD(0x00); // vehicle id

                writeD(_npcObjId);

                writeS(fpc.name); // visible name

                writeD(fpc.race);

                writeD(fpc.sex);

                writeD(fpc.clazz);

                

                writeD(fpc.pdUnder);

                writeD(fpc.pdHead);

                writeD(fpc.pdRHand);

                writeD(fpc.pdLHand);

                writeD(fpc.pdGloves);

                writeD(fpc.pdChest);

                writeD(fpc.pdLegs);

                writeD(fpc.pdFeet);

                writeD(fpc.pdBack);

                writeD(fpc.pdLRHand);

                writeD(fpc.pdHair);

                writeD(fpc.pdHair2);

                writeD(fpc.pdRBracelet);

                writeD(fpc.pdLBracelet);

                writeD(fpc.pdDeco1);

                writeD(fpc.pdDeco2);

                writeD(fpc.pdDeco3);

                writeD(fpc.pdDeco4);

                writeD(fpc.pdDeco5);

                writeD(fpc.pdDeco6);

                writeD(0x00); // belt

                

                writeD(fpc.pdUnderAug);

                writeD(fpc.pdHeadAug);

                writeD(fpc.pdRHandAug);

                writeD(fpc.pdLHandAug);

                writeD(fpc.pdGlovesAug);

                writeD(fpc.pdChestAug);

                writeD(fpc.pdLegsAug);

                writeD(fpc.pdFeetAug);

                writeD(fpc.pdBackAug);

                writeD(fpc.pdLRHandAug);

                writeD(fpc.pdHairAug);

                writeD(fpc.pdHair2Aug);

                writeD(fpc.pdRBraceletAug);

                writeD(fpc.pdLBraceletAug);

                writeD(fpc.pdDeco1Aug);

                writeD(fpc.pdDeco2Aug);

                writeD(fpc.pdDeco3Aug);

                writeD(fpc.pdDeco4Aug);

                writeD(fpc.pdDeco5Aug);

                writeD(fpc.pdDeco6Aug);

                writeD(0x00); // belt aug

                writeD(0x00);

                writeD(0x01);

                

                writeD(fpc.pvpFlag);

                writeD(fpc.karma);

                

                writeD(_mAtkSpd);

                writeD(_pAtkSpd);

                

                writeD(0x00);

                

                writeD(_runSpd);

                writeD(_walkSpd);

                writeD(_runSpd); // swim run speed

                writeD(_walkSpd); // swim walk speed

                writeD(_runSpd); // fly run speed

                writeD(_walkSpd); // fly walk speed

                writeD(_runSpd);

                writeD(_walkSpd);

                writeF(move_speed); // _activeChar.getProperMultiplier()

                writeF(_pAtkSpd / 277.478340719); // _activeChar.getAttackSpeedMultiplier()

                

                // TODO: add handling of mount collision

                //L2PlayerTemplate pctmpl = PlayerData.getInstance().getTemplate(fpc.clazz);

                //writeF(fpc.sex == 0 ? pctmpl.getCollisionRadius() : pctmpl.getCollisionRadius());

                //writeF(fpc.sex == 0 ? pctmpl.getCollisionHeight() : pctmpl.getCollisionHeight());

                

                writeD(fpc.hairStyle);

                writeD(fpc.hairColor);

                writeD(fpc.face);

                

                if (_npc instanceof L2MonsterInstance)

                {

                    writeS(fpc.title + " - HP " + new DecimalFormat("#.##").format((100.0 * _npc.getCurrentHp()) / _npc.getMaxHp()) + "%"); // visible title

                }

                else

                {

                    writeS(fpc.title);

                }

                

                writeD(0x00); // clan id

                writeD(0x00); // clan crest id

                writeD(0x00); // ally id

                writeD(0x00); // ally crest id

                

                writeC(0x01); // standing = 1 sitting = 0

                writeC(running); // running = 1 walking = 0

                writeC(incombat);

                writeC(dead);

                

                writeC(fpc.invisible); // invisible = 1 visible =0

                

                writeC(fpc.mount); // 1 on strider 2 on wyvern 3 on Great Wolf 0 no mount

                writeC(0x00); // 1 - sellshop

                writeH(0x00); // cubic count

                

                // for (int id : allCubics)

                // writeH(id);

                

                writeC(0x00); // find party members

                writeD(0x00); // abnormal effect

                writeC(0x00); // isFlying() ? 2 : 0

                writeH(0x00); // getRecomHave(): Blue value for name (0 = white, 255 = pure blue)

                writeD(1000000); // getMountNpcId() + 1000000

                writeD(fpc.clazz);

                writeD(0x00); // ?

                writeC(fpc.enchantEffect);

                writeC(fpc.team); // team circle around feet 1= Blue, 2 = red

                writeD(0x00); // getClanCrestLargeId()

                writeC(0x00); // isNoble(): Symbol on char menu ctrl+I

                writeC(fpc.hero); // Hero Aura

                writeC(fpc.fishing); // 0x01: Fishing Mode (Cant be undone by setting back to 0)

                writeD(fpc.fishingX);

                writeD(fpc.fishingY);

                writeD(fpc.fishingZ);

                

                writeD(fpc.nameColor);

                //writeD(_heading);

                writeD(0x00); // pledge class

                writeD(0x00); // pledge type

                writeD(fpc.titleColor);

                

                writeD(0x00); // cursed weapon level

                writeD(0x00); // reputation score

                writeD(0x00); // transformation id

                writeD(0x00); // agathion id

                writeD(0x01); // T2 ?

                writeD(0x00); // special effect

                /*

                 * writeD(0x00); // territory Id writeD(0x00); // is Disguised writeD(0x00); // territory Id

                 */

            }

            else

            {

        writeC(0x0c);

        //ddddddddddddddddddffffdddcccccSSddddddddccffddddccd

        writeD(_npcObjId);

        writeD(_npcId + 1000000); // npctype id c4

        writeD(_isAttackable ? 1 : 0);

        writeD(_loc.x);

        writeD(_loc.y);

        writeD(_loc.z + ConfigValue.ClientZShift);

        writeD(_loc.h);

        writeD(0x00);

        writeD(_mAtkSpd);

        writeD(_pAtkSpd);

        writeD(_runSpd);

        writeD(_walkSpd);

        writeD(_runSpd /*_swimRunSpd*//*0x32*/); // swimspeed

        writeD(_walkSpd/*_swimWalkSpd*//*0x32*/); // swimspeed

        writeD(_runSpd/*_flRunSpd*/);

        writeD(_walkSpd/*_flWalkSpd*/);

        writeD(_runSpd/*_flyRunSpd*/);

        writeD(_walkSpd/*_flyWalkSpd*/);

        writeF(move_speed); // Модификатор скорости моба)

        //writeF(1.100000023841858); // взято из клиента

        writeF(_pAtkSpd / 277.478340719);

        //writeF(speed_atack);


        writeF(colRadius);

        writeF(colHeight);

        writeD(_rhand); // right hand weapon

        writeD(0); //TODO chest

        writeD(_lhand); // left hand weapon

        writeC(_isNameAbove ? 1 : 0); // 2.2: name above char 1=true ... ??; 2.3: 1 - normal, 2 - dead

        writeC(running);

        writeC(incombat);

        writeC(dead);

        writeC(_showSpawnAnimation); // invisible ?? 0=false  1=true   2=summoned (only works if model has a summon animation)

        writeD(_nps_string_name); // High Five NPCString ID

        writeS(_name);

        writeD(_nps_string_title); // High Five NPCString ID

        writeS(_title);

        writeD(0/*_isPet*/); // 0- светло зеленый титул(моб), 1 - светло синий(пет)/отображение текущего МП

        writeD(pvp_flag);

        writeD(karma); // hmm karma ??

        writeD(_abnormalEffect); // C2

        writeD(clanId); // clan id (клиентом не используется, но требуется для показа значка)

        writeD(clan_crest_id); // clan crest id

        writeD(allyId); // ally id (клиентом не используется, но требуется для показа значка)

        writeD(ally_crest_id); // ally crest id

        writeC(isFlying ? 2 : 0); // C2

        writeC(team); // team aura 1-blue, 2-red

        writeF(currentColRadius); // тут что-то связанное с colRadius

        writeF(currentColHeight); // тут что-то связанное с colHeight

        writeD(Math.min(_enchantEffect, 127)); // C4

        writeD(0x00); // writeD(_npc.isFlying() ? 1 : 0); // C6

        writeD(0x00);

        writeD(_formId); // great wolf type

        writeC(_npc != null && _npc.isHideName() ? 0x00 : 0x01); // влияет на возможность примененя к цели /nexttarget и /assist

        writeC(_npc != null && _npc.isHideName() ? 0x00 : 0x01); // name above char 1=true ... ??

        writeD(_abnormalEffect2);

        writeD(_npc == null ? 0 : _npc.getNpcState());

            }

    }

Как итог закоментирован маунт коллизии так как я не могу корректно подогнать код и не уверен в корректных импортах по коллизии
Java:
                // TODO: add handling of mount collision
//L2PlayerTemplate pctmpl = PlayerData.getInstance().getTemplate(fpc.clazz);
//writeF(fpc.sex == 0 ? pctmpl.getCollisionRadius() : pctmpl.getCollisionRadius());
//writeF(fpc.sex == 0 ? pctmpl.getCollisionHeight() : pctmpl.getCollisionHeight());

Закоментирован
Java:
 //writeD(_heading);
- непонятно нужен или нет, в любом случае переделать под стандарт l2open не вышло

Компил проходит без ошибок на данный момент, благодаля вышеописанному. Работоспособности изменений нету, нпс не трансформируются.
Буду рад любой помощи, господа.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Так а зачем дёргать из непохожей сборки? Если нет знаний дёргайте из похожих l2open это же феникс? Дергайте оттуда )
 
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу