Плохо! Плохо!:  0
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: ARK Game Time RGSS3

  1. #1
    Новичок Аватар для Arykray
    Информация о пользователе
    Регистрация
    24.04.2008
    Адрес
    Минск
    Сообщений
    24
    Репутация: 1 Добавить или отнять репутацию

    Icon1 ARK Game Time RGSS3

    ARK Game Time RGSS3

    Автор: Arykray
    Версия: 1.0.0
    Дата: 07.10.2013
    Версия мейкера: RPG Maker ACE 1.02a
    Демо:Скачать
    Скриншот:


    Описание:
    Скрипт позволяет создавать и редактировать игровую дату, то есть год, месяц, день, а также время. Добавляет в меню окно отображающее вышеуказанные данные.
    Фактически является доработанной и дополнений версией скрипта (XP) ARK Game Time

    Настройки скрипта:
    В скрипте имеются несколько переменных отвечающих за настройку:
    $tspeed - скорость течения времени варьируется от 1 - до 60 1- медленно 60 - быстро
    $year - стартовый год игры
    $month - стартовый месяц игры
    $day - стартовый день игры
    $hour - стартовый час игры
    $min - стартовая минута игры

    При помощи скриптов в событиях можно изменить дату
    Изменение любой из переменной к примеру $year = $year + 1 или $year = 750 приведет к изменению года, + 1 к текущему году или установить 750 год текущим соответственно.

    Также в событиях можно скриптом вызвать метод data_change(год, месяц, день, час, минута) все переменные обязательны для заполнения, только числами иначе мейкер выдаст ошибку.

    Если кому лень качать демо, вот листинг, ставится в скрипты до main.

    Скрипт:
    Спойлер Листинг кода:

    Код:
    #====================================================================
    # : Window_PlayTime
    #------------------------------------------------------------------------------
    #  Это окно показывает игорвое время в экране меню
    #====================================================================
    class Window_GameTime < Window_Base
        attr_reader   :year
        attr_reader   :month
        attr_reader   :day
        attr_reader   :hour
        attr_reader   :min
        attr_reader   :startsec
        Graphics.frame_rate = 60
        $tspeed  = 1            # от 1 - до 60  1- медленно 60 - быстро
        $year    = 2013         # Стартовый год игры
        $month   = 07           # Стартовый месяц игры
        $day     = 17           # Стартовый день игры
        $hour    = 20           # Стартовый час игры
        $min     = 15           # Стартовая минута игры
        $startsec = 0
      #--------------------------------------------------------------------------
      # * Инициализация объектов
      #--------------------------------------------------------------------------
      def initialize
        super(0, 0, window_width, fitting_height(2))
        @month = ["Января", "Февраля", "Марта", "Апреля", "Мая", "Июня",
                  "Июля","Августа","Сентября","Октября","Ноября","Декабря"]
        # Стартовая дата (Год, Месяц, День, Час, Минута)
        date_start($year, $month, $day, $hour, $min)
        # Лимиты (Месяцев в году, Дней в месяце, Часов в дне, Минут в часе, Секунд в минуте)
        
        # Если не установлено то (12, 30,  24, 60, 60)
        date_limit()
        if $tspeed > 60 
          $tspeed = 60
        elsif $tspeed < 1
          $tspeed = 1
        end
        errors          
      end
      #--------------------------------------------------------------------------
      # * Стартовая дата при запуске игры
      #--------------------------------------------------------------------------  
      def date_start(year, mon, day, hour, min)
        @year = year
        @mon  = mon
        @mday = day
        @hour = hour
        @min  = min
      end
      #--------------------------------------------------------------------------
      # * Димиты временных данных
      #--------------------------------------------------------------------------  
      def date_limit(mon = 12, day = 30, hour = 24, min = 60, sec =60)
        @my = mon
        @dm = day
        @hd = hour
        @mh = min
        @sm = sec / $tspeed
      end
      #--------------------------------------------------------------------------
      # * Получение длинны окна
      #--------------------------------------------------------------------------
      def window_width
        return 160
      end
      #--------------------------------------------------------------------------
      # * Обработка возможных ошибок
      # В случае если введенное значение больше допустимого, 
      # программа самостоятельно исправит ошибку.
      #--------------------------------------------------------------------------
      def errors
        if @min >= @mh        # Проверка стартовой минуты
          @hour += @min / @mh
          @min = @min % @mh
        end
        if @hour >= @hd       # Проверка стартового часа
          @mday += @hour / @hd
          @hour = @hour % @hd
        end
        if @mday > @dm        # Проверка стартового дня
          @mon += @mday / @dm
          @mday = @mday % @dm
        end
        if @mon > @my         # Проверка ставтового месяца
          @year += @mon / @my
          @mon = @mon % @my
        end
      end
      #--------------------------------------------------------------------------
      # * Обновление
      #--------------------------------------------------------------------------
      def refresh
        self.contents.clear
        @total_sec = Graphics.frame_count / (Graphics.frame_rate / 60) - $startsec
        year    = @total_sec / @sm / @mh / @hd / @dm / @my + @year.to_f
        mon     = @total_sec / @sm / @mh / @hd / @dm % @my + @mon.to_f 
        mday    = @total_sec / @sm / @mh / @hd % @dm + @mday.to_f
        hour    = @total_sec / @sm / @mh % @hd + @hour.to_f
        min     = @total_sec / @sm % @mh + @min.to_f
        sec     = @total_sec % @sm
        if min.to_i >= @mh
          hour += min.to_i / @mh
          min = min.to_i % @mh
        end
        if hour.to_i >= @hd
          mday += hour.to_i / @hd
          hour = hour.to_i % @hd
        end
        if mday.to_i > @dm
          mon += mday.to_i / @dm
          mday = mday.to_i % @dm
        end
        if mon.to_i > @my
          year += mon.to_i / @my
          mon = mon.to_i % @my
        end
        month_name = @month[mon.to_i-1]
        change_color(normal_color)
        self.contents.font.size = 28
        text = sprintf("%02d:%02d", hour, min)
        draw_text(4, 0 , width, line_height, text, 1)
        change_color(system_color)
        self.contents.font.size = 16
        self.contents.font.bold = true
        text = sprintf("%02d %02s %04d", mday, month_name, year)
        draw_text(4, 0 + 24 , width - 16 , line_height , text, 1)
      end
      #--------------------------------------------------------------------------
      # * Открытие Окна
      #--------------------------------------------------------------------------
      def open
        refresh
        super
      end
      #--------------------------------------------------------------------------
      # * Дополнение
      #--------------------------------------------------------------------------
      def update
        super
        if Graphics.frame_count / (Graphics.frame_rate / 60)- $startsec != @total_sec
          refresh
        end
      end
    end
    
    #====================================================================
    # ** DataManager
    #====================================================================
    module DataManager
      #--------------------------------------------------------------------------
      # * Создать содержание сохранения
      #--------------------------------------------------------------------------
      def self.make_save_contents
        contents = {}
        contents[:system]         = $game_system
        contents[:timer]          = $game_timer
        contents[:message]        = $game_message
        contents[:switches]       = $game_switches
        contents[:variables]      = $game_variables
        contents[:self_switches]  = $game_self_switches
        contents[:actors]         = $game_actors
        contents[:party]          = $game_party
        contents[:troop]          = $game_troop
        contents[:map]            = $game_map
        contents[:player]         = $game_player
        # Переменные даты
        contents[:year]           = $year
        contents[:month]          = $month 
        contents[:day]            = $day
        contents[:hour]           = $hour
        contents[:min]            = $min
        contents[:startsec]       = $startsec
        # Переменные даты
        contents
      end
      #--------------------------------------------------------------------------
      # * Извлечь содержание созранения
      #--------------------------------------------------------------------------
      def self.extract_save_contents(contents)
        $game_system        = contents[:system]
        $game_timer         = contents[:timer]
        $game_message       = contents[:message]
        $game_switches      = contents[:switches]
        $game_variables     = contents[:variables]
        $game_self_switches = contents[:self_switches]
        $game_actors        = contents[:actors]
        $game_party         = contents[:party]
        $game_troop         = contents[:troop]
        $game_map           = contents[:map]
        $game_player        = contents[:player]
        # Переменные даты
        $year               = contents[:year]
        $month              = contents[:month]
        $day                = contents[:day]
        $hour               = contents[:hour]
        $min                = contents[:min]
        $startsec           = contents[:startsec]
        # Переменные даты
      end
    end
    
    #====================================================================
    # ** Game_Interpreter
    #====================================================================
    class Game_Interpreter
      #--------------------------------------------------------------------------
      # * Изменение стартовой даты
      #--------------------------------------------------------------------------
      def date_change (year, mon, day, hour, min)
        $year    = year.to_i
        $month   = mon.to_i
        $day     = day.to_i
        $hour    = hour.to_i
        $min     = min.to_i
        $startsec = Graphics.frame_count / (Graphics.frame_rate / 60)
      end
    end
    
    #====================================================================
    # ** Scene_Menu
    #====================================================================
    class Scene_Menu < Scene_MenuBase
      #--------------------------------------------------------------------------
      # * Процес Запуска
      #--------------------------------------------------------------------------
      def start
        super
        create_command_window
        create_gold_window
        create_status_window
        create_gametime_window
      end
      #--------------------------------------------------------------------------
      # * Create PlayTime Window
      #--------------------------------------------------------------------------
      def create_gametime_window
        @gametime_window = Window_GameTime.new
        @gametime_window.x = 0
        @gametime_window.y = Graphics.height - @gold_window.height - @gametime_window.height
      end
    end

    Скрипт будет дорабатываться и дополнятся, в планах реализация времени суток и сезонов.
    Сразу оговорюсь, я четыре года не брался за Ruby, вспоминаю постепенно...
    Приветствуются любые комментарии, и предложения, а так же критика ну как-же без нее)))
    Последний раз редактировалось Arykray; 08.10.2013 в 02:46.
    Я живу в машинном коде, мне порой очень сложно понять человеческую логику.



    Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. А. Эйнштейн.

  2. #2
    Бывалый Аватар для Anxel
    Информация о пользователе
    Регистрация
    06.06.2011
    Адрес
    п.Солнечный, Хаб.край
    Сообщений
    942
    Записей в дневнике
    11
    Репутация: 23 Добавить или отнять репутацию

    По умолчанию

    Неожиданно. Скрипт хороший. Хочется поглядеть на реализацию сезонов (изменения в графическом плане?).

  3. #3
    Новичок Аватар для Arykray
    Информация о пользователе
    Регистрация
    24.04.2008
    Адрес
    Минск
    Сообщений
    24
    Репутация: 1 Добавить или отнять репутацию

    По умолчанию

    Спасибо.
    Эм, боюсь реализация сезонов в графическом плане будет затруднительня, придется менять сеты, а это лучьше реализовать разными картами. Я думаю сделать температуру, зимой снег, осенью дождь, и установить продолжительност дней и ночей в разное время года.
    Я живу в машинном коде, мне порой очень сложно понять человеческую логику.



    Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. А. Эйнштейн.

  4. #4
    Маститый Аватар для HopeBree
    Информация о пользователе
    Регистрация
    28.03.2013
    Сообщений
    1,201
    Записей в дневнике
    6
    Репутация: 38 Добавить или отнять репутацию

    По умолчанию

    велосипед же изобретаешь
    http://dekitarpg.wordpress.com/2012/...ltime-effects/
    один из скриптов который это делает, видел еще парочку на сайте по асе

  5. #5
    Новичок Аватар для Arykray
    Информация о пользователе
    Регистрация
    24.04.2008
    Адрес
    Минск
    Сообщений
    24
    Репутация: 1 Добавить или отнять репутацию

    По умолчанию

    Забавно, кажется я писал выше что, это доработка моего скрипта для XP, и адаптация под асю. Так что велосипед был изобретен лет 5 назад... Кстати XP ARK Game Time - тоже работает на Ace, ток меню переисать.
    Последний раз редактировалось Arykray; 08.10.2013 в 11:08.
    Я живу в машинном коде, мне порой очень сложно понять человеческую логику.



    Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. А. Эйнштейн.

  6. #6
    Познающий Аватар для Kolhe
    Информация о пользователе
    Регистрация
    06.11.2012
    Адрес
    Омск
    Сообщений
    465
    Записей в дневнике
    11
    Репутация: 26 Добавить или отнять репутацию

    По умолчанию

    В оглавление закрепил.

    Однако, я того же мнения. У забугорных друзей есть варианты ничуть не хуже уже давно. А может даже и лучше, в плане совместимости и оптимизации. Они крайне социальные насекомые, поэтому давно, в большинстве своем, пишут скрипты с расчетом на совместимость со всеми популярными движками (янфлай, виктор и прочие).
    Опять же, я ничего конкретно не утверждаю, твой скрипт толком не смотрел. Лишь проверил его работоспособность, прежде чем закреплять.


  7. #7
    Новичок Аватар для Arykray
    Информация о пользователе
    Регистрация
    24.04.2008
    Адрес
    Минск
    Сообщений
    24
    Репутация: 1 Добавить или отнять репутацию

    По умолчанию

    Суть в том, что я хочу создать независимый скрипт, смены дня и ночи и погодных условий, в зависимости от времени.
    Причем это время может координально меняться в самой игре (так называемое путешествие во времени).
    Скрипт времени, мне нужен для доработки книги квестов, задания ограниченые по времени (нужно отслеживать время получения задания)
    Интегрировать скрипты сторонних разработчиков со своими, слишком муторно...

    P.S. Не мешало бы побольше альтернативных забугорным, наших скриптов)))
    Последний раз редактировалось Arykray; 08.10.2013 в 15:06.
    Я живу в машинном коде, мне порой очень сложно понять человеческую логику.



    Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. А. Эйнштейн.

  8. #8
    Супер-модератор Аватар для dirge
    Информация о пользователе
    Регистрация
    25.02.2013
    Сообщений
    856
    Репутация: 72 Добавить или отнять репутацию

    По умолчанию

    Свои скрипты это всегда хорошо! Хоть мне такая система, на данный момент, не нужна, но все равно молодец, продолжай.
    И пользуясь случаем, немного не по теме, не подскажешь как в скрипте(не этом) проверять на какой сцене вызвано окно ?XD Я просто сам немного скриптами занимаюсь, хоть и на уровне плинтуса, но все же такое знание мне бы пригодилось.

  9. #9
    Познающий Аватар для Kolhe
    Информация о пользователе
    Регистрация
    06.11.2012
    Адрес
    Омск
    Сообщений
    465
    Записей в дневнике
    11
    Репутация: 26 Добавить или отнять репутацию

    По умолчанию

    Dirge, для таких вопросов отдельная тема есть или, коль к определенному человеку обращаешься, ЛС.

    А то типа мало у нас оффтопа на форуме.


  10. #10
    Супер-модератор Аватар для dirge
    Информация о пользователе
    Регистрация
    25.02.2013
    Сообщений
    856
    Репутация: 72 Добавить или отнять репутацию

    По умолчанию

    Да ладно тебе, хоть какая-то движуха >_>
    А то в последнее время все как-то вяло.

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •