ГлавнаяФорумRPG MakerСкрипты/ПлагиныRPG Maker VX ACEУлучшающие или добавляющее новое скриптыВремя/Дата v. 6.1 Финальная Версия
Войти на сайт
×
ТЕМА: Время/Дата v. 6.1 Финальная Версия
Время/Дата v. 5.12 9 года 9 мес. назад #77977
|
Попробуйте найти в скрипте 623 строчку: self.z = 1 и замените на self.z = 1000 (В демке именно эта строка)
Отпишитесь, как работает. |
Последнее редактирование: 9 года 9 мес. назад от DK.
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.12 9 года 9 мес. назад #78010
|
Спасибо. ПОмогло.
|
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK
|
Время/Дата v. 5.12 9 года 8 мес. назад #79573
|
Решил добавить поддержку Victor Light Effects, но не смог найти его (на его офф. сайте битая ссылка). У кого-нибудь есть ? Поделитесь, пожалуйста. Временно отошел от скриптописания по причине занятости учебой и другими проектами. Если нашли какие-то ошибки - пишите, постараюсь их исправить.
|
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.12 9 года 8 мес. назад #79574
|
Глянул бы правее, увидел бы топик "dropbox links down"
|
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Последнее редактирование: 9 года 8 мес. назад от strelokhalfer.
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.12 9 года 8 мес. назад #79576
|
#==============================================================================
# ** Victor Engine - Light Effects
#------------------------------------------------------------------------------
# Author : Victor Sant
#
# Version History:
# v 1.00 - 2011.12.21 > First release
# v 1.01 - 2011.12.23 > Compatibility with Diagonal Movement
# v 1.02 - 2011.12.24 > Better checks for images bigger than screen
# v 1.03 - 2011.12.27 > Fixed bug when teleporting to same map
# v 1.04 - 2011.12.30 > Faster Regular Expressions
# v 1.05 - 2012.01.04 > Fixed lantern direction bug
# > Fixed load fail when lights ON
# v 1.06 - 2012.01.07 > Fixed light opacity change not updating
# v 1.07 - 2012.01.13 > Fixed update delay when exiting the menu
# v 1.08 - 2012.01.15 > Fixed the positive sign on some Regular Expressions
# > Fixed the Regular Expressions problem with "" and 灯
# v 1.09 - 2012.05.21 > Compatibility with Map Turn Battle
# v 1.10 - 2012.07.24 > Compatibility with Moving Platform
# > Changed actor indexing for lantern (now start at 1)
# v 1.11 - 2012.08.02 > Compatibility with Basic Module 1.27
# v 1.12 - 2013.01.07 > Fixed issue with actor lantern and map transfer
#------------------------------------------------------------------------------
# This scripts allow to add varied light effects to the maps. But it works
# different from other scripts with this function.
# Normally, light effect scripts add images above the events, and then the
# screen is tone is changed, with the images staying bellow the darker layer.
# This script add an new darkened layer, and apply the light effect images
# on this layer.
#------------------------------------------------------------------------------
# Compatibility
# Requires the script 'Victor Engine - Basic Module' v 1.27 or higher
#
# * Alias methods
# class Game_Map
# def setup(map_id)
#
# class Game_CharacterBase
# def init_public_members
# def update
#
# class Game_Event < Game_Character
# def clear_starting_flag
#
# class Spriteset_Map
# def initialize
# def update
# def dispose
#
# class Scene_Map
# def pre_transfer
#
# class Game_Interpreter
# def comment_call
#
#------------------------------------------------------------------------------
# Instructions:
# To instal the script, open you script editor and paste this script on
# a new section bellow the Materials section. This script must also
# be bellow the script 'Victor Engine - Basic'
# The lights must be placed on the folder "Graphics/Lights". Create a folder
# named "Lights" on the Graphics folder.
#
#------------------------------------------------------------------------------
# Comment calls note tags:
# Tags to be used in events comment box, works like a script call.
#
# <create shade>
# setting
# </create shade>
# Create a shade effect on the map, add the following values to the setting.
# opacity: x : opacity (0-255)
# red: x : red tone (0-255, can be negative)
# green: x : green tone (0-255, can be negative)
# blue: x : blue tone (0-255, can be negative)
# blend: x : fog blend type (0: normal, 1: add, 2: subtract)
#
# <actor light> <event light> <vehicle light>
# setting setting setting
# </actor light> </event light> </vehicle ligth>
# Create a light effect on actor, event or vehicle, add the following
# values to the info. The ID, index and name must be added, other values
# are optional.
# id: x : ligh effect ID
# name: "x" : ligh effect graphic filename ("filename")
# index: x : actor index, event id or (0: boat, 1: ship, 2: airship)
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <map light>
# setting
# </map light>
# Create a light effect on a specific map postion, add the following
# values to the info. The ID, map_x, map_y and name must be added, other
# values are optional.
# id: x : ligh effect ID
# name: "x" : ligh effect graphic filename ("filename")
# map x: x : map X coordinate
# map y: x : map Y coordinate
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <actor lantern i: o>
# <event lantern i: o>
# <vehicle lantern i: o>
# Call a lantern on the target character, lanterns are effets that
# lights the front of the character
# i : actor index, event id or (0: boat, 1: ship, 2: airship)
# o : light opacity (0-255)
#
# <light opacity id: o, d>
# This tag allows to change the light opacity gradually
# i : light effect ID
# o : new opacity (0-255)
# d : wait until complete change (60 frames = 1 second)
#
# <shade opacity: o, d>
# This tag allows to change the shade opacity gradually
# o : new opacity (0-255)
# d : wait until complete change (60 frames = 1 second)
#
# <shade tone: r, g, b, d>
# This tag allows to change the shade opacity gradually
# r : red tone (0-255, can be negative)
# g : green tone (0-255, can be negative)
# b : blue tone (0-255, can be negative)
# d : wait until complete change (60 frames = 1 second)
#
# <remove light: id>
# This tag allows remove a light effect
# id: ligh effect ID
#
#------------------------------------------------------------------------------
# Maps note tags:
# Tags to be used on the Maps note box in the database
#
# <create shade>
# setting
# </create shade>
# Create a shade effect on the map, add the following values to the setting.
# opacity: x : opacity (0-255)
# red: x : red tone (0-255, can be negative)
# green: x : green tone (0-255, can be negative)
# blue: x : blue tone (0-255, can be negative)
# blend: x : fog blend type (0: normal, 1: add, 2: subtract)
#
# <actor light> <event light> <vehicle light>
# setting setting setting
# </actor light> </event light> </vehicle ligth>
# Create a light effect on actor, event or vehicle, add the following
# values to the info. The ID, index and name must be added, other values
# are optional.
# id: x : ligh effect ID
# name: "x" : ligh effect graphic filename ("filename")
# index: x : actor index, event id or (0: boat, 1: ship, 2: airship)
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <map light>
# setting
# </map light>
# Create a light effect on a specific map postion, add the following
# values to the info. The ID, map_x, map_y and name must be added, other
# values are optional.
# id: x : ligh effect ID
# name: "x" : ligh effect graphic filename ("filename")
# map x: x : map X coordinate
# map y: x : map Y coordinate
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <actor lantern i: o>
# <event lantern i: o>
# <vehicle lantern i: o>
# Call a lantern on the target character, lanterns are effets that
# lights the front of the character
# i : actor index, event id or (0: boat, 1: ship, 2: airship)
# o : light opacity (0-255)
#
#------------------------------------------------------------------------------
# Comment boxes note tags:
# Tags to be used on events Comment boxes. They're different from the
# comment call, they're called always the even refresh.
#
# <custom light>
# settings
# </custom light>
# Create a custom light effect on actor, event or vehicle, add the following
# values to the settings. The name must be added, other values
# are optional.
# name: "x" : ligh effect graphic filename ("filename")
# opacity: x : light opacity (0-255)
# pos x: x : coordinate X adjust
# pos y: x : coordinate Y adjust
# var: x : light opacity variation
# speed: x : light variation speed
# zoom: x : ligh effect zoom (100 = default size)
#
# <simple light: o>
# <simple lamp: o>
# <simple torch: o>
# <simple window 1: o>
# <simple window 2: o>
# Simple light shortcuts
# o : new opacity (0-255)
#
# <flash light: o>
# <flash lamp: o>
# <flash torch: o>
# <flash window 1: o>
# <flash window 2: o>
# Flashing light shortcuts
# o : new opacity (0-255)
#
# <lantern: o>
# Lanterns shortcut
# o : new opacity (0-255)
#
#------------------------------------------------------------------------------
# Additional instructions:
#
# The lights are placed on the shade, so you *must* create a shade in order
# to display the lights. No shade, no lights.
#
# The IDs of the light effects are used as identifiers. Don't use the
# same value for different light spots, if you do so, one light will
# replace the other. Also the IDs are used as referece to when
# removing lights and changing light opacity.
#
# The actor lanter use the actor position in the party, NOT the actor ID.
# So the if you want a lantern for the first character, use
# <actor lantern 1: o> (o = opacity)
#
# About the error on line 1062: this is a USER error made by BAD setup.
# this happen when you assign a light effect to a event id that don't exist
# at the map. So please: DON'T REPORT IT ANYMORE.
#
#==============================================================================
#==============================================================================
# ** Victor Engine
#------------------------------------------------------------------------------
# Setting module for the Victor Engine
#==============================================================================
module Victor_Engine
#--------------------------------------------------------------------------
# * required
# This method checks for the existance of the basic module and other
# VE scripts required for this script to work, don't edit this
#--------------------------------------------------------------------------
def self.required(name, req, version, type = nil)
if !$imported[:ve_basic_module]
msg = "The script '%s' requires the script\n"
msg += "'VE - Basic Module' v%s or higher above it to work properly\n"
msg += "Go to http://victorscripts.wordpress.com/ to download this script."
msgbox(sprintf(msg, self.script_name(name), version))
exit
else
self.required_script(name, req, version, type)
end
end
#--------------------------------------------------------------------------
# * script_name
# Get the script name base on the imported value, don't edit this
#--------------------------------------------------------------------------
def self.script_name(name, ext = "VE")
name = name.to_s.gsub("_", " ").upcase.split
name.collect! {|char| char == ext ? "#{char} -" : char.capitalize }
name.join(" ")
end
end
$imported ||= {}
$imported[:ve_light_effects] = 1.11
Victor_Engine.required(:ve_light_effects, :ve_basic_module, 1.27, :above)
Victor_Engine.required(:ve_light_effects, :ve_map_battle, 1.00, :bellow)
#==============================================================================
# ** Cache
#------------------------------------------------------------------------------
# This module loads each of graphics, creates a Bitmap object, and retains it.
# To speed up load times and conserve memory, this module holds the created
# Bitmap object in the internal hash, allowing the program to return
# preexisting objects when the same bitmap is requested again.
#==============================================================================
module Cache
#--------------------------------------------------------------------------
# * New method: lights
#--------------------------------------------------------------------------
def self.lights(filename)
self.load_bitmap('Graphics/Lights/', filename)
end
end
#==============================================================================
# ** Game_Screen
#------------------------------------------------------------------------------
# This class handles screen maintenance data, such as change in color tone,
# flashes, etc. It's used within the Game_Map and Game_Troop classes.
#==============================================================================
class Game_Screen
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :lights
attr_reader :shade
attr_accessor :remove_light
#--------------------------------------------------------------------------
# * Alias method: clear
#--------------------------------------------------------------------------
alias :clear_ve_light_effects :clear
def clear
clear_ve_light_effects
clear_lights
end
#--------------------------------------------------------------------------
# * New method: clear_lights
#--------------------------------------------------------------------------
def clear_lights
@lights = {}
@remove_light = []
@shade = Game_ShadeEffect.new
end
#--------------------------------------------------------------------------
# * New method: lights
#--------------------------------------------------------------------------
def lights
@lights ||= {}
end
#--------------------------------------------------------------------------
# * New method: remove_light
#--------------------------------------------------------------------------
def remove_light
@remove_light ||= []
end
#--------------------------------------------------------------------------
# * New method: shade
#--------------------------------------------------------------------------
def shade
@shade ||= Game_ShadeEffect.new
end
end
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
# This class handles maps. It includes scrolling and passage determination
# functions. The instance of this class is referenced by $game_map.
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# * Alias method: setup
#--------------------------------------------------------------------------
alias :setup_ve_light_effects :setup
def setup(map_id)
setup_ve_light_effects(map_id)
setup_lights_effect
end
#--------------------------------------------------------------------------
# * New method: setup_lights_effect
#--------------------------------------------------------------------------
def setup_lights_effect
setup_map_shade(note)
setup_map_lights(:actor, note)
setup_map_lights(:event, note)
setup_map_lights(:vehicle, note)
setup_map_lights(:map, note)
setup_map_lantern(:actor, note)
setup_map_lantern(:event, note)
setup_map_lantern(:vehicle, note)
end
#--------------------------------------------------------------------------
# * New method: setup_map_shade
#--------------------------------------------------------------------------
def setup_map_shade(text)
if text =~ get_all_values("CREATE SHADE")
info = $1.dup
shade = @screen.shade
shade.show
shade.opacity = info =~ /OPACITY: (\d+)/i ? $1.to_i : 192
shade.blend = info =~ /BLEND: (\d+)/i ? $1.to_i : 2
red = info =~ /RED: (\d+)/i ? $1.to_i : 0
green = info =~ /GREEN: (\d+)/i ? $1.to_i : 0
blue = info =~ /BLUE: (\d+)/i ? $1.to_i : 0
shade.set_color(red, green, blue)
end
end
#--------------------------------------------------------------------------
# * New method: setup_map_lights
#--------------------------------------------------------------------------
def setup_map_lights(type, text)
value = get_regexp_value(type)
text.scan(get_all_values("#{value} LIGHT")) do
light = setup_light($1.dup, type)
@screen.lights[light.id] = light if light.id
end
end
#--------------------------------------------------------------------------
# * New method: setup_map_lantern
#--------------------------------------------------------------------------
def setup_map_lantern(type, text)
value = get_regexp_value(type)
regexp = /<#{value} LANTERN (\d+): (\d+)>/i
text.scan(regexp) do |index, opacity|
target = get_font(type, index.to_i)
next unless target
target.lantern = opacity.to_i
target.update_lantern
end
end
#--------------------------------------------------------------------------
# * New method: get_regexp_value
#--------------------------------------------------------------------------
def get_regexp_value(type)
case type
when :actor then "ACTOR"
when :event then "EVENT"
when :vehicle then "VEHICLE"
when :map then "MAP"
end
end
#--------------------------------------------------------------------------
# * New method: setup_light
#--------------------------------------------------------------------------
def setup_light(info, type)
light = Game_LightEffect.new
light.name = info =~ /NAME: #{get_filename}/i ? $1.dup : ""
light.id = info =~ /ID: (\w+)/i ? $1.to_s : 0
light.id = info =~ /ID: (\d+)/i ? $1.to_i : light.id
light.x = info =~ /POS X: ([+-]?\d+)/i ? $1.to_i : 0
light.y = info =~ /POS Y: ([+-]?\d+)/i ? $1.to_i : 0
light.speed = info =~ /SPEED: (\d+)/i ? $1.to_i : 0
light.zoom = info =~ /ZOOM: (\d+)/i ? $1.to_f : 100.0
light.opacity = info =~ /OPACITY: (\d+)/i ? $1.to_i : 192
light.variance = info =~ /VAR: (\d+)/i ? $1.to_i : 0
if type == :map
map_x = info =~ /MAP X: (\d+)/i ? $1.to_i : 0
map_y = info =~ /MAP Y: (\d+)/i ? $1.to_i : 0
light.info = {x: map_x, y: map_y}
else
index = info =~ /INDEX: (\d+)/i ? $1.to_i : 0
light.info = {type => index}
end
light
end
#--------------------------------------------------------------------------
# * New method: set_light
#--------------------------------------------------------------------------
def set_light(id, name, info, op = 0, x = 0, y = 0, v = 0, s = 0, z = 100)
light = Game_LightEffect.new
light.id = id
light.name = name
light.info = info
light.opacity = op.to_i
light.x = x.to_i
light.y = y.to_i
light.variance = v.to_i
light.speed = s.to_i
light.zoom = z.to_f
light
end
#--------------------------------------------------------------------------
# * New method: get_font
#--------------------------------------------------------------------------
def get_font(type, i)
case type
when :actor then actors[i - 1]
when :event then events[i]
when :vehicle then vehicles[i]
end
end
end
#==============================================================================
# ** Game_CharacterBase
#------------------------------------------------------------------------------
# This class deals with characters. Common to all characters, stores basic
# data, such as coordinates and graphics. It's used as a superclass of the
# Game_Character class.
#==============================================================================
class Game_CharacterBase
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :lantern
#--------------------------------------------------------------------------
# * Alias method: init_public_members
#--------------------------------------------------------------------------
alias :init_public_members_ve_light_effects :init_public_members
def init_public_members
init_public_members_ve_light_effects
@lantern = 0
end
#--------------------------------------------------------------------------
# * Alias method: update
#--------------------------------------------------------------------------
alias :update_ve_light_effects :update
def update
update_ve_light_effects
update_lantern
end
#--------------------------------------------------------------------------
# * New method: update_lantern
#--------------------------------------------------------------------------
def update_lantern(forced = false)
diag = $imported[:ve_diagonal_move] && diagonal?
if @lantern != 0 && ((!diag && @lantern_direction != @direction) ||
(diag && @lantern_direction != @diagonal) || forced)
@lantern_direction = (diag ? @diagonal : @direction)
light = setup_lantern
$game_map.screen.lights[light.id] = light
elsif @lantern == 0 && @lantern_direction
id = event? ? "EL#{@id}" : "AL#{@id}"
$game_map.screen.remove_light.push(id) if $game_map.screen.remove_light
@lantern_direction = nil
end
end
#--------------------------------------------------------------------------
# * New method: setup_lantern
#--------------------------------------------------------------------------
def setup_lantern
id = event? ? "EL#{@id}" : "AL#{@id}"
type = event? ? :event : :actor
case @lantern_direction
when 1
name = 'lantern_downleft'
value = [id, name, {type => @id}, @lantern, -48, 48]
when 3
name = 'lantern_downright'
value = [id, name, {type => @id}, @lantern, 48, 48]
when 2
name = 'lantern_down'
value = [id, name, {type => @id}, @lantern, 0, 64]
when 4
name = 'lantern_left'
value = [id, name, {type => @id}, @lantern, -64, 0]
when 6
name = 'lantern_right'
value = [id, name, {type => @id}, @lantern, 64, 0]
when 7
name = 'lantern_upleft'
value = [id, name, {type => @id}, @lantern, -48, -48]
when 8
name = 'lantern_up'
value = [id, name, {type => @id}, @lantern, 0, -64,]
when 9
name = 'lantern_upright'
value = [id, name, {type => @id}, @lantern, 48, -48]
end
$game_map.set_light(*value)
end
end
#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
# This class deals with events. It handles functions including event page
# switching via condition determinants, and running parallel process events.
# It's used within the Game_Map class.
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# * Alias method: clear_starting_flag
#--------------------------------------------------------------------------
alias :clear_starting_flag_ve_light_effects :clear_starting_flag
def clear_starting_flag
clear_starting_flag_ve_light_effects
@lantern = 0
$game_map.screen.remove_light.push("EV#{@id}")
refresh_lights if @page
end
#--------------------------------------------------------------------------
# * New method: refresh_lights
#--------------------------------------------------------------------------
def refresh_lights
case note
when /<SIMPLE LIGHT: (\d+)?>/i
set_light("EV#{@id}", "light", $1 ? $1 : 255)
when /<SIMPLE LAMP: (\d+)?>/i
set_light("EV#{@id}", "lamp", $1 ? $1 : 255)
when /<SIMPLE TORCH: (\d+)?>/i
set_light("EV#{@id}", "torch", $1)
when /<SIMPLE WINDOW (\d+): (\d+)?>/i
adj = $1 == "1" ? 0 : 14
set_light("EV#{@id}", "window", $2 ? $2 : 255, 0, 0, 0, adj)
when /<FLASH LIGHT: (\d+)?>/i
set_light("EV#{@id}", "light", $1 ? $1 : 255, 30, 1)
when /<FLASH LAMP: (\d+)?>/i
set_light("EV#{@id}", "lamp", $1 ? $1 : 255, 30, 1)
when /<FLASH TORCH: (\d+)?>/i
set_light("EV#{@id}", "torch", $1 ? $1 : 255, 30, 1)
when /<FLASH WINDOW (\d+): (\d+)?>/i
adj = $1 == "1" ? 0 : 14
set_light("EV#{@id}", "window", $2 ? $2 : 255, 30, 1, 0, adj)
when get_all_values("CUSTOM LIGHT")
info = $1.dup
n = info =~ /NAME: #{get_filename}/i ? $1.dup : ""
x = info =~ /POS X: ([+-]?\d+)/i ? $1.to_i : 0
y = info =~ /POS Y: ([+-]?\d+)/i ? $1.to_i : 0
s = info =~ /SPEED: (\d+)/i ? $1.to_i : 0
z = info =~ /ZOOM: (\d+)/i ? $1.to_f : 100.0
o = info =~ /OPACITY: (\d+)/i ? $1.to_i : 192
v = info =~ /VAR: (\d+)/i ? $1.to_i : 0
set_light("EV#{@id}", n, o, v, s, x, y, z)
when /<LANTERN(?:: (\d+))?>/i
@lantern = ($1 ? $1.to_i : 255)
end
end
#--------------------------------------------------------------------------
# * New method: set_light
#--------------------------------------------------------------------------
def set_light(id, name, op = 255, v = 0, s = 0, x = 0, y = 0, z = 100)
value = [id, name, {:event => @id}, op, x, y, v, s, z].compact
$game_map.screen.lights[id] = $game_map.set_light(*value)
$game_map.screen.remove_light.delete(id)
end
end
#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
# An interpreter for executing event commands. This class is used within the
# Game_Map, Game_Troop, and Game_Event classes.
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# * Alias method: comment_call
#--------------------------------------------------------------------------
alias :comment_call_ve_light_effects :comment_call
def comment_call
call_create_lights
call_change_shade_opacity
call_change_shade_tone
call_change_light_opacity
call_remove_light
comment_call_ve_light_effects
end
#--------------------------------------------------------------------------
# * New method: create_lights
#--------------------------------------------------------------------------
def call_create_lights
$game_map.setup_map_shade(note)
$game_map.setup_map_lights(:actor, note)
$game_map.setup_map_lights(:event, note)
$game_map.setup_map_lights(:vehicle, note)
$game_map.setup_map_lights(:map, note)
$game_map.setup_map_lantern(:actor, note)
$game_map.setup_map_lantern(:event, note)
$game_map.setup_map_lantern(:vehicle, note)
end
#--------------------------------------------------------------------------
# * New method: call_change_shade_opacity
#--------------------------------------------------------------------------
def call_change_shade_opacity
return if !$game_map.screen.shade.visible
note.scan(/<SHADE OPACITY: ((?:\d+,? *){2})>/i) do
if $1 =~ /(\d+) *,? *(\d+)?/i
duration = $2 ? $2.to_i : 0
$game_map.screen.shade.change_opacity($1.to_i, duration)
end
end
end
#--------------------------------------------------------------------------
# * New method: call_change_shade_tone
#--------------------------------------------------------------------------
def call_change_shade_tone
return if !$game_map.screen.shade.visible
note.scan(/<SHADE TONE: ((?:\d+,? *){4})>/i) do
if $1 =~ /(\d+) *, *(\d+) *, *(\d+) *, *(\d+)/i
$game_map.screen.shade.change_color($1.to_i, $2.to_i, $3.to_i, $4.to_i)
end
end
end
#--------------------------------------------------------------------------
# * New method: call_change_light_opacity
#--------------------------------------------------------------------------
def call_change_light_opacity
return if !$game_map.screen.shade.visible
note.scan(/<LIGHT OPACITY (\d+): ((?:\d+,? *){2})>/i) do
light = $game_map.screen.lights[$1.to_i]
if light && $2 =~ /(\d+) *,? *(\d+)?/i
duration = $2 ? $2.to_i : 0
light.change_opacity($1.to_i, duration)
end
end
end
#--------------------------------------------------------------------------
# * New method: call_remove_light
#--------------------------------------------------------------------------
def call_remove_light
note.scan(/<REMOVE LIGHT: (\d+)>/i) do
$game_map.screen.remove_light.push($1.to_i)
end
end
end
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# This class brings together map screen sprites, tilemaps, etc. It's used
# within the Scene_Map class.
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# * Alias method: initialize
#--------------------------------------------------------------------------
alias :initialize_ve_light_effects :initialize
def initialize
initialize_ve_light_effects
2.times { update_light(true) }
end
#--------------------------------------------------------------------------
# * Alias method: update
#--------------------------------------------------------------------------
alias :update_ve_light_effects :update
def update
update_ve_light_effects
update_light
end
#--------------------------------------------------------------------------
# * Alias method: dispose
#--------------------------------------------------------------------------
alias :dispose_ve_light_effects :dispose
def dispose
dispose_ve_light_effects
dispose_light unless SceneManager.scene_is?(Scene_Map)
end
#--------------------------------------------------------------------------
# * New method: update_light
#--------------------------------------------------------------------------
def update_light(forced = false)
return unless Graphics.frame_count % 2 == 0 || forced
update_shade
update_effects
end
#--------------------------------------------------------------------------
# * New method: dispose_light
#--------------------------------------------------------------------------
def dispose_light
if @light_effect
@light_effect.dispose
@light_effect = nil
@screen_shade = nil
end
end
#--------------------------------------------------------------------------
# * New method: update_shade
#--------------------------------------------------------------------------
def update_shade
if !@light_effect && $game_map.screen.shade.visible
refresh_lights
elsif $game_map.screen.shade.visible && @light_effect
@light_effect.update
elsif @light_effect && !$game_map.screen.shade.visible
dispose_light
end
end
#--------------------------------------------------------------------------
# * New method: refresh_lights
#--------------------------------------------------------------------------
def refresh_lights
@light_effect.dispose if @light_effect
@screen_shade = $game_map.screen.shade
@light_effect = Sprite_Light.new(@screen_shade, @viewport2)
$game_map.event_list.each {|event| event.refresh_lights }
@light_effect.update
end
#--------------------------------------------------------------------------
# * New method: update_effects
#--------------------------------------------------------------------------
def update_effects
return if !@light_effect || $game_map.screen.lights.empty?
$game_map.screen.lights.keys.each {|key| create_light(key) }
$game_map.screen.remove_light.clear
end
#--------------------------------------------------------------------------
# * New method: create_light
#--------------------------------------------------------------------------
def create_light(key)
effect = @light_effect.lights[key]
return if remove_light(key)
return if effect && effect.light == $game_map.screen.lights[key]
@light_effect.create_light($game_map.screen.lights[key])
end
#--------------------------------------------------------------------------
# * New method: remove_light
#--------------------------------------------------------------------------
def remove_light(key)
return false if !$game_map.screen.remove_light.include?(key)
@light_effect.remove_light(key)
$game_map.screen.lights.delete(key)
return true
end
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# This class performs the map screen processing.
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# * Alias method: pre_transfer
#--------------------------------------------------------------------------
alias :pre_transfer_ve_light_effects :pre_transfer
def pre_transfer
pre_transfer_ve_light_effects
if $game_player.new_map_id != $game_map.map_id
@spriteset.dispose_light
$game_map.screen.clear_lights
end
end
#--------------------------------------------------------------------------
# * Alias method: post_transfer
#--------------------------------------------------------------------------
alias :post_transfer_ve_light_effects :post_transfer
def post_transfer
$game_map.actors.each {|actor| actor.update_lantern(true) }
post_transfer_ve_light_effects
end
end
#==============================================================================
# ** Game_ShadeEffect
#------------------------------------------------------------------------------
# This class handles the shade layer data
#==============================================================================
class Game_ShadeEffect
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :visible
attr_reader :color
attr_accessor :blend
attr_accessor :opacity
#--------------------------------------------------------------------------
# * initialize
#--------------------------------------------------------------------------
def initialize
init_opacity
init_color
end
#--------------------------------------------------------------------------
# * init_opacity
#--------------------------------------------------------------------------
def init_opacity
@visible = false
@opacity = 0
@opacity_target = 0
@opacity_duration = 0
end
#--------------------------------------------------------------------------
# * init_color
#--------------------------------------------------------------------------
def init_color
@blend = 0
@color = Color.new(0, 0, 0, 0)
@color_duration = 0
@color_target = Color.new(0, 0, 0, 0)
end
#--------------------------------------------------------------------------
# * show
#--------------------------------------------------------------------------
def show
@visible = true
end
#--------------------------------------------------------------------------
# * hide
#--------------------------------------------------------------------------
def hide
@visible = false
end
#--------------------------------------------------------------------------
# * set_color
#--------------------------------------------------------------------------
def set_color(r = 0, g = 0, b = 0)
@color = get_colors(r, g, b)
@color_target = @color.clone
end
#--------------------------------------------------------------------------
# * change_opacity
#--------------------------------------------------------------------------
def change_opacity(op, d)
@opacity_target = op
@opacity_duration = [d, 0].max
@opacity = @opacity_target if @opacity_duration == 0
end
#--------------------------------------------------------------------------
# * change_color
#--------------------------------------------------------------------------
def change_color(r, g, b, d)
@color_target = get_colors(r, g, b)
@color_duration = [d, 0].max
@color = @color_target.clone if @color_duration == 0
end
#--------------------------------------------------------------------------
# * get_colors
#--------------------------------------------------------------------------
def get_colors(r, g, b)
color = Color.new(255 - r, 255 - g, 255 - b, 255) if @blend == 2
color = Color.new(r, g, b, 255) if @blend != 2
color
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
def update
update_opacity
update_color
end
#--------------------------------------------------------------------------
# * update_opacity
#--------------------------------------------------------------------------
def update_opacity
return if @opacity_duration == 0
d = @opacity_duration
@opacity = (@opacity * (d - 1) + @opacity_target) / d
@opacity_duration -= 1
end
#--------------------------------------------------------------------------
# * update_color
#--------------------------------------------------------------------------
def update_color
return if @color_duration == 0
d = @color_duration
@color.red = (@color.red * (d - 1) + @color_target.red) / d
@color.green = (@color.green * (d - 1) + @color_target.green) / d
@color.blue = (@color.blue * (d - 1) + @color_target.blue) / d
@color_duration -= 1
end
end
#==============================================================================
# ** Game_LightEffect
#------------------------------------------------------------------------------
# This class handles the light sprite data
#==============================================================================
class Game_LightEffect
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :id
attr_accessor :name
attr_accessor :info
attr_accessor :opacity
attr_accessor :x
attr_accessor :y
attr_accessor :variance
attr_accessor :speed
attr_accessor :zoom
attr_accessor :opacity_target
attr_accessor :opacity_duration
#--------------------------------------------------------------------------
# * change_opacity
#--------------------------------------------------------------------------
def change_opacity(op, d)
@opacity_target = op
@opacity_duration = [d, 0].max
@opacity = @opacity_target if @opacity_duration == 0
end
end
#==============================================================================
# ** Game_LightBitmap
#------------------------------------------------------------------------------
# This class handles the bitmpas of each light spot
#==============================================================================
class Game_LightBitmap
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :light
attr_reader :bitmap
attr_reader :opacity
attr_reader :x
attr_reader :y
#--------------------------------------------------------------------------
# * initialize
#--------------------------------------------------------------------------
def initialize(light)
@light = light
init_basic
update
end
#--------------------------------------------------------------------------
# * init_basic
#--------------------------------------------------------------------------
def init_basic
@bitmap = Cache.lights(@light.name)
@target = set_target
@opacity = @light.opacity
@speed = @light.speed
@variance = 0.0
@light.opacity_duration = 0
@light.opacity_target = 0
end
#--------------------------------------------------------------------------
# * width
#--------------------------------------------------------------------------
def width
@bitmap.width * @light.zoom / 100.0
end
#--------------------------------------------------------------------------
# * height
#--------------------------------------------------------------------------
def height
@bitmap.height * @light.zoom / 100.0
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
def update
update_position
update_opacity
update_variance
end
#--------------------------------------------------------------------------
# * update_position
#--------------------------------------------------------------------------
def update_position
@target.is_a?(Game_Character) ? character_position : map_position
end
#--------------------------------------------------------------------------
# * character_position
#--------------------------------------------------------------------------
def character_position
@x = $game_map.adjust_x(@target.real_x) * 32 - width / 2 + @light.x + 16
@y = $game_map.adjust_y(@target.real_y) * 32 - height / 2 + @light.y + 16
end
#--------------------------------------------------------------------------
# * map_position
#--------------------------------------------------------------------------
def map_position
@x = $game_map.adjust_x(@target[:x]) * 32 - width / 2 + @light.x + 16
@y = $game_map.adjust_y(@target[:y]) * 32 - height / 2 + @light.y + 16
end
#--------------------------------------------------------------------------
# * change_opacity
#--------------------------------------------------------------------------
def change_opacity(op, d)
@light.opacity_target = op
@light.opacity_duration = [d, 0].max
@light.opacity = @light.opacity_target if @light.opacity_duration == 0
end
#--------------------------------------------------------------------------
# * update_opacity
#--------------------------------------------------------------------------
def update_opacity
return if @light.opacity_duration == 0
d = @light.opacity_duration
@light.opacity = (@light.opacity * (d - 1) + @light.opacity_target) / d
@light.opacity_duration -= 1
end
#--------------------------------------------------------------------------
# * update_variance
#--------------------------------------------------------------------------
def update_variance
@variance += @speed
@speed *= -1 if @variance.abs > @light.variance.abs
@opacity = [[@light.opacity + @variance, 0].max, 255].min
end
#--------------------------------------------------------------------------
# * dispose
#--------------------------------------------------------------------------
def dispose
@bitmap.dispose
end
#--------------------------------------------------------------------------
# * set_target
#--------------------------------------------------------------------------
def set_target
if @light.info.keys.include?(:actor)
target = $game_map.actors[@light.info[:actor] - 1]
elsif @light.info.keys.include?(:event)
target = $game_map.events[@light.info[:event]]
elsif @light.info.keys.include?(:vehicle)
target = $game_map.vehicles[@light.info[:vehicle]]
else
target = @light.info
end
target
end
end
#==============================================================================
# ** Sprite_Light
#------------------------------------------------------------------------------
# This sprite is used to display the light effects
#==============================================================================
class Sprite_Light < Sprite_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :lights
#--------------------------------------------------------------------------
# * initialize
#--------------------------------------------------------------------------
def initialize(shade, viewport)
super(viewport)
@shade = shade
self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
self.blend_type = @shade.blend
self.opacity = @shade.opacity
self.z = 100
@lights = {}
end
#--------------------------------------------------------------------------
# * map_x
#--------------------------------------------------------------------------
def map_x
$game_map.adjust_x($game_map.display_x)
end
#--------------------------------------------------------------------------
# * map_y
#--------------------------------------------------------------------------
def map_y
$game_map.adjust_y($game_map.display_y)
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
def update
super
self.ox = map_x
self.oy = map_y
update_opacity
update_lights
end
#--------------------------------------------------------------------------
# * update lights
#--------------------------------------------------------------------------
def update_lights
rect = Rect.new(map_x, map_y, Graphics.width, Graphics.height)
self.bitmap.fill_rect(rect, color)
draw_light_effects
end
#--------------------------------------------------------------------------
# * color
#--------------------------------------------------------------------------
def color
@shade.color
end
#--------------------------------------------------------------------------
# * draw_light_effects
#--------------------------------------------------------------------------
def draw_light_effects
@lights.values.each do |light|
light.update
next if !on_screen?(light)
draw_light(light)
end
end
#--------------------------------------------------------------------------
# * on_sceen?
#--------------------------------------------------------------------------
def on_screen?(light)
ax1 = light.x
ay1 = light.y
ax2 = light.x + light.width
ay2 = light.y + light.height
bx1 = map_x
by1 = map_y
bx2 = map_x + Graphics.width
by2 = map_y + Graphics.height
check1 = ax1.between?(bx1, bx2) || ax2.between?(bx1, bx2) ||
ax1 < bx1 && ax2 > bx2
check2 = ay1.between?(by1, by2) || ay2.between?(by1, by2) ||
ay1 < by1 && ay2 > by2
check1 && check2
end
#--------------------------------------------------------------------------
# * draw_light
#--------------------------------------------------------------------------
def draw_light(light)
img = light.bitmap
rect = Rect.new(light.x, light.y, light.width, light.height)
self.bitmap.stretch_blt(rect, img, img.rect, light.opacity)
end
#--------------------------------------------------------------------------
# * update_opacity
#--------------------------------------------------------------------------
def update_opacity
@shade.update
self.opacity = @shade.opacity
self.blend_type = @shade.blend
end
#--------------------------------------------------------------------------
# * create_light
#--------------------------------------------------------------------------
def create_light(light)
remove_light(light.id)
@lights[light.id] = Game_LightBitmap.new(light)
end
#--------------------------------------------------------------------------
# * remove_light
#--------------------------------------------------------------------------
def remove_light(id)
@lights.delete(id) if @lights[id]
end
#--------------------------------------------------------------------------
# * dispose
#--------------------------------------------------------------------------
def dispose
super
@lights.values.each {|light| light.dispose unless light.bitmap.disposed? }
end
end |
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK, peter8031983
|
Время/Дата v. 5.12 9 года 8 мес. назад #79583
|
strelokhalfer пишет:
Глянул бы правее, увидел бы топик "dropbox links down" Не заметил спасибо |
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.13 9 года 7 мес. назад #80293
|
Новая версия 5.13
Что нового: один баг фикс Скрипт: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] =begin
###############################################################################
# #
# Game_Time (Время/Дата) #
# #
###############################################################################
Автор: Денис Кузнецов (http://vk.com/id8137201)
Версия: 5.13
Релиз от: 21.04.15
############# ИНСТРУКЦИЯ #######################################################
Время/Дата:
Чтобы изменить время, воспользуйтесь скриптом
Now_Time.change(sec, min, hour, day, dayweek, month, year)
sec - секунды
min - минуты
hour - час
day - день
dayweek - день недели
month - месяц
year - год
Пример: Now_Time.change(30, 2, 3, 5, 7, 4, 201)
Чтобы получить текущую дату используйте:
$Game_Time.sec
min, hour, day, dayweek, month, year
Чтобы сохранить время или загрузить его, используйте:
Now_Time.save_time
Now_Time.load_time
Чтобы добавить время, используйте скрипты:
Now_Time.time(+5, :min) - добавит 5 минут
Now_Time.time(-10,:hour) - удалит 10 часов
Возможно: :sec, :min, :hour, :day, :month, :year
Чтобы показать/скрыть все окна принудительно, воспользуйтесь
Now_Time.windows_visible?(flag)
где flag - true/false (показать/скрыть)
Чтобы включить/отключить переключение света в дневном диапазоне, используйте
Now_Time.setup_khas_day_light(flag)
где flag - true/false (вкл/выкл)
=end
############# НАСТРОЙКА #########################################################
module Calendar_Settings
# Название дней недели
DAYS_WEEK = [ "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
# Формативный вывод месяцев
CALENDAR_MONTHS = [ "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа",
"Сентября", "Октября", "Ноября", "Декабря" ]
end
module Time_Settings
include Calendar_Settings
#----- Начало настройки дня и ночи ---------------------------------------------
# Использовать смену дня и ночи ? true - да, false - нет
USE_LIGHT_TINT = true
# Использовать стандартную смену дня и ночи ? true - да, false - нет
# Если используете эту опцию, то установите USE_KHAS_LIGHT = false и USE_VICTOR_LIGHT = false
USE_DEFAULT_LIGHT = false
# Использовать Khas Light Effects ? true - да, false - нет
USE_KHAS_LIGHT = false
# Номер переключателя
# Если вы используете $USE_KHAS_LIGHT_SWITCH
# Чтобы не использовать установите -1
KHAS_LIGHT_SWITCH = 3
# Использовать диапазон времени для переключения переключателя ?
# Только если вы используете Khas Light Effect
$USE_KHAS_DAY_LIGHT = false
# Диапазон времени, когда свет не горит (день),
# Если вы используете смену дня и ночи
KHAS_DAY_LIGHT = [8, 19] # с 8 утра до 7 вечера свет не горит
# То есть переключатель будет false
# Использовать динамическую смену дня и ночи ?
# Если используется Khas Light Effect
# Переключатель будет контролироваться автоматически
USE_DYNAMIC_LIGHT = true
# Использовать оттенки экрана в битвах ? true - да, false - нет
USE_LIGHT_IN_BATTLE = true
# Настройка оттенков экрана для каждого часа.
# Если используете USE_DYNAMIC_LIGHT, то эта настройка ничего не даст.
# [Color.new(R, G, B, A)]
TINTS = [ Color.new(30, 0, 40, 165), # => 0 час
Color.new(20, 0, 30, 165), # => 1 час
Color.new(20, 0, 30, 155), # => 2 час
Color.new(10, 0, 30, 145), # => 3 час
Color.new(10, 0, 20, 125), # => 4 час
Color.new(0,0,20,125), # => 5 час
Color.new(75,20,20,115), # => 6 час
Color.new(100,30,10,105), # => 7 час
Color.new(75,20,10,85), # => 8 час
Color.new(0,0,0,55), # => 9 час
Color.new(0,0,0,30), # => 10 час
Color.new(0,0,0,10), # => 11 час
Color.new(0,0,0,0), # => 12 час
Color.new(0,0,0,0), # => 13 час
Color.new(0,0,0,0), # => 14 час
Color.new(0,0,0,5), # => 15 час
Color.new(0,0,0,15), # => 16 час
Color.new(0,0,10,45), # => 17 час
Color.new(75,20,20,85), # => 18 час
Color.new(100,40,30,105), # => 19 час
Color.new(75,20,40,125), # => 20 час
Color.new(10,0,45,140), # => 21 час
Color.new(20,0,45,145), # => 22 час
Color.new(20,0,50,160) ] # => 23 час
#----- Конец настройки дня и ночи ----------------------------------------------
#----- Начало настройки времени ------------------------------------------------
# Использовать дату с компьютера ? true - да, false - нет
USE_REAL_TIME = false
# Остановить время в меню ? true - да, false - нет
PAUSE_IN_MENU = true
# Отображать окно в меню ? true - да, false - нет
TIME_IN_MENU = true
# Секунд в минуте (минимум 2)
# Для лучшего эффекта лучше оставить 60, если SHOW_SECONDS = false, но это
# уже на ваше усмотрение
SECONDS_IN_MINUTE = 10
# Минут в часе (минимум 2)
MINUTES_IN_HOUR = 60
# Часов в дне
HOURS_IN_DAY = 24
# Использовать обновление времени в битве ? true - да, false - нет
USE_TIME_UPDATE_IN_BATTLE = true
# Отображать секунды в часах ? true - да, false - нет
SHOW_SECONDS = false
# Использовать кастомные часы в игре ? true - да, false - нет
USE_CUSTOM_CLOCK_ON_MAP = false
# Ширина окна времени в игре
CLOCK_WIDTH = 180
# Высота окна времени в игре
CLOCK_HEIGHT = 74
# Координата X окна времени в игре
CLOCK_X = Graphics.width - CLOCK_WIDTH
# Координата Y окна времени в игре
CLOCK_Y = Graphics.height - CLOCK_HEIGHT
# Непрозрачность окна в игре. -1 = стандартное
OPACITY_CLOCK = -1
# Использовать кастомные часы в игре ? true - да, false - нет
USE_CUSTOM_CLOCK_IN_MENU = false
# Ширина окна времени в игре
MENU_CLOCK_WIDTH = 200
# Высота окна времени в игре
MENU_CLOCK_HEIGHT = 90
# Координата X окна времени в игре
MENU_CLOCK_X = 0
# Координата Y окна времени в игре
MENU_CLOCK_Y = 0
# Непрозрачность окна в меню. -1 = стандартное
OPACITY_MENU_CLOCK = -1
# Настройка кастомных часов
# Возможно: День, День недели, Месяц(число), Месяц(название), Год
# Также возможны свои команды
CUSTOM_CLOCK_DATE = ["День", "Месяц(название)", "Год"]
# Возможно: Час, blink(":"), Минуты, Секунды
CUSTOM_CLOCK_TIME = ["Час", "blink", "Минуты"]
# Скорость времени
# (Минимум - 1, Максимум - 60!).
# Чем меньше цифра, тем быстрее идет время. 60 - Реальное время
$TIME_SPEED = 1
# Использовать мерцание ":" в часах ? true - да, false - нет. Отключение может повысить FPS на 1-5
USE_BLINK = false
# Частота обновления ":" в отображении времени и частота обновления завершающихся квестов (40 - оптимально)
BLINK_SPEED = 40
# Чтобы на определенной карте приостановить обновление времени, используйте заметки карты и пропишите там: <No_Time_Update>
# Чтобы на определенной карте выставить освещение определенного часа, используйте заметки карты: <Light_Hour = H>
# где H - нужный час
# Настройка начала игры! Если не используете реальное время.
SEC = 0 # Секунды
MIN = 0 # Минуты
HOUR = 10 # Час
DAY = 15 # День
DAY_WEEK = 1 # В диапозоне от 1 до 7 (1 - Понедельник, 7 - Воскресенье)
MONTH = 4 # Месяц
YEAR = 756 # Год
# Количество дней в каждом месяце
DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# Кнопка отображения/скрытия окна времени
# -1, чтобы не использовать
GAME_TIME_BUTTON = :Z
# Показывать окно времени в начале игры ? true - да, false - нет
$SHOW_START_GAME_TIME_WINDOW = true
############# КОНЕЦ НАСТРОЙКИ ##################################################
############# НИЖЕ НЕ ТРОГАТЬ !!! ##############################################
# Обновление времени
$STOP_TIME_UPDATE = false
# Час статического освещения
$STOP_TIME_UPDATE_LIGHT_HOUR = -1
end
$imported = {} if $imported.nil?
$imported["DenKyz_Game_Time"] = true
class Functions
include Time_Settings
def self.new_game # новая игра
Now_Time.new
end
def self.setup_khas_light_switch(hour) # hour - час, если диапозон вкл; bool, если диапозон выкл.
return if !USE_KHAS_LIGHT || KHAS_LIGHT_SWITCH == -1
return if ($USE_KHAS_DAY_LIGHT && !hour.is_a?(Integer)) || (!$USE_KHAS_DAY_LIGHT && hour.is_a?(Integer))
if $USE_KHAS_DAY_LIGHT
if (hour < KHAS_DAY_LIGHT[0] || hour > KHAS_DAY_LIGHT[1])
$game_switches[KHAS_LIGHT_SWITCH] = true
else
$game_switches[KHAS_LIGHT_SWITCH] = false
end
else
$game_switches[KHAS_LIGHT_SWITCH] = hour
end
end
end # class Functions
class Now_Time
include Time_Settings
def initialize
# 0 и больше 60 не будет обновляться
$TIME_SPEED = 60 if $TIME_SPEED > 60
$TIME_SPEED = 1 if $TIME_SPEED < 1
$Game_Time = Game_Time.new
$UPDATE_DYNAMIC_TINT = true
$Game_Time_Tint = Game_Time_Tint.new if USE_LIGHT_TINT
begin
$CALENDAR_NOTIFY = 1 if $CALENDAR_NOTIFY > MINUTES_IN_HOUR
rescue
end
end
def self.change(sec, min, hour, day, dayweek, month, year)
$Game_Time.change(sec, min, hour, day, dayweek, month, year)
update # насколько он тут нужен ?
end
def self.update
$Game_Time.update
end
def self.save_time # сохраняем время
$Game_Time_DUP = $Game_Time.dup
end
def self.load_time # загружаем время
$Game_Time = $Game_Time_DUP.dup
end
def self.time(value, type) #изменение времени
$Game_Time.time(value, type)
end
def self.windows_visible?(flag) # пок/скр все окна
SceneManager.scene.all_visible(flag)
end
def self.setup_khas_day_light(setup) #вкл/выкл диапозон переключения света
$USE_KHAS_DAY_LIGHT = setup
end
end # class Now_Time
class Game_Time
include Time_Settings
attr_reader :sec
attr_reader :min
attr_reader :hour
attr_reader :day
attr_reader :dayweek
attr_reader :month
attr_reader :year
def initialize
@sec = SEC
@min = MIN
@hour = HOUR
@day = DAY
# потому что от 0-6, а игрок указывает от 1-7. 0 - Понедельник
# а от 0-6 потому что в массиве дней недели индексы с 0
# та же причина и у MONTH ниже
@dayweek = DAY_WEEK - 1
@month = MONTH - 1
@year = YEAR
$FIRST_DAY = DAY_WEEK # первый день января (для календаря). Там 1-7 значения
end
def update
return if !USE_TIME_UPDATE_IN_BATTLE && SceneManager.scene.is_a?(Scene_Battle)
return if $game_message.busy?
return real_time if USE_REAL_TIME
return if !SceneManager.scene.is_a?(Scene_Map) || (SceneManager.scene.is_a?(Scene_Menu) && PAUSE_IN_MENU)
return unless Graphics.frame_count % $TIME_SPEED == 0
return add_sec(1)
end
def change(sec, min, hour, day, dayweek, month, year)
sec > @sec ? (sec - @sec).times do add_sec(1) end : (@sec - sec).times do rem_sec(1) end
min > @min ? (min - @min).times do add_min(1) end : (@min - min).times do rem_min(1) end
hour > @hour ? (hour - @hour).times do add_hour(1) end : (@hour - hour).times do rem_hour(1) end
day > @day ? (day - @day).times do add_day(1) end : (@day - day).times do rem_day(1) end
@dayweek = dayweek - 1
month -= 1
month > @month ? (month - @month).times do add_month(1) end : (@month - month).times do rem_month(1) end
year > @year ? add_year(year - @year) : rem_year(@year - year)
all_days = 0 # сумма дней с января до нужного месяца (не включая)
for i in 0..month - 1
all_days += Time_Settings::DAYS[i]
end
$FIRST_DAY = (dayweek + 1 -(day + all_days % DAYS_WEEK.size)) % DAYS_WEEK.size
end
def time(value, type)
# логика такая: чтобы не пропустить события на карте вместо просто изменения
# времени я прибавляю меньшие значения.
# Пример 1: +2 минуты = + прибавляю 120 секунд
# Пример 2: +1 месяц = + кол-во часов в месяце
# Все сделать через секунды нельзя (слишком большая задержка на экране возникает)
case type
when :sec
set = :sec
when :min
set = :sec
value *= SECONDS_IN_MINUTE
when :hour
set = :min
value *= MINUTES_IN_HOUR
when :day
set = :hour
value *= HOURS_IN_DAY
when :month
set = :hour
for i in 1..(value > 0 ? value : value * -1) # value - сколько было
val = DAYS[@month] * HOURS_IN_DAY # val - считаем для текущего месяца часы
if value > 0
val.times do eval("add_" + set.to_s + "(1)") end
else
val.times do eval("rem_" + set.to_s + "(1)") end
end
end
return
when :year
set = :day
sum = 0
for i in 0..DAYS.size - 1
sum += DAYS[i]
end
value *= sum
end # case type
if value > 0
value.times do eval("add_" + set.to_s + "(1)") end
else
value = -value
value.times do eval("rem_" + set.to_s + "(1)") end
end
end
def enable_dynamic_tint_update
return if !USE_DYNAMIC_LIGHT
$UPDATE_DYNAMIC_TINT = true
end
def real_time # время с компьютера
@sec = Time.now.sec
@sec = 0 if @sec >= SECONDS_IN_MINUTE
@min = Time.now.min
@hour = Time.now.hour
if @day != Time.now.day
@day = Time.now.day
enable_dynamic_tint_update
end
@dayweek = Time.now.wday
if @month != Time.now.month - 1
@month = Time.now.month - 1 # причина в initialize
enable_dynamic_tint_update
end
@year = Time.now.year
end
def add_sec(n = 1)
@sec += n
return unless @sec == SECONDS_IN_MINUTE
@sec = 0
add_min(1)
end
def add_min(n = 1)
@min += n
return unless @min == MINUTES_IN_HOUR
@min = 0
add_hour(1)
end
def add_hour(n = 1)
@hour += n
return unless @hour == HOURS_IN_DAY
@hour = 0
add_day(1)
end
def add_day(n = 1)
@day += n
@dayweek += n
enable_dynamic_tint_update
@dayweek = 0 if @dayweek == DAYS_WEEK.size
return unless @day == DAYS[@month] + 1
@day = 1
add_month(1)
end
def add_month(n = 1)
@month += n
enable_dynamic_tint_update
return unless @month == CALENDAR_MONTHS.size
@month = 0
add_year(1)
end
def add_year(n = 1)
@year += n
end
def rem_sec(n = 1)
@sec -= n
return unless @sec == -1
@sec = SECONDS_IN_MINUTE - 1
rem_min(1)
end
def rem_min(n = 1)
@min -= n
return unless @min == -1
@min = MINUTES_IN_HOUR - 1
rem_hour(1)
end
def rem_hour(n = 1)
@hour -= n
return unless @hour == -1
@hour = HOURS_IN_DAY - 1
rem_day(1)
end
def rem_day(n = 1)
@day -= n
@dayweek -= n
@dayweek = DAYS_WEEK.size - 1 if @dayweek == -1
return unless @day == 0
@day = DAYS[@month-1]
rem_month(1)
end
def rem_month(n = 1)
@month -= n
return unless @month == -1
@month = CALENDAR_MONTHS.size - 1
rem_year(1)
end
def rem_year(n = 1)
@year -= n
end
end # class Game_Time
class Game_Time_Tint < Sprite_Base
include Time_Settings
def initialize(viewport = nil)
super(viewport)
self.z = 1
create_contents
update
end
def create_contents
self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
self.visible = false
end
def update
return if !USE_LIGHT_TINT
return use_default_light if USE_DEFAULT_LIGHT && (@now_min != $Game_Time.min || $STOP_TIME_UPDATE_LIGHT_HOUR != -1)
return use_khas_light if USE_KHAS_LIGHT && (@now_min != $Game_Time.min || $STOP_TIME_UPDATE_LIGHT_HOUR != -1)
end
def settings
Functions.setup_khas_light_switch($Game_Time.hour) if $STOP_TIME_UPDATE_LIGHT_HOUR == -1
@now_min = $Game_Time.min
@hour = $Game_Time.hour
if $STOP_TIME_UPDATE_LIGHT_HOUR != -1
@hour = $STOP_TIME_UPDATE_LIGHT_HOUR
elsif USE_DYNAMIC_LIGHT
return update_dynamic_light
end
@now_hour = TINTS[@hour]
@next_hour = TINTS[@hour + 1] unless @hour + 1 == HOURS_IN_DAY
@next_hour = TINTS[0] if @hour + 1 == HOURS_IN_DAY
end
def use_default_light
settings
r = (@now_hour.red.to_f + (@next_hour.red.to_f - @now_hour.red.to_f)/60 * @now_min)/2
g = @now_hour.green.to_f + (@next_hour.green.to_f - @now_hour.green.to_f)/60 * @now_min
b = 0.9 * (@now_hour.blue.to_f + (@next_hour.blue.to_f - @now_hour.blue.to_f)/60 * @now_min)
a = 1.3 * (@now_hour.alpha.to_f + (@next_hour.alpha.to_f - @now_hour.alpha.to_f)/60 * @now_min)
self.visible = true
self.bitmap.clear
self.bitmap.fill_rect(0, 0, Graphics.width, Graphics.height, Color.new(r, g, b, a))
end
def use_khas_light
settings
#~ self.visible = false
begin
r = @now_hour.red.to_f + (@next_hour.red.to_f - @now_hour.red.to_f)/60 * @now_min
g = @now_hour.green.to_f + (@next_hour.green.to_f - @now_hour.green.to_f)/60 * @now_min
b = @now_hour.blue.to_f + (@next_hour.blue.to_f - @now_hour.blue.to_f)/60 * @now_min
a = @now_hour.alpha.to_f + (@next_hour.alpha.to_f - @now_hour.alpha.to_f)/60 * @now_min
$game_map.effect_surface.change_color(1, r, g, b, a)
rescue
end
end
def red(hour, month) # здесь творится магия программирования :)
tint = [
[0, 0, 0, 0, 0, 10, 20, 60, 100, 70, 20, 10, 0, 0, 20, 40, 100, 80, 50, 20, 10, 0, 0, 0],
[0, 0, 0, 0, 10, 20, 30, 75, 100, 60, 20, 10, 0, 0, 10, 20, 40, 100, 80, 50, 20, 10, 0, 0],
[0, 0, 0, 10, 20, 30, 75, 100, 60, 20, 10, 0, 0, 0, 10, 20, 30, 50, 100, 80, 60, 30, 10, 0],
[0, 10, 20, 30, 50, 80, 100, 60, 20, 10, 0, 0, 0, 0, 0, 10, 20, 30, 50, 100, 80, 60, 30, 10],
[10, 20, 30, 50, 80, 100, 60, 20, 10, 5, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 100, 80, 60, 30],
[20, 40, 60, 80, 100, 60, 45, 30, 15, 10, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 80, 100, 80, 60],
[10, 30, 50, 75, 100, 75, 50, 30, 15, 10, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 80, 100, 80, 60],
[10, 20, 45, 60, 80, 100, 60, 35, 15, 10, 0, 0, 0, 0, 0, 10, 15, 30, 50, 75, 100, 75, 50, 20],
[0, 10, 20, 30, 40, 60, 100, 80, 45, 30, 15, 10, 0, 0, 0, 10, 30, 50, 80, 100, 70, 50, 20, 0],
[0, 0, 10, 20, 30, 45, 75, 100, 80, 60, 40, 20, 0, 10, 30, 45, 80, 100, 80, 60, 40, 20, 0, 0],
[0, 0, 10, 20, 30, 50, 70, 100, 80, 60, 30, 20, 10, 20, 40, 75, 100, 80, 60, 40, 20, 10, 0, 0],
[0, 0, 0, 10, 20, 30, 50, 70, 100, 70, 50, 20, 0, 10, 30, 60, 100, 75, 40, 20, 10, 0, 0, 0]]
return tint[month][hour]
end
def green(hour, month)
tint = [
[0, 0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 10, 15, 25, 15, 10, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 10, 15, 20, 25, 15, 10, 0, 0, 0, 0],
[0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0, 5, 10, 25, 10, 5, 0, 0, 0, 0],
[0, 0, 0, 0, 5, 10, 30, 20, 10, 5, 0, 0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0],
[0, 0, 0, 10, 15, 30, 15, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 25, 15, 10, 0],
[0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 0],
[0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 15, 0],
[0, 0, 0, 10, 20, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0],
[0, 0, 0, 0, 10, 20, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 15, 10, 0, 0],
[0, 0, 0, 0, 0, 10, 15, 30, 10, 0, 0, 0, 0, 0, 0, 5, 15, 25, 15, 10, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 0, 0]]
return tint[month][hour]
end
def blue(hour, month)
tint = [
[10, 15, 20, 25, 30, 45, 30, 20, 10, 0, 0, 0, 0, 0, 0, 15, 20, 55, 45, 30, 20, 10, 0, 0],
[10, 15, 20, 25, 30, 40, 20, 15, 10, 0, 0, 0, 0, 0, 0, 0, 15, 20, 55, 45, 30, 20, 10, 0],
[10, 15, 25, 30, 40, 30, 20, 15, 10, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 45, 40, 35, 20],
[15, 20, 20, 35, 45, 25, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 25, 35, 50, 40, 35, 20],
[15, 20, 35, 45, 25, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 35, 55, 40, 30],
[15, 30, 50, 35, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 30],
[15, 30, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 25],
[10, 15, 30, 50, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 35, 50, 35, 20],
[10, 15, 25, 35, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 55, 35, 20, 15],
[10, 15, 20, 25, 35, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 10, 20, 35, 55, 40, 30, 20, 15, 10],
[10, 10, 15, 20, 35, 55, 35, 20, 10, 0, 0, 0, 0, 10, 20, 30, 40, 55, 35, 20, 15, 15, 10, 10],
[10, 15, 20, 25, 35, 55, 35, 20, 10, 0, 0, 0, 0, 10, 20, 30, 45, 60, 40, 30, 20, 15, 15, 10]]
return tint[month][hour]
end
def alpha(hour, month)
tint = [
[175, 170, 160, 160, 150, 150, 145, 140, 120, 90, 55, 20, 10, 10, 10, 15, 25, 75, 105, 135, 155, 160, 165, 180],
[170, 165, 155, 150, 140, 130, 130, 125, 110, 80, 50, 20, 10, 10, 10, 15, 25, 70, 95, 125, 140, 150, 160, 175],
[165, 160, 150, 135, 130, 110, 115, 110, 90, 70, 45, 20, 10, 10, 10, 10, 20, 60, 80, 105, 120, 135, 150, 160],
[160, 150, 140, 120, 120, 100, 90, 85, 70, 60, 40, 15, 10, 10, 10, 10, 20, 40, 60, 85, 100, 120, 135, 150],
[155, 140, 130, 110, 105, 85, 75, 70, 50, 45, 35, 15, 10, 10, 10, 10, 10, 20, 40, 70, 85, 110, 125, 140],
[150, 130, 120, 100, 90, 70, 55, 50, 40, 30, 35, 10, 10, 10, 10, 10, 10, 15, 25, 55, 65, 100, 105, 130],
[145, 120, 110, 110, 100, 80, 70, 65, 55, 40, 35, 10, 10, 10, 10, 10, 10, 25, 40, 70, 80, 110, 125, 140],
[150, 130, 120, 120, 110, 100, 85, 80, 70, 50, 40, 15, 10, 10, 10, 10, 10, 40, 60, 80, 100, 120, 130, 140],
[155, 140, 130, 130, 120, 110, 100, 95, 85, 60, 45, 15, 10, 10, 10, 10, 10, 50, 70, 90, 115, 130, 140, 150],
[160, 150, 140, 140, 130, 120, 115, 110, 100, 70, 50, 20, 10, 10, 10, 10, 15, 60, 80, 100, 130, 140, 150, 155],
[165, 160, 150, 150, 140, 130, 130, 125, 110, 80, 55, 20, 10, 10, 10, 15, 20, 70, 90, 115, 145, 150, 155, 160],
[170, 170, 160, 160, 150, 150, 145, 140, 120, 90, 60, 25, 10, 10, 10, 15, 25, 75, 105, 135, 155, 160, 165, 170]]
return tint[month][hour]
end
def update_dynamic_light
return set_dynamic_light if !$UPDATE_DYNAMIC_TINT
@tint = []
minus = 7
no_zero = 6 + minus * 1.5
month = $Game_Time.month
for i in 0..23
@tint[i] = Color.new(red(i, month) - minus + rand(no_zero), green(i, month) - minus + rand(no_zero), blue(i, month) - minus + rand(no_zero), alpha(i, month) - minus + rand(no_zero))
end
$UPDATE_DYNAMIC_TINT = false
return set_dynamic_light
end
def set_dynamic_light
Now_Time.setup_khas_day_light(false) # отключаем обычную смену переключателя
setup = false
setup = true if @tint[@hour].alpha > 100
Functions.setup_khas_light_switch(setup)
@now_hour = @tint[@hour]
@next_hour = @tint[@hour + 1] unless @hour + 1 == HOURS_IN_DAY
@next_hour = @tint[0] if @hour + 1 == HOURS_IN_DAY
end
end # class Game_Time_Tint < Sprite_Base
class Scene_Base
alias denis_kyznetsov_game_time_scn_base_update update
def update
denis_kyznetsov_game_time_scn_base_update
$Game_Time.update if $Game_Time && !$STOP_TIME_UPDATE
$Game_Time_Tint.update if $Game_Time_Tint || ($Game_Time_Tint && USE_LIGHT_IN_BATTLE && SceneManager.scene.is_a?(Scene_Battle))
end
end # class Scene_Base
class Scene_Map < Scene_Base
include Time_Settings
alias denis_kyznetsov_game_time_scn_map_create_all_windows create_all_windows
def create_all_windows
denis_kyznetsov_game_time_scn_map_create_all_windows
create_time_window if $SHOW_START_GAME_TIME_WINDOW && $imported["DenKyz_Game_Time"]
end
def all_visible(flag)
time_visible(flag)
end
def time_visible(flag)
return if (@create_time_window.nil? && !flag) || !$imported["DenKyz_Game_Time"]
$SHOW_START_GAME_TIME_WINDOW = !$SHOW_START_GAME_TIME_WINDOW
return create_time_window if flag
@create_time_window.dispose # если не flag
@create_time_window = nil
end
def create_time_window
x, y, w, h = CLOCK_X, CLOCK_Y, CLOCK_WIDTH, CLOCK_HEIGHT
w, h = 180, 76 if !USE_CUSTOM_CLOCK_ON_MAP
@create_time_window = Time_Window.new(x, y, w, h, OPACITY_CLOCK)
end
alias denis_kyznetsov_game_time_scn_map_update update
def update
denis_kyznetsov_game_time_scn_map_update
if !GAME_TIME_BUTTON.is_a?(Integer)
if Input.trigger?(GAME_TIME_BUTTON) && $SHOW_START_GAME_TIME_WINDOW
time_visible(false)
elsif Input.trigger?(GAME_TIME_BUTTON) && !$SHOW_START_GAME_TIME_WINDOW
time_visible(true)
end
end
end
end # Scene_Map < Scene_Base
class Game_Map
include Time_Settings
alias denis_kyznetsov_game_time_game_map_setup setup
def setup(map_id)
denis_kyznetsov_game_time_game_map_setup(map_id)
$STOP_TIME_UPDATE = (@map.note.include?("<No_Time_Update>") ? true : false)
if @map.note =~ /<[\s]*Light[\w\s]*Hour[\s]*=[\s]*([\d]+)[\s]*>/i
$STOP_TIME_UPDATE_LIGHT_HOUR = $1.to_i
else
$STOP_TIME_UPDATE_LIGHT_HOUR = -1
end
end
end # class Game_Map
class Time_Window < Window_Base
include Time_Settings
def initialize(x = 0, y = 0, w = Graphics.width, h = Graphics.height, opacity)
super(x, y, w, h)
if opacity != -1 # прозрачность, указанная пользователем, если есть
self.opacity = opacity
self.back_opacity = opacity
self.contents_opacity = opacity
end
@width = w
@height = h
update
end
def blink # мигающее двоеточие
return ":" if Graphics.frame_count % BLINK_SPEED > BLINK_SPEED/2
return " "
end
def date # дата
return ($Game_Time.day.to_s + " " + CALENDAR_MONTHS[$Game_Time.month] + " " + $Game_Time.year.to_s) if !USE_CUSTOM_CLOCK_ON_MAP
date = ""
return date if CUSTOM_CLOCK_DATE == []
for i in 0..CUSTOM_CLOCK_DATE.size - 1
case CUSTOM_CLOCK_DATE[i]
when "День"
date += " " + $Game_Time.day.to_s
when "День недели"
date += " " + DAYS_WEEK[$Game_Time.month]
when "Месяц(число)"
date += " " + $Game_Time.month.to_s
when "Месяц(название)"
date += " " + CALENDAR_MONTHS[$Game_Time.month]
when "Год"
date += " " + $Game_Time.year.to_s
else
date += " " + CUSTOM_CLOCK_DATE[i].to_s
end
end
return date
end
def plus_minutes
return $Game_Time.min < 10 ? "0" + $Game_Time.min.to_s : $Game_Time.min.to_s
end
def plus_seconds
return $Game_Time.sec < 10 ? "0" + $Game_Time.sec.to_s : $Game_Time.sec.to_s
end
def time # время
return ($Game_Time.hour < 10 ? "0" + $Game_Time.hour.to_s : $Game_Time.hour.to_s) +
(USE_BLINK ? blink : ":") + plus_minutes +
(SHOW_SECONDS ? ((USE_BLINK ? blink : ":") + plus_seconds) : "") if !USE_CUSTOM_CLOCK_ON_MAP
time = ""
return time if CUSTOM_CLOCK_TIME == []
for i in 0..CUSTOM_CLOCK_TIME.size - 1
case CUSTOM_CLOCK_TIME[i]
when "Час"
time += $Game_Time.hour.to_s
when "blink"
time += USE_BLINK ? blink : ":"
when "Минуты"
time += plus_minutes
when "Секунды"
time += SHOW_SECONDS ? plus_seconds : ""
else
time += CUSTOM_CLOCK_TIME[i].to_s
end
end
return time
end
def update
if (@now_sec != $Game_Time.sec && SHOW_SECONDS) || (@now_min != $Game_Time.min && !SHOW_SECONDS) || USE_BLINK || @now_hour != $Game_Time.hour || @now_day != $Game_Time.day || @now_month != $Game_Time.month || @now_year != $Game_Time.year
setup_variables
contents.clear
show_date = date
show_time = time
y = 0
draw_text(0, y, @width - 24, 32, show_date, 1)
return if show_time == ""
y += 24 if show_date != ""
draw_text(0, y, @width - 24, 32, show_time, 1)
end
end
def setup_variables
@now_sec = $Game_Time.sec
@now_min = $Game_Time.min
@now_hour = $Game_Time.hour
@now_day = $Game_Time.day
@now_month = $Game_Time.month
@now_year = $Game_Time.year
end
end # class Time_Window < Window_Base
class Scene_Menu < Scene_MenuBase
include Time_Settings
alias denis_kyznetsov_game_time_scn_menu_start start
def start
denis_kyznetsov_game_time_scn_menu_start
create_time_window if TIME_IN_MENU
end
def create_time_window
x, y, w, h = MENU_CLOCK_X, MENU_CLOCK_Y, MENU_CLOCK_WIDTH, MENU_CLOCK_HEIGHT
x, y, w, h = @gold_window.x, @gold_window.y - 74, 160, 74 if !USE_CUSTOM_CLOCK_IN_MENU
@create_time_window = Time_Window.new(x, y, w, h, OPACITY_MENU_CLOCK)
end
end # Scene_Menu < Scene_MenuBase
module DataManager
class << self
alias denis_kyznetsov_game_time_dt_mngr_setup_new_game setup_new_game
def setup_new_game
denis_kyznetsov_game_time_dt_mngr_setup_new_game
Functions.new_game
end
alias denis_kyznetsov_game_time_dt_mngr_make_save_contents make_save_contents
def make_save_contents
contents = denis_kyznetsov_game_time_dt_mngr_make_save_contents
contents[:Game_Time] = $Game_Time
contents[:Game_Time_DUP] = $Game_Time_DUP
contents
end
alias denis_kyznetsov_game_time_dt_mngr_extract_save_contents extract_save_contents
def extract_save_contents(contents)
denis_kyznetsov_game_time_dt_mngr_extract_save_contents(contents)
Functions.new_game
$Game_Time = contents[:Game_Time]
$Game_Time_DUP = contents[:Game_Time_DUP]
end
end
end # module DataManager Что касается поддержки Victor Light Engine, то пока отложил. Времени мало. Немного странное поведение выдает и надо глубоко копаться в нем. |
Последнее редактирование: 9 года 7 мес. назад от DK.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: strelokhalfer
|
Время/Дата v. 5.13 9 года 7 мес. назад #80476
|
Можно версию 4.0?
Она более удобная и В ней была смена дня и ночи с помощью khas awesome light system |
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.13 9 года 7 мес. назад #80477
|
Не рекомендую использовать версию ниже последней существующей, потому что в ней могут быть разного рода ошибки, которые исправлены в новых версиях. В версии 5.13 присутствует смена дня и ночи с помощью Khas. Какие у Вас возникли трудности ?
|
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.13 9 года 7 мес. назад #80478
|
Subzeroy пишет:
Не рекомендую использовать версию ниже последней существующей, потому что в ней могут быть разного рода ошибки, которые исправлены в новых версиях. В версии 5.13 присутствует смена дня и ночи с помощью Khas. Какие у Вас возникли трудности ? Решил проблему(надо самому вставлять свет)Спасибо за отзывчивость |
Последнее редактирование: 9 года 7 мес. назад от CreepyPasta.
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.13 9 года 7 мес. назад #80479
|
CreepyPasta пишет:
Спасибо за отзывчивость Да, свет Khas ставится отдельно в любой версии моего скрипта, однако в скрипте присутствует своя смена дня и ночи, но без освещения, как у Khas. Работает на затемнении экрана. |
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.13 9 года 7 мес. назад #80487
|
У меня вопрос, как поставить выполнение события на время(не квест, а именно событие)
Например: В 14:00 Воинский сбор или В 8:00-утренняя перекличка |
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.13 9 года 7 мес. назад #80492
|
В событии проверять условие скрипта: $Game_Time.hour == 14 && $Game_Time.min == 0 && $Game_Time.sec == 0
Попробуйте так. |
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: CreepyPasta
|
Время/Дата v. 5.13 9 года 7 мес. назад #80498
|
Subzeroy пишет:
В событии проверять условие скрипта: $Game_Time.hour == 14 && $Game_Time.min == 0 && $Game_Time.sec == 0 Спасибо большое Попробуйте так. |
Последнее редактирование: 9 года 7 мес. назад от CreepyPasta.
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.13 9 года 5 мес. назад #81869
|
У меня пару вопросов
1.Можно ли сделать так, чтобы ночью(00-05 часов) было темно,прям чёрный экран кроме фонарей 2.Можно ли поставить условие ...например, что-то произойдет через 3 дня(например заказ придёт) ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] Простите за мою тупость |
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.13 9 года 5 мес. назад #81899
|
1. Изменяйте настройки оттенков экрана TINS.
2. Нет, в скрипте такое не предусмотрено, но это можно сделать в событиях на условиях. |
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.2 9 года 5 мес. назад #81933
|
Новая версия 5.2
Что нового: Скрипт: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] =begin
###############################################################################
# #
# Game_Time (Время/Дата) #
# #
###############################################################################
Автор: Денис Кузнецов (http://vk.com/id8137201)
Версия: 5.2
Релиз от: 11.06.15
############# ИНСТРУКЦИЯ #######################################################
Время/Дата:
Чтобы изменить время, воспользуйтесь скриптом
Now_Time.change(sec, min, hour, day, dayweek, month, year)
sec - секунды
min - минуты
hour - час
day - день
dayweek - день недели
month - месяц
year - год
Пример: Now_Time.change(30, 2, 3, 5, 7, 4, 201)
Чтобы получить текущую дату используйте:
$Game_Time.sec
min, hour, day, dayweek, month, year
Чтобы сохранить время или загрузить его, используйте:
Now_Time.save_time
Now_Time.load_time
Чтобы добавить время, используйте скрипты:
Now_Time.time(+5, :min) - добавит 5 минут
Now_Time.time(-10, :hour) - удалит 10 часов
Возможно: :sec, :min, :hour, :day, :month, :year
Чтобы показать/скрыть все окна принудительно, воспользуйтесь
Now_Time.windows_visible?(flag)
где flag - true/false (показать/скрыть)
Чтобы включить/отлючить переключение света в дневном диапозоне, используйте
Now_Time.setup_khas_day_light(flag)
где flag - true/false (вкл/выкл)
=end
############# НАТРОЙКА #########################################################
module Calendar_Settings
# Название дней недели
DAYS_WEEK = [ "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
# Формативный вывод месяцев
CALENDAR_MONTHS = [ "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа",
"Сентября", "Октября", "Ноября", "Декабря" ]
end
module Time_Settings
include Calendar_Settings
#----- Начало настройки дня и ночи ---------------------------------------------
# Использовать смену дня и ночи ? true - да, false - нет
USE_LIGHT_TINT = true
# Использовать стандартную смену дня и ночи ? true - да, false - нет
# Если используете эту опцию, то установите USE_KHAS_LIGHT = false и USE_VICTOR_LIGHT = false
USE_DEFAULT_LIGHT = false
# Использовать Khas Light Effects ? true - да, false - нет
USE_KHAS_LIGHT = false
# Использовать диапозон времени для переключения переключателя ?
# Только если вы используете Khas Light Effect
$USE_KHAS_DAY_LIGHT = false
# Номер переключателя
# Если вы используете $USE_KHAS_DAY_LIGHT
# Чтобы не использовать установите -1
KHAS_LIGHT_SWITCH = 3
# Диапозон времени, когда свет не горит (день)
# Если вы используете $USE_KHAS_DAY_LIGHT = true
KHAS_DAY_LIGHT = [8, 19] # с 8 утра до 7 вечера свет не горит
# То есть переключатель будет false
# Использовать динамическую смену дня и ночи ?
# Если используется Khas Light Effect
USE_DYNAMIC_LIGHT = true
# Использовать оттенки экрана в битвах ? true - да, false - нет
USE_LIGHT_IN_BATTLE = true
# Настройка оттенков экрана для каждого часа.
# Если используете USE_DYNAMIC_LIGHT, то эта настройка ничего не даст.
# [Color.new(R, G, B, A)]
TINTS = [ Color.new(30, 0, 40, 165), # => 0 час
Color.new(20, 0, 30, 165), # => 1 час
Color.new(20, 0, 30, 155), # => 2 час
Color.new(10, 0, 30, 145), # => 3 час
Color.new(10, 0, 20, 125), # => 4 час
Color.new(0,0,20,125), # => 5 час
Color.new(75,20,20,115), # => 6 час
Color.new(100,30,10,105), # => 7 час
Color.new(75,20,10,85), # => 8 час
Color.new(0,0,0,55), # => 9 час
Color.new(0,0,0,30), # => 10 час
Color.new(0,0,0,10), # => 11 час
Color.new(0,0,0,0), # => 12 час
Color.new(0,0,0,0), # => 13 час
Color.new(0,0,0,0), # => 14 час
Color.new(0,0,0,5), # => 15 час
Color.new(0,0,0,15), # => 16 час
Color.new(0,0,10,45), # => 17 час
Color.new(75,20,20,85), # => 18 час
Color.new(100,40,30,105), # => 19 час
Color.new(75,20,40,125), # => 20 час
Color.new(10,0,45,140), # => 21 час
Color.new(20,0,45,145), # => 22 час
Color.new(20,0,50,160) ] # => 23 час
#----- Конец настройки дня и ночи ----------------------------------------------
#----- Начало настройки времени ------------------------------------------------
# Использовать дату с компьюетера ? true - да, false - нет
USE_REAL_TIME = false
# Остановить время в меню ? true - да, false - нет
PAUSE_IN_MENU = true
# Остановить время, если на экране сообщение ? true - да, false - нет
PAUSE_IN_MESSAGE = true
# Отображать окно в меню ? true - да, false - нет
TIME_IN_MENU = true
# Секунд в минуте (минимум 2)
# Для лучшего эффекта лучше оставить 60, если SHOW_SECONDS = false, но это
# уже на ваше усмотрение
SECONDS_IN_MINUTE = 10
# Минут в часе (минимум 2)
MINUTES_IN_HOUR = 60
# Часов в дне
HOURS_IN_DAY = 24
# Скорость времени
# (Минимум - 1, Максимум - 60!).
# Чем меньше цифра, тем быстрее идет время. 60 - Реальное время
$TIME_SPEED = 1
# Отображать секунды в часах ? true - да, false - нет
SHOW_SECONDS = false
# Использовать кастомные часы в игре ? true - да, false - нет
USE_CUSTOM_CLOCK_ON_MAP = false
# Настройка кастомных часов
# Возможно: День, День недели, Месяц(число), Месяц(название), Год
# Также возможны свои команды
CUSTOM_CLOCK_DATE = ["День", "Месяц(название)", "Год"]
# Возможно: Час, blink(":"), Минуты, Секунды
CUSTOM_CLOCK_TIME = ["Час", "blink", "Минуты"]
# Ширина окна времени в игре
CLOCK_WIDTH = 180
# Высота окна времени в игре
CLOCK_HEIGHT = 74
# Координата X окна времени в игре
CLOCK_X = Graphics.width - CLOCK_WIDTH
# Координата Y окна времени в игре
CLOCK_Y = Graphics.height - CLOCK_HEIGHT
# Непрозрачность окна в игре. -1 = стандартное
CLOCK_OPACITY = -1
# Глубина окна, -1 = стандартная
CLOCK_Z = -1
# Использовать кастомные часы в игре ? true - да, false - нет
USE_CUSTOM_CLOCK_IN_MENU = false
# Ширина окна времени в игре
MENU_CLOCK_WIDTH = 200
# Высота окна времени в игре
MENU_CLOCK_HEIGHT = 90
# Координата X окна времени в игре
MENU_CLOCK_X = 0
# Координата Y окна времени в игре
MENU_CLOCK_Y = 0
# Непрозрачность окна в меню. -1 = стандартное
MENU_CLOCK_OPACITY = -1
# Глубина окна, -1 = стандартная
MENU_CLOCK_Z = -1
# Использовать обновление времени в битве ? true - да, false - нет
USE_TIME_UPDATE_IN_BATTLE = false
# Отображать окно времени в бою ? true - да, false - нет
SHOW_BATTLE_TIME_WINDOW = false
# Использовать кастомные часы в битве ? true - да, false - нет
USE_CUSTOM_CLOCK_IN_BATTLE = false
# Ширина окна времени в игре
BATTLE_CLOCK_WIDTH = 180
# Высота окна времени в игре
BATTLE_CLOCK_HEIGHT = 74
# Координата X окна времени в игре
BATTLE_CLOCK_X = Graphics.width - CLOCK_WIDTH
# Координата Y окна времени в игре
BATTLE_CLOCK_Y = Graphics.height - CLOCK_HEIGHT
# Непрозрачность окна в игре. -1 = стандартное
BATTLE_CLOCK_OPACITY = -1
# Глубина окна, -1 = стандартная
BATTLE_CLOCK_Z = -1
# Использовать мерцание ":" в часах ? true - да, false - нет. Отключение может повысить FPS на 1-5
USE_BLINK = false
# Частота обновления ":" в отображении времени и частота обновления завершающихся квестов (40 - оптимально)
BLINK_SPEED = 40
# Чтобы на определенной карте приостановить обновление времени, используйте заметки карты и пропишите там: <No_Time_Update>
# Чтобы на определенной карте выставить освещение определенного часа, используйте заметки карты: <Light_Hour = H>
# где H - нужный час
# Настройка начала игры! Если не используете реальное время.
SEC = 0 # Секунды
MIN = 0 # Минуты
HOUR = 10 # Час
DAY = 15 # День
DAY_WEEK = 1 # В диапозоне от 1 до 7 (1 - Понедельник, 7 - Воскресенье)
MONTH = 4 # Месяц
YEAR = 756 # Год
# Количество дней в каждом месяце
DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# Кнопка отображения/скрытия окна времени
# -1, чтобы не использовать
GAME_TIME_BUTTON = :Z
# Показывать окно времени в начале игры ? true - да, false - нет
$SHOW_START_GAME_TIME_WINDOW = true
############# КОНЕЦ НАСТРОЙКИ ##################################################
############# НИЖЕ НЕ ТРОГАТЬ !!! ##############################################
# Обновление времени
$STOP_TIME_UPDATE = false
# Час статического освещения
$STOP_TIME_UPDATE_LIGHT_HOUR = -1
end
$imported = {} if $imported.nil?
$imported["DenKyz_Game_Time"] = true
class Functions
include Time_Settings
def self.new_game # новая игра
Now_Time.new
end
def self.setup_khas_light_switch(hour) # hour - час, если диапозон вкл; bool, если диапозон выкл.
return if !USE_KHAS_LIGHT || KHAS_LIGHT_SWITCH == -1
return if ($USE_KHAS_DAY_LIGHT && !hour.is_a?(Integer)) || (!$USE_KHAS_DAY_LIGHT && hour.is_a?(Integer))
if $USE_KHAS_DAY_LIGHT
if (hour < KHAS_DAY_LIGHT[0] || hour > KHAS_DAY_LIGHT[1])
$game_switches[KHAS_LIGHT_SWITCH] = true
else
$game_switches[KHAS_LIGHT_SWITCH] = false
end
else
$game_switches[KHAS_LIGHT_SWITCH] = hour
end
end
end # class Functions
class Now_Time
include Time_Settings
def initialize
# 0 и больше 60 не будет обновляться
$TIME_SPEED = 60 if $TIME_SPEED > 60
$TIME_SPEED = 1 if $TIME_SPEED < 1
$Game_Time = Game_Time.new
$UPDATE_DYNAMIC_TINT = true
$Game_Time_Tint = Game_Time_Tint.new if USE_LIGHT_TINT
begin
$CALENDAR_NOTIFY = 1 if $CALENDAR_NOTIFY > MINUTES_IN_HOUR
rescue
end
end
def self.change(sec, min, hour, day, dayweek, month, year)
$Game_Time.change(sec, min, hour, day, dayweek, month, year)
update # насколько он тут нужен ?
end
def self.update
$Game_Time.update
end
def self.save_time # сохраняем время
$Game_Time_DUP = $Game_Time.dup
end
def self.load_time # загружаем время
$Game_Time = $Game_Time_DUP.dup
end
def self.time(value, type) #изменение времени
$Game_Time.time(value, type)
end
def self.windows_visible?(flag) # пок/скр все окна
SceneManager.scene.all_visible(flag)
end
def self.setup_khas_day_light(setup) #вкл/выкл диапозон переключения света
$USE_KHAS_DAY_LIGHT = setup
end
end # class Now_Time
class Game_Time
include Time_Settings
attr_reader :sec
attr_reader :min
attr_reader :hour
attr_reader :day
attr_reader :dayweek
attr_reader :month
attr_reader :year
def initialize
@sec = SEC
@min = MIN
@hour = HOUR
@day = DAY
# потому что от 0-6, а игрок указывает от 1-7. 0 - Понедельник
# а от 0-6 потому что в массиве дней недели индексы с 0
# та же причина и у MONTH ниже
@dayweek = DAY_WEEK - 1
@month = MONTH - 1
@year = YEAR
$FIRST_DAY = DAY_WEEK # первый день января (для календаря). Там 1-7 значения
end
def update
return real_time if USE_REAL_TIME
return if $game_message.busy? && PAUSE_IN_MESSAGE
return if SceneManager.scene.is_a?(Scene_Menu) && PAUSE_IN_MENU
return if !SceneManager.scene.is_a?(Scene_Map) && !SceneManager.scene.is_a?(Scene_Battle)
return if !USE_TIME_UPDATE_IN_BATTLE && SceneManager.scene.is_a?(Scene_Battle)
return unless Graphics.frame_count % $TIME_SPEED == 0
return add_sec(1)
end
def change(sec, min, hour, day, dayweek, month, year)
sec > @sec ? (sec - @sec).times do add_sec(1) end : (@sec - sec).times do rem_sec(1) end
min > @min ? (min - @min).times do add_min(1) end : (@min - min).times do rem_min(1) end
hour > @hour ? (hour - @hour).times do add_hour(1) end : (@hour - hour).times do rem_hour(1) end
day > @day ? (day - @day).times do add_day(1) end : (@day - day).times do rem_day(1) end
@dayweek = dayweek - 1
month -= 1
month > @month ? (month - @month).times do add_month(1) end : (@month - month).times do rem_month(1) end
year > @year ? add_year(year - @year) : rem_year(@year - year)
all_days = 0 # сумма дней с января до нужного месяца (не включая)
for i in 0..month - 1
all_days += Time_Settings::DAYS[i]
end
$FIRST_DAY = (dayweek + 1 -(day + all_days % DAYS_WEEK.size)) % DAYS_WEEK.size
end
def time(value, type)
# логика такая: чтобы не пропустить события на карте вместо просто изменения
# времени я прибавляю меньшие значения.
# Пример 1: +2 минуты = + прибавляю 120 секунд
# Пример 2: +1 месяц = + кол-во часов в месяце
# Все сделать через секунды нельзя (слишком большая задержка на экране возникает)
case type
when :sec
set = :sec
when :min
set = :sec
value *= SECONDS_IN_MINUTE
when :hour
set = :min
value *= MINUTES_IN_HOUR
when :day
set = :hour
value *= HOURS_IN_DAY
when :month
set = :hour
for i in 1..(value > 0 ? value : value * -1) # value - сколько было
val = DAYS[@month] * HOURS_IN_DAY # val - считаем для текущего месяца часы
if value > 0
val.times do eval("add_" + set.to_s + "(1)") end
else
val.times do eval("rem_" + set.to_s + "(1)") end
end
end
return
when :year
set = :day
sum = 0
for i in 0..DAYS.size - 1
sum += DAYS[i]
end
value *= sum
end # case type
if value > 0
value.times do eval("add_" + set.to_s + "(1)") end
else
value = -value
value.times do eval("rem_" + set.to_s + "(1)") end
end
end
def enable_dynamic_tint_update
return if !USE_DYNAMIC_LIGHT
$UPDATE_DYNAMIC_TINT = true
end
def real_time # время с компьютера
@sec = Time.now.sec
@sec = 0 if @sec >= SECONDS_IN_MINUTE
@min = Time.now.min
@hour = Time.now.hour
if @day != Time.now.day
@day = Time.now.day
enable_dynamic_tint_update
end
@dayweek = Time.now.wday
if @month != Time.now.month - 1
@month = Time.now.month - 1 # причина в initialize
enable_dynamic_tint_update
end
@year = Time.now.year
end
def add_sec(n = 1)
@sec += n
return unless @sec == SECONDS_IN_MINUTE
@sec = 0
add_min(1)
end
def add_min(n = 1)
@min += n
return unless @min == MINUTES_IN_HOUR
@min = 0
add_hour(1)
end
def add_hour(n = 1)
@hour += n
return unless @hour == HOURS_IN_DAY
@hour = 0
add_day(1)
end
def add_day(n = 1)
@day += n
@dayweek += n
enable_dynamic_tint_update
@dayweek = 0 if @dayweek == DAYS_WEEK.size
return unless @day == DAYS[@month] + 1
@day = 1
add_month(1)
end
def add_month(n = 1)
@month += n
enable_dynamic_tint_update
return unless @month == CALENDAR_MONTHS.size
@month = 0
add_year(1)
end
def add_year(n = 1)
@year += n
end
def rem_sec(n = 1)
@sec -= n
return unless @sec == -1
@sec = SECONDS_IN_MINUTE - 1
rem_min(1)
end
def rem_min(n = 1)
@min -= n
return unless @min == -1
@min = MINUTES_IN_HOUR - 1
rem_hour(1)
end
def rem_hour(n = 1)
@hour -= n
return unless @hour == -1
@hour = HOURS_IN_DAY - 1
rem_day(1)
end
def rem_day(n = 1)
@day -= n
@dayweek -= n
@dayweek = DAYS_WEEK.size - 1 if @dayweek == -1
return unless @day == 0
@day = DAYS[@month-1]
rem_month(1)
end
def rem_month(n = 1)
@month -= n
return unless @month == -1
@month = CALENDAR_MONTHS.size - 1
rem_year(1)
end
def rem_year(n = 1)
@year -= n
end
end # class Game_Time
class Game_Time_Tint < Sprite_Base
include Time_Settings
def initialize(viewport = nil)
super(viewport)
self.z = 1
create_contents
update
end
def create_contents
self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
self.visible = false
end
def update
return if !USE_LIGHT_TINT
return use_default_light if USE_DEFAULT_LIGHT && (@now_min != $Game_Time.min || $STOP_TIME_UPDATE_LIGHT_HOUR != -1)
return use_khas_light if USE_KHAS_LIGHT && (@now_min != $Game_Time.min || $STOP_TIME_UPDATE_LIGHT_HOUR != -1)
return use_victor if USE_VICTOR_LIGHT && (@now_min != $Game_Time.min || $STOP_TIME_UPDATE_LIGHT_HOUR != -1)
end
def settings
Functions.setup_khas_light_switch($Game_Time.hour) if $STOP_TIME_UPDATE_LIGHT_HOUR == -1
@now_min = $Game_Time.min
@hour = $Game_Time.hour
if $STOP_TIME_UPDATE_LIGHT_HOUR != -1
@hour = $STOP_TIME_UPDATE_LIGHT_HOUR
elsif USE_DYNAMIC_LIGHT
return update_dynamic_light
end
@now_hour = TINTS[@hour]
@next_hour = TINTS[@hour + 1] unless @hour + 1 == HOURS_IN_DAY
@next_hour = TINTS[0] if @hour + 1 == HOURS_IN_DAY
end
def use_default_light
settings
r = (@now_hour.red.to_f + (@next_hour.red.to_f - @now_hour.red.to_f)/60 * @now_min)/2
g = @now_hour.green.to_f + (@next_hour.green.to_f - @now_hour.green.to_f)/60 * @now_min
b = 0.9 * (@now_hour.blue.to_f + (@next_hour.blue.to_f - @now_hour.blue.to_f)/60 * @now_min)
a = 1.3 * (@now_hour.alpha.to_f + (@next_hour.alpha.to_f - @now_hour.alpha.to_f)/60 * @now_min)
self.visible = true
self.bitmap.clear
self.bitmap.fill_rect(0, 0, Graphics.width, Graphics.height, Color.new(r, g, b, a))
end
def use_khas_light
settings
begin
r = @now_hour.red.to_f + (@next_hour.red.to_f - @now_hour.red.to_f)/60 * @now_min
g = @now_hour.green.to_f + (@next_hour.green.to_f - @now_hour.green.to_f)/60 * @now_min
b = @now_hour.blue.to_f + (@next_hour.blue.to_f - @now_hour.blue.to_f)/60 * @now_min
a = @now_hour.alpha.to_f + (@next_hour.alpha.to_f - @now_hour.alpha.to_f)/60 * @now_min
$game_map.effect_surface.change_color(1, r, g, b, a)
rescue
end
end
def red(hour, month) # здесь творится магия программирования :)
tint = [
[0, 0, 0, 0, 0, 10, 20, 60, 100, 70, 20, 10, 0, 0, 20, 40, 100, 80, 50, 20, 10, 0, 0, 0],
[0, 0, 0, 0, 10, 20, 30, 75, 100, 60, 20, 10, 0, 0, 10, 20, 40, 100, 80, 50, 20, 10, 0, 0],
[0, 0, 0, 10, 20, 30, 75, 100, 60, 20, 10, 0, 0, 0, 10, 20, 30, 50, 100, 80, 60, 30, 10, 0],
[0, 10, 20, 30, 50, 80, 100, 60, 20, 10, 0, 0, 0, 0, 0, 10, 20, 30, 50, 100, 80, 60, 30, 10],
[10, 20, 30, 50, 80, 100, 60, 20, 10, 5, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 100, 80, 60, 30],
[20, 40, 60, 80, 100, 60, 45, 30, 15, 10, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 80, 100, 80, 60],
[10, 30, 50, 75, 100, 75, 50, 30, 15, 10, 0, 0, 0, 0, 0, 0, 10, 15, 30, 50, 80, 100, 80, 60],
[10, 20, 45, 60, 80, 100, 60, 35, 15, 10, 0, 0, 0, 0, 0, 10, 15, 30, 50, 75, 100, 75, 50, 20],
[0, 10, 20, 30, 40, 60, 100, 80, 45, 30, 15, 10, 0, 0, 0, 10, 30, 50, 80, 100, 70, 50, 20, 0],
[0, 0, 10, 20, 30, 45, 75, 100, 80, 60, 40, 20, 0, 10, 30, 45, 80, 100, 80, 60, 40, 20, 0, 0],
[0, 0, 10, 20, 30, 50, 70, 100, 80, 60, 30, 20, 10, 20, 40, 75, 100, 80, 60, 40, 20, 10, 0, 0],
[0, 0, 0, 10, 20, 30, 50, 70, 100, 70, 50, 20, 0, 10, 30, 60, 100, 75, 40, 20, 10, 0, 0, 0]]
return tint[month][hour]
end
def green(hour, month)
tint = [
[0, 0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 10, 15, 25, 15, 10, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 10, 15, 20, 25, 15, 10, 0, 0, 0, 0],
[0, 0, 0, 0, 5, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0, 5, 10, 25, 10, 5, 0, 0, 0, 0],
[0, 0, 0, 0, 5, 10, 30, 20, 10, 5, 0, 0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0],
[0, 0, 0, 10, 15, 30, 15, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 25, 15, 10, 0],
[0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 0],
[0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 15, 0],
[0, 0, 0, 10, 20, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0],
[0, 0, 0, 0, 10, 20, 30, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 15, 10, 0, 0],
[0, 0, 0, 0, 0, 10, 15, 30, 10, 0, 0, 0, 0, 0, 0, 5, 15, 25, 15, 10, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 10, 20, 30, 20, 10, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 10, 15, 30, 15, 10, 0, 0, 0, 0, 0]]
return tint[month][hour]
end
def blue(hour, month)
tint = [
[10, 15, 20, 25, 30, 45, 30, 20, 10, 0, 0, 0, 0, 0, 0, 15, 20, 55, 45, 30, 20, 10, 0, 0],
[10, 15, 20, 25, 30, 40, 20, 15, 10, 0, 0, 0, 0, 0, 0, 0, 15, 20, 55, 45, 30, 20, 10, 0],
[10, 15, 25, 30, 40, 30, 20, 15, 10, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 45, 40, 35, 20],
[15, 20, 20, 35, 45, 25, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 25, 35, 50, 40, 35, 20],
[15, 20, 35, 45, 25, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 35, 55, 40, 30],
[15, 30, 50, 35, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 30],
[15, 30, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 50, 25],
[10, 15, 30, 50, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 35, 50, 35, 20],
[10, 15, 25, 35, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 55, 35, 20, 15],
[10, 15, 20, 25, 35, 50, 30, 20, 10, 0, 0, 0, 0, 0, 0, 10, 20, 35, 55, 40, 30, 20, 15, 10],
[10, 10, 15, 20, 35, 55, 35, 20, 10, 0, 0, 0, 0, 10, 20, 30, 40, 55, 35, 20, 15, 15, 10, 10],
[10, 15, 20, 25, 35, 55, 35, 20, 10, 0, 0, 0, 0, 10, 20, 30, 45, 60, 40, 30, 20, 15, 15, 10]]
return tint[month][hour]
end
def alpha(hour, month)
tint = [
[175, 170, 160, 160, 150, 150, 145, 140, 120, 90, 55, 20, 10, 10, 10, 15, 25, 75, 105, 135, 155, 160, 165, 180],
[170, 165, 155, 150, 140, 130, 130, 125, 110, 80, 50, 20, 10, 10, 10, 15, 25, 70, 95, 125, 140, 150, 160, 175],
[165, 160, 150, 135, 130, 110, 115, 110, 90, 70, 45, 20, 10, 10, 10, 10, 20, 60, 80, 105, 120, 135, 150, 160],
[160, 150, 140, 120, 120, 100, 90, 85, 70, 60, 40, 15, 10, 10, 10, 10, 20, 40, 60, 85, 100, 120, 135, 150],
[155, 140, 130, 110, 105, 85, 75, 70, 50, 45, 35, 15, 10, 10, 10, 10, 10, 20, 40, 70, 85, 110, 125, 140],
[150, 130, 120, 100, 90, 70, 55, 50, 40, 30, 35, 10, 10, 10, 10, 10, 10, 15, 25, 55, 65, 100, 105, 130],
[145, 120, 110, 110, 100, 80, 70, 65, 55, 40, 35, 10, 10, 10, 10, 10, 10, 25, 40, 70, 80, 110, 125, 140],
[150, 130, 120, 120, 110, 100, 85, 80, 70, 50, 40, 15, 10, 10, 10, 10, 10, 40, 60, 80, 100, 120, 130, 140],
[155, 140, 130, 130, 120, 110, 100, 95, 85, 60, 45, 15, 10, 10, 10, 10, 10, 50, 70, 90, 115, 130, 140, 150],
[160, 150, 140, 140, 130, 120, 115, 110, 100, 70, 50, 20, 10, 10, 10, 10, 15, 60, 80, 100, 130, 140, 150, 155],
[165, 160, 150, 150, 140, 130, 130, 125, 110, 80, 55, 20, 10, 10, 10, 15, 20, 70, 90, 115, 145, 150, 155, 160],
[170, 170, 160, 160, 150, 150, 145, 140, 120, 90, 60, 25, 10, 10, 10, 15, 25, 75, 105, 135, 155, 160, 165, 170]]
return tint[month][hour]
end
def update_dynamic_light
return set_dynamic_light if !$UPDATE_DYNAMIC_TINT
@tint = []
minus = 7
no_zero = 6 + minus * 1.5
month = $Game_Time.month
for i in 0..23
@tint[i] = Color.new(red(i, month) - minus + rand(no_zero), green(i, month) - minus + rand(no_zero), blue(i, month) - minus + rand(no_zero), alpha(i, month) - minus + rand(no_zero))
end
$UPDATE_DYNAMIC_TINT = false
return set_dynamic_light
end
def set_dynamic_light
Now_Time.setup_khas_day_light(false) # отключаем обычную смену переключателя
setup = false
setup = true if @tint[@hour].alpha > 100
Functions.setup_khas_light_switch(setup)
@now_hour = @tint[@hour]
@next_hour = @tint[@hour + 1] unless @hour + 1 == HOURS_IN_DAY
@next_hour = @tint[0] if @hour + 1 == HOURS_IN_DAY
end
end # class Game_Time_Tint < Sprite_Base
class Scene_Base
alias denis_kyznetsov_game_time_scn_base_update update
def update
denis_kyznetsov_game_time_scn_base_update
$Game_Time.update if $Game_Time && !$STOP_TIME_UPDATE
$Game_Time_Tint.update if $Game_Time_Tint || ($Game_Time_Tint && USE_LIGHT_IN_BATTLE && SceneManager.scene.is_a?(Scene_Battle))
end
end # class Scene_Base
class Scene_Map < Scene_Base
include Time_Settings
alias denis_kyznetsov_game_time_scn_map_create_all_windows create_all_windows
def create_all_windows
denis_kyznetsov_game_time_scn_map_create_all_windows
create_game_time_window if $SHOW_START_GAME_TIME_WINDOW && $imported["DenKyz_Game_Time"]
end
def all_visible(flag)
time_visible(flag)
end
def time_visible(flag)
return if (@create_game_time_window.nil? && !flag) || !$imported["DenKyz_Game_Time"]
$SHOW_START_GAME_TIME_WINDOW = !$SHOW_START_GAME_TIME_WINDOW
return create_game_time_window if flag
@create_game_time_window.dispose # если не flag
@create_game_time_window = nil
end
def create_game_time_window
x, y, w, h = CLOCK_X, CLOCK_Y, CLOCK_WIDTH, CLOCK_HEIGHT
w, h = 180, 76 if !USE_CUSTOM_CLOCK_ON_MAP
@create_game_time_window = Time_Window.new(x, y, w, h, CLOCK_OPACITY, CLOCK_Z)
end
alias denis_kyznetsov_game_time_scn_map_update update
def update
denis_kyznetsov_game_time_scn_map_update
if !GAME_TIME_BUTTON.is_a?(Integer)
if Input.trigger?(GAME_TIME_BUTTON) && $SHOW_START_GAME_TIME_WINDOW
time_visible(false)
elsif Input.trigger?(GAME_TIME_BUTTON) && !$SHOW_START_GAME_TIME_WINDOW
time_visible(true)
end
end
end
end # Scene_Map < Scene_Base
class Scene_Battle < Scene_Base
include Time_Settings
alias denis_kyznetsov_game_time_scn_battle_start start
def start
denis_kyznetsov_game_time_scn_battle_start
create_game_time_battle_window if SHOW_BATTLE_TIME_WINDOW
end
def create_game_time_battle_window
x, y, w, h = BATTLE_CLOCK_X, BATTLE_CLOCK_Y, BATTLE_CLOCK_WIDTH, BATTLE_CLOCK_HEIGHT
w, h = 180, 76 if !USE_CUSTOM_CLOCK_IN_BATTLE
@create_game_time_window = Time_Window.new(x, y, w, h, BATTLE_CLOCK_OPACITY, BATTLE_CLOCK_Z)
end
end # class Scene_Battle < Scene_Base
class Game_Map
include Time_Settings
alias denis_kyznetsov_game_time_game_map_setup setup
def setup(map_id)
denis_kyznetsov_game_time_game_map_setup(map_id)
$STOP_TIME_UPDATE = (@map.note.include?("<No_Time_Update>") ? true : false)
if @map.note =~ /<[\s]*Light[\w\s]*Hour[\s]*=[\s]*([\d]+)[\s]*>/i
$STOP_TIME_UPDATE_LIGHT_HOUR = $1.to_i
else
$STOP_TIME_UPDATE_LIGHT_HOUR = -1
end
end
end # class Game_Map
class Time_Window < Window_Base
include Time_Settings
def initialize(x = 0, y = 0, w = Graphics.width, h = Graphics.height, opacity, z)
super(x, y, w, h)
if opacity != -1 # прозрачность, указанная пользователем, если есть
self.opacity = opacity
self.back_opacity = opacity
self.contents_opacity = opacity
end
self.z = z if z != -1
@width = w
@height = h
update
end
def blink # мигающее двоеточие
return ":" if Graphics.frame_count % BLINK_SPEED > BLINK_SPEED/2
return " "
end
def date # дата
return ($Game_Time.day.to_s + " " + CALENDAR_MONTHS[$Game_Time.month] + " " + $Game_Time.year.to_s) if !USE_CUSTOM_CLOCK_ON_MAP
date = ""
return date if CUSTOM_CLOCK_DATE == []
for i in 0..CUSTOM_CLOCK_DATE.size - 1
case CUSTOM_CLOCK_DATE[i]
when "День"
date += " " + $Game_Time.day.to_s
when "День недели"
date += " " + DAYS_WEEK[$Game_Time.month]
when "Месяц(число)"
date += " " + $Game_Time.month.to_s
when "Месяц(название)"
date += " " + CALENDAR_MONTHS[$Game_Time.month]
when "Год"
date += " " + $Game_Time.year.to_s
else
date += " " + CUSTOM_CLOCK_DATE[i].to_s
end
end
return date
end
def plus_minutes
return $Game_Time.min < 10 ? "0" + $Game_Time.min.to_s : $Game_Time.min.to_s
end
def plus_seconds
return $Game_Time.sec < 10 ? "0" + $Game_Time.sec.to_s : $Game_Time.sec.to_s
end
def time # время
return ($Game_Time.hour < 10 ? "0" + $Game_Time.hour.to_s : $Game_Time.hour.to_s) +
(USE_BLINK ? blink : ":") + plus_minutes +
(SHOW_SECONDS ? ((USE_BLINK ? blink : ":") + plus_seconds) : "") if !USE_CUSTOM_CLOCK_ON_MAP
time = ""
return time if CUSTOM_CLOCK_TIME == []
for i in 0..CUSTOM_CLOCK_TIME.size - 1
case CUSTOM_CLOCK_TIME[i]
when "Час"
time += $Game_Time.hour.to_s
when "blink"
time += USE_BLINK ? blink : ":"
when "Минуты"
time += plus_minutes
when "Секунды"
time += SHOW_SECONDS ? plus_seconds : ""
else
time += CUSTOM_CLOCK_TIME[i].to_s
end
end
return time
end
def update
if (@now_sec != $Game_Time.sec && SHOW_SECONDS) || (@now_min != $Game_Time.min && !SHOW_SECONDS) || USE_BLINK || @now_hour != $Game_Time.hour || @now_day != $Game_Time.day || @now_month != $Game_Time.month || @now_year != $Game_Time.year
setup_variables
contents.clear
show_date = date
show_time = time
y = 0
draw_text(0, y, @width - 24, 32, show_date, 1)
return if show_time == ""
y += 24 if show_date != ""
draw_text(0, y, @width - 24, 32, show_time, 1)
end
end
def setup_variables
@now_sec = $Game_Time.sec
@now_min = $Game_Time.min
@now_hour = $Game_Time.hour
@now_day = $Game_Time.day
@now_month = $Game_Time.month
@now_year = $Game_Time.year
end
end # class Time_Window < Window_Base
class Scene_Menu < Scene_MenuBase
include Time_Settings
alias denis_kyznetsov_game_time_scn_menu_start start
def start
denis_kyznetsov_game_time_scn_menu_start
create_time_window if TIME_IN_MENU
end
def create_time_window
x, y, w, h = MENU_CLOCK_X, MENU_CLOCK_Y, MENU_CLOCK_WIDTH, MENU_CLOCK_HEIGHT
x, y, w, h = @gold_window.x, @gold_window.y - 74, 160, 74 if !USE_CUSTOM_CLOCK_IN_MENU
@create_time_window = Time_Window.new(x, y, w, h, MENU_CLOCK_OPACITY, MENU_CLOCK_Z)
end
end # Scene_Menu < Scene_MenuBase
module DataManager
class << self
alias denis_kyznetsov_game_time_dt_mngr_setup_new_game setup_new_game
def setup_new_game
denis_kyznetsov_game_time_dt_mngr_setup_new_game
Functions.new_game
end
alias denis_kyznetsov_game_time_dt_mngr_make_save_contents make_save_contents
def make_save_contents
contents = denis_kyznetsov_game_time_dt_mngr_make_save_contents
contents[:Game_Time] = $Game_Time
contents[:Game_Time_DUP] = $Game_Time_DUP
contents
end
alias denis_kyznetsov_game_time_dt_mngr_extract_save_contents extract_save_contents
def extract_save_contents(contents)
denis_kyznetsov_game_time_dt_mngr_extract_save_contents(contents)
Functions.new_game
$Game_Time = contents[:Game_Time]
$Game_Time_DUP = contents[:Game_Time_DUP]
end
end
end # module DataManager |
Последнее редактирование: 9 года 5 мес. назад от DK. Причина: обновление
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79
|
Время/Дата v. 5.2 9 года 4 мес. назад #83140
|
Новая версия 5.5
Что нового: Внимание! После того, как я переписал скрипт, другие зависимые скрипты от этого могут потерять совместимость или иметь частичную. Постараюсь в скором времени обновить другие зависимые скрипты. |
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.6 9 года 4 мес. назад #83331
|
Новая версия 5.6
Что нового: |
Администратор запретил публиковать записи гостям.
|
Время/Дата v. 5.6 9 года 4 мес. назад #83704
|
А можно ли сделать так, чтобы день проходил быстрее ночи?
|
Мне лень что-то писать
Администратор запретил публиковать записи гостям.
|
Модераторы: NeKotZima
Время создания страницы: 0.770 секунд