Рейтинг темы:
  • 2 Голос(ов) - 5 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Работа над Goddess of Destruction (part 6)
полностью разобранный и 100% рабочий пакет CharSelectionInfo(603 протокол)
Код:
writeD(size);
     writeD(0x07); // Максимальное количество персонажей на сервере
     writeC(0x00); // 0x00 - Разрешить, 0x01 - запретить. Разрешает или запрещает создание игроков
     writeC(0x00);
     writeD(0x02); // 0x01 - Выводит окно, что нужно купить игру, что создавать более 2х чаров. 0х02 - обычное лобби.
     writeC(0x00); // 0x01 - Предлогает купить ПА.
     long lastAccess = 0;
     int lastUsed = -1;
     for (CharSelectInfoPackage info : charSelectionInfo)
         if (lastAccess < info.getLastAccess())
             lastAccess = info.getLastAccess();

int i = 0;

for (CharSelectInfoPackage charInfoPackage : charSelectionInfo)
{
writeS(charInfoPackage.getName());
writeD(charInfoPackage.getCharId());
writeS(_loginName);
writeD(_sessionId);
writeD(charInfoPackage.getClanId());
writeD(0x00);
writeD(charInfoPackage.getSex());
writeD(charInfoPackage.getRace());
writeD(charInfoPackage.getBaseClassId());
writeD(0x01);
writeD(charInfoPackage.getX());
writeD(charInfoPackage.getY());
writeD(charInfoPackage.getZ());
writeF(charInfoPackage.getCurrentHp());
writeF(charInfoPackage.getCurrentMp());
writeQ(charInfoPackage.getSp());
writeQ(charInfoPackage.getExp());
int lvl = charInfoPackage.getLevel();
writeF(Experience.getExpPercent(lvl, charInfoPackage.getExp()));
writeD(lvl);
writeD(charInfoPackage.getKarma());
writeD(charInfoPackage.getPk());
writeD(charInfoPackage.getPvP());

for (int j = 0; j < 14; j++)
{
writeD(0x00);
}
         writeD(0x32); // unk Ertheia
         writeD(0x56); // unk Ertheia
for (int PAPERDOLL_ID : Inventory.PAPERDOLL_ORDER)
{
writeD(charInfoPackage.getPaperdollItemId(PAPERDOLL_ID));
}

writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_RHAND));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_LHAND));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_GLOVES));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_CHEST));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_LEGS));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_FEET));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_BACK));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_HAIR));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_DHAIR));
         writeH(0x00); // unk Episodion
         writeH(0x00); // unk Episodion
         writeH(0x00); // unk Episodion
         writeH(0x00); // unk Episodion
         writeH(0x01); // unk Episodion
writeD(charInfoPackage.getHairStyle());
writeD(charInfoPackage.getHairColor());
writeD(charInfoPackage.getFace());
writeF(charInfoPackage.getMaxHp()); // hp max
writeF(charInfoPackage.getMaxMp()); // mp max
writeD(charInfoPackage.getAccessLevel() > -100 ? charInfoPackage.getDeleteTimer() : -1);
writeD(charInfoPackage.getClassId());
writeD(i == lastUsed ? 1 : 0);
writeC(Math.min(charInfoPackage.getPaperdollEnchantEffect(Inventory.PAPERDOLL_RHAND), 127));
         writeH(charInfoPackage.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
         writeH(charInfoPackage.getPaperdollAugmentation2Id(Inventory.PAPERDOLL_RHAND));

         int weaponId = charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RHAND);

if (weaponId == 8190)
{
writeD(301);
}
else if (weaponId == 8689)
{
writeD(302);
}
else
{
writeD(0x00);
}

for (int j = 0; j < 4; j++)
{
writeD(0x00);
}
         for (int j = 0; j < 2; j++)
         {
             writeF(0x00);
         }
writeD(charSelectionInfo.getVitalityPoints());
writeD(200); // Vitality percent
writeD(5); // Vitaliti items count
writeD(charInfoPackage.getAccessLevel() > -100 ? 0x01 : 0x00);
         for (int j = 0; j < 3; j++)
         {
             writeC(0x00);
         }
silvermain Написал:
Спойлер

ммм, в дампе после 575 протокола я не встретил ни одной строчки Substitute, подскажите и мне плиз+)

Его убрали.
Warencense Написал:Его убрали.

а что собсно случилось с полоской бафов? опкод или же структура пакета AbnormalStatusUpdate???
TonsFun Написал:а что собсно случилось с полоской бафов? опкод или же структура пакета AbnormalStatusUpdate???

ихзменилась структура
VenomRaider Написал:ихзменилась структура

вы не могли бы заделиться структурой? Ибо смотрю я дампы, а там про этот пакет пустоSmile
TonsFun Написал:вы не могли бы заделиться структурой? Ибо смотрю я дампы, а там про этот пакет пустоSmile

Код:
        writeH(_effects.size());

        for(Effect temp : _effects)
        {
            writeD(temp.skillId);
            writeH(temp.dat);
            writeD(0x00); // UNK Ertheia
            writeH(temp.duration);
        }
Bonux Написал:
Код:
        writeH(_effects.size());

        for(Effect temp : _effects)
        {
            writeD(temp.skillId);
            writeH(temp.dat);
            writeD(0x00); // UNK Ertheia
            writeH(temp.duration);
        }
Спасибо, но один хрен, та же структура, и фактически половину не отображает((
Пы.Сы. ушел копать дальше
Разобранный блок ItemInfo.
Код:
    private static final int IS_AUGMENTED = 1 << 0;
    private static final int IS_ELEMENTED = 1 << 1;
    private static final int HAVE_ENCHANT_OPTIONS = 1 << 2;
    private static final int VISUAL_CHANGED = 1 << 3;

    protected void writeItemInfo(Player player, ItemInstance item, long count)
    {
        int flags = 0;

        if(item.isAugmented())
            flags |= IS_AUGMENTED;

        if(item.getAttributeElementValue() > 0)
            flags |= IS_ELEMENTED;

        for(int enchantOption : item.getEnchantOptions())
        {
            if(enchantOption > 0)
            {
                flags |= HAVE_ENCHANT_OPTIONS;
                break;
            }
        }

        if(item.getVisualId() > 0)
            flags |= VISUAL_CHANGED;

        writeC(flags);
        writeD(item.getObjectId());
        writeD(item.getItemId());
        writeC(item.getEquipSlot());
        writeQ(count);
        writeC(item.getTemplate().getType2ForPackets());
        writeC(item.getCustomType1());
        writeC(item.isEquipped() ? 1 : 0);
        writeC(item.getCustomType2());
        writeQ(item.getBodyPart());
        writeH(item.getEnchantLevel());
        writeD(item.getShadowLifeTime());
        writeD(item.getTemporalLifeTime());

        if(player != null)
            writeC(!item.getTemplate().isBlocked(player, item));
        else
            writeC(0x01);

        if((flags & IS_AUGMENTED) == IS_AUGMENTED)
        {
            writeH(item.getVariation1Id());
            writeH(item.getVariation2Id());
        }

        if((flags & IS_ELEMENTED) == IS_ELEMENTED)
        {
            writeH(item.getAttackElement().getId());
            writeH(item.getAttackElementValue());
            writeH(item.getDefenceFire());
            writeH(item.getDefenceWater());
            writeH(item.getDefenceWind());
            writeH(item.getDefenceEarth());
            writeH(item.getDefenceHoly());
            writeH(item.getDefenceUnholy());
        }

        if((flags & HAVE_ENCHANT_OPTIONS) == HAVE_ENCHANT_OPTIONS)
        {
            writeH(item.getEnchantOptions()[0]);
            writeH(item.getEnchantOptions()[1]);
            writeH(item.getEnchantOptions()[2]);
        }

        if((flags & VISUAL_CHANGED) == VISUAL_CHANGED)
            writeD(item.getVisualId());
    }

P.S. Кто может подсказать, в каком пакете указывается время действия визуального изменения предмета?
NpcInfo - под L2j
Код:
public abstract class AbstractNpcInfo extends L2GameServerPacket
{
    protected int _x, _y, _z, _heading;
    protected int _idTemplate;
    protected boolean _isAttackable, _isSummoned;
    protected int _mAtkSpd, _pAtkSpd;
    protected final int _runSpd, _walkSpd;
    protected final int _swimRunSpd, _swimWalkSpd;
    protected final int _flyRunSpd, _flyWalkSpd;
    protected double _moveMultiplier;
    
    protected int _rhand, _lhand, _chest, _enchantEffect;
    protected double _collisionHeight, _collisionRadius;
    protected String _name = "";
    protected String _title = "";
    
    public AbstractNpcInfo(L2Character cha)
    {
        _isSummoned = cha.isShowSummonAnimation();
        _x = cha.getX();
        _y = cha.getY();
        _z = cha.getZ();
        _heading = cha.getHeading();
        _mAtkSpd = cha.getMAtkSpd();
        _pAtkSpd = cha.getPAtkSpd();
        _moveMultiplier = cha.getMovementSpeedMultiplier();
        _runSpd = (int) Math.round(cha.getRunSpeed() / _moveMultiplier);
        _walkSpd = (int) Math.round(cha.getWalkSpeed() / _moveMultiplier);
        _swimRunSpd = (int) Math.round(cha.getSwimRunSpeed() / _moveMultiplier);
        _swimWalkSpd = (int) Math.round(cha.getSwimWalkSpeed() / _moveMultiplier);
        _flyRunSpd = cha.isFlying() ? _runSpd : 0;
        _flyWalkSpd = cha.isFlying() ? _walkSpd : 0;
    }
    
    /**
     * Packet for Npcs
     */
    public static class NpcInfo extends AbstractNpcInfo
    {
        private final L2Npc _npc;
        private int _clanCrest = 0;
        private int _allyCrest = 0;
        private int _allyId = 0;
        private int _clanId = 0;
        private int _displayEffect = 0;
        
        public NpcInfo(L2Npc cha, L2Character attacker)
        {
            super(cha);
            _npc = cha;
            _idTemplate = cha.getTemplate().getDisplayId(); // On every subclass
            _rhand = cha.getRightHandItem(); // On every subclass
            _lhand = cha.getLeftHandItem(); // On every subclass
            _enchantEffect = cha.getEnchantEffect();
            _collisionHeight = cha.getCollisionHeight();// On every subclass
            _collisionRadius = cha.getCollisionRadius();// On every subclass
            _isAttackable = cha.isAutoAttackable(attacker);
            if (cha.getTemplate().isUsingServerSideName())
            {
                _name = cha.getName();// On every subclass
            }
            
            if (_npc.isInvisible())
            {
                _title = "Invisible";
            }
            else if (Config.L2JMOD_CHAMPION_ENABLE && cha.isChampion())
            {
                /* MessageTable
                _title = (Config.L2JMOD_CHAMP_TITLE); // On every subclass
                 */
                _title = MessageTable.Messages[1926].getMessage(); // On every subclass
            }
            else if (cha.getTemplate().isUsingServerSideTitle())
            {
                _title = cha.getTemplate().getTitle(); // On every subclass
            }
            else
            {
                _title = cha.getTitle(); // On every subclass
            }
            
            if (Config.SHOW_NPC_LVL && (_npc instanceof L2MonsterInstance))
            {
                /* MessageTable
                String t = "Lv " + cha.getLevel() + (cha.isAggressive() ? "*" : "");
                 */
                String t = MessageTable.Messages[211].getExtra(1) + cha.getLevel() + (cha.isAggressive() ? MessageTable.Messages[211].getExtra(2) : "");
                if (_title != null)
                {
                    t += " " + _title;
                }
                
                _title = t;
            }
            
            // npc crest of owning clan/ally of castle
            if ((cha instanceof L2NpcInstance) && cha.isInsideZone(ZoneId.TOWN) && (Config.SHOW_CREST_WITHOUT_QUEST || cha.getCastle().getShowNpcCrest()) && (cha.getCastle().getOwnerId() != 0))
            {
                int townId = TownManager.getTown(_x, _y, _z).getTownId();
                if ((townId != 33) && (townId != 22))
                {
                    L2Clan clan = ClanTable.getInstance().getClan(cha.getCastle().getOwnerId());
                    _clanCrest = clan.getCrestId();
                    _clanId = clan.getId();
                    _allyCrest = clan.getAllyCrestId();
                    _allyId = clan.getAllyId();
                }
            }
            
            _displayEffect = cha.getDisplayEffect();
        }
        
        @Override
        protected void writeImpl()
        {
            writeC(0x0C);
            writeD(_npc.getObjectId());
            writeC(0x00);
            writeC(0x25);
            writeC(0x00);
            writeC(0xED);
            if (_rhand > 0 || _chest > 0 || _lhand > 0)
                writeC(0xFE);
            else
                writeC(0xBE);
            writeC(0x4E);
            writeC(0xA2);
            writeC(0x0C);
            int len_npc_title = 0; // 603
            if (_title != null)
                len_npc_title = _title.length(); // 603
            writeC(7 + len_npc_title*2); // 603
            writeC(_isAttackable ? 1 : 0);
            writeH(0);
            writeH(0);
            writeS(_title);
            if (_rhand > 0 || _chest > 0 || _lhand > 0)
                writeH(68);
            else
                writeH(56);
            writeD(_idTemplate + 1000000); // npctype id
            writeD(_x);
            writeD(_y);
            writeD(_z);
            writeD(_heading);
            writeD(_mAtkSpd);
            writeD(_pAtkSpd);
            putFloat((float)_moveMultiplier);
            putFloat(_npc.getAttackSpeedMultiplier());
            if (_rhand > 0 || _chest > 0 || _lhand > 0)
            {
                writeD(_rhand);
                writeD(_chest);
                writeD(_lhand);
            }
            writeC(1);
            writeC(_npc.isRunning() ? 1 : 0);
            writeC(_npc.isInsideZone(ZoneId.WATER) ? 1 : _npc.isFlying() ? 2 : 0); // C2
            writeD(_npc.isFlying() ? 1 : 0); // C6
            writeC(0);
            writeC(0);
            writeH(0);
            writeD((int)_npc.getCurrentHp());
            writeD(_npc.getMaxHp());
            
            writeC(
            (_npc.isInCombat() ? 1 : 0) +
            (_npc.isAlikeDead() ? 2 : 0) +
            (_npc.isTargetable() ? 4 : 0) +
            (_npc.isShowName() ? 8 : 0));
            
            java.util.List<Integer> el = _npc.getEffectIdList();
            if (_npc.isInvisible() && !el.contains(21))
                el.add(21);
            writeH(el.size());
            for(int i : el)
            {
               writeH(i);
            }
        }
    }
    
    public static class TrapInfo extends AbstractNpcInfo
    {
        private final L2TrapInstance _trap;
        
        public TrapInfo(L2TrapInstance cha, L2Character attacker)
        {
            super(cha);
            
            _trap = cha;
            _idTemplate = cha.getTemplate().getDisplayId();
            _isAttackable = cha.isAutoAttackable(attacker);
            _rhand = 0;
            _lhand = 0;
            _collisionHeight = _trap.getTemplate().getfCollisionHeight();
            _collisionRadius = _trap.getTemplate().getfCollisionRadius();
            if (cha.getTemplate().isUsingServerSideName())
            {
                _name = cha.getName();
            }
            _title = cha.getOwner() != null ? cha.getOwner().getName() : "";
        }
        
        @Override
        protected void writeImpl()
        {
            writeC(0x0C);
            writeD(_trap.getObjectId());
            writeC(0x00);
            writeC(0x25);
            writeC(0x00);
            writeC(0xED);
            writeC(0xBE);
            writeC(0x4E);
            writeC(0xA2);
            writeC(0x0C);
            int len_trap_title = 0; // 603
            if (_title != null)
                len_trap_title = _title.length(); // 603
            writeC(7 + len_trap_title*2); // 603
            writeC(_isAttackable ? 1 : 0);
            writeH(0);
            writeH(0);
            writeS(_title);
            writeH(56);
            writeD(_idTemplate + 1000000); // npctype id
            writeD(_x);
            writeD(_y);
            writeD(_z);
            writeD(_heading);
            writeD(_mAtkSpd);
            writeD(_pAtkSpd);
            putFloat((float)_moveMultiplier);
            putFloat(_trap.getAttackSpeedMultiplier());
            writeC(1);
            writeC(1);
            writeC(0);
            writeD(0);
            writeC(0);
            writeC(0);
            writeH(0);
            writeD((int)_trap.getCurrentHp());
            writeD(_trap.getMaxHp());
            writeC(
            (_trap.isInCombat() ? 1 : 0) +
            (_trap.isAlikeDead() ? 2 : 0) +
            (_trap.isTargetable() ? 4 : 0) +
            8);
            java.util.List<Integer> el = _trap.getEffectIdList();
            if (_trap.isInvisible() && !el.contains(21))
                el.add(21);
            writeH(el.size());
            for(int i : el)
            {
               writeH(i);
            }
        }
    }
    
    /**
     * Packet for summons.
     */
    public static class SummonInfo extends AbstractNpcInfo
    {
        private final L2Summon _summon;
        private final int _form;
        private final int _val;
        
        public SummonInfo(L2Summon cha, L2Character attacker, int val)
        {
            super(cha);
            _summon = cha;
            _val = val;
            _form = cha.getFormId();
            
            _isAttackable = cha.isAutoAttackable(attacker);
            _rhand = cha.getWeapon();
            _lhand = 0;
            _chest = cha.getArmor();
            _enchantEffect = cha.getTemplate().getWeaponEnchant();
            _name = cha.getName();
            _title = (cha.getOwner() != null) && cha.getOwner().isOnline() ? cha.getOwner().getName() : "";
            _idTemplate = cha.getTemplate().getDisplayId();
            _collisionHeight = cha.getTemplate().getfCollisionHeight();
            _collisionRadius = cha.getTemplate().getfCollisionRadius();
            _invisible = cha.isInvisible();
        }
        
        @Override
        protected void writeImpl()
        {
            boolean gmSeeInvis = false;
            if (_invisible)
            {
                final L2PcInstance activeChar = getClient().getActiveChar();
                if ((activeChar != null) && activeChar.canOverrideCond(PcCondOverride.SEE_ALL_PLAYERS))
                {
                    gmSeeInvis = true;
                }
            }
            if (_summon.getSummonType() == 2)
            {
                writeC(0xFE);
                writeH(0x15E);
            }
            else if (_summon.getSummonType() == 1)
            {
                writeC(0x8B);
            }
            else
            {
                _log.warning("unknow pet/summer");
                return;
            }
            writeD(_summon.getObjectId());
            if (_val != 2)
                writeC(0); // 603-TEST //  0=teleported  1=default   2=summoned
            else
                writeC(_val); //  0=teleported  1=default   2=summoned
            writeC(0x25);
            writeC(_isAttackable ? 1 : 0);
            
            if (_summon.getSummonType() == 2)
            {
                writeC(0xFD);
                writeC(0xBF);
                writeC(0x5F);
                writeC(0xF3);
                writeC(0xEC);
            }
            else if (_summon.getSummonType() == 1)
            {
                writeC(0xED);
                writeC(0xBF);
                writeC(0x4F);
                writeC(0x02);
                writeC(0x6C);
            }
            int len_npc_title = 0; // 603
            if (_title != null)
                len_npc_title = _title.length(); // 603
            writeC(7 + len_npc_title*2); // 603
            writeC(0x00);
            writeC(0x00);
            writeC(0x00);
            writeC(0x00);
            writeC(0x00);
            writeS(_title);
            int len_npc_name = 0; // 603
            if (_name != null)
                len_npc_name = _name.length(); // 603
            if (_summon.getSummonType() == 2)
                writeH(88 + len_npc_name*2);
            else if (_summon.getSummonType() == 1)
                writeH(58);
            writeD(_idTemplate + 1000000); // npctype id
            writeD(_x);
            writeD(_y);
            writeD(_z);
            writeD(_heading);
            writeD(_mAtkSpd);
            writeD(_pAtkSpd);
            putFloat((float)_moveMultiplier);
            putFloat(_summon.getAttackSpeedMultiplier());
            writeC(1);
            writeC(_summon.isRunning() ? 1 : 0);
            
            if (_summon.getSummonType() == 2)
                writeD(0x00);
            writeH(0x00);
            writeH(_form);
            writeD(0x00);
            writeD(0x00);
            writeH(0x00);
            
            if (_summon.getSummonType() == 2)
            {
                writeD((int)_summon.getCurrentHp());
                writeD((int)_summon.getCurrentMp());
                writeD(_summon.getMaxHp());
                writeD(_summon.getMaxMp());
                writeS(_name);
                writeD(-1);
                writeD(-1);
            }
            
            writeC(_summon.getPvpFlag());
            int Karma = 0 - _summon.getKarma();
            writeD(Karma);
            writeC(
            (_summon.isInCombat() ? 1 : 0) +
            (_summon.isAlikeDead() ? 2 : 0) +
            (_summon.isTargetable() ? 4 : 0) +
            8 );
            java.util.List<Integer> el = _summon.getEffectIdList();
            if (gmSeeInvis && !el.contains(21))
                el.add(21);
            writeH(el.size());
            for(int i : el)
            {
               writeH(i);
            }
        }
    }
}
L2j информация об инвентаре 603 протокол
Код:
protected void writeItem(ItemInfo item)
    {
        int check_Augmentation = 0;
        check_ElementType = 0;
        check_EnchantOption = 0;
        if (item.getAugmentationBonus() > 0)
        {
            check_Augmentation = 1;
        }
        if (item.getAttackElementPower() > 0)
        {
            check_ElementType = 2;
        }
        else
        {
            for (byte i = 0; i < 6; i++)
            {
                if (item.getElementDefAttr(i) > 0)
                {
                    check_ElementType = 2;
                }
            }
        }
        for (int op : item.getEnchantOptions())
        {
            if (op > 0)
            {
                check_EnchantOption = 4;
            }
        }
        writeC(check_Augmentation + check_ElementType + check_EnchantOption + 0);
        writeD(item.getObjectId()); // ObjectId
        writeD(item.getItem().getDisplayId()); // ItemId
        writeC(item.getLocation()); // 603
        writeQ(item.getCount()); // Quantity
        writeC(item.getItem().getType2()); // 603 // Item Type 2 : 00-weapon, 01-shield/armor, 02-ring/earring/necklace, 03-questitem, 04-adena, 05-item
        writeC(item.getCustomType1()); // 603 Filler (always 0)
        writeH(item.getEquipped()); // Equipped : 00-No, 01-yes
        writeQ(item.getItem().getBodyPart()); // 603 // Slot : 0006-lr.ear, 0008-neck, 0030-lr.finger, 0040-head, 0100-l.hand, 0200-gloves, 0400-chest, 0800-pants, 1000-feet, 4000-r.hand, 8000-r.hand
        writeC(item.getEnchant()); // 603 // Enchant level (pet level shown in control item)
        writeC(item.getCustomType2()); // 603 // Pet name exists or not shown in control item
        writeD(item.getMana());
        writeD(item.getTime());
        writeC(0x01); // 603
        if (check_Augmentation > 0) // 603
        {
            writeD(item.getAugmentationBonus());
        }
        writeItemElementalAndEnchant(item);
    }

    protected void writeItemElementalAndEnchant(ItemInfo item)
    {
        if (check_ElementType > 0) // 603
        {
            writeH(item.getAttackElementType());
            writeH(item.getAttackElementPower());
            for (byte i = 0; i < 6; i++)
            {
                writeH(item.getElementDefAttr(i));
            }
        }
        if (check_EnchantOption > 0) // 603
        {
            for (int op : item.getEnchantOptions())
            {
                writeH(op);
            }
        }
    }

    protected void writeInventoryBlock(PcInventory inventory)
    {
        if (inventory.hasInventoryBlock())
        {
            writeH(inventory.getBlockItems().length);
            writeC(inventory.getBlockMode());
            for (int i : inventory.getBlockItems())
            {
                writeD(i);
            }
        }
        else
        {
            writeH(0x00);
        }
    }


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Работа над Goddess of Destruction (part 7) n3k0nation 459 174,291 03-21-2022, 04:21 PM
Последний пост: TieLay
  Помогите с Сервером L2Dream версии 439 для Lineage 2 Gracia Part 2 CAHTEX 4 3,380 10-01-2021, 02:40 PM
Последний пост: tenor
  Работа с камерой и Энтер чат FriendlyGhost 0 1,301 04-29-2018, 06:07 AM
Последний пост: FriendlyGhost
  Goddess of Destruction ( новая ветка от NcSoft ) Bacek 180 59,012 08-22-2017, 12:32 PM
Последний пост: BadStealth
  EmuRT Gracia part 2 ? knaif 3 1,622 02-08-2016, 01:19 PM
Последний пост: knaif
  Gracia Part 1 от l2emu исходы TFH 6 1,964 10-05-2015, 07:53 PM
Последний пост: G1ta0
  Ищу исходы L2-Dream gracia part 2 knaif 1 1,385 10-05-2015, 07:51 PM
Последний пост: G1ta0
  Оплачиваемая работа Grek1993 1 1,349 08-01-2015, 11:29 AM
Последний пост: ztaecz
  Работа с мультиселлом Evencelance 11 2,446 09-19-2014, 12:43 PM
Последний пост: Evencelance
  Работа над Goddess of Destruction (part 5) Ozzy 980 339,177 10-09-2013, 09:13 AM
Последний пост: Ashe

Перейти к форуму:


Пользователи, просматривающие эту тему: 13 Гость(ей)