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 в onExit зоны не совсем понял Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mifesto 42 Опубликовано 11 июля, 2014 (изменено) а может укажите основу? Изменено 11 июля, 2014 пользователем Mifesto Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Hikari 48 Опубликовано 11 июля, 2014 а может укажите основу? извиняюсь, забыл, First Team Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Demoncool 1110 Опубликовано 11 июля, 2014 не совсем понял ну к примеру L2TownZone при входе в город отвечает onEnter при выходе onExit Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 12 июля, 2014 Бафф 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 вешай на зону листенер и при выходе из зоны снимай в этом листенере нужный бафф пример 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 (изменено) Ну так сделай массив с именами этих зон, и потом через 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 @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 620 Опубликовано 14 июля, 2014 вобще-то это все не причем выше уже озвучили причину и метод решения - просто объявить одну общую зону на всю территорию и именно на нее повешать листенер. а то с кучей зон вполне логично что бафф спадает при выходе из любой из перечисленных зон - листенер то каждый раз при выходе из любой из этих зон отрабатывает. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты