[High Five] Как привязать эффект свечения руки к экипированному талисману?

Arinvint

Путник
Участник
Сообщения
16
Розыгрыши
0
Репутация
11
Реакции
6
Баллы
19
Хроники
  1. Chaotic Throne: High Five
Исходники
Отсутствуют
Сборка
Mobius
Всем привет. Сборка L2J Mobius High Five.


Есть несколько кастомных талисманов, которые надеваются в слоты браслета. Хочу добавить визуальный эффект свечения руки, пока определённый талисман экипирован. После снятия или замены талисмана эффект должен автоматически исчезать.


Подскажите, пожалуйста, где правильнее реализовать такую привязку:


  • через клиентские ItemEffect/DAT-файлы;
  • через пассивный скилл с визуальным эффектом;
  • либо обработкой экипировки на стороне сервера?

Желательно, чтобы эффект видели окружающие игроки, а не только владелец персонажа.


Если это делается через LineageEffect, skill.usk или другой клиентский пакет, подскажите направление и какие строки DAT отвечают за связь предмета с эффектом.


Заранее спасибо.
 
Через абнормалы можешь навешать например.
 
Через абнормалы можешь навешать например.
Спасибо. Правильно понимаю, что эффект нужно добавить в пассивный skill талисмана через abnormal visual effect?
Подскажите, пожалуйста, какой именно параметр используется в High Five/Mobius: abnormalVisualEffect, abnormalType, abnormalEffect или отдельный effect handler?
 
Спасибо. Правильно понимаю, что эффект нужно добавить в пассивный skill талисмана через abnormal visual effect?
Подскажите, пожалуйста, какой именно параметр используется в High Five/Mobius: abnormalVisualEffect, abnormalType, abnormalEffect или отдельный effect handler?
Абнормалы захардкожены в старых клиентах.
Java:
package org.l2jmobius.gameserver.mechanics.skill;

/**
 * Abnormal Visual Effect enumerated.
 * @author DrHouse, Zoey76
 */
public enum AbnormalVisualEffect
{
    NONE(0x0000000, 0),
    DOT_BLEEDING(0x00000001, 0),
    DOT_POISON(0x00000002, 0),
    DOT_FIRE(0x00000004, 0),
    DOT_WATER(0x00000008, 0),
    DOT_WIND(0x00000010, 0),
    DOT_SOIL(0x00000020, 0),
    STUN(0x00000040, 0),
    SLEEP(0x00000080, 0),
    SILENCE(0x00000100, 0),
    ROOT(0x00000200, 0),
    PARALYZE(0x00000400, 0),
    FLESH_STONE(0x00000800, 0),
    DOT_MP(0x00001000, 0),
    BIG_HEAD(0x00002000, 0),
    DOT_FIRE_AREA(0x00004000, 0),
    CHANGE_TEXTURE(0x00008000, 0),
    BIG_BODY(0x00010000, 0),
    FLOATING_ROOT(0x00020000, 0),
    DANCE_ROOT(0x00040000, 0),
    GHOST_STUN(0x00080000, 0),
    STEALTH(0x00100000, 0),
    SEIZURE1(0x00200000, 0),
    SEIZURE2(0x00400000, 0),
    MAGIC_SQUARE(0x00800000, 0),
    FREEZING(0x01000000, 0),
    SHAKE(0x02000000, 0),
    BLIND(0x04000000, 0),
    ULTIMATE_DEFENCE(0x08000000, 0),
    VP_UP(0x10000000, 0),
    REAL_TARGET(0x20000000, 0),
    DEATH_MARK(0x40000000, 0),
    TURN_FLEE(0x80000000, 0),
    VP_KEEP(0x10000000, 0), // TODO: Find.
    // Special
    INVINCIBILITY(0x000001, 1),
    AIR_BATTLE_SLOW(0x000002, 1),
    AIR_BATTLE_ROOT(0x000004, 1),
    CHANGE_WP(0x000008, 1),
    CHANGE_HAIR_G(0x000010, 1),
    CHANGE_HAIR_P(0x000020, 1),
    CHANGE_HAIR_B(0x000040, 1),
    STIGMA_OF_SILEN(0x000100, 1),
    SPEED_DOWN(0x000200, 1),
    FROZEN_PILLAR(0x000400, 1),
    CHANGE_VES_S(0x000800, 1),
    CHANGE_VES_C(0x001000, 1),
    CHANGE_VES_D(0x002000, 1),
    TIME_BOMB(0x004000, 1), // High Five
    MP_SHIELD(0x008000, 1), // High Five
    NAVIT_ADVENT(0x080000, 1), // High Five
  
    // Event
    // TODO: Fix, currently not working.
    BR_NONE(0x000000, 2),
    BR_AFRO_NORMAL(0x000001, 2),
    BR_AFRO_PINK(0x000002, 2),
    BR_AFRO_GOLD(0x000004, 2),
    BR_POWER_OF_EVA(0x000008, 2), // High Five
    BR_HEADPHONE(0x000010, 2), // High Five
    BR_VESPER1(0x000020, 2),
    BR_VESPER2(0x000040, 2),
    BR_VESPER3(0x000080, 2),
    BR_SOUL_AVATAR(0x000100, 2); // High Five
  
    /** Int mask. */
    private final int _mask;
    /** Type: 0 Normal, 1 Special, 2 Event. */
    private final int _type;
  
    private AbnormalVisualEffect(int mask, int type)
    {
        _mask = mask;
        _type = type;
    }
  
    /**
     * Gets the int bitmask for the abnormal visual effect.
     * @return the int bitmask
     */
    public int getMask()
    {
        return _mask;
    }
  
    /**
     * Verify if it's a special abnormal visual effect.
     * @return {@code true} it's a special abnormal visual effect, {@code false} otherwise
     */
    public boolean isSpecial()
    {
        return _type == 1;
    }
  
    /**
     * Verify if it's an event abnormal visual effect.
     * @return {@code true} it's an event abnormal visual effect, {@code false} otherwise
     */
    public boolean isEvent()
    {
        return _type == 2;
    }
}

В современных клиентах всё куда проще, есть датка AbnormalDefaultEffect.
 
На отвали можно и в AdditionalEffect.dat сделать, тогда ефектьі должньі лежать в дефолтном LineageEffect.u, скейла под рассьі не будет, офсетьі тоже на всех один, будет постоянно респавнится и вьіглядеть как залаганое говно. Если так чтобьі нормально вьіглядело - либо екст, либо пакетку до новее клиента апать. :D
UPD: а, забьіл, там вязать на перчи придется и костьілять в пакетке, ибо браслетьі хф, по-моему, не воспримет и не привяжет туда ничего.
 
Абнормалы захардкожены в старых клиентах.
Java:
package org.l2jmobius.gameserver.mechanics.skill;

/**
 * Abnormal Visual Effect enumerated.
 * @author DrHouse, Zoey76
 */
public enum AbnormalVisualEffect
{
    NONE(0x0000000, 0),
    DOT_BLEEDING(0x00000001, 0),
    DOT_POISON(0x00000002, 0),
    DOT_FIRE(0x00000004, 0),
    DOT_WATER(0x00000008, 0),
    DOT_WIND(0x00000010, 0),
    DOT_SOIL(0x00000020, 0),
    STUN(0x00000040, 0),
    SLEEP(0x00000080, 0),
    SILENCE(0x00000100, 0),
    ROOT(0x00000200, 0),
    PARALYZE(0x00000400, 0),
    FLESH_STONE(0x00000800, 0),
    DOT_MP(0x00001000, 0),
    BIG_HEAD(0x00002000, 0),
    DOT_FIRE_AREA(0x00004000, 0),
    CHANGE_TEXTURE(0x00008000, 0),
    BIG_BODY(0x00010000, 0),
    FLOATING_ROOT(0x00020000, 0),
    DANCE_ROOT(0x00040000, 0),
    GHOST_STUN(0x00080000, 0),
    STEALTH(0x00100000, 0),
    SEIZURE1(0x00200000, 0),
    SEIZURE2(0x00400000, 0),
    MAGIC_SQUARE(0x00800000, 0),
    FREEZING(0x01000000, 0),
    SHAKE(0x02000000, 0),
    BLIND(0x04000000, 0),
    ULTIMATE_DEFENCE(0x08000000, 0),
    VP_UP(0x10000000, 0),
    REAL_TARGET(0x20000000, 0),
    DEATH_MARK(0x40000000, 0),
    TURN_FLEE(0x80000000, 0),
    VP_KEEP(0x10000000, 0), // TODO: Find.
    // Special
    INVINCIBILITY(0x000001, 1),
    AIR_BATTLE_SLOW(0x000002, 1),
    AIR_BATTLE_ROOT(0x000004, 1),
    CHANGE_WP(0x000008, 1),
    CHANGE_HAIR_G(0x000010, 1),
    CHANGE_HAIR_P(0x000020, 1),
    CHANGE_HAIR_B(0x000040, 1),
    STIGMA_OF_SILEN(0x000100, 1),
    SPEED_DOWN(0x000200, 1),
    FROZEN_PILLAR(0x000400, 1),
    CHANGE_VES_S(0x000800, 1),
    CHANGE_VES_C(0x001000, 1),
    CHANGE_VES_D(0x002000, 1),
    TIME_BOMB(0x004000, 1), // High Five
    MP_SHIELD(0x008000, 1), // High Five
    NAVIT_ADVENT(0x080000, 1), // High Five
 
    // Event
    // TODO: Fix, currently not working.
    BR_NONE(0x000000, 2),
    BR_AFRO_NORMAL(0x000001, 2),
    BR_AFRO_PINK(0x000002, 2),
    BR_AFRO_GOLD(0x000004, 2),
    BR_POWER_OF_EVA(0x000008, 2), // High Five
    BR_HEADPHONE(0x000010, 2), // High Five
    BR_VESPER1(0x000020, 2),
    BR_VESPER2(0x000040, 2),
    BR_VESPER3(0x000080, 2),
    BR_SOUL_AVATAR(0x000100, 2); // High Five
 
    /** Int mask. */
    private final int _mask;
    /** Type: 0 Normal, 1 Special, 2 Event. */
    private final int _type;
 
    private AbnormalVisualEffect(int mask, int type)
    {
        _mask = mask;
        _type = type;
    }
 
    /**
     * Gets the int bitmask for the abnormal visual effect.
     * @return the int bitmask
     */
    public int getMask()
    {
        return _mask;
    }
 
    /**
     * Verify if it's a special abnormal visual effect.
     * @return {@code true} it's a special abnormal visual effect, {@code false} otherwise
     */
    public boolean isSpecial()
    {
        return _type == 1;
    }
 
    /**
     * Verify if it's an event abnormal visual effect.
     * @return {@code true} it's an event abnormal visual effect, {@code false} otherwise
     */
    public boolean isEvent()
    {
        return _type == 2;
    }
}

В современных клиентах всё куда проще, есть датка AbnormalDefaultEffect.
Спасибо, теперь понял. То есть в High Five можно использовать только уже захардкоженные клиентом abnormal visual effects из этого списка, а добавить собственный через DAT, как в новых клиентах, не получится.

Подскажите тогда, есть ли среди существующих abnormal-эффектов High Five подходящий вариант именно для постоянного свечения руки? Нужно, чтобы эффект включался пассивным навыком при экипировке талисмана, был виден окружающим игрокам и автоматически исчезал после снятия предмета.

Если подходящего abnormal в клиенте нет, правильно ли понимаю, что тогда потребуется добавлять или заменять эффект непосредственно в клиентских пакетах?
Сообщение объединено:
На отвали можно и в AdditionalEffect.dat сделать, тогда ефектьі должньі лежать в дефолтном LineageEffect.u, скейла под рассьі не будет, офсетьі тоже на всех один, будет постоянно респавнится и вьіглядеть как залаганое говно. Если так чтобьі нормально вьіглядело - либо екст, либо пакетку до новее клиента апать. :D
UPD: а, забьіл, там вязать на перчи придется и костьілять в пакетке, ибо браслетьі хф, по-моему, не воспримет и не привяжет туда ничего.
Спасибо за подробное объяснение. Тогда вариант через AdditionalEffect.dat отпадает — постоянно пересоздающийся эффект без нормального scale и offset мне точно не подходит.

Хотелось бы сохранить обычный клиент High Five без extender и без перехода на более новый протокол. Остаётся ли в таком случае только использование одного из уже захардкоженных AbnormalVisualEffect?

Если среди стандартных abnormal нет подходящего стабильного свечения руки, тогда, видимо, от этой идеи лучше отказаться. Привязка через перчатки и дополнительный костыль в пакетах ради одного талисмана будет слишком сложным решением.
 
Спасибо, теперь понял. То есть в High Five можно использовать только уже захардкоженные клиентом abnormal visual effects из этого списка, а добавить собственный через DAT, как в новых клиентах, не получится.

Подскажите тогда, есть ли среди существующих abnormal-эффектов High Five подходящий вариант именно для постоянного свечения руки? Нужно, чтобы эффект включался пассивным навыком при экипировке талисмана, был виден окружающим игрокам и автоматически исчезал после снятия предмета.

Если подходящего abnormal в клиенте нет, правильно ли понимаю, что тогда потребуется добавлять или заменять эффект непосредственно в клиентских пакетах?
Это к любителям колупать трупы старых клиентов. Rolo, Vikos, ◄√i®uS►
 
Arinvint, без екста, без реатача ефекта и на родном 267-273 нет, вариантов нет. Абнормал же не привяжется к руке сам по себе, на хфе нет ничего такого. Нет, ладно, через костьіли можно что угодно сделать, но екст намного адекватнее решение, если хочетя на старом хфе сидеть. )
 
Понял, спасибо всем за подробные ответы. Значит, на чистом клиенте High Five 267–273 корректно привязать такой эффект к руке не получится, а костылить через перчатки и пакеты смысла нет.

Пока оставлю эту идею, а если вернусь к ней в будущем — буду смотреть в сторону extender. Спасибо, вопрос решён.
 
Arinvint, если шо, привяжу что угодно, куда угодно, без лагов, смс и реестрации, но не дешево. :D
PS: снимал на 10 фпс, чтобьі видео влезло по размеру. )0))
Посмотреть вложение 2026-09-15 21-48-49.mp4

Ефектьі не респавнятся лишний раз настолько, что даже при смене плаща старьій ефект продолжает жить, если он еще уместен. ) Скейл под рассьі, офсетьі, все такое. Ну крч, порекламировались, можно и делом заняться. )
Посмотреть вложение 2026-09-15 21-53-57.mp4
 
Последнее редактирование:
Arinvint, если шо, привяжу что угодно, куда угодно, без лагов, смс и реестрации, но не дешево. :D
PS: снимал на 10 фпс, чтобьі видео влезло по размеру. )0))
Посмотреть вложение 97864

Ефектьі не респавнятся лишний раз настолько, что даже при смене плаща старьій ефект продолжает жить, если он еще уместен. ) Скейл под рассьі, офсетьі, все такое. Ну крч, порекламировались, можно и делом заняться. )
Посмотреть вложение 97866
Написал в личку
 
Назад
Сверху Снизу