Сб крадет сначала селф баф

VladaSs013

Путник
Участник
Сообщения
43
Розыгрыши
0
Репутация
0
Реакции
6
Баллы
95
Хроники
  1. Chaotic Throne: High Five
Исходники
Присутствуют
Сборка
l2-scripts, open-team
Java:
public void useSkill(Creature activeChar, List<Creature> targets)
    {
        for(Creature target : targets)
            if(target != null)
            {
                //if(calcStealChance(target, activeChar))
                //{
                int stealCount = Rnd.get(1, _stealCount); // ToCheck
                if(!target.isPlayer())
                    continue;
                List<Effect> effectsList = target.getEffectList().getAllEffects();
                Collections.sort(effectsList, EffectsComparator.getInstance()); // ToFix: Comparator to HF
                Collections.reverse(effectsList);

                // Крутой изжоп для корявой системы эффектов, которую давно отправить в топку.
                IntObjectMap<List<Effect>> effectSkills = new TreeIntObjectMap<List<Effect>>();
                for(Effect e : effectsList)
                {
                    List<Effect> effects = effectSkills.get(e.getDisplayId());
                    if(effects == null)
                    {
                        effects = new ArrayList<Effect>();
                        effectSkills.put(e.getDisplayId(), effects);
                    }
                    effects.add(e);
                }

                int counter = 0;
                loop: for(List<Effect> effects : effectSkills.values())
                {
                    if(counter >= stealCount)
                        break;

                    if(effects.isEmpty())
                        continue;

                    for(Effect e : effects)
                    {
                        if(!canSteal(e))
                            continue loop;
                    }

                    for(Effect e : effects)
                    {
                        Effect stolenEffect = cloneEffect(activeChar, e);
                        if(stolenEffect != null)
                            activeChar.getEffectList().addEffect(stolenEffect);
                        e.exit();
                    }
                    counter++;
                }
       
                //}
                //else
                //{
                //    activeChar.sendPacket(new SystemMessage(SystemMessage.C1_HAS_RESISTED_YOUR_S2).addString(target.getName()).addSkillName(getId(), getLevel()));
                    //continue;
                //}
                useInstantEffects(activeChar, target, false);
                getEffects(activeChar, target, getActivateRate() > 0, false);
            }

        if(isSSPossible())
            activeChar.unChargeShots(isMagic());
    }

Это л2 скрипт, как сделать чтоб начинало с денс, сонг?


Java:
public void useSkill(L2Character activeChar, GArray<L2Character> targets)
    {
        for(L2Character target : targets)
            if(target != null)
            {
                if(!target.isPlayer())
                    continue;

                if(target.checkReflectSkill(activeChar, this))
                    target = activeChar;

                ConcurrentLinkedQueue<L2Skill> eff = target.getEffectList().getAllSkills(true);
                if(eff.size() == 0)
                    continue;

                boolean update = false;
                int counter = 0;

                double cancel_res_multiplier = target.calcStat(Stats.CANCEL_RECEPTIVE, 0, null, null); // constant resistance is applied for whole cycle of cancellation
                L2Skill[] a = eff.toArray(new L2Skill[eff.size()]);
                // Сначало крадем песни/танцы
                for(int i = 0; counter < _stealCount && i < a.length; i++)
                {
                    L2Skill e = a[a.length - i - 1];

                    if(e != null && e.isMusic() && e.isCancelable() && !e.isOffensive())
                    {
                        if(calcStealChance(target, activeChar, e, cancel_res_multiplier))
                        {
                            if(cloneEffect(activeChar, target, e))
                            {
                                update = true;
                                target.getEffectList().stopEffect(e.getId());
                            }
                        }
                        counter++;
                    }
                }
                // Потом остальное
                for(int i = 0; counter < _stealCount && i < a.length; i++)
                {
                    L2Skill e = a[a.length - i - 1];
                    if(e != null && !e.isMusic() && e.isCancelable() && !e.isToggle() && !e.isPassive() && (!e.isOffensive() || e.getId() == 368) && e.getAbnormalType() != SkillAbnormalType.vp_up && e.getId() != 1540)
                    {
                        if(calcStealChance(target, activeChar, e, cancel_res_multiplier))
                        {
                            if(cloneEffect(activeChar, target, e))
                            {
                                update = true;
                                target.getEffectList().stopEffect(e.getId());
                            }
                        }
                        counter++;
                    }
                }
                target.updateEffectIcons();
                if(update)
                {
                    activeChar.sendChanges();
                    activeChar.updateEffectIcons();
                }
            }

        if(isSSPossible())
            activeChar.unChargeShots(isMagic());
    }

Вот пример с л2 опен, тут сразу сонг денс, как адаптировать?
 
Последнее редактирование модератором:
Не надо ничего адаптировать под скрипты. По скриптам ctrl+shift+del.
 
Ткну пальцем в небо. Попробуй закомментить строчку с:

Collections.sort(effectsList, EffectsComparator.getInstance()); // ToFix: Comparator to HF

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

Перед циклом
for(List<Effect> effects : effectSkills.values())
Создай два списка(с эффектами), один для кенсела первых N висящих баффов.
Второй список для денсов сонгов. Список с обычными бафами заполняй пока не будет == steal count игнорируя дс. Второй по максимуму до steal count. Если второй равен steal count. то прерывай for в котором заполняется и вне его вызывай кенсел и применение на себя.
По следующей логике. Пока count не будет steal_count сначала все из второго списка с ДС, потом из первого списка
 
Последнее редактирование:
Ткну пальцем в небо. Попробуй закомментить строчку с:

Collections.sort(effectsList, EffectsComparator.getInstance()); // ToFix: Comparator to HF

Если я правильно читаю, то тогда будет канселить последние наложенные бафы
И тогда он скорее всего будет снимать онли денсы/сонги?)
 
И тогда он скорее всего будет снимать онли денсы/сонги?)

Почему? Не знаю в каком порядке лежит список эффектов в таргете, но наверное отсортирован по времени наложения. Будет забирать на снятие последние бафы.
Так как нужно снимать первым дс, то описал логику с одним проходом, чтобы снять сначала ds, потом последние наложенные бафы
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Что за ревизия? И второе зачем? Что бы апнуть пернатых?
 
А как вообще кенсел должен работать по pts?
Звучит как крутой нерф, отсортировать бафы по полезности и откусывать начиная с самых бесполезных
 
Не работает, хоть сначала селф баф хоть потом бафаешь все равно снимет первым сел баф...
 
А как вообще кенсел должен работать по pts?
Звучит как крутой нерф, отсортировать бафы по полезности и откусывать начиная с самых бесполезных
Вроде воровало рандом два бафа, если память не изменяет.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
А как вообще кенсел должен работать по pts?
Звучит как крутой нерф, отсортировать бафы по полезности и откусывать начиная с самых бесполезных
С одной стороны что помню на шлако серверах откусывало на оли банки рыбалки потом всё остальное. То еще нужно понять что где считается селбафом :D
С другой стороны нифига себе нерф если сначала откусывать ехо емпавер у сх или какого то кролика. :D Жиренький такой ап :D

А по моему там рандом вообще должен быть.
 
Вроде воровало рандом два бафа, если память не изменяет.
до 4х баф ворует, по офу мб и рандом, но тут селф какими не ставь по счету все равно их ворует, если сделать по порядку с конца будет идеально, нужно очень срочно
 
до 4х баф ворует, по офу мб и рандом, но тут селф какими не ставь по счету все равно их ворует, если сделать по порядку с конца будет идеально, нужно очень срочно

Посмотри каким образом сортируются эффекты внутри этой строки.
Код:
Collections.sort(effectsList, EffectsComparator.getInstance()); // ToFix: Comparator to HF
Правильная сортировка(свой компаратор) быстро решит твою проблему. Я не особо в джаву, не возьмусь править

Если селфы по какой-то причине всегда первыми отлетают, значит они в списке первыми и попадаются. Попробуй убрать реверсирование списка, например. Если будут от этого изменения, значит самым простым все еще является правильная сортировка
Код:
Collections.reverse(effectsList);
 
до 4х баф ворует, по офу мб и рандом, но тут селф какими не ставь по счету все равно их ворует, если сделать по порядку с конца будет идеально, нужно очень срочно
А че ты как основу опенов не возьмешь? Там хоть по адекватнее код, а скрипты явно под солями это все писали)
 
Кажется по офу это прям воровать последние бафы (как они визуально отображаются). Я точно помню, что брали талики за территориальные войны и воровали, например, гатс у дестра
 
А че ты как основу опенов не возьмешь? Там хоть по адекватнее код, а скрипты явно под солями это все писали)
Открытие на носу)

Посмотри каким образом сортируются эффекты внутри этой строки.
Код:
Collections.sort(effectsList, EffectsComparator.getInstance()); // ToFix: Comparator to HF
Правильная сортировка(свой компаратор) быстро решит твою проблему. Я не особо в джаву, не возьмусь править

Если селфы по какой-то причине всегда первыми отлетают, значит они в списке первыми и попадаются. Попробуй убрать реверсирование списка, например. Если будут от этого изменения, значит самым простым все еще является правильная сортировка
Код:
Collections.reverse(effectsList);


Код:
Collections.reverse(effectsList);
это отключить?

Не сработало, взять тира с него сразу берется тотем огра, даже если второй селф баф накинул, его не тронуло, то есть взяло тотем и 2 сонга
 
Если очень горит попробуй обратится к Услуги Java-кодера
Думаю займет куда меньше получаса
 
Вроде воровало рандом два бафа, если память не изменяет.
Начинает с конца списка наложенных баффов и на каждый, который разрешено снимать канселом, применяет по формуле, в основе которой заданный в канселе шанс, попытку снятия и если прокатило то снимает, иначе переходит к следующему. И так до тех пор пока не снимет заданное в канселе количество баффов или пока не доберется до начала списка баффов - что уж первым наступит.
Кстати как раз из-за этого всякие резисты к канселу по моему имеют достаточно сомнительную пользу, т.к. уменьшая шанс срабатывания шанса снятия в канселе они позволяют ему дальше по списку баффов забираться.
 
Вот так у меня эффект кражи баффов работает, но я не гарантирую что тот же расчет шанса у меня прям по оффу.
Тем более что на моем сервере эффект этот вобще не актуален - у меня крусейд, а на 85+ уровнях у игроков нет скиллов тырящих баффы.
 
по птс баффы берутся с конца и идет расчет шанса забора каждого бафа отдельно, если шанс не прошел идет расчет шансла следующего бафа с конца и так пока лимит не будет превышен. От этого и рандом стила к примеру он должен воровать 7 бафов но шансы прошли ток на часть.
А так выше топик правильно расписывает механику
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
А че ты как основу опенов не возьмешь? Там хоть по адекватнее код, а скрипты явно под солями это все писали)
Ну зачем код? В скриптах много калоплюшек есть это поинтересней будет всякого кода :pandaredlol:
 

Похожие темы

Назад
Сверху Снизу