Goddess of Destruction (part 6)

Gremory

Заблокирован
Заблокирован
Сообщения
187
Розыгрыши
0
Репутация
-129
Реакции
266
Баллы
0
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Пакеты алхимии.
P.S. структура ExTryMixCube не точная ибо не хватает снифа для тяж камней, одно знаю точно, если в поле "type" слать 0, то появляется окошко для вывода полученный тяж камней и обычных.
P.P.S. строго не судите по реализации, формула полученных камней не точная, требуется доработка.

Код:
public class RequestAlchemyConversion extends L2GameClientPacket {

    private int _skillId;
    private int _skillLevel;
    private int _skillUseCount;
    private int _unk;
    private long _resultItemCount = 0;
    private long _resultFailCount = 0;

    @Override
    protected void readImpl()
    {
        _skillUseCount = readD();
        _unk = readH(); //unk = 10; хз что это
        _skillId = readD();
        _skillLevel = readD();
        readB(new  byte[28]);
    }

    @Override
    protected void runImpl()
    {
        L2PcInstance activeChar = getClient().getActiveChar();
        L2Skill skill = SkillTable.getInstance().getInfo(_skillId, _skillLevel);
        L2AlchemySkill aSkill = skill.getAlchemySkill();
        L2ItemInstance invitem = null;

        if (activeChar == null || activeChar.getRace() != Race.Arteas)
        {
            return;
        }

        double chance = 100;

        for(int i = 0 ; i < _skillUseCount; i++)
        {
            List<ItemHolder> creationList = new ArrayList<>();

            boolean ok = Rnd.getChance(chance);

            aSkill.getProductItems().stream().filter(item -> chance > 50).forEach(item ->
            {
                creationList.addAll(item.getItems());
            });

            creationList.forEach(holder ->
                    activeChar.getInventory().destroyItemByItemId(ProcessType.ALCHEMY, holder.getId(), holder.getCount(), activeChar, null));


            if (ok)
            {
                _resultItemCount = skill.getGiveItemCount() * _skillUseCount;
            }
            else
            {
                _resultFailCount++;
            }
        }
        if (_resultItemCount > 0)
        {
            invitem = activeChar.getInventory().addItem(ProcessType.ALCHEMY, skill.getGiveItemId(), _resultItemCount, activeChar, null);
        }

        if (_resultFailCount > 0)
        {
            invitem = activeChar.getInventory().addItem(ProcessType.ALCHEMY, skill.getGiveItemId(), _resultFailCount, activeChar, null);
        }

Код:
public class RequestAlchemyTryMixCube extends L2GameClientPacket {

    private int _activeItems;
    private int[] _objId;
    private long[] _itemCounts;
    private long _allPrice = 0;
    private long _stoneCount;
    private final int _stoneID = 39461;
    private boolean _isActiveMegaStone = false;

    @Override
    protected void readImpl()
    {
        _activeItems = readD();

        _objId = new int[5];
        _itemCounts = new long[5];

        switch (_activeItems)
        {
            case 1:
            {
                _objId[1] = readD();
                _itemCounts[1] = readQ();
                break;
            }
            case 2:
            {
                _objId[1] = readD();
                _itemCounts[1] = readQ();
                _objId[2] = readD();
                _itemCounts[2] = readQ();
                break;
            }
            case 3:
            {
                _objId[1] = readD();
                _itemCounts[1] = readQ();
                _objId[2] = readD();
                _itemCounts[2] = readQ();
                _objId[3] = readD();
                _itemCounts[3] = readQ();
                break;
            }
            case 4:
            {
                _objId[1] = readD();
                _itemCounts[1] = readQ();
                _objId[2] = readD();
                _itemCounts[2] = readQ();
                _objId[3] = readD();
                _itemCounts[3] = readQ();
                _objId[4] = readD();
                _itemCounts[4] = readQ();
                break;
            }
        }
    }

    @Override
    protected void runImpl()
    {
        final L2PcInstance activeChar = getClient().getActiveChar();

        if ((activeChar == null) || (activeChar.getRace() != Race.Arteas))
        {
            return;
        }

        for (int i = 1; i <= _activeItems; i++)
        {
            _allPrice = _allPrice + _itemCounts[i] * activeChar.getInventory().getItemByObjectId(_objId[i]).getReferencePrice();
            activeChar.getInventory().destroyItem(ProcessType.ALCHEMY, _objId[i], _itemCounts[i], activeChar, "Alchemy");
        }

        _stoneCount = _allPrice / 10000; //TODO формула не верный коэффициент

        activeChar.getInventory().addItem(ProcessType.ALCHEMY, _stoneID , _stoneCount , activeChar, "Alchemy");

        activeChar.sendPacket(new ExTryMixCube(_stoneCount, _stoneID, 0));
        activeChar.sendPacket(new ItemList(activeChar, false));
    }

    @Override
    public String getType() {
        return getClass().getSimpleName();
    }
}

Код:
public class ExAlchemyConversion extends L2GameServerPacket
{
    private final int _itemCount;
    private final long _failCount;

    public ExAlchemyConversion(int itemCount, long failCount)
    {
        _itemCount = itemCount;
        _failCount = failCount;
    }

    @Override
    protected void writeImpl() {

        writeC(0x00); //unk
        writeD(_itemCount);
        writeD((int) _failCount);
    }
}

Код:
public class ExAlchemySkillList extends L2GameServerPacket
{
    private final List<L2Skill> _skills = new ArrayList<>();

    public ExAlchemySkillList(final L2PcInstance player)
    {
        _skills.addAll(player.getAllSkills().stream().filter(skill -> SkillTreesData.getInstance().getAlchemySkill(skill.getId(), skill.getLevel()) != null).map(skill -> skill).collect(Collectors.toList()));
    }


    @Override
    protected void writeImpl()
    {
        writeD(_skills.size());
        for (L2Skill skill : _skills)
        {
            writeD(skill.getId());
            writeD(skill.getLevel());
            writeQ(0x00); //Всегла 0
            int visible = 0x01;
            if(skill.getId() == 17943) {
                visible = 0x00;
            }
            writeC(visible);
        }
    }
}

Код:
public class ExTryMixCube extends L2GameServerPacket
{
    private int _stoneID;
    private long _count;
    private int _typePacket;

    public ExTryMixCube(long count, int stoneId , int type)
    {
        _count = count;
        _typePacket = type;
        _stoneID = stoneId;
    }

    @Override
    protected void writeImpl()
    {
        writeC(0x00); //unk
        writeC(0x01); //type
        writeD(0x00); //unk
        writeD(_stoneID); //stoneID
        writeQ(_count); //count
    }
}

Автор: GenCloud
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
толку сюда это копипастить, как будет тема по разборке данного контента тогда уж и можно....
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
...... с чем же......

п.с. за ранее сори за флуд во всех темах (если вы определите это флудом)....
 
...... с чем же......

п.с. за ранее сори за флуд во всех темах (если вы определите это флудом)....
да так смотрел чужие наработки ... подозрительно схожий код , по ходу все с зг тащут.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Автор: GenCloud - если ты не видел, тс указал того кто делал (да с ЗГ, что поделать....)
но генклоуд часто не открывает сути всех пакетов или кусочек кода.... (чтоб имбо девелоперы не орали что они тру...)
 
Ну если я знаю что это с зг значит я и осведомлён что автор явно не тс :)
 
Ну если я знаю что это с зг значит я и осведомлён что автор явно не тс :)
ТС, очень уважаемая личность на ЗГ, он может все и даже большее "байткод кб~, корейский РУофф и т.п в действии" :)
 
Назад
Сверху Снизу