- Сообщений: 595
- Спасибо получено: 52
(XP) ARK Game Time
17 года 11 мес. назад - 17 года 4 мес. назад #20525
от Arykray
Arykray создал тему: (XP) ARK Game Time
Вот сегодня на роботе, в перерывах между учебой, попал за мейкер. В результате этого появился новый скрипт ARK Game Time
Скрипт изменяет окошко Проведенного в игре времени, на время идущее в игровом мире. Время идет в 60 раз быстрее нашего, то есть 1 день в скрипте проходит за 24 минуты. В окошке отображаюстя секунды, минуты, часы, день, месяц и год игры. Скрипт имеет много настраиваемых параметров такие как количество дней в месяце, или установку даты начала игры. Также, скрипт снабжен системой самоотладки, если к примеру стартовй месяц вы введете больше, чем установлено месяцев в году, скрипт не выкинет ошибку, а сам подщитает получившуюся дату. Собсно вот листинг кода.
А вот демка (версия 1.0.1)
ОЙ... чуть не забыл. Время так же можно просматривать и на карте, вызывается клавишей ALT.
Г.Ы. Наконец-то я смогу делать квесты, действительные до какого либо числа.
Скрипт изменяет окошко Проведенного в игре времени, на время идущее в игровом мире. Время идет в 60 раз быстрее нашего, то есть 1 день в скрипте проходит за 24 минуты. В окошке отображаюстя секунды, минуты, часы, день, месяц и год игры. Скрипт имеет много настраиваемых параметров такие как количество дней в месяце, или установку даты начала игры. Также, скрипт снабжен системой самоотладки, если к примеру стартовй месяц вы введете больше, чем установлено месяцев в году, скрипт не выкинет ошибку, а сам подщитает получившуюся дату. Собсно вот листинг кода.
ВНИМАНИЕ: Спойлер!
Code:
#==============================================================================
# AK Game Time Script
# Автор: Arykray
# Версия: 1.0.1
# Дата 31.07.2008
# E-Mail: arykray@tut.by
# ICQ: 264-291-954
# WEB: arykray.narod.ru
#==============================================================================
#==============================================================================
# : Window_PlayTime
#------------------------------------------------------------------------------
# Это окно показывает игорвое время в экране меню и на карте
#==============================================================================
class Window_PlayTime Window_Base
#--------------------------------------------------------------------------
# * Инициализация объектов
#--------------------------------------------------------------------------
def initialize
super(0, 0, 160, 96)
self.contents = Bitmap.new(width - 32, height - 32)
@year = 2008 # Стартовый год игры
@mon = 12 # Стартовый месяц игры
@mday = 30 # Стартовый день игры
@hour = 23 # Стартовый час игры
@min = 55 # Стартовая минута игры
@my = 12 # Количество месяцев в году
@dm = 30 # Количество дней в месяце
@hd = 23 # Количество часов в дне
@mh = 59 # Количество минут в часе
@sm = 59 # Количество секунд в минуте
@month = [ Января , Февраля , Марта , Апреля , Мая , Июня ,
Июля , Августа , Сентября , Октября , Ноября , Декабря ]
errors
refresh
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
if @mon != 0
@mon -= 1
end
end
#--------------------------------------------------------------------------
# * Обновление
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@total_sec = Graphics.frame_count / (Graphics.frame_rate / 40)
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 @mh
hour += min / @mh
min = min % @mh
min -= 1
end
if hour @hd
mday += hour / @hd
hour = hour % @hd
hour -= 1
end
if mday @dm
mon += mday / @dm
mday = mday % @dm
end
if mon @my
year += mon / @my
mon = mon % @my
end
month_name = @month[mon]
self.contents.font.size = 40
text = sprintf( %02d:%02d:%02d , hour, min, sec)
self.contents.draw_text(4, 0, 120, 48, text, 2)
self.contents.font.size = 18
self.contents.font.bold = true
text = sprintf( %02d %02s %04d , mday, month_name, year)
self.contents.draw_text(4, 32, 120, 32, text, 2)
end
#--------------------------------------------------------------------------
# * Дополнение экрана
#--------------------------------------------------------------------------
def update
super
if Graphics.frame_count / (Graphics.frame_rate / 40) != @total_sec
refresh
end
end
end
#==============================================================================
# : Scene_Map
#------------------------------------------------------------------------------
# Этот клас выполняет обработку экрана карты.
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# * Основная обработка
#--------------------------------------------------------------------------
def main
@spriteset = Spriteset_Map.new
@message_window = Window_Message.new
@playtime_window = Window_PlayTime.new
@playtime_window.visible = false
@playtime_window.opacity = 0
@playtime_window.x = 480
@playtime_window.y = -8
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@spriteset.dispose
@message_window.dispose
@playtime_window.dispose
if $scene.is_a?(Scene_Title)
Graphics.transition
Graphics.freeze
end
end
#--------------------------------------------------------------------------
# * Обновление кадра
#--------------------------------------------------------------------------
def update
loop do
$game_map.update
$game_system.map_interpreter.update
$game_player.update
$game_system.update
$game_screen.update
unless $game_temp.player_transferring
break
end
transfer_player
if $game_temp.transition_processing
break
end
end
@spriteset.update
@message_window.update
@playtime_window.update
if $game_temp.gameover
$scene = Scene_Gameover.new
return
end
if $game_temp.to_title
$scene = Scene_Title.new
return
end
if $game_temp.transition_processing
$game_temp.transition_processing = false
if $game_temp.transition_name ==
Graphics.transition(20)
else
Graphics.transition(40, Graphics/Transitions/ +
$game_temp.transition_name)
end
end
if $game_temp.message_window_showing
return
end
if $game_player.encounter_count == 0 and $game_map.encounter_list != []
unless $game_system.map_interpreter.running? or
$game_system.encounter_disabled
n = rand($game_map.encounter_list.size)
troop_id = $game_map.encounter_list[n]
if $data_troops[troop_id] != nil
$game_temp.battle_calling = true
$game_temp.battle_troop_id = troop_id
$game_temp.battle_can_escape = true
$game_temp.battle_can_lose = false
$game_temp.battle_proc = nil
end
end
end
if Input.trigger?(Input::B)
unless $game_system.map_interpreter.running? or
$game_system.menu_disabled
$game_temp.menu_calling = true
$game_temp.menu_beep = true
end
end
if Input.trigger?(Input::ALT)
if @playtime_window.visible != false
@playtime_window.visible = false
else
@playtime_window.visible = true
end
end
if $DEBUG and Input.press?(Input::F9)
$game_temp.debug_calling = true
end
unless $game_player.moving?
if $game_temp.battle_calling
call_battle
elsif $game_temp.shop_calling
call_shop
elsif $game_temp.name_calling
call_name
elsif $game_temp.menu_calling
call_menu
elsif $game_temp.save_calling
call_save
elsif $game_temp.debug_calling
call_debug
end
end
end
end
А вот демка (версия 1.0.1)
ОЙ... чуть не забыл. Время так же можно просматривать и на карте, вызывается клавишей ALT.
Г.Ы. Наконец-то я смогу делать квесты, действительные до какого либо числа.
Последнее редактирование: 17 года 4 мес. назад пользователем Arykray.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
17 года 11 мес. назад #20532
от Ranama
Невпихуй невпихуемоё - а то невпихнёшь...<br />Ссылка на мою страницу: Я в контакте
Ranama ответил в теме (XP) AK Game Time
ООО!!! Arykray спасибо!!! Ты бох! Я давно мучаюсь над путёвой системкой, а те скрипты которые нашёл как то не очень устраивали... Молодец!
Невпихуй невпихуемоё - а то невпихнёшь...<br />Ссылка на мою страницу: Я в контакте
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
17 года 9 мес. назад - 17 года 3 нед. назад #22351
от Arykray
Arykray ответил в теме (XP) ARK Game Time
В скрипте есть несколько моментов, которые меня пока не устраивают. Все дело в том, что нельзя нормально регулировать скорость течения времени (по умолчанию стоит скорость в 60 раз быстрее нормальной), нельза обнулить время, да и месяцев в массив думаю добавит побольше.
Вообще этот скрипт писался для некоторых задумок, которые требуют спрогого контроля за временем суток...
2 Ranama, есть какие нить предложения, пиши, мне интересней работь!
В скрипте найден серьезный баг: при установке начального времени, скрипт его то устанавливает, но отсчет начинает с нуля, прибавляя каждый раз до лимита (60 для секунд), и вот вы к примеру установили 59 сек, а скрипт начал считать с нуля. В итоге следующая минута у вас наступит когда на таймере будет 119 сек. Бъюсь над разрешением этой проблемы.
Для тех кто уже начал использовать данный скрипт, посторайтесь не вводить начальную дату и время((((
Обновил версию до 1.0.1, исправлен баг с начальным временем. Скрипт можно считать полностью пригодным для работы.
Вообще этот скрипт писался для некоторых задумок, которые требуют спрогого контроля за временем суток...
2 Ranama, есть какие нить предложения, пиши, мне интересней работь!
В скрипте найден серьезный баг: при установке начального времени, скрипт его то устанавливает, но отсчет начинает с нуля, прибавляя каждый раз до лимита (60 для секунд), и вот вы к примеру установили 59 сек, а скрипт начал считать с нуля. В итоге следующая минута у вас наступит когда на таймере будет 119 сек. Бъюсь над разрешением этой проблемы.
Для тех кто уже начал использовать данный скрипт, посторайтесь не вводить начальную дату и время((((
Обновил версию до 1.0.1, исправлен баг с начальным временем. Скрипт можно считать полностью пригодным для работы.
Последнее редактирование: 17 года 3 нед. назад пользователем Arykray.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Время создания страницы: 0.091 секунд
