Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
GameTimeController
#1
Доброго времени суток, камрады! Это снова я. Вопрос на повестке дня: можно ли синхронизировать время в игре с реальным временем?
Код:
    public static final int TICKS_PER_SECOND = 1;
    public static final int MILLIS_IN_TICK = 1000 / TICKS_PER_SECOND;
Как я понимаю, здесь у нас приближено к реальному времени. Просто течение времени.
Заранее спасибо!
Ответ
#2
pacifica
если хочешь что то особенное сделать что чы только запускалось по реальному времени в определённые моменты то юзай календарь
Ответ
#3
Хочется не просто запуска по реальному времени, а чтобы время в игре было эквивалентно реальному.
Ответ
#4
pacifica Написал:Хочется не просто запуска по реальному времени, а чтобы время в игре было эквивалентно реальному.
в клиенте время идет по своему.
Ответ
#5
VISTALL, спасибо кэп!

pacifica, смотри комменты в исходниках:
Код:
    /**
     * one ingame day is 240 real minutes
     */
Ответ
#6
SunnyX, да я уже допёр до этого. Вот сделал кое-что, но почему-то цвет неба не хочет меняться х_Х
Код:
    class BroadcastSunState implements Runnable
    {
        public void run()
        {
            Date date = new Date();
            @SuppressWarnings("deprecation")
            int h = date.getHours();
            L2GameServerPacket packet = null;
                if ((h>=7) && (h<10))
                {
                    packet = new SignsSky(2); //dawn
                    System.out.println("DayNightSpawnManager: Dawn started at " + date + "");
                }
                else if ((h>=10) && (h<19))
                {
                    packet = new SunRise(); //day
                    System.out.println("DayNightSpawnManager: Day started at " + date + "");
                }
                else if ((h>=19) && (h<22))
                {
                    packet = new SignsSky(1); //dusk
                    System.out.println("DayNightSpawnManager: Dusk started at " + date + "");
                }
                else
                {
                    packet = new SunSet(); //night    
                    System.out.println("DayNightSpawnManager: Night started at " + date + "");
                }
                if(packet != null)
                    for (L2PcInstance player : L2World.getInstance().getAllPlayers())
                        player.sendPacket(packet);
                boolean tempIsNight = ((h>=10) && (h<19));
                if (tempIsNight != _isNight)
                {
                    _isNight = tempIsNight;
                    DayNightSpawnManager.getInstance().notifyChangeMode();
                }
        }
    }
Ответ
#7
pacifica Написал:SunnyX, да я уже допёр до этого. Вот сделал кое-что, но почему-то цвет неба не хочет меняться х_Х
Код:
    class BroadcastSunState implements Runnable
    {
        public void run()
        {
            Date date = new Date();
            @SuppressWarnings("deprecation")
            int h = date.getHours();
            L2GameServerPacket packet = null;
                if ((h>=7) && (h<10))
                {
                    packet = new SignsSky(2); //dawn
                    System.out.println("DayNightSpawnManager: Dawn started at " + date + "");
                }
                else if ((h>=10) && (h<19))
                {
                    packet = new SunRise(); //day
                    System.out.println("DayNightSpawnManager: Day started at " + date + "");
                }
                else if ((h>=19) && (h<22))
                {
                    packet = new SignsSky(1); //dusk
                    System.out.println("DayNightSpawnManager: Dusk started at " + date + "");
                }
                else
                {
                    packet = new SunSet(); //night    
                    System.out.println("DayNightSpawnManager: Night started at " + date + "");
                }
                if(packet != null)
                    for (L2PcInstance player : L2World.getInstance().getAllPlayers())
                        player.sendPacket(packet);
                boolean tempIsNight = ((h>=10) && (h<19));
                if (tempIsNight != _isNight)
                {
                    _isNight = tempIsNight;
                    DayNightSpawnManager.getInstance().notifyChangeMode();
                }
        }
    }

давайте посмотрим.
Есть пакет
ClientSetTIme сейчас почему то уже не используется время клиенту посылается через пакет CharSelected

Попробуйте через ClientSetTIme там есть парамент writeD кажись стоить 6. Попробуйте изменить и послать


Елси так не сделать то в клиенте время быстрей пройдет, чем за сервак
Ответ
#8
Течение времени можно совсем отключить в клиенте в файле Env.int - это раз)
А два, надо в контролере времени
Код:
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new BroadcastSunState(), 0, [color=Red]1000[/color]);
Изначально вместо 1000 было 60000 если не ошибаюсь - это 10 минут 1000 же 1 секунда. То есть мы посылаем этот пакетик каждую секунду. Вроде всё заработало)
Ответ
#9
В клиенте нет секундной стрелки или значения, только часы:минуты, поэтому нет смысла так часто обновлять клиент.
Ответ
#10
SunnyX, согласен, тем более время совсем отключается. Команда /time так же синхронизирована с реальным временем.
Осталось нормально подкрутить timeenv и будет совсем славно)
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 4 Гость(ей)