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

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

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

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

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

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

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    Интересно, как можно убрать грейд для сосок/точек. Сделать по типу как у петов соски.
    На пример, создать вообще левый предмет нг, и он будет точить от D до S грейда.
    Аналогично с сосками, нг соски работают не зависимо от грейда.
    Куда вообще копать, и возможно ли?
     
  2. Flylink

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

    Регистрация:
    30 апр 2015
    Сообщения:
    388
    Симпатии:
    73
    Баллы:
    338
    SoulShots.java сюда копать
     
    Psycho нравится это.
  3. Psycho

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

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    Это херня. Где находится зависимость по грейду то? От куда он ее берёт вообще?
     
  4. Flylink

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

    Регистрация:
    30 апр 2015
    Сообщения:
    388
    Симпатии:
    73
    Баллы:
    338
    Убрать зависимость грейда - соски/точки, Flylink,1, 1, 5 окт 2018, 18:50, Форум администраторов игровых серверов, 92079, 7463, png, upload_2018-10-5_22-48-49.png
    У меня тут грейды указаны и какие соски, к какому грейду относятся и какой скил при юзе используется, дублируем ид можно юзать хоть на каком оружие
     
  5. Psycho

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

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    Я уже где только не копался, не нашел подобного.
    Сам SoulShots.java
    Код:
    /*
     * Copyright (C) 2004-2015 L2J DataPack
     *
     * This file is part of L2J DataPack.
     *
     * L2J DataPack is free software: you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation, either version 3 of the License, or
     * (at your option) any later version.
     *
     * L2J DataPack is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
     * General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program. If not, see <http://www.gnu.org/licenses/>.
     */
    package l2j.scripts.handlers.itemhandlers;
    
    import java.util.List;
    
    import l2j.commons.util.Rnd;
    import l2j.gameserver.enums.ItemSkillType;
    import l2j.gameserver.enums.ShotType;
    import l2j.gameserver.handler.IItemHandler;
    import l2j.gameserver.handler.ItemHandler;
    import l2j.gameserver.model.actor.Playable;
    import l2j.gameserver.model.actor.instance.PlayerInstance;
    import l2j.gameserver.model.holders.ItemSkillHolder;
    import l2j.gameserver.model.items.Weapon;
    import l2j.gameserver.model.items.instance.ItemInstance;
    import l2j.gameserver.model.items.type.ActionType;
    import l2j.gameserver.network.client.send.MagicSkillUse;
    import l2j.gameserver.network.client.send.string.SystemMessageId;
    import l2j.gameserver.scripting.annotations.GameScript;
    import l2j.gameserver.util.Broadcast;
    
    public class SoulShots implements IItemHandler
    {
        @Override
        public boolean useItem(Playable playable, ItemInstance item, boolean forceUse)
        {
            if (!playable.isPlayer())
            {
                playable.sendPacket(SystemMessageId.YOUR_PET_CANNOT_CARRY_THIS_ITEM);
                return false;
            }
            
            final PlayerInstance activeChar = playable.getActingPlayer();
            final ItemInstance weaponInst = activeChar.getActiveWeaponInstance();
            final Weapon weaponItem = activeChar.getActiveWeaponItem();
            final List<ItemSkillHolder> skills = item.getItem().getSkills(ItemSkillType.NORMAL);
            if (skills == null)
            {
                LOGGER.warn("Item skill list is empty!");
                return false;
            }
            
            final int itemId = item.getId();
            
            // Check if Soul shot can be used
            if ((weaponInst == null) || (weaponItem.getSoulShotCount() == 0))
            {
                if (!activeChar.getAutoSoulShot().contains(itemId))
                {
                    activeChar.sendPacket(SystemMessageId.CANNOT_USE_SOULSHOTS);
                }
                return false;
            }
            
            boolean gradeCheck = item.isEtcItem() && (item.getEtcItem().getDefaultAction() == ActionType.SOULSHOT) && (weaponInst.getItem().getCrystalTypePlus() == item.getItem().getCrystalTypePlus());
            
            if (!gradeCheck)
            {
                if (!activeChar.getAutoSoulShot().contains(itemId))
                {
                    activeChar.sendPacket(SystemMessageId.THE_SOULSHOT_YOU_ARE_ATTEMPTING_TO_USE_DOES_NOT_MATCH_THE_GRADE_OF_YOUR_EQUIPPED_WEAPON);
                }
                return false;
            }
            
            activeChar.soulShotLock.lock();
            try
            {
                // Check if Soul shot is already active
                if (activeChar.isChargedShot(ShotType.SOULSHOTS))
                {
                    return false;
                }
                
                // Consume Soul shots if player has enough of them
                int SSCount = weaponItem.getSoulShotCount();
                if ((weaponItem.getReducedSoulShot() > 0) && (Rnd.get(100) < weaponItem.getReducedSoulShotChance()))
                {
                    SSCount = weaponItem.getReducedSoulShot();
                }
                
                if (!activeChar.destroyItemWithoutTrace("Consume", item.getObjectId(), SSCount, null, false))
                {
                    if (!activeChar.disableAutoShot(itemId))
                    {
                        activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SOULSHOTS_FOR_THAT);
                    }
                    return false;
                }
                // Charge soul shot
                activeChar.chargeShot(ShotType.SOULSHOTS);
            }
            finally
            {
                activeChar.soulShotLock.unlock();
            }
            
            // Send message to client
            activeChar.sendPacket(SystemMessageId.YOUR_SOULSHOTS_ARE_ENABLED);
            skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600));
            return true;
        }
        
        @GameScript
        public static void main()
        {
            ItemHandler.getInstance().registerHandler(new SoulShots());
        }
    }
     
  6. Flylink

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

    Регистрация:
    30 апр 2015
    Сообщения:
    388
    Симпатии:
    73
    Баллы:
    338
    а в самих итемах смотрел?
     
  7. ArtToKill

    ArtToKill Местный житель Партнер

    Регистрация:
    21 янв 2015
    Сообщения:
    1.634
    Симпатии:
    1.556
    Баллы:
    1.150
    gradeCheck от сюда отолкнись, погляди проверки мб в одной из них будет.
     
  8. Psycho

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

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    Всё что нашел в ядре по грейду
    Код:
    /*
     * Copyright (C) 2004-2015 L2J Unity
     *
     * This file is part of L2J Unity.
     *
     * L2J Unity is free software: you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation, either version 3 of the License, or
     * (at your option) any later version.
     *
     * L2J Unity is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
     * General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program. If not, see <http://www.gnu.org/licenses/>.
     */
    package l2j.gameserver.enums;
    
    import l2j.gameserver.model.items.type.CrystalType;
    
    /**
     * @author UnAfraid
     */
    public enum ItemGrade
    {
        NONE,
        D,
        C,
        B,
        A,
        S,
        R,
        EVENT;
       
        public static ItemGrade valueOf(CrystalType type)
        {
            switch (type)
            {
                case NONE:
                    return NONE;
                case D:
                    return D;
                case C:
                    return C;
                case B:
                    return B;
                case A:
                    return A;
                case S:
                    return S;
                case R:
                    return R;
                case S80:
                case S84:
                    return S;
                case R95:
                case R99:
                    return R;
                case EVENT:
                    return EVENT;
               
            }
            return null;
        }
    }
    
    Только кол-во используемых сосок. Потом еще покопаюсь в дп.

    Походу нашел
    Код:
    <item id="2509" name="Spiritshot (No-grade)" type="EtcItem">
            <set name="icon" val="icon.etc_spell_shot_white_i00" />
            <set name="default_action" val="SPIRITSHOT" />
            <set name="immediate_effect" val="true" />
            <set name="material" val="PAPER" />
            <set name="weight" val="4" />
            <set name="price" val="15" />
            <set name="is_stackable" val="true" />
            <set name="handler" val="SpiritShot" />
            <set name="commissionItemType" val="SPIRITSHOT" />
            <set name="etcitem_type" val="SOULSHOT" />
            <set name="is_freightable" val="false" />
            <skills>
                <skill id="2047" level="1" /> <!-- Spiritshot (No-grade) -->
            </skills>
        </item>
        <item id="2510" name="Spiritshot (D-grade)" type="EtcItem">
            <set name="icon" val="icon.etc_spell_shot_blue_i00" />
            <set name="default_action" val="SPIRITSHOT" />
            <set name="immediate_effect" val="true" />
            <set name="material" val="PAPER" />
            <set name="weight" val="4" />
            <set name="price" val="18" />
            <set name="is_stackable" val="true" />
            <set name="handler" val="SpiritShot" />
            <set name="crystal_type" val="D" />
            <set name="enchant_enabled" val="1" />
            <set name="commissionItemType" val="SPIRITSHOT" />
            <set name="etcitem_type" val="SOULSHOT" />
            <set name="is_freightable" val="false" />
            <skills>
                <skill id="2155" level="1" /> <!-- Spiritshot (D-grade) -->
            </skills>
        </item>
        <item id="2511" name="Spiritshot (C-grade)" type="EtcItem">
            <set name="icon" val="icon.etc_spell_shot_green_i00" />
            <set name="default_action" val="SPIRITSHOT" />
            <set name="immediate_effect" val="true" />
            <set name="material" val="PAPER" />
            <set name="weight" val="2" />
            <set name="price" val="35" />
            <set name="is_stackable" val="true" />
            <set name="handler" val="SpiritShot" />
            <set name="crystal_type" val="C" />
            <set name="enchant_enabled" val="1" />
            <set name="commissionItemType" val="SPIRITSHOT" />
            <set name="etcitem_type" val="SOULSHOT" />
            <set name="is_freightable" val="false" />
            <skills>
                <skill id="2156" level="1" /> <!-- Spiritshot (C-grade) -->
            </skills>
        </item>
        <item id="2512" name="Spiritshot (B-grade)" type="EtcItem">
            <set name="icon" val="icon.etc_spell_shot_red_i00" />
            <set name="default_action" val="SPIRITSHOT" />
            <set name="immediate_effect" val="true" />
            <set name="material" val="PAPER" />
            <set name="weight" val="2" />
            <set name="price" val="100" />
            <set name="is_stackable" val="true" />
            <set name="handler" val="SpiritShot" />
            <set name="crystal_type" val="B" />
            <set name="enchant_enabled" val="1" />
            <set name="commissionItemType" val="SPIRITSHOT" />
            <set name="etcitem_type" val="SOULSHOT" />
            <set name="is_freightable" val="false" />
            <skills>
                <skill id="2157" level="1" /> <!-- Spiritshot (B-grade) -->
            </skills>
        </item>
        <item id="2513" name="Spiritshot (A-grade)" type="EtcItem">
            <set name="icon" val="icon.etc_spell_shot_silver_i00" />
            <set name="default_action" val="SPIRITSHOT" />
            <set name="immediate_effect" val="true" />
            <set name="material" val="PAPER" />
            <set name="weight" val="1" />
            <set name="price" val="120" />
            <set name="is_stackable" val="true" />
            <set name="handler" val="SpiritShot" />
            <set name="crystal_type" val="A" />
            <set name="enchant_enabled" val="1" />
            <set name="commissionItemType" val="SPIRITSHOT" />
            <set name="etcitem_type" val="SOULSHOT" />
            <set name="is_freightable" val="false" />
            <skills>
                <skill id="2158" level="1" /> <!-- Spiritshot (A-grade) -->
            </skills>
        </item>
        <item id="2514" name="Spiritshot (S-grade)" type="EtcItem">
            <set name="icon" val="icon.etc_spell_shot_gold_i00" />
            <set name="default_action" val="SPIRITSHOT" />
            <set name="immediate_effect" val="true" />
            <set name="material" val="PAPER" />
            <set name="weight" val="1" />
            <set name="price" val="150" />
            <set name="is_stackable" val="true" />
            <set name="handler" val="SpiritShot" />
            <set name="crystal_type" val="S" />
            <set name="enchant_enabled" val="1" />
            <set name="commissionItemType" val="SPIRITSHOT" />
            <set name="etcitem_type" val="SOULSHOT" />
            <set name="is_freightable" val="false" />
            <skills>
                <skill id="2159" level="1" /> <!-- Spiritshot (S-grade) -->
            </skills>
        </item>
    Но это сами соски. А как сделать, чтобы юзались одни на всё оружие. (нг соски к примеру)
    Чё-то я вообще не въеду.
     
    Последнее редактирование модератором: 5 окт 2018
  9. KRIVOSHEEV

    KRIVOSHEEV Previously Lolipop Пользователь

    Регистрация:
    1 дек 2016
    Сообщения:
    68
    Симпатии:
    5
    Баллы:
    109
    Ребз, какую IDE под линагу юзаете? ))
     
  10. Psycho

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

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    Убрать зависимость грейда - соски/точки, Psycho,2, 1, 5 окт 2018, 19:38, Форум администраторов игровых серверов, 92087, 7463, jpg, Screenshot.jpg

    Вот какие параметры в итемах. Использования грейда сосок не указано.
    Код:
    <item id="4700" name="Sword of Delusion" name_additional="Health" type="Weapon">
            <set name="icon" val="icon.weapon_sword_of_delusion_i01" />
            <set name="default_action" val="EQUIP" />
            <set name="weapon_type" val="SWORD" />
            <set name="bodypart" val="rhand" />
            <set name="damage_range" val="0;0;40;120" />
            <set name="immediate_effect" val="true" />
            <set name="crystal_count" val="177" />
            <set name="crystal_type" val="C" />
            <set name="material" val="MITHRIL" />
            <set name="weight" val="1400" />
            <set name="price" val="660860" />
            <set name="soulshots" val="3" />
            <set name="spiritshots" val="3" />
            <set name="enchant_enabled" val="1" />
            <set name="commissionItemType" val="ONE_HAND_SWORD" />
            <set name="isAppearanceable" val="true" />
            <set name="is_freightable" val="false" />
            <skills>
                <skill id="3013" level="1" /> <!-- Special Ability: Health -->
            </skills>
            <stats>
                <stat type="pAtk">139</stat>
                <stat type="mAtk">76</stat>
                <stat type="rCrit">8</stat>
                <stat type="pAtkSpd">379</stat>
                <stat type="randomDamage">10</stat>
                <stat type="pAtkRange">40</stat>
            </stats>
        </item>
    Походу по любому где-то в ядре, а не дп.

    Я хз даже. Уже и блокнотом рылся.
    sfasf.jpg
    Убрать зависимость грейда - соски/точки, 5 окт 2018, 15:44, Форум администраторов игровых серверов, 7463
     
    Последнее редактирование модератором: 5 окт 2018
    KRIVOSHEEV нравится это.
  11. Rozhek

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

    Регистрация:
    10 авг 2016
    Сообщения:
    45
    Симпатии:
    17
    Баллы:
    154
    Просто удали эту часть проверки из soulshots:
    weaponInst.getItem().getCrystalTypePlus() == item.getItem().getCrystalTypePlus()

    Удаление этого по идее позволит все соски на все оружие юзать:
    weaponInst.getItem().getCrystalTypePlus() == item.getItem().getCrystalTypePlus()

    А если только нг, то надо добавить условие:
    boolean gradeCheck = item.isEtcItem() && (item.getEtcItem().getDefaultAction() == ActionType.SOULSHOT) && (weaponInst.getItem().getCrystalTypePlus() == item.getItem().getCrystalTypePlus() || item.getItem().getCrystalTypePlus() == 0);
    В конце может быть 0 или "" или какой-то другой тип данных который эта функция возвращает для нг сосок.
     
    Последнее редактирование модератором: 5 окт 2018
    Psycho нравится это.
  12. Psycho

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

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    Спасибо, попробую.
    upd.
    Херня, начинают работать не правильно (вообще перестают работать, и тд)
    Пробовал даже закоментить, эффект тот же:
    Код:
    /**
            boolean gradeCheck = item.isEtcItem() && (item.getEtcItem().getDefaultAction() == ActionType.SOULSHOT) && (weaponInst.getItem().getCrystalType() == item.getItem().getCrystalType());
        
            if (!gradeCheck)
            {
                if (!activeChar.getAutoSoulShot().contains(itemId))
                {
                    activeChar.sendPacket(SystemMessageId.THE_SOULSHOT_YOU_ARE_ATTEMPTING_TO_USE_DOES_NOT_MATCH_THE_GRADE_OF_YOUR_EQUIPPED_WEAPON);
                }
                return false;
            }
            */
    Мб где-то еще могут быть?
    @Flylink можешь мне свой SoulShots скинуть? Гляну как у тебя. Мб просто переделать придется.
    Либо что за сурсы юзаешь.
     
    Последнее редактирование: 5 окт 2018
  13. Rozhek

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

    Регистрация:
    10 авг 2016
    Сообщения:
    45
    Симпатии:
    17
    Баллы:
    154
    Попробуй руками по соске кликать. если будет работать - значит нужно ещё внести корректировки в вызов autosoulshot/autoshot внутри player/playable. Скорее всего проблема в том что все соски на автоюзе пытаются использоваться одновременно.
     
    Psycho нравится это.
  14. Ext1ne

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

    Регистрация:
    29 сен 2016
    Сообщения:
    28
    Симпатии:
    10
    Баллы:
    142
    Тип кристаллов в шмотке попробуй сменить, вроде бы, по ним привязка к греду идет.
     
    Psycho нравится это.
  15. Psycho

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

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    Попробую.
    upd.
    Работают, только если на них нажимать. (привет с1 :D)
    Да хз, соски убираются с панели автоюза вообще, а если тыкать по нг соскам, то да, юзаются, и то только после одевания нг пухи.

    Ладно, пока на сосках завис, займусь другим. Как с заточками быть, необходимо по сути тоже самое, точить свитками любого грейда?
     
    Последнее редактирование модератором: 6 окт 2018
  16. Rozhek

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

    Регистрация:
    10 авг 2016
    Сообщения:
    45
    Симпатии:
    17
    Баллы:
    154
    С заточкой сложнее, там много изменений надо вносить, для защиты от дюпов/багов в коде может быть куча проверок. Вообще нужны 3 файла: enchantscroll или enchantable, requestenchant и ещё один пакетный класс(напомню название, что то похожее на request enchant item), который отвечает за пакет выбора вещи, когда его в окно енчанта помещают
     
    Psycho нравится это.
  17. Psycho

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

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

    з.ы. а я то дурак думал всё чуток проще будет. :D
     
  18. cnupum

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

    Регистрация:
    26 мар 2015
    Сообщения:
    572
    Симпатии:
    157
    Баллы:
    332
    там идёт статическая привязка по ID так что просто в soulshots.java отключить не получится, всё привязано к grade+кристаллам, туда и копай, по типу
    D grade = D crystall (ID)
    а к этому потом привязаны соски
     
    Последнее редактирование: 6 окт 2018
    Psycho нравится это.
  19. Psycho

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

    Регистрация:
    23 янв 2016
    Сообщения:
    2.668
    Симпатии:
    934
    Баллы:
    1.359
    Я так понял, что всё что связанно с кристаллами придётся отрубать?
    Сам грейд оружия хоть не пропадет (я имею ввиду иконки D, C, B и тд), а то с таким же успехом можно просто нг пухи создавать?
     
    Последнее редактирование: 6 окт 2018
  20. Rovskoi

    Rovskoi Пляшущий с бубном Местный

    Регистрация:
    2 дек 2015
    Сообщения:
    57
    Симпатии:
    22
    Баллы:
    150
    Иконки в клиенте в датниках (зависит от crystal_type или чет такое)
    Изменение типа кристалов в сборке может потянуть за собой отключение штрафа на оружие (допустим носить А шмот на 20 уровне) и прочее.
    Я бы всё равно копал в сторону именно сосок
     
Похожие темы
  1. kick
    Ответов:
    0
    Просмотров:
    590
  2. I'm StreL
    Ответов:
    18
    Просмотров:
    765
  3. Somon
    Ответов:
    3
    Просмотров:
    495
  4. Becass
    Ответов:
    15
    Просмотров:
    680
  5. ParFumer
    Ответов:
    1
    Просмотров:
    88
Загрузка...
Статус темы:
Закрыта.