Одновременное Отображение Двух Эффектов - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II

Lineage II
Дискуссии на тему создания, настройки и обслуживания серверов Lineage 2. При поддержке: Премиум услуги по рекламе

Ответ
Опции темы
Непрочитано 14.01.2014, 13:09   #1
Аватар для WoWan-SM
Герой

Автор темы (Топик Стартер) Одновременное Отображение Двух Эффектов

Имеется два скилла:
Код:
<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>
Надо чтобы было так:




На данный момент сначала накладывается эффект AddSkills, потом только HealOverTime.
WoWan-SM вне форума Отправить сообщение для WoWan-SM с помощью ICQ Отправить сообщение для WoWan-SM с помощью Skype™ Ответить с цитированием
Непрочитано 22.01.2014, 22:07   #2
Аватар для Daan Raven
Пользователь

По умолчанию Re: Одновременное Отображение Двух Эффектов

Скилл жутко криво написан) А вообще, нужно делать через триггер + добавлять через тот же триггер повышение лвла скилла 11753.
Ах да, оно еще с таргетом TARGET_ONE, если я не ошибаюсь.
Daan Raven вне форума Ответить с цитированием
Непрочитано 22.01.2014, 22:14   #3
Аватар для WoWan-SM
Герой

Автор темы (Топик Стартер) Re: Одновременное Отображение Двух Эффектов

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);
		}
	}
}
WoWan-SM вне форума Отправить сообщение для WoWan-SM с помощью ICQ Отправить сообщение для WoWan-SM с помощью Skype™ Ответить с цитированием
Непрочитано 22.01.2014, 22:27   #4
Аватар для Daan Raven
Пользователь

По умолчанию Re: Одновременное Отображение Двух Эффектов

Как раз таки через триггер было бы в разы лучше.
 
	 <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>
 
Code: XML
Daan Raven вне форума Ответить с цитированием
Непрочитано 22.01.2014, 22:33   #5
Аватар для WoWan-SM
Герой

Автор темы (Топик Стартер) Re: Одновременное Отображение Двух Эффектов

GooD, Не забывай что он должен вызываться одновременно с 11752 и при повторном использовании 11752, и у 11752 должно заново обновляться время эффекта и у 11753
WoWan-SM вне форума Отправить сообщение для WoWan-SM с помощью ICQ Отправить сообщение для WoWan-SM с помощью Skype™ Ответить с цитированием
Непрочитано 22.01.2014, 22:40   #6
Аватар для Drizzy

По умолчанию Re: Одновременное Отображение Двух Эффектов

А в триггере он и будет вызываться одновременно и обновляться
Возьмите для примера те же зарядки у танков из старых хроник.
__________________
open-team.ru
Drizzy вне форума Отправить сообщение для Drizzy с помощью ICQ Ответить с цитированием
Непрочитано 22.01.2014, 22:57   #7
Аватар для Daan Raven
Пользователь

По умолчанию Re: Одновременное Отображение Двух Эффектов

Или тот же Макс.Крит.Урон у дагерщиков.
Daan Raven вне форума Ответить с цитированием
Непрочитано 22.01.2014, 22:59   #8
Аватар для WoWan-SM
Герой

Автор темы (Топик Стартер) Re: Одновременное Отображение Двух Эффектов

Цитата:
Сообщение от Drizzy Посмотреть сообщение
А в триггере он и будет вызываться одновременно и обновляться
Возьмите для примера те же зарядки у танков из старых хроник.
Тогда что надо прописать в 11752?
WoWan-SM вне форума Отправить сообщение для WoWan-SM с помощью ICQ Отправить сообщение для WoWan-SM с помощью Skype™ Ответить с цитированием
Непрочитано 22.01.2014, 23:08   #9
Пользователь

По умолчанию Re: Одновременное Отображение Двух Эффектов

offtop:
Свернуть ↑Развернуть ↓
nn03 вне форума Ответить с цитированием
Непрочитано 22.01.2014, 23:14   #10
Аватар для WoWan-SM
Герой

Автор темы (Топик Стартер) Re: Одновременное Отображение Двух Эффектов

Цитата:
Сообщение от Drizzy Посмотреть сообщение
А в триггере он и будет вызываться одновременно и обновляться
Возьмите для примера те же зарядки у танков из старых хроник.
Цитата:
Сообщение от GooD Посмотреть сообщение
Или тот же Макс.Крит.Урон у дагерщиков.
Зарядки - не то, пробывал. Рассинхронизация времени двух эффектов идет.
WoWan-SM вне форума Отправить сообщение для WoWan-SM с помощью ICQ Отправить сообщение для WoWan-SM с помощью Skype™ Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
itamename-e.dat UFODriverr Lineage II 5 28.02.2021 18:17
Сборка линдвиор Auri Курилка / Yak floor 18 13.01.2014 03:06
Запуск двух PTS! Krasavella Lineage II 18 23.03.2013 03:59


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 08:10. Часовой пояс GMT +3.

Вверх