Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Одновременное Отображение Двух Эффектов
#1
Имеется два скилла:
Код:
<skill id="11752" levels="8" name="Сила Воли">
<!--
В течение 15 сек. восстанавливает каждую секунду 172 HP.
Также увеличивает эффективность исцеляющих умений на 10%.
Дополнительно увеличивает эффективность восстанавливающих HP умений, используемых персонажем.
-->
<table name="#mpConsume2">53 48 50 52 54 56 57 57</table>
<table name="#hot">172 173 173 174 174 175 175 176</table>
<table name="#hpEff">1.10 1.13 1.16 1.19 1.22 1.25 1.28 1.30</table>
<table name="#magicLevel">85 87 89 91 93 95 97 99</table>
<table name="#abnormal_lv">30 31 32 33 34 35 36 37</table>
<set name="hitTime" val="500" />
<set name="castRange" val="600"/>
<set name="reuseDelay" val="1000" />
<set name="mpConsume2" val="#mpConsume2" />
<set name="magicLevel" val="#magicLevel" />
<set name="target" val="TARGET_SELF" />
<set name="skillType" val="BUFF" />
<set name="operateType" val="OP_ACTIVE" />
<set name="addSkills" val="11753;1"/>
<for>
<effect count="15" name="HealOverTime" time="1" val="#hot" >
<def name="ignoreHpEff" val="true" />
<mul order="0x30" stat="hpEff" val="#hpEff" />
</effect>
<effect count="1" name="AddSkills" time="15" displayId="11753">
<def name="ignoreHpEff" val="true" />
</effect>
</for>
</skill>

<skill id="11753" levels="3" name="Сила Воли">
<table name="#hpEff">50 100 200</table>
<table name="#magicLevel">85 88 92</table>
<set name="magicLevel" val="#magicLevel" />
<set name="target" val="TARGET_SELF" />
<set name="skillType" val="BUFF" />
<set name="operateType" val="OP_ACTIVE" />
<for>
<effect count="1" name="Buff" time="10" val="0" >
<def name="ignoreHpEff" val="true" />
<add order="0x40" stat="hpEff" val="#hpEff" />
</effect>
</for>
       </skill>
Надо чтобы было так:
[Изображение: 4989258m.png]

[Изображение: 4990282m.png]

На данный момент сначала накладывается эффект AddSkills, потом только HealOverTime.
Ответ
#2
Скилл жутко криво написан) А вообще, нужно делать через триггер + добавлять через тот же триггер повышение лвла скилла 11753.
Ах да, оно еще с таргетом TARGET_ONE, если я не ошибаюсь.
Ответ
#3
GooD, Через триггер как не крути не получится, недостаточен функционал возможностей обработки триггеров в ядре. Да еще там сложность в том что при повторном наложении эффекта повышается уровень второго скилла. Базовыми возможностями сборки этого нельзя было сделать.

Реализовал так...
DP:
Код:
    <skill id="11752" levels="8" name="Сила Воли">
    <!--
        В течение 15 сек. восстанавливает каждую секунду 172 HP.
        Также увеличивает эффективность исцеляющих умений на 10%.
        Дополнительно увеличивает эффективность восстанавливающих HP умений, используемых персонажем.
    -->
        <table name="#mpConsume2">53 48 50 52 54 56 57 57</table>
        <table name="#hot">172 173 173 174 174 175 175 176</table>
        <table name="#hpEff">1.10 1.13 1.16 1.19 1.22 1.25 1.28 1.30</table>
        <table name="#magicLevel">85 87 89 91 93 95 97 99</table>
        <table name="#abnormal_lv">30 31 32 33 34 35 36 37</table>
        <set name="hitTime" val="500" />
        <set name="castRange" val="600"/>
        <set name="reuseDelay" val="1000" />
        <set name="mpConsume2" val="#mpConsume2" />        
        <set name="magicLevel" val="#magicLevel" />
        <set name="operateType" val="OP_ACTIVE"/>
        <set name="skillType" val="BUFF"/>
        <set name="target" val="TARGET_PARTY_ONE"/>
        <for>
            <effect count="15" name="HealOverTime" time="1" val="#hot" stackOrder="#abnormal_lv" stackTypes="ChantofLife">
                <def name="ignoreHpEff" val="true" />
                <def name="forceSkillId" val="11753" />
                <mul order="0x40" stat="hpEff" val="#hpEff" />
            </effect>
        </for>
    </skill>
     <skill id="11753" levels="3" name="Сила Воли">
        <table name="#hpEff">50 100 200</table>
        <set name="target" val="TARGET_PARTY_ONE" />
        <set name="skillType" val="BUFF" />
        <set name="operateType" val="OP_ACTIVE" />
        <for>
            <effect count="1" name="Buff" time="15" val="0">
                <add order="0x40" stat="healPower" val="#hpEff" />
            </effect>
        </for>
       </skill>

EffectDamOverTime.java :
Код:
package l2next.gameserver.skills.effects;

import java.util.concurrent.ScheduledFuture;

import l2next.commons.collections.GArray;
import l2next.commons.threading.RunnableImpl;
import l2next.gameserver.ThreadPoolManager;
import l2next.gameserver.model.Creature;
import l2next.gameserver.model.Effect;
import l2next.gameserver.model.EffectList;
import l2next.gameserver.model.Player;
import l2next.gameserver.model.Skill;
import l2next.gameserver.network.serverpackets.ExRegenMax;
import l2next.gameserver.stats.Env;
import l2next.gameserver.stats.Stats;
import l2next.gameserver.tables.SkillTable;

/**
* @Optimized & correct: WoWan-SM
* @date: 07.01.2014
*/
public class EffectHealOverTime extends Effect
{
    private final boolean        _ignoreHpEff;
    private int                    forceSkillId;
    private ScheduledFuture<?>    startEffectTask;

    public EffectHealOverTime(final Env env, final EffectTemplate template)
    {
        super(env, template);
        _ignoreHpEff = template.getParam().getBool("ignoreHpEff", false);
        forceSkillId = template.getParam().getInteger("forceSkillId", -1);
    }

    @Override
    public void onStart()
    {
        super.onStart();

        // Контроллирующий скилл
        if (forceSkillId > 0)
        {
            if (startEffectTask != null)
            {
                startEffectTask.cancel(false);
                startEffectTask = null;
            }
            startEffectTask = ThreadPoolManager.getInstance().schedule(new RunnableImpl() {
                @Override
                public void runImpl() throws Exception
                {
                    updateSkill();
                }
            }, 500);
        }

        final Creature effected = getEffected();
        final int count = getCount();
        final long period = getPeriod();

        if (effected.isPlayer() && count > 0 && period > 0)
        {
            effected.sendPacket(new ExRegenMax(calc(), (int) ((count * period) / 1000), Math.round(period / 1000)));
        }
    }

    @Override
    public boolean onActionTime()
    {
        if (_effected.isHealBlocked())
        {
            return true;
        }

        double newHp = calc() * (!_ignoreHpEff ? _effected.calcStat(Stats.HEAL_EFFECTIVNESS, 100., _effector, getSkill()) : 100.) / 100.;
        double addToHp = Math.max(0, Math.min(newHp, ((_effected.calcStat(Stats.HP_LIMIT, null, null) * _effected.getMaxHp()) / 100.) - _effected.getCurrentHp()));

        if (addToHp > 0)
        {
            getEffected().setCurrentHp(_effected.getCurrentHp() + addToHp, false);
        }

        return true;
    }

    private void updateSkill()
    {
        final Player effector = getEffector().getPlayer();
        final SkillTable skillTable = SkillTable.getInstance();
        Skill forceSkill = skillTable.getInfo(forceSkillId, 1);

        if (effector == null || forceSkill == null)
        {
            return;
        }

        final GArray<Creature> targets = forceSkill.getTargets(effector, getEffected(), false);
        for (final Creature target : targets)
        {
            final EffectList effectList = target.getEffectList();
            if (effectList.getEffectsBySkillId(11753) != null)
            {
                final int level = effectList.getEffectsBySkillId(11753).get(0).getDisplayLevel();

                if (level < 3)
                {
                    forceSkill = skillTable.getInfo(forceSkillId, level + 1);
                }
                else
                {
                    forceSkill = skillTable.getInfo(forceSkillId, 3);
                }
            }
            forceSkill.getEffects(effector, target, false, false);
        }
    }
}
Ответ
#4
Как раз таки через триггер было бы в разы лучше.
[src='xml']
<skill id="11753" levels="3" name="Сила Воли">
<table name="#hpEff">50 100 200</table>
<table name="#triggerLevel">2 3 3</table>
<set name="target" val="TARGET_PARTY_ONE" />
<set name="skillType" val="BUFF" />
<set name="operateType" val="OP_ACTIVE" />
<set name="isTrigger" val="true"/>
<for>
<effect count="1" name="Buff" time="15" val="0">
<add order="0x40" stat="healPower" val="#hpEff" />
</effect>
<triggers>
<trigger id="11753" level="#triggerLevel" type="ADD" chance="100"/>
</triggers>
</for>
</skill>
[/src]
Ответ
#5
GooD, Не забывай что он должен вызываться одновременно с 11752 и при повторном использовании 11752, и у 11752 должно заново обновляться время эффекта и у 11753
Ответ
#6
А в триггере он и будет вызываться одновременно и обновляться Wink
Возьмите для примера те же зарядки у танков из старых хроник.
open-team.ru
Ответ
#7
Или тот же Макс.Крит.Урон у дагерщиков.
Ответ
#8
Drizzy Написал:А в триггере он и будет вызываться одновременно и обновляться Wink
Возьмите для примера те же зарядки у танков из старых хроник.

Тогда что надо прописать в 11752?
Ответ
#9
offtop
Ответ
#10
Drizzy Написал:А в триггере он и будет вызываться одновременно и обновляться Wink
Возьмите для примера те же зарядки у танков из старых хроник.

GooD Написал:Или тот же Макс.Крит.Урон у дагерщиков.

Зарядки - не то, пробывал. Рассинхронизация времени двух эффектов идет.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Слияние двух баз Lord_Gothic 3 1,280 08-21-2022, 04:41 AM
Последний пост: ALeKsIuS
  Некорректное отображение на сайте Shell 2 1,320 09-14-2016, 05:35 PM
Последний пост: Anikey
  отображение эффекта от скилла slayer48 12 3,395 08-12-2015, 12:37 PM
Последний пост: finfan
  Отображение ХП Map 3 1,752 04-04-2015, 11:35 AM
Последний пост: Respect
  Отображение на карте Map 2 1,425 03-13-2015, 01:55 AM
Последний пост: Deazer
  Отображение заточки в покупке\продаже aCis Map 10 2,663 07-19-2014, 05:48 PM
Последний пост: moveton
  Отображение Членов Клана BoneBreaker 8 1,660 05-17-2013, 02:05 PM
Последний пост: BoneBreaker
  Запуск двух PTS! Krasavella 18 4,253 03-23-2013, 03:59 AM
Последний пост: NotSpecified
  Отображение онлайна Raymon 5 2,334 02-26-2013, 09:03 PM
Последний пост: Ashe
  Некорректное отображение кодировки. Intareus 9 2,397 10-08-2012, 12:48 PM
Последний пост: Ashe

Перейти к форуму:


Пользователи, просматривающие эту тему: 4 Гость(ей)