Разное время бафов

  • Автор темы Автор темы onedev
  • Дата начала Дата начала

onedev

Знаменитый
Участник
Сообщения
36
Розыгрыши
0
Репутация
-8
Реакции
5
Баллы
1 245
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
l2jmobius
Сабж, как сделать разное время бафов в зависимости от того кто наложил баф ?
 
Сабж, как сделать разное время бафов в зависимости от того кто наложил баф ?
примерчки можно ?
Эльф накинул - баф висит 10 минут
Хуман накинул тот же баф - висит 5 минут
Все кидаются на одну и ту же цель, и у всех бафов должна бытб такая зависимость ?
Типо так ?
 
почти, если кидает перс то дефолт из xml если кидает нпц то время другое, по идее условие должно быть рядом с
applyEffects(Creature effector, Creature effected)
но в примении нет того кто бросил баф и получил его(
 
почти, если кидает перс то дефолт из xml если кидает нпц то время другое, по идее условие должно быть рядом с
applyEffects(Creature effector, Creature effected)
но в примении нет того кто бросил баф и получил его(
Вроде нубобаферский баф через скрипт кидается и это не тот же самый баф.
 
Мобиуса сборки нет.


В скрипте нпц баффа должно быть что-то вроде
Логан, братишка, ты еще в ла2 ?))))
Скрытое содержимое доступно для зарегистрированных пользователей!

setPeriod нету

Вроде нубобаферский баф через скрипт кидается и это не тот же самый баф.
skill.applyEffects(this, player); так же (
 
/**
* Method overload for {@link Skill#applyEffects(Creature, Creature, boolean, boolean, boolean, int, ItemInstance)}.<br>
* Simplify the calls, allowing abnormal time time customization.
* @param effector the caster of the skill
* @param effected the target of the effect
* @param instant if {@code true} instant effects will be applied to the effected
* @param abnormalTime custom abnormal time, if equal or lesser than zero will be ignored
*/
public void applyEffects(Creature effector, Creature effected, boolean instant, int abnormalTime)
 
это мб в хрониках выше, в ИЛ так
 

Вложения

  • EiteW3kQ[1].webp
    EiteW3kQ[1].webp
    12,4 КБ · Просмотры: 38
Вроде сделал, костыль конечно но легче чем адаптировать баф с хроник выше
Код:
duration = 55555;
_currentTask = new EffectTask(duration*1000, -1);
_currentFuture = ThreadPool.schedule(_currentTask, duration*1000);

теперь вопрос, баф например из войс команды или альт б, как подменить
Код:
Creature effector
? (c null тоже работает, но нужно отделить баф персонажа от баффера)
 
я не очень понял - ты просто в сам метод, внутрь, впихнул эту переменную или все же передаешь в параметрах при вызове метода?

вобще посоветовал бы посмотреть в сторону scheduleEffect() в Effect, а конкретно на испольуземую там переменную _period эффекта
можно к примеру для нужных скиллов, в самом скилле эффекта перед баффом выставлять нужный период в отдельной переменной и вот тут вот проверять, что если в скилле эта переменная не равна 0 - использовать ее вместо _period
не забывай только после самого наложения убрать обратно из скилла занчение это, т.е. в 0 выставить - чтобы все последующие наложения в других местах тоже не стали с измененным временем.

не спорю - костыль тот еще, но в целом работать более-менее будет, а как более вменяемо сделать - это слишком много расписывать...
 
Последнее редактирование:
  • Мне нравится
Реакции: KATE
я не очень понял - ты просто в сам метод, внутрь, впихнул эту переменную или все же передаешь в параметрах при вызове метода?
на текущий момент тест пока так ибо всплыли проблемы с возобновлением бафа после логаута, после конечно на переменную повешу :)

Проблема пришла откуда не ждали
Сохранение и восстановление бафа при рестарте
добавил флаг откуда баф (баффер или персонаж) при сохранении бафов в таблицу, сервер хранит только последнего, т.е если последний баф был от баффера то он всем присвоит такой флаг(

домучал, все же это я флаг не так ставил :)))
 
спасибо за наводку к
Код:
scheduleEffect
сделал так
Код:
        for (EffectTemplate et : _effectTemplates)
        {
            boolean success = true;
            if (et.effectPower > -1)
            {
                success = Formulas.calcEffectSuccess(effector, effected, et, this, ss, sps, bss);
            }
            
            if (success)
            {
                            if(env.buffFrom == 1){
                            et.period = Config.ENABLE_MODIFY_SKILL_DURATION_FromBufferTime;
                            }
                final Effect e = et.getEffect(env);
                if (e != null)
                {
                    // e.scheduleEffect();
                    effects.add(e);
                }
            }
        }
з.ы поставил бы лайк но репы нету :)
 
Назад
Сверху Снизу