Перейти к содержанию
Авторизация  
Hikari

Отменяем Бафф При Выходе Из Зоны

Рекомендуемые сообщения

Бафф Cozy Mucus который дается при убийстве лягушки (Rainbow Frog) в Plains of the Lizardmen (90696, 86392, -3456) должен слетать при выходи из данной локации. Но он не слетает. Как можно такое реализовать ?

 

Пока есть мысля сделать вот такую проверку:

 

if(!player.isInZone([oren21_2220_a05_3]) && getEffectList().getEffectsBySkillId(6429))
{
   getEffectList().stopEffect(6429);
}

 

но куда ее всунуть ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в onExit зоны

Изменено пользователем Demoncool

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в onExit зоны

не совсем понял

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а может укажите основу?

Изменено пользователем Mifesto

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а может укажите основу?

извиняюсь, забыл, First Team

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не совсем понял

ну к примеру L2TownZone

при входе в город отвечает onEnter

при выходе onExit

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Бафф Cozy Mucus который дается при убийстве лягушки (Rainbow Frog) в Plains of the Lizardmen (90696, 86392, -3456) должен слетать при выходи из данной локации. Но он не слетает. Как можно такое реализовать ?

вешай на зону листенер и при выходе из зоны снимай в этом листенере нужный бафф

 

пример

 

ReflectionUtils.getZone("[oren21_2220_a05_3]").addListener(new ZoneListener());

...

public class ZoneListener implements OnZoneEnterLeaveListener
{
	@Override
	public void onZoneEnter(Zone zone, Creature cha)
	{}

	@Override
	public void onZoneLeave(Zone zone, Creature cha)
	{
		if (cha.isPlayer())
			cha.getEffectList().stopEffect(6429);
	}
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вешай на зону листенер и при выходе из зоны снимай в этом листенере нужный бафф

 

пример

 

ReflectionUtils.getZone("[oren21_2220_a05_3]").addListener(new ZoneListener());

...

public class ZoneListener implements OnZoneEnterLeaveListener
{
	@Override
	public void onZoneEnter(Zone zone, Creature cha)
	{}

	@Override
	public void onZoneLeave(Zone zone, Creature cha)
	{
		if (cha.isPlayer())
			cha.getEffectList().stopEffect(6429);
	}
}

все бы хорошо, но локация поделена на много зон

 

[oren21_2220_a01_1]
[oren21_2220_a01_2]
[oren21_2220_a01_3]
[oren21_2220_a02_1]
[oren21_2220_a02_2]
[oren21_2220_a02_3]
[oren21_2220_a03_1]
[oren21_2220_a03_2]
[oren21_2220_a03_3]
[oren21_2220_a04_1]
[oren21_2220_a04_2]
[oren21_2220_a04_3]
[oren21_2220_a05_1]
[oren21_2220_a05_2]
[oren21_2220_a05_3]

 

и при переходи из одной в другую бафф слетает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так сделай массив с именами этих зон, и потом через for-each подставляй сюда

ReflectionUtils.getZone("[oren21_2220_a05_3]").addListener(new ZoneListener());

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так сделай массив с именами этих зон, и потом через for-each подставляй сюда

ReflectionUtils.getZone("[oren21_2220_a05_3]").addListener(new ZoneListener());

@Override
public void onLoad()
{
_zoneListener = new ZoneListener();
 for(String s : zones)
 {
	 Zone zone = ReflectionUtils.getZone(s);
	 zone.addListener(_zoneListener);
 }
}

Так и сделано, но проблема остаётся

Изменено пользователем dislike

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Думаю, лучше сделать границы всей локации, и при выходе за эту границу бафф снимается. Как-то так :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Override
public void onLoad()
{
_zoneListener = new ZoneListener();
 for(String s : zones)
 {
	 Zone zone = ReflectionUtils.getZone(s);
	 zone.addListener(_zoneListener);
 }
}

Так и сделано, но проблема остаётся

 

Дык логично.

 

С таким кодом всегда в работе остается только последняя из массива зона.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

AwakenDev хочет сказать, что надо так:

@Override
public void onLoad()
{
        for(String s : zones)
        {
                Zone zone = ReflectionUtils.getZone(s);
                zone.addListener(new ZoneListener());
        }
}

Потому, что в методе addListener из класса Zone задаётся с какой именно заной будет работать этот объект ZoneListener, а раз в вашем случае объект был 1н то и остаётся у него последнее установленное значение зоны с которой он работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вобще-то это все не причем

выше уже озвучили причину и метод решения - просто объявить одну общую зону на всю территорию и именно на нее повешать листенер.

а то с кучей зон вполне логично что бафф спадает при выходе из любой из перечисленных зон - листенер то каждый раз при выходе из любой из этих зон отрабатывает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...