brunzak 0 Опубликовано 26 февраля, 2019 всем привет, создал боевую зону в городе и все работает замечательно и даже при входе в чат влетает оповещение и т.д но что нужно дописать к этой зоне что-бы снимало трансформации при входе в эту зону ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 26 февраля, 2019 (изменено) написать и зарегать листенер для нее и в обработке входа в зону делать что душе угодно. надеюсь у тебя в сборке поддержка таких листенеров имеется. пример простого листенера для овероподобных сборок package listeners.zones; import l2p.commons.util.Rnd; import l2p.gameserver.enums.AbnormalVisualEffect; import l2p.gameserver.enums.ZoneType; import l2p.gameserver.listener.zone.OnZoneEnterLeaveListener; import l2p.gameserver.model.Creature; import l2p.gameserver.model.Zone; import l2p.gameserver.scripts.ScriptFile; import l2p.gameserver.utils.ReflectionUtils; /** * При входе в зону воды вешает на игрока случайный абнормал, меняющий внешний вид одетой брони на купальник, а при выходе из зоны убирает его обратно. * * @author Gaikotsu */ public class WaterZone implements ScriptFile { private static final AbnormalVisualEffect[] _ae = { AbnormalVisualEffect.SHAPE_BIKINI_A, AbnormalVisualEffect.SHAPE_BIKINI_B, AbnormalVisualEffect.SHAPE_BIKINI_C }; private static final ZoneListener _zoneListener = new ZoneListener(); @Override public void onLoad() { for (Zone zone : ReflectionUtils.getZonesByType(ZoneType.water)) zone.addListener(_zoneListener); } @Override public void onReload() {} @Override public void onShutdown() {} public static class ZoneListener implements OnZoneEnterLeaveListener { @Override public void onZoneEnter(Zone zone, Creature cha) { if (!cha.isPlayer()) return; cha.startAbnormalEffect(_ae[Rnd.get(_ae.length)]); } @Override public void onZoneLeave(Zone zone, Creature cha) { if (!cha.isPlayer()) return; for (AbnormalVisualEffect ae : _ae) cha.stopAbnormalEffect(ae); } } } Изменено 26 февраля, 2019 пользователем Gaikotsu 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
brunzak 0 Опубликовано 26 февраля, 2019 5 минут назад, Gaikotsu сказал: написать и зарегать листенер для нее и в обработке входа в зону делать что душе угодно. надеюсь у тебя в сборке поддержка таких листенеров имеется. омг а попроще нет вариантов? в духе допиши вот этот атрибут к зоне и все будет норм? ))) <zone name="[Gludin-PvP]" type="battle_zone"> <set name="entering_message_no" val="283"/> <set name="leaving_message_no" val="284"/> <polygon> <coords loc="-81224 152456 -3175"/> <coords loc="-84552 152328 -3136"/> <coords loc="-84904 149336 -3152"/> <coords loc="-81080 149176 -3128"/> </polygon> </zone> Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
brunzak 0 Опубликовано 26 февраля, 2019 поддержка листенеров имеется, но писать что-то новое не вижу смысла, думаю таких решений готовых должно быть вагон и тележка Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 27 февраля, 2019 (изменено) ага, так и вижу что прям авторы сборки думали "вот точно кому-то потом потребуется такая фигня - обязательно добавим такое" и вобще куда уж проще то может быть? написать листенер по сути в несколько строк и при старте серва пркреплять его к зоне/зонам с определенным типом или именем. Изменено 27 февраля, 2019 пользователем Gaikotsu 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты