Баги/Дюпы/Недоработки овера(лостворлда)/etc

Был баг на валике садишься твином на язык вал на этого твина агрится и никуя не делая прост стоит когда его били прост стоял
 

Фикс лист под спойлером. Часть к багам\дюпам относится.
 

Видео было создано с использованием l2jacis (так говорит владелец / разработчик сервера), но L2J получил ту же проблему. Все не настроенные версии L2J, использующие WeaponEquipTask, получили эту проблему. Даже если вы установили исправления в других местах, чтобы избежать получения нескольких похожих элементов с одинаковым objectId, это начальная проблема и единственное исправление, которое вы должны сделать.

Для L2J я решил опубликовать это исправление бесплатно
Короткая версия: при использовании UseItem и если вы в данный момент атакуете, вызывается WeaponEquipTask, чтобы задержать время ношения вашего оружия.



Проблема: нет проверки при вызове задачи. Предмет экипирован, независимо от того, что произошло между временем вызова и временем износа (если вы удалили, закристаллизовались, уронили, поместили предмет в другое место, ...).

Исправлено: проверка по вызову задачи, если предмет все еще существует в инвентаре.

Для L2J (рассмотрите возможность редактирования вызываемого метода - удалите параметр элемента).

Java:
 /** Weapon Equip Task */
    private static class WeaponEquipTask implements Runnable
    {
        private final L2PcInstance activeChar;
      
        protected WeaponEquipTask(L2PcInstance character)
        {
            activeChar = character;
        }
      
        @Override
        public void run()
        {
            // Check if the item is still on inventory.
            final ItemInstance item = activeChar.getInventory().getItemByObjectId(_objectId);
            if (item == null)
                return;
          
            // Equip or unEquip
            activeChar.useEquippableItem(item, false);
        }
    }


Если вы используете aCis, вот измененная задача, найденная в UseItem (будет частью rev 380):

Java:
    if (activeChar.isAttackingNow())
                ThreadPool.schedule(() -> {
                    final ItemInstance itemToTest = activeChar.getInventory().getItemByObjectId(_objectId);
                    if(itemToTest == null)
                        return;
                 
                    activeChar.useEquippableItem(itemToTest, false);
                }, activeChar.getAttackEndTime() - System.currentTimeMillis());
            else
                activeChar.useEquippableItem(item, true);

Сразу скажу автор темы не я а Tryskell.Сорри за русский язык. Если kick может то пусть подправит.
 
Вот так поможет.
package com.l2jserver.gameserver.network.clientpackets;
RequestGiveItemToPet

if (player.isCastingNow() || player.isCastingSimultaneouslyNow())
{
return;
}
 
хмм, интересная штука.
не понимаю как такое не всплыло раньше.
спасибо)
 
игрокам просто лень искать
подобных багов на каждом шагу можно найти пачку

там стандартная проверка в нпсинстанс

упс уже ответили

если не ошибаюсь даже с L2text с хелпа можно будет использовать данный баг, взяв асист олимп бафера (таким способом ни 1 защита не помешает если файлы не добавленны в проверку )
 
Последнее редактирование модератором:
4ipolino
canBypassCheck - а можешь еще и этот метод скинуть ?)
 
Java:
    public static boolean canBypassCheck(final Player player, final NpcInstance npc) {
        if (npc == null || player.isDead() || !npc.isInRangeZ(player, npc.getInteractDistance(player)) || player.isTerritoryFlagEquipped()) {
            player.sendActionFailed();
            return false;
        }
        return true;
    }
 
  • Мне нравится
Реакции: kick
S - safety
 
ещё и создание коллекции, когда она здесь не нужна)
 
ещё и создание коллекции, когда она здесь не нужна)
ну почему же, ведь callSkill вторым параметром принимает коллекцию, а по сути можно было июзать Collections.singletonList().
 
  • Мне нравится
Реакции: kick
Вот почему по возможности надо запрашивать что-то (итемы, скиллы и т.д.) всегда по индексу из готового списка вариантов, а не прямым указанием ид желаемого.

моя старая реализация, из предыдущей версии сервера. а сейчас и проще даже - у меня ща кладется разом все за один клик - сразу все поэмы + одна из 3 гармоний на выбор.
 
Последнее редактирование:
Назад
Сверху Снизу