• Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.
Иконка ресурса

Таймер временных зон на экран

WildDead

Знающий
Местный
Куратор Данных
Любитель реакций
Сообщения
299
Розыгрыши
0
Решения
1
Репутация
527
Реакции
942
Баллы
443
WildDead добавил(а) новый ресурс:

Таймер временных зон на экран - interlude

Всё просто как и сказано в названии
Таймер для временных зон на экране у игроков
Использовал для пвп зон в городах, зоны можете сами поменять под себя по примеру(instance,baium и тд)

Узнать больше об этом ресурсе...
 

    kick

    Баллов: 20
    За сообщение

    Rolo

    Баллов: 20
    За обогащение Интерлюда и весомьій вклад в вечную жизнь ПВсофта

А можно сие чудо к ХФ прикрутить? Мб тупой вопрос прикольно выглядит особенно было бы прикольно за 15-30 минут сделать до респа Эпик РБ сделать мирную зону а потом заканчивается время и просто начинается масс замес :unsure:
 
А можно сие чудо к ХФ прикрутить? Мб тупой вопрос прикольно выглядит особенно было бы прикольно за 15-30 минут сделать до респа Эпик РБ сделать мирную зону а потом заканчивается время и просто начинается масс замес :unsure:
к хф адаптировать можно
А вот по поводу играть с переключением зон, и куда таймер прикручивать это уже отдельная песня)
Тут скрипт чисто под таймер)
 
А можно сие чудо к ХФ прикрутить? Мб тупой вопрос прикольно выглядит особенно было бы прикольно за 15-30 минут сделать до респа Эпик РБ сделать мирную зону а потом заканчивается время и просто начинается масс замес :unsure:
Для хф можно более нормальный показ сделать при помощи 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));
    }

Для хф можно более нормальный показ сделать при помощи 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 секунд до истечения времени.
Что кстати зачастую немного неудобно - непонятно зачем так корейцы сделали, почему не прятать именно когда до 0 время доходит.
 
No, 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.
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 missed
 
Назад
Сверху Снизу