Показано с 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 в 01:46.
    Я живу в машинном коде, мне порой очень сложно понять человеческую логику.



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

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

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

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

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

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

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

Ваши права

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