1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
Скрыть объявление

Привет посетитель! У нас на форуме тебе откроются дополнительные разделы, которые скрыты от гостей! А так же ты найдёшь много полезной информации.

Убрать зависимость грейда - соски/точки

Тема в разделе "Вопросы новичков", создана пользователем Psycho, 5 окт 2018.

Статус темы:
Закрыта.
  1. Psycho

    Psycho Я пчела. Бжж-жж... Проверенный

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    private final int _type;
    _type = type;
    packet.writeD(_type);
    Не оно ли случайно?
    Код:
    package l2j.gameserver.network.client.send;
    
    import l2j.gameserver.network.client.OutgoingPackets;
    import l2j.network.PacketWriter;
    
    public class ExAutoSoulShot implements IClientOutgoingPacket
    {
        private final int _itemId;
        private final boolean _enable;
        private final int _type;
        
        /**
         * @param itemId
         * @param enable
         * @param type
         */
        public ExAutoSoulShot(int itemId, boolean enable, int type)
        {
            _itemId = itemId;
            _enable = enable;
            _type = type;
        }
        
        @Override
        public boolean write(PacketWriter packet)
        {
            OutgoingPackets.EX_AUTO_SOUL_SHOT.writeId(packet);
            
            packet.writeD(_itemId);
            packet.writeD(_enable ? 0x01 : 0x00);
            packet.writeD(_type);
            return true;
        }
    }
    
     
  2. Daan Raven

    Daan Raven Свой человек Проверенный

    Регистрация:
    7 апр 2015
    Сообщения:
    735
    Симпатии:
    334
    Баллы:
    469
    Ну это серверный пакет, здесь никаких проверок нет, ясное дело. Смотри в сторону прихода RequestExAutoSoulShot и что в процессе происходит. Но мне кажется, что все же в клиенте зарыто.
     
  3. Psycho

    Psycho Я пчела. Бжж-жж... Проверенный

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    Увы, тоже тайпы ид и тд.
    Код:
    package l2j.gameserver.network.client.recv;
    
    import l2j.gameserver.enums.PrivateStoreType;
    import l2j.gameserver.model.actor.Summon;
    import l2j.gameserver.model.actor.instance.PlayerInstance;
    import l2j.gameserver.model.items.instance.ItemInstance;
    import l2j.gameserver.model.items.type.ActionType;
    import l2j.gameserver.network.client.L2GameClient;
    import l2j.gameserver.network.client.send.ExAutoSoulShot;
    import l2j.gameserver.network.client.send.SystemMessage;
    import l2j.gameserver.network.client.send.string.SystemMessageId;
    import l2j.network.PacketReader;
    
    /**
     * @author Unknown, UnAfraid
     */
    public final class RequestAutoSoulShot implements IClientIncomingPacket
    {
        private int _itemId;
        private boolean _enable;
        private int _type;
     
        @Override
        public boolean read(L2GameClient client, PacketReader packet)
        {
            _itemId = packet.readD();
            _enable = packet.readD() == 1;
            _type = packet.readD();
            return true;
        }
     
        @Override
        public void run(L2GameClient client)
        {
            final PlayerInstance activeChar = client.getActiveChar();
            if (activeChar == null)
            {
                return;
            }
         
            if ((activeChar.getPrivateStoreType() == PrivateStoreType.NONE) && (activeChar.getActiveRequester() == null) && !activeChar.isDead())
            {
                final ItemInstance item = activeChar.getInventory().getItemByItemId(_itemId);
                if (item == null)
                {
                    return;
                }
             
                if (_enable)
                {
                    if (!activeChar.getInventory().canManipulateWithItemId(item.getId()))
                    {
                        activeChar.sendMessage("Cannot use this item.");
                        return;
                    }
                 
                    switch (item.getItem().getDefaultAction())
                    {
                        case SUMMON_SPIRITSHOT:
                        case SUMMON_SOULSHOT:
                        {
                            if (activeChar.hasSummon())
                            {
                                final boolean isSoulshot = item.getEtcItem().getDefaultAction() == ActionType.SUMMON_SOULSHOT;
                                final boolean isSpiritshot = item.getEtcItem().getDefaultAction() == ActionType.SUMMON_SPIRITSHOT;
                                if (isSoulshot)
                                {
                                    int soulshotCount = 0;
                                    final Summon pet = activeChar.getPet();
                                    if (pet != null)
                                    {
                                        soulshotCount += pet.getSoulShotsPerHit();
                                    }
                                    for (Summon servitor : activeChar.getServitors().values())
                                    {
                                        soulshotCount += servitor.getSoulShotsPerHit();
                                    }
                                    if (soulshotCount > item.getCount())
                                    {
                                        client.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SOULSHOTS_NEEDED_FOR_A_PET_SERVITOR);
                                        return;
                                    }
                                }
                                else if (isSpiritshot)
                                {
                                    int spiritshotCount = 0;
                                    final Summon pet = activeChar.getPet();
                                    if (pet != null)
                                    {
                                        spiritshotCount += pet.getSpiritShotsPerHit();
                                    }
                                    for (Summon servitor : activeChar.getServitors().values())
                                    {
                                        spiritshotCount += servitor.getSpiritShotsPerHit();
                                    }
                                    if (spiritshotCount > item.getCount())
                                    {
                                        client.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SOULSHOTS_NEEDED_FOR_A_PET_SERVITOR);
                                        return;
                                    }
                                }
                             
                                // Activate shots
                                activeChar.addAutoSoulShot(_itemId);
                                client.sendPacket(new ExAutoSoulShot(_itemId, _enable, _type));
                             
                                // Send message
                                final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_AUTOMATIC_USE_OF_S1_HAS_BEEN_ACTIVATED);
                                sm.addItemName(item);
                                client.sendPacket(sm);
                             
                                // Recharge summon's shots
                                final Summon pet = activeChar.getPet();
                                if (pet != null)
                                {
                                    pet.rechargeShots(isSoulshot, isSpiritshot, false);
                                }
                                activeChar.getServitors().values().forEach(s ->
                                {
                                    s.rechargeShots(isSoulshot, isSpiritshot, false);
                                });
                            }
                            else
                            {
                                client.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_SERVITOR_OR_PET_AND_THEREFORE_CANNOT_USE_THE_AUTOMATIC_USE_FUNCTION);
                            }
                            break;
                        }
                        case SPIRITSHOT:
                        case SOULSHOT:
                        case FISHINGSHOT:
                        {
                            final boolean isSoulshot = item.getEtcItem().getDefaultAction() == ActionType.SOULSHOT;
                            final boolean isSpiritshot = item.getEtcItem().getDefaultAction() == ActionType.SPIRITSHOT;
                            final boolean isFishingshot = item.getEtcItem().getDefaultAction() == ActionType.FISHINGSHOT;
                            if ((activeChar.getActiveWeaponItem() == activeChar.getFistsWeaponItem()) || (item.getItem().getCrystalType() != activeChar.getActiveWeaponItem().getCrystalTypePlus()))
                            {
                                client.sendPacket(isSoulshot ? SystemMessageId.THE_SOULSHOT_YOU_ARE_ATTEMPTING_TO_USE_DOES_NOT_MATCH_THE_GRADE_OF_YOUR_EQUIPPED_WEAPON : SystemMessageId.YOUR_SPIRITSHOT_DOES_NOT_MATCH_THE_WEAPON_S_GRADE);
                                return;
                            }
                         
                            // Activate shots
                            activeChar.addAutoSoulShot(_itemId);
                            client.sendPacket(new ExAutoSoulShot(_itemId, _enable, _type));
                         
                            // Send message
                            final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_AUTOMATIC_USE_OF_S1_HAS_BEEN_ACTIVATED);
                            sm.addItemName(item);
                            client.sendPacket(sm);
                         
                            // Recharge player's shots
                            activeChar.rechargeShots(isSoulshot, isSpiritshot, isFishingshot);
                            break;
                        }
                    }
                }
                else
                {
                    // Cancel auto shots
                    activeChar.removeAutoSoulShot(_itemId);
                    client.sendPacket(new ExAutoSoulShot(_itemId, _enable, _type));
                 
                    // Send message
                    final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_AUTOMATIC_USE_OF_S1_HAS_BEEN_DEACTIVATED);
                    sm.addItemName(item);
                    client.sendPacket(sm);
                }
            }
        }
    }
    
    Хотя вот еще строка с крисами:
    Код:
    if ((activeChar.getActiveWeaponItem() == activeChar.getFistsWeaponItem()) || (item.getItem().getCrystalType() != activeChar.getActiveWeaponItem().getCrystalTypePlus()))
    Мб заменить на:
    Код:
    if ((activeChar.getActiveWeaponItem() == activeChar.getFistsWeaponItem()))
     
    Последнее редактирование: 8 окт 2018
  4. Daan Raven

    Daan Raven Свой человек Проверенный

    Регистрация:
    7 апр 2015
    Сообщения:
    735
    Симпатии:
    334
    Баллы:
    469
    Попробуй. А еще, как вариант:
    getCrystalType() -> Find Usages -> вырезать везде, где сравнивается грейд соски с грейдом оружки.
     
    Psycho нравится это.
  5. Psycho

    Psycho Я пчела. Бжж-жж... Проверенный

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    Спасибо, попробую.
     
  6. Gaikotsu

    Gaikotsu яжпрограммист Проверенный

    Регистрация:
    13 авг 2015
    Сообщения:
    621
    Симпатии:
    1.248
    Баллы:
    1.058
    а можно вобще не мучаться с этим всем, а просто для всех расчетов, где соски юзаются, всегда возвращать что ss/bsps заряжены и все.
    т.е. соски как предметы не использовать вобще, а просто считать что всегда активированы бесконечные соски.
     
    Psycho нравится это.
  7. Ethernal

    Ethernal Последний из атеистов Проверенный

    Регистрация:
    16 фев 2015
    Сообщения:
    454
    Симпатии:
    287
    Баллы:
    757
    нужны ли ограничения на грейд?, почему бы не поставить всем вещам скажем Д грейд, поменять картинки д заточек, соул/спиритшотов на нейтральные?
     
  8. Psycho

    Psycho Я пчела. Бжж-жж... Проверенный

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    Неа, должны тратиться.
    з.ы. Пасиб гайка, но не то.
     
  9. Psycho

    Psycho Я пчела. Бжж-жж... Проверенный

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    У меня вопрос к людям которые задают вопросы про грейд в клиенте.
    Вы вообще понимаете о чем я пишу или нет?
    Поменять значения в датниках, хдатах, u и тд, для меня как покурить сходить. Клиент мне по....(я конечно не гуру, но за время научился), я не могу с серверной частью разобраться. Да и трид я создал в Java сервер>Вопросы новичков, а не в клиентской части.
     
    Последнее редактирование: 8 окт 2018
  10. Rozhek

    Rozhek Пляшущий с бубном Пользователь

    Регистрация:
    10 авг 2016
    Сообщения:
    45
    Симпатии:
    17
    Баллы:
    154
    Ты все ещё маешься с этими сосками ))
    Там делов то ничего, сделать всю работу программиста:
    - посмотри все цепочки вариантов взаимодействия с сосками в soulshots.java, autoshot в player.java, requestautosoulshot.java . Удали сравнения crystaltype. Аналогично для спиритшотов.
    - посмотри все методы которые присваивают значение crystaltype, которые возвращаются в getCrystalType и getCrystalTypePlus(в ItemInstance.java). Откуда берутся значения и как присваиваются хоть прямо до парсера предметов.
    - поищи все места где используются getCrystalType и getCrystalTypePlus и могут ли они как то быть связаны с сосками
    - возьми itemId какой то соски и поищи это значение во всех скриптах и классах, вдруг где то есть тайный хардкод
    Если что то не понятно, что где то возвращается, нужно искать что в это поле присваивается и как оно влияет - а не пытаться искать другое место. Только так это работает.
    После всех этих манипуляция определи, может соска уже юзается на сервере(уничтожается предмет, добавляется урон), но нет эффекта в клиенте. В этом случае найди пакет Attack в serverpackets, там есть указание ssgrade - возможно понадобится подменять ид соски на нужную по Грейду, чтобы визуальный эффект сработал
     
    Psycho нравится это.
  11. Psycho

    Psycho Я пчела. Бжж-жж... Проверенный

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    Да я уже понял что копать в сторону крисов, спасибо за помощь всем.)
    Пока просто времени нет проверять это всё.
     
  12. Main

    Main Пляшущий с бубном Пользователь

    Регистрация:
    1 июл 2016
    Сообщения:
    67
    Симпатии:
    11
    Баллы:
    114
    Для тебя в клиенте поправить изи - возьми всю weapogrp и замени crystal_type на 0.
    После в сервере (или там где парс идёт) убери грейд.
    Будет юзать всегда NG соски, но тут тебе надо решать с заточкой.
     
    Psycho нравится это.
  13. *Immortal Pony*

    *Immortal Pony* Бывалый Проверенный

    Регистрация:
    8 май 2015
    Сообщения:
    1.314
    Симпатии:
    602
    Баллы:
    588
    С заточкой проблем не будет, все замечательно описано в enchantItemData.xml - делаем аналогично и у нас точит "мох и болото"
     
  14. cnupum

    cnupum Знающий Местный

    Регистрация:
    26 мар 2015
    Сообщения:
    572
    Симпатии:
    157
    Баллы:
    332
    зачем столько геммороя? грейд нам нужен только для вставки лс, заточки и выбора сосок, провернуть с нонграде просто не получиться нет параметров для лс и заточки, берём любой грейд и регуляркой ставим его для всех итемов за 5 сек поменяешь во всех прндметах, далее в клиенте регуляркой в конце строки датника меняем на нужный грейд и всё, сделай всё одного грейда, скилы штрафа указали зайди и просто поменяй значения в xml, или выпили их в сурсах
     
    Ethernal нравится это.
  15. Main

    Main Пляшущий с бубном Пользователь

    Регистрация:
    1 июл 2016
    Сообщения:
    67
    Симпатии:
    11
    Баллы:
    114
    ЛС с НГ работает нормально (разве что на стороне сервера разрешить аугментацию НГ оружия).
    Почему заточка не должна работать то? А рубашки ольфа? Она же НГ.
    Проблем не будет никаких. Только поправить заточку и всё.
     
  16. Rozhek

    Rozhek Пляшущий с бубном Пользователь

    Регистрация:
    10 авг 2016
    Сообщения:
    45
    Симпатии:
    17
    Баллы:
    154
    Я конечно не претендую на абсолютное мнение, но такие подмены грейдов всего для всего выглядят как какие-то жуткие костыли и нормальным решением не могут являться, потому что:
    - нужно будет тестировать все что связано с грейдами, а тестировать понадобится все, связанное с грейдами
    - есть некая вероятность, что вы можете создать какой-то критичный баг, который просто так не найдете
    - в случае чего нужно будет проворачивать все эти действия в обратном порядке, чтобы вернуть как было
    Нормальным решением будет найти только те необходимые участки, где нужно отключить проверку и сделать конфиги для: а) сосок б) заточек
     
    Мишаня нравится это.
  17. Мишаня

    Мишаня Интересующийся Местный

    Регистрация:
    25 фев 2017
    Сообщения:
    197
    Симпатии:
    132
    Баллы:
    242

    ***Скрытый текст: Для просмотра скрытого текста Вы должны авторизоваться.***

    Пожалуйста Зарегистрируйтесь или Войдите для того чтоб увидеть текст сообщения!

     
  18. cnupum

    cnupum Знающий Местный

    Регистрация:
    26 мар 2015
    Сообщения:
    572
    Симпатии:
    157
    Баллы:
    332
    не пишите ерунды, если не знаете как всё устроено то лучше сначала изучить

     
    Main нравится это.
  19. Rozhek

    Rozhek Пляшущий с бубном Пользователь

    Регистрация:
    10 авг 2016
    Сообщения:
    45
    Симпатии:
    17
    Баллы:
    154
    интересный конечно комментарий)
     
  20. Psycho

    Psycho Я пчела. Бжж-жж... Проверенный

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    Короче я забил на это дело. Трид в мусорку.
     
Похожие темы
  1. kick
    Ответов:
    0
    Просмотров:
    590
  2. I'm StreL
    Ответов:
    18
    Просмотров:
    765
  3. Somon
    Ответов:
    3
    Просмотров:
    495
  4. Becass
    Ответов:
    15
    Просмотров:
    680
  5. ParFumer
    Ответов:
    1
    Просмотров:
    89
Загрузка...
Статус темы:
Закрыта.