Наушники с играющей при одевании музыкой :D

Gaikotsu

яжпрограммист
Легенда
Победитель в номинации 2023
Победитель в номинации 2022
Победитель в номинации 2021
Участник Новогоднего Фонда 2021
Эксперт
Знаток
Просветитель
Магистр реакций
Знаток письма
Куратор Данных
Медаль Благодарности
Старожил II степени
Старожил I степени
Победитель в номинации 2020
Победитель в номинации 2019
Клиент разработчик
Преподаватель
За веру и верность форуму
Победитель в номинации 2018
Медаль за активность на Форуме
За заслуги перед форумом
Web разработчик
Разработчик
За знание датапака
За знание ядра
Сообщения
1 520
Розыгрыши
0
Решения
24
Репутация
6 004
Реакции
2 581
Баллы
2 188
это не единственный вариант реализации - если делать "по оффу", то надо реализовывать скилл-пассивку, которая бы срабатывала при одевании/снимании украшения:
 
На днях реализовывал работу эффектов p_replace_skill и p_intercept_skill "по оффу" в виде стат и потребовалось как-то реализовать оперативную реакцию на добавление/удаление для игрока стат, реализующих работу этих эффектов, чтобы делать подмены определенных скиллов на время действия этих стат :)
Ну и в итоге остановился на самом простом и логичном способе - возможности вызывать слушатели для определенных стат при их добавлении/удалении в/из калькулятора стат (у меня сборка на базе овера, если кто не в курсе, и там нет как таковых эффектов для пассивок и все такое - там все работает через статы и калькулятор этих стат). Ну и ради прикола переписал так же и выше указанную реализацию наушников с музыкой с варианта работающего через листенеры одевания/снимания предметов на листенеры отслеживающие определенную стату в скилле-пассивке этих наушников.
Так что по сути теперь это работает почти так же как на оффе :D
Java:
package listeners.stats;

import l2p.gameserver.enums.SoundType;
import l2p.gameserver.listener.actor.player.OnStatFuncListener;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.actor.listener.PlayerListenerList;
import l2p.gameserver.network.s2c.PlaySound;
import l2p.gameserver.scripts.ScriptFile;
import l2p.gameserver.stats.Stats;
import l2p.gameserver.stats.funcs.Func;
import l2p.gameserver.utils.Strings;

/**
 * Слушатель статы "playMusic", при добавлении начинающей воспроизведение определенной музыки из клиента и останавливающей ее при своем удалении
 *
 * @author Gaikotsu
 */
public class PlayMusic implements ScriptFile
{
    private static final String[] _music = {
        "br_music_Town",
        "br_music_Hero",
        "br_music_theme_park" };

    private static final StatFuncListener _listener = new StatFuncListener();

    @Override
    public void onLoad()
    {
        PlayerListenerList.addGlobal(_listener);
    }

    @Override
    public void onReload()
    {
        PlayerListenerList.removeGlobal(_listener);
    }

    private static class StatFuncListener implements OnStatFuncListener
    {
        @Override
        public void onAdd(Player player, Func func)
        {
            player.sendPacket(new PlaySound(SoundType.MUSIC, _music[(int) func._value]));
        }

        @Override
        public void onRemove(Player player, Func func)
        {
            player.sendPacket(new PlaySound(SoundType.MUSIC, Strings.EMPTY));
        }

        @Override
        public boolean checkCondition(Stats stat)
        {
            return stat == Stats.PLAY_MUSIC;
        }
    }
}
 
На днях реализовывал работу эффектов p_replace_skill и p_intercept_skill "по оффу" в виде стат и потребовалось как-то реализовать оперативную реакцию на добавление/удаление для игрока стат, реализующих работу этих эффектов, чтобы делать подмены определенных скиллов на время действия этих стат :)
Ну и в итоге остановился на самом простом и логичном способе - возможности вызывать слушатели для определенных стат при их добавлении/удалении в/из калькулятора стат (у меня сборка на базе овера, если кто не в курсе, и там нет как таковых эффектов для пассивок и все такое - там все работает через статы и калькулятор этих стат). Ну и ради прикола переписал так же и выше указанную реализацию наушников с музыкой с варианта работающего через листенеры одевания/снимания предметов на листенеры отслеживающие определенную стату в скилле-пассивке этих наушников.
Так что по сути теперь это работает почти так же как на оффе :D
На офе p_ эффекты это не только функции, но и полноценный эффект, который может включаться\выключаться.
Соответственно, это триггерит эти функции.


Скрытое содержимое доступно для зарегистрированных пользователей!
 
Ну в целом принцип примерно тот же по сути.

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