Hikari 48 Опубликовано 11 июля, 2014 Бафф Cozy Mucus который дается при убийстве лягушки (Rainbow Frog) в Plains of the Lizardmen (90696, 86392, -3456) должен слетать при выходи из данной локации. Но он не слетает. Как можно такое реализовать ? Пока есть мысля сделать вот такую проверку: if(!player.isInZone([oren21_2220_a05_3]) && getEffectList().getEffectsBySkillId(6429)) { getEffectList().stopEffect(6429); } но куда ее всунуть ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Demoncool 1110 Опубликовано 11 июля, 2014 (изменено) в onExit зоны Изменено 11 июля, 2014 пользователем Demoncool Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Hikari 48 Опубликовано 11 июля, 2014 В 11.07.2014 в 18:09, Demoncool сказал: в onExit зоны не совсем понял Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mifesto 42 Опубликовано 11 июля, 2014 (изменено) а может укажите основу? Изменено 11 июля, 2014 пользователем Mifesto Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Hikari 48 Опубликовано 11 июля, 2014 В 11.07.2014 в 20:50, Mifesto сказал: а может укажите основу? извиняюсь, забыл, First Team Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Demoncool 1110 Опубликовано 11 июля, 2014 В 11.07.2014 в 20:49, Pacifist сказал: не совсем понял ну к примеру L2TownZone при входе в город отвечает onEnter при выходе onExit Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 621 Опубликовано 12 июля, 2014 В 11.07.2014 в 17:39, Pacifist сказал: Бафф 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); } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Hikari 48 Опубликовано 13 июля, 2014 В 12.07.2014 в 13:31, Gaikotsu сказал: вешай на зону листенер и при выходе из зоны снимай в этом листенере нужный бафф пример 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] и при переходи из одной в другую бафф слетает. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 13 июля, 2014 Ну так сделай массив с именами этих зон, и потом через for-each подставляй сюда ReflectionUtils.getZone("[oren21_2220_a05_3]").addListener(new ZoneListener()); Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
dislike 302 Опубликовано 13 июля, 2014 (изменено) В 13.07.2014 в 08:13, AwakenDev сказал: Ну так сделай массив с именами этих зон, и потом через 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); } } Так и сделано, но проблема остаётся Изменено 13 июля, 2014 пользователем dislike Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mizuwokiru 181 Опубликовано 13 июля, 2014 Думаю, лучше сделать границы всей локации, и при выходе за эту границу бафф снимается. Как-то так Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 13 июля, 2014 В 13.07.2014 в 19:07, dislike сказал: @Override public void onLoad() { _zoneListener = new ZoneListener(); for(String s : zones) { Zone zone = ReflectionUtils.getZone(s); zone.addListener(_zoneListener); } } Так и сделано, но проблема остаётся Дык логично. С таким кодом всегда в работе остается только последняя из массива зона. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xuser 122 Опубликовано 14 июля, 2014 AwakenDev хочет сказать, что надо так: @Override public void onLoad() { for(String s : zones) { Zone zone = ReflectionUtils.getZone(s); zone.addListener(new ZoneListener()); } } Потому, что в методе addListener из класса Zone задаётся с какой именно заной будет работать этот объект ZoneListener, а раз в вашем случае объект был 1н то и остаётся у него последнее установленное значение зоны с которой он работает. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 621 Опубликовано 14 июля, 2014 вобще-то это все не причем выше уже озвучили причину и метод решения - просто объявить одну общую зону на всю территорию и именно на нее повешать листенер. а то с кучей зон вполне логично что бафф спадает при выходе из любой из перечисленных зон - листенер то каждый раз при выходе из любой из этих зон отрабатывает. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты