Всё просто как и сказано в названии
Таймер для временных зон на экране у игроков
Использовал для пвп зон в городах, зоны можете сами поменять под себя по примеру(instance,baium и тд)
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
А можно сие чудо к ХФ прикрутить? Мб тупой вопрос прикольно выглядит особенно было бы прикольно за 15-30 минут сделать до респа Эпик РБ сделать мирную зону а потом заканчивается время и просто начинается масс замесWildDead добавил(а) новый ресурс:
Таймер временных зон на экран - interlude
Узнать больше об этом ресурсе...
к хф адаптировать можноА можно сие чудо к ХФ прикрутить? Мб тупой вопрос прикольно выглядит особенно было бы прикольно за 15-30 минут сделать до респа Эпик РБ сделать мирную зону а потом заканчивается время и просто начинается масс замес
Для хф можно более нормальный показ сделать при помощи ExSendUIEvent - в ил вроде бы его нет, но могу ошибаться.А можно сие чудо к ХФ прикрутить? Мб тупой вопрос прикольно выглядит особенно было бы прикольно за 15-30 минут сделать до респа Эпик РБ сделать мирную зону а потом заканчивается время и просто начинается масс замес
public void onPlayerEnter(Player player, boolean first)
{
if (player == null)
return;
player.getInventory().validateItems();
if (_instantZone.getTimerMode() != TimerMode.NONE)
showTimer(player);
if (_instantZone.getKickIfDead() > 0)
player.addListener(_deathListener);
}
public void onPlayerExit(Player player)
{
if (player == null)
return;
player.getInventory().validateItems();
if (_instantZone.isRemoveVisitor())
removeVisitor(player);
if (_instantZone.getTimerMode() != TimerMode.NONE)
hideTimer(player);
if (_instantZone.getKickIfDead() > 0)
player.removeListener(_deathListener);
}
public void showTimer(Player player)
{
ServerPacket packet = null;
if (_instantZone.getTimerMode() == TimerMode.ELAPSED)
packet = new ExSendUIEvent(player, ExSendUIEvent.STYLE_TIMER_SHOW, ExSendUIEvent.MODE_ELAPSED, (int) ((System.currentTimeMillis() - _startTime) / 1000), 0, NpcString.ELAPSED_TIME);
else
packet = new ExSendUIEvent(player, ExSendUIEvent.STYLE_TIMER_SHOW, ExSendUIEvent.MODE_REMAINING, Math.max((int) ((_startTime - System.currentTimeMillis()) / 1000) + _instantZone.getTimerTime(), 0), 0, NpcString.REMAINING_TIME);
if (player != null)
player.sendPacket(packet);
else
broadcastPacket(packet);
}
public void hideTimer(Player player)
{
ServerPacket packet = new ExSendUIEvent(player, ExSendUIEvent.STYLE_TIMER_HIDE, _instantZone.getTimerMode() == TimerMode.ELAPSED ? 1 : 0, 0, 0);
if (player != null)
player.sendPacket(packet);
else
broadcastPacket(packet);
}
public static class MegalithZoneListener implements OnZoneEnterLeaveListener
{
@Override
public void onEnter(Zone zone, Creature cha)
{
if (!cha.isPlayer())
return;
int index = zone.getParams().getInteger("index", -1);
if (index == -1 || _mStage[index] != 3 || KillCounter[2] != Integer.MAX_VALUE)
return;
sendTimer(cha.getPlayer(), index, true);
}
@Override
public void onLeave(Zone zone, Creature cha)
{
if (!cha.isPlayer())
return;
int index = zone.getParams().getInteger("index", -1);
if (index == -1 || _mStage[index] != 3 || KillCounter[2] != Integer.MAX_VALUE)
return;
sendTimer(cha.getPlayer(), index, false);
}
}
public static void sendTimer(Player player, int type, boolean show)
{
if (show)
player.sendPacket(new ExSendUIEvent(null, ExSendUIEvent.STYLE_TIMER_SHOW, ExSendUIEvent.MODE_REMAINING, (int) ((_mStage3End[type] - System.currentTimeMillis()) / 1000), 0));
else
player.sendPacket(new ExSendUIEvent(null, ExSendUIEvent.STYLE_TIMER_HIDE, ExSendUIEvent.MODE_NONE, 0, 0));
}
Для хф можно более нормальный показ сделать при помощи ExSendUIEvent - в ил вроде бы его нет, но могу ошибаться.
Показ/скрытие вполне можно впилить как на вход/выход в инсты, так и на вход/выход в определенные зоны.
Java:public void onPlayerEnter(Player player, boolean first) { if (player == null) return; player.getInventory().validateItems(); if (_instantZone.getTimerMode() != TimerMode.NONE) showTimer(player); if (_instantZone.getKickIfDead() > 0) player.addListener(_deathListener); } public void onPlayerExit(Player player) { if (player == null) return; player.getInventory().validateItems(); if (_instantZone.isRemoveVisitor()) removeVisitor(player); if (_instantZone.getTimerMode() != TimerMode.NONE) hideTimer(player); if (_instantZone.getKickIfDead() > 0) player.removeListener(_deathListener); } public void showTimer(Player player) { ServerPacket packet = null; if (_instantZone.getTimerMode() == TimerMode.ELAPSED) packet = new ExSendUIEvent(player, ExSendUIEvent.STYLE_TIMER_SHOW, ExSendUIEvent.MODE_ELAPSED, (int) ((System.currentTimeMillis() - _startTime) / 1000), 0, NpcString.ELAPSED_TIME); else packet = new ExSendUIEvent(player, ExSendUIEvent.STYLE_TIMER_SHOW, ExSendUIEvent.MODE_REMAINING, Math.max((int) ((_startTime - System.currentTimeMillis()) / 1000) + _instantZone.getTimerTime(), 0), 0, NpcString.REMAINING_TIME); if (player != null) player.sendPacket(packet); else broadcastPacket(packet); } public void hideTimer(Player player) { ServerPacket packet = new ExSendUIEvent(player, ExSendUIEvent.STYLE_TIMER_HIDE, _instantZone.getTimerMode() == TimerMode.ELAPSED ? 1 : 0, 0, 0); if (player != null) player.sendPacket(packet); else broadcastPacket(packet); }
Java:public static class MegalithZoneListener implements OnZoneEnterLeaveListener { @Override public void onEnter(Zone zone, Creature cha) { if (!cha.isPlayer()) return; int index = zone.getParams().getInteger("index", -1); if (index == -1 || _mStage[index] != 3 || KillCounter[2] != Integer.MAX_VALUE) return; sendTimer(cha.getPlayer(), index, true); } @Override public void onLeave(Zone zone, Creature cha) { if (!cha.isPlayer()) return; int index = zone.getParams().getInteger("index", -1); if (index == -1 || _mStage[index] != 3 || KillCounter[2] != Integer.MAX_VALUE) return; sendTimer(cha.getPlayer(), index, false); } } public static void sendTimer(Player player, int type, boolean show) { if (show) player.sendPacket(new ExSendUIEvent(null, ExSendUIEvent.STYLE_TIMER_SHOW, ExSendUIEvent.MODE_REMAINING, (int) ((_mStage3End[type] - System.currentTimeMillis()) / 1000), 0)); else player.sendPacket(new ExSendUIEvent(null, ExSendUIEvent.STYLE_TIMER_HIDE, ExSendUIEvent.MODE_NONE, 0, 0)); }
все верно единственный минус ток чтоб он не перекрыл другие кастом таймеры если они есть, ну и чтобы при окончании таймера повторно пакет слался иначе уйдет в минус (точно не помню)Для хф можно более нормальный показ сделать при помощи ExSendUIEvent - в ил вроде бы его нет, но могу ошибаться.
Показ/скрытие вполне можно впилить как на вход/выход в инсты, так и на вход/выход в определенные зоны.
Java:public void onPlayerEnter(Player player, boolean first) { if (player == null) return; player.getInventory().validateItems(); if (_instantZone.getTimerMode() != TimerMode.NONE) showTimer(player); if (_instantZone.getKickIfDead() > 0) player.addListener(_deathListener); } public void onPlayerExit(Player player) { if (player == null) return; player.getInventory().validateItems(); if (_instantZone.isRemoveVisitor()) removeVisitor(player); if (_instantZone.getTimerMode() != TimerMode.NONE) hideTimer(player); if (_instantZone.getKickIfDead() > 0) player.removeListener(_deathListener); } public void showTimer(Player player) { ServerPacket packet = null; if (_instantZone.getTimerMode() == TimerMode.ELAPSED) packet = new ExSendUIEvent(player, ExSendUIEvent.STYLE_TIMER_SHOW, ExSendUIEvent.MODE_ELAPSED, (int) ((System.currentTimeMillis() - _startTime) / 1000), 0, NpcString.ELAPSED_TIME); else packet = new ExSendUIEvent(player, ExSendUIEvent.STYLE_TIMER_SHOW, ExSendUIEvent.MODE_REMAINING, Math.max((int) ((_startTime - System.currentTimeMillis()) / 1000) + _instantZone.getTimerTime(), 0), 0, NpcString.REMAINING_TIME); if (player != null) player.sendPacket(packet); else broadcastPacket(packet); } public void hideTimer(Player player) { ServerPacket packet = new ExSendUIEvent(player, ExSendUIEvent.STYLE_TIMER_HIDE, _instantZone.getTimerMode() == TimerMode.ELAPSED ? 1 : 0, 0, 0); if (player != null) player.sendPacket(packet); else broadcastPacket(packet); }
Java:public static class MegalithZoneListener implements OnZoneEnterLeaveListener { @Override public void onEnter(Zone zone, Creature cha) { if (!cha.isPlayer()) return; int index = zone.getParams().getInteger("index", -1); if (index == -1 || _mStage[index] != 3 || KillCounter[2] != Integer.MAX_VALUE) return; sendTimer(cha.getPlayer(), index, true); } @Override public void onLeave(Zone zone, Creature cha) { if (!cha.isPlayer()) return; int index = zone.getParams().getInteger("index", -1); if (index == -1 || _mStage[index] != 3 || KillCounter[2] != Integer.MAX_VALUE) return; sendTimer(cha.getPlayer(), index, false); } } public static void sendTimer(Player player, int type, boolean show) { if (show) player.sendPacket(new ExSendUIEvent(null, ExSendUIEvent.STYLE_TIMER_SHOW, ExSendUIEvent.MODE_REMAINING, (int) ((_mStage3End[type] - System.currentTimeMillis()) / 1000), 0)); else player.sendPacket(new ExSendUIEvent(null, ExSendUIEvent.STYLE_TIMER_HIDE, ExSendUIEvent.MODE_NONE, 0, 0)); }
Не, таймер тупо сам пропадает с экрана когда остается около 5-10 секунд до истечения времени.ну и чтобы при окончании таймера повторно пакет слался иначе уйдет в минус (точно не помню)
Its there any way to solve this issue in high protocols ( 140p ) ? as you say its annoying see the timer dissapear when still 10 seconds are missedNo, the timer simply disappears from the screen when there are about 5-10 seconds left before the time expires.
Which, by the way, is often a little inconvenient - it’s unclear why the Koreans did this, why not hide it exactly when the time reaches 0.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?