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

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

Описание темы:как отловить?

Ответ
Опции темы
Непрочитано 03.09.2015, 18:02   #1
Пользователь

Автор темы (Топик Стартер) событие удара моба

Приветствую.

Подскажите - как отловить событие удара по мобу или рб?
Копался копался и не нашел ничего подобного(

Сборка Frozen IL
slayer48 вне форума Отправить сообщение для slayer48 с помощью Skype™ Ответить с цитированием
Непрочитано 03.09.2015, 18:13   #2
Изгнанные

По умолчанию Re: событие удара моба

Цитата:
Сообщение от slayer48 Посмотреть сообщение
Приветствую.

Подскажите - как отловить событие удара по мобу или рб?
Копался копался и не нашел ничего подобного(

Сборка Frozen IL
Юзайте ивент onAttack(npc, attacker) где аттакер плеер, нпц - моб/рб/ че хош
GenCloud вне форума Отправить сообщение для GenCloud с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 04.09.2015, 15:02   #3
Пользователь

Автор темы (Топик Стартер) Re: событие удара моба

Цитата:
Сообщение от GenCloud Посмотреть сообщение
Юзайте ивент onAttack(npc, attacker) где аттакер плеер, нпц - моб/рб/ че хош
Смотрел, подобный метод нигде не обьявлен в сборке...

В первую очередь насколько я понимаю в L2Character.

Есть только квестовые onAttack в АИ эпиков, т.е. Quest:

public String onAttack (L2NpcInstance npc, L2PcInstance attacker, int damage, boolean isPet)

Последний раз редактировалось slayer48; 05.09.2015 в 20:23.
slayer48 вне форума Отправить сообщение для slayer48 с помощью Skype™ Ответить с цитированием
Непрочитано 05.09.2015, 20:22   #4
Пользователь

Автор темы (Топик Стартер) Re: событие удара моба

да и Quest здесь не подходит.. мне нужно подвязать этот метод абсолютно для всех мобов/рб, экземпляров класса.

что никто не знает?
slayer48 вне форума Отправить сообщение для slayer48 с помощью Skype™ Ответить с цитированием
Непрочитано 05.09.2015, 22:00   #5
Аватар для n3k0nation
Antihero

По умолчанию Re: событие удара моба

Код:
/**
 * Класс реализующий список слушателей для каждого типа интерфейса.
 * 
 * @author G1ta0
 *
 * @param <T> базовый интерфейс слушателя
 */
public class ListenerList<T> implements Closeable {
	protected UnsafeCopyOnWriteArraySet<Listener<T>> listeners = new UnsafeCopyOnWriteArraySet<>();

	public Object[] getListeners() {
		return listeners.getUnsafeArray();
	}
	
	/**
	 * Добавить слушатель в список
	 * @param listener
	 * @return возвращает true, если слушатель был добавлен
	 */
	public boolean add(Listener<T> listener) {
		return listeners.add(listener);
	}

	/**
	 * Удалить слушатель из списка.
	 * Не вызывает закрытие слушателя!
	 * @param listener
	 * @return возвращает true, если слушатель был удален
	 */
	public boolean remove(Listener<T> listener) {
		return listeners.remove(listener);
	}

	/**
	 * Освобождает ресурсы занятые слушателями и очищает лист слушателей
	 */
	@SuppressWarnings("unchecked")
	@Override
	public void close() {
		for(Object listener : getListeners())
			((Listener<T>)listener).close();
		
		listeners.clear();
	}
}
Код:
/**
 * @author Ro0TT
 * @date 13.01.2013
 */
@Refactored(date="20.03.2015", author="PointerRage")
@AllArgsConstructor
public class CharListenerList extends ListenerList<L2Character> {
	@Getter(value=AccessLevel.PROTECTED) private final static UnsafeCopyOnWriteArraySet<Listener<L2Character>> global = new UnsafeCopyOnWriteArraySet<>();
	@Getter protected final L2Character actor;

	public static void addGlobal(Listener<L2Character> listener) {
		global.add(listener);
	}

	public static void removeGlobal(Listener<L2Character> listener) {
		global.remove(listener);
	}

	public void onHit(int damage, L2Character attacker, L2Skill skill) {
		for(Object listener : getListeners())
			if(CharacterOnHit.class.isInstance(listener))
				((CharacterOnHit) listener).onHit(getActor(), damage, attacker, skill);

		for(Object listener : global.getUnsafeArray())
			if(CharacterOnHit.class.isInstance(listener))
				((CharacterOnHit) listener).onHit(getActor(), damage, attacker, skill);
	}
Код:
public interface CharListener extends Listener<L2Character> {
}
Код:
public interface Listener<T> extends Closeable {
	@Override default void close() {}
}
Код:
public interface CharacterOnHit extends CharListener {
	public void onHit(L2Character actor, int damage, L2Character attacker, L2Skill skill);
}
L2Character::onHitTimer
Код:
...
				// Notify AI with EVT_ATTACKED
				target.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, this);
				target.getListeners().onHit(miss ? 0 : damage, this, null);
...
L2Character::callSkill
Код:
...
								if (skill.getSkillType() != L2SkillType.SIGNET && skill.getSkillType() != L2SkillType.SIGNET_CASTTIME)
								{
									ctarget.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, player);
									ctarget.getListeners().onHit(0, this, skill);

...

									default:
										ctarget.addAttackerToAttackByList(this);
										ctarget.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, this);
										ctarget.getListeners().onHit(0, this, skill);
...
L2Character
Код:
	@Getter(lazy=true) protected final CharListenerList listeners = new CharListenerList(this);
	public void addListener(Listener<L2Character> listener) {
		getListeners().add(listener);
	}

	public void removeListener(Listener<L2Character> listener) {
		getListeners().remove(listener);
	}
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием
Непрочитано 05.09.2015, 22:10   #6
Аватар для Donatte
Герой

По умолчанию Re: событие удара моба

Зачем добавлять систему слушателей для одного места?

L2Attackable.java не смотрели? Все события обрабатываются именно в нём, а уж потом передаются в Quest нотификации событий.
__________________
Родился, живу и когда-нибудь умру.
Donatte вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 05.09.2015, 23:30   #7
Пользователь

Автор темы (Топик Стартер) Re: событие удара моба

Цитата:
Сообщение от Donatte Посмотреть сообщение
Зачем добавлять систему слушателей для одного места?

L2Attackable.java не смотрели? Все события обрабатываются именно в нём, а уж потом передаются в Quest нотификации событий.
Все что нашел в L2Attackable из подобного:

Код:
	/**
	 * Reduce the current HP of the L2Attackable.
	 * 
	 * @param damage The HP decrease value
	 * @param attacker The L2Character who attacks
	 */
	@Override
	public void reduceCurrentHp(double damage, L2Character attacker)


	/**
	 * Reduce the current HP of the L2Attackable, update its _aggroList and launch the doDie Task if necessary.
	 * 
	 * @param attacker The L2Character who attacks
	 * @param awake The awake state (If True : stop sleeping)
	 */
	@Override
	public void reduceCurrentHp(double damage, L2Character attacker, boolean awake)


	/**
	 * Add damage and hate to the attacker AggroInfo of the L2Attackable _aggroList.
	 * 
	 * @param attacker The L2Character that gave damages to this L2Attackable
	 * @param damage The number of damages given by the attacker L2Character
	 */
	public void addDamage(L2Character attacker, int damage)


	/**
	 * Add damage and hate to the attacker AggroInfo of the L2Attackable _aggroList.
	 * 
	 * @param attacker The L2Character that gave damages to this L2Attackable
	 * @param damage The number of damages given by the attacker L2Character
	 * @param aggro The hate (=damage) given by the attacker L2Character
	 */
	public void addDamageHate(L2Character attacker, int damage, int aggro)
Что нибудь из этого реально задействовать?
slayer48 вне форума Отправить сообщение для slayer48 с помощью Skype™ Ответить с цитированием
Непрочитано 05.09.2015, 23:41   #8
Аватар для n3k0nation
Antihero

По умолчанию Re: событие удара моба

Цитата:
Сообщение от slayer48 Посмотреть сообщение
Все что нашел в L2Attackable из подобного:

Код:
	/**
	 * Reduce the current HP of the L2Attackable.
	 * 
	 * @param damage The HP decrease value
	 * @param attacker The L2Character who attacks
	 */
	@Override
	public void reduceCurrentHp(double damage, L2Character attacker)


	/**
	 * Reduce the current HP of the L2Attackable, update its _aggroList and launch the doDie Task if necessary.
	 * 
	 * @param attacker The L2Character who attacks
	 * @param awake The awake state (If True : stop sleeping)
	 */
	@Override
	public void reduceCurrentHp(double damage, L2Character attacker, boolean awake)


	/**
	 * Add damage and hate to the attacker AggroInfo of the L2Attackable _aggroList.
	 * 
	 * @param attacker The L2Character that gave damages to this L2Attackable
	 * @param damage The number of damages given by the attacker L2Character
	 */
	public void addDamage(L2Character attacker, int damage)


	/**
	 * Add damage and hate to the attacker AggroInfo of the L2Attackable _aggroList.
	 * 
	 * @param attacker The L2Character that gave damages to this L2Attackable
	 * @param damage The number of damages given by the attacker L2Character
	 * @param aggro The hate (=damage) given by the attacker L2Character
	 */
	public void addDamageHate(L2Character attacker, int damage, int aggro)
Что нибудь из этого реально задействовать?
Это нанесение урона, а не обработка хита. Хит может и промазать, Вы уж нормально описывайте, что Вам нужно.
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
itamename-e.dat UFODriverr Lineage II 5 28.02.2021 18:17
Изменить IpAdress C5 Oath Of Blood за денюжку Krasavella Рынок / Marketplace 21 20.02.2013 08:48
JythonQuest и с чем его едят SunnyX Обучающие статьи 4 29.10.2012 15:12
[Продам] Gracia Part 2 L2Dream PaInKiLlEr Рынок / Marketplace 10 04.06.2010 00:18


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

Вверх