[Script] [ACE] [VXA - yêu cầu] time system basic
Hiện tại thì mình đang xài cái hệ thống thời gian như thế này :
[php]#Basic Game Time + Night/Day v1.6.2
#
#
#Features: Provides a series of functions to set and recall current game time
# as well customizable tints based on current game time to give the
# appearance of night and day.
#
#Usage: Script calls:
# GameTime::minute? - returns the current minute
# GameTime::hour? - returns the current hour
# GameTime::set(time) - sets the game time to time, in frames (max:1440)
# GameTime::change(time) - increments the game time! (can be negative)
# GameTime::pause_time(set) - stops time for events and stuff, true or false
# GameTime::pause_tint(set) - time runs, but tints do not update
# GameTime::clock(set) - sets whether clock is visible or not
#
#Customization: Set below, in comments.
#
#Examples: GameTime::set(360)
#
#
#
#-- Script by: V.M of D.T
#
#- Questions or comments can be:
# posted on the thread for the script
# given by email: sumptuaryspade@live.ca
# provided on facebook: http://www.facebook.com/DaimoniousTailsGames
#
#--- Free to use in any project, commercial or non-commercial, with credit given
# - - Though a donation's always a nice way to say thank you~ (I also accept actual thank you's)
#---Game Clock---#
#USE_CLOCK to true to display game time clock
#CLOCK_POSITION for position of clock
# 1 = topleft, 2 = topright, 3 = bottomleft, 4 = bottomright
#CLOCK_TOGGLE is any input button available, see the INPUT help file for options
#
#
USE_CLOCK = true
CLOCK_POSITION = 2
CLOCK_TOGGLE = :SHIFT
module GameTime
#---Game Time Details---#
#Number of frames in a game minute, 60 frames = 1 second
TIME_COUNT = 60
#Sets whether to tint screen based on game time
USE_TINT = true
#Switch to denote day or night time
USE_SWITCH = false
NIGHT_DAY_SWITCH = 1
DAY_TIME_START = 6
NIGHT_TIME_START = 18
#True to pause time while not in map or while during a message
PAUSE_IN_COMBAT = false
PAUSE_NOT_IN_MAP = true
PAUSE_IN_MESSAGE = true
#Sets time frames of tints by minute count, one day is 1440 minutes
# 0 = 12am, 360 = 6am, 720 = 12pm, 1080 = 6pm etc...
PRESUNRISE_TIME = 240
SUNRISE_TIME = 360
NOONSTART_TIME = 660
NOONEND_TIME = 900
PRESUNSET_TIME = 1080
SUNSET_TIME = 1260
MIDNIGHT_TIME = 60 #Must be greater than 0
#Sets custome tints
PRESUNRISE_TONE = Tone.new(-75,-75,0,50)
SUNRISE_TONE = Tone.new(0,0,0,0)
NOONSTART_TONE = Tone.new(45,45,0,-25)
NOONEND_TONE = Tone.new(0,0,0,0)
PRESUNSET_TONE = Tone.new(-50,-50,0,25)
SUNSET_TONE = Tone.new(-75,-100,0,75)
MIDNIGHT_TONE = Tone.new(-125,-125,0,125)
#Include the ids of any maps not to be tinted based on time
# Usually reserved for indoor maps
NOTINTMAPS = [2]
#Store current time in a variable?
USE_VARIABLE = false
TIME_VARIABLE = 1
#---END---#
def self.init
$game_time = 0
$game_time_pause_time = false
$game_time_pause_tint = false
end
def self.update
if $game_time_pause_time then return else end
case SceneManager::scene_is?(Scene_Map)
when true
if $game_message.visible == true && PAUSE_IN_MESSAGE then else
$game_time += 1 if Graphics.frame_count % TIME_COUNT == 0 end
when false
if !PAUSE_NOT_IN_MAP and !SceneManager::scene_is?(Scene_Battle)
$game_time += 1 if Graphics.frame_count % TIME_COUNT == 0 end
if SceneManager::scene_is?(Scene_Battle) && PAUSE_IN_COMBAT != true
$game_time += 1 if Graphics.frame_count % TIME_COUNT == 0 end
end
if $game_time == 1440 then $game_time = 0 end
$game_variables[TIME_VARIABLE] = $game_time if USE_VARIABLE
update_night_switch if USE_SWITCH
GameTime::tint if $game_time_pause_tint != true
end
def self.update_night_switch
if hour? > DAY_TIME_START and hour? < NIGHT_TIME_START
$game_switches[NIGHT_DAY_SWITCH] = true unless $game_switches[NIGHT_DAY_SWITCH] == true
else
$game_switches[NIGHT_DAY_SWITCH] = false unless $game_switches[NIGHT_DAY_SWITCH] == false
end
end
def self.hour?
return $game_time / 60
end
def self.minute?
return $game_time % 60
end
def self.time?
meri = "AM"
hour = GameTime::hour?
minute = GameTime::minute?
if hour > 11 then meri = "PM" end
if hour == 0 then hour = 12; meri = "AM" end
if hour > 12 then hour -= 12 end
if hour < 10 then hour = " " + hour.to_s else hour.to_s end
if minute < 10 then minute = "0" + minute.to_s else minute.to_s end
return hour.to_s + ":" + minute.to_s + " " + meri
end
def self.set(number)
$game_time = number if number < 1440
GameTime::tint(0) if $game_time_pause_tint != true
end
def self.change(number)
$game_time += number
$game_time -= 1440 if $game_time > 1440
$game_time += 1440 if $game_time < 0
GameTime::tint(0) if $game_time_pause_tint != true
end
def self.tint(tint = 60)
if USE_TINT != true then return end
for i in NOTINTMAPS
if $game_map.map_id == i
$game_map.screen.start_tone_change(Tone.new(0,0,0,0),0)
return
end
end
if SceneManager::scene_is?(Scene_Map) then else return end
case $game_time
when PRESUNRISE_TIME .. SUNRISE_TIME
$game_map.screen.start_tone_change(PRESUNRISE_TONE, tint)
when SUNRISE_TIME .. NOONSTART_TIME
$game_map.screen.start_tone_change(SUNRISE_TONE, tint)
when NOONSTART_TIME .. NOONEND_TIME
$game_map.screen.start_tone_change(NOONSTART_TONE, tint)
when NOONEND_TIME .. PRESUNSET_TIME
$game_map.screen.start_tone_change(NOONEND_TONE, tint)
when PRESUNSET_TIME .. SUNSET_TIME
$game_map.screen.start_tone_change(PRESUNSET_TONE, tint)
when SUNSET_TIME .. 1440
$game_map.screen.start_tone_change(SUNSET_TONE, tint)
when 0 .. MIDNIGHT_TIME
$game_map.screen.start_tone_change(SUNSET_TONE, tint)
when MIDNIGHT_TIME .. PRESUNRISE_TIME
$game_map.screen.start_tone_change(MIDNIGHT_TONE, tint)
end
end
def self.pause_time(set)
$game_time_pause_time = set
end
def self.pause_tint(set)
$game_time_pause_tint = set
end
def self.clock(set)
return unless SceneManager.scene.is_a?(Scene_Map)
SceneManager.scene.clock_visible?(set)
end
class Window_Clock < Window_Base
def initialize
case CLOCK_POSITION # các vị trí đặt clock :
when 1
super(0,0,115,56)
when 2
super(429,0,115,56)
when 3
super(0,360,115,56)
when 4
super(429,360,115,56)
end
self.visible = $game_time_clock_visibility unless $game_time_clock_visibility.nil?
end
def update
self.contents.clear
self.contents.draw_text(0,0,100,24,GameTime::time?)
$game_time_clock_visibility = self.visible
end
end
end
GameTime::init
module DataManager
class << self
alias gametime_msc make_save_contents
alias gametime_esc extract_save_contents
end
def self.make_save_contents
contents = gametime_msc
contents[:gametime] = $game_time
contents
end
def self.extract_save_contents(contents)
gametime_esc(contents)
$game_time = contents[:gametime]
end
end
class Scene_Map < Scene_Base
alias gametime_post_transfer post_transfer
alias gametime_create_all_windows create_all_windows
alias gametime_update_map update
def post_transfer
GameTime::tint(0) if $game_time_pause_tint != true
gametime_post_transfer
end
def create_all_windows
gametime_create_all_windows
@gametimeclock = GameTime::Window_Clock.new if USE_CLOCK
end
def update
gametime_update_map
@gametimeclock.update if @gametimeclock.nil? == false
if Input.trigger?(CLOCK_TOGGLE) and @gametimeclock.nil? == false
@gametimeclock.visible ? @gametimeclock.visible = false : @gametimeclock.visible = true
end
end
def clock_visible?(set)
@gametimeclock.visible = set
end
end
class Scene_Base
alias gametime_update update
def update
gametime_update
GameTime::update
end
end[/php]
Mình thấy nó có quá nhiều cái ko cần thiết với game của mình.
Nó có nhiều buổi quá, cũng chả để làm gì. Mình chỉ cần ngày và đêm.
Ngày từ bắt đầu từ 6h sáng
Đêm bắt đầu từ 6h tối
Cái này thực ra mình cũng fix được nhưng ...
Nếu mình xài hiệu ứng ánh sáng trong đêm của Khas thì nó sẽ ko stack với nhau.
Cho nên mình muốn sửa lại cái script trên kia, chỉ cần 2 loại ngày và đêm.
Và ban đêm thì đổi màu của surface theo kiểu như này:
[php]s = $game_map.effect_surface
s.change_color(120,0,0,0,200)[/php]
Như vậy thì sẽ stack hoàn toàn với script Light eff của Khas
Mong được giúp đỡ cho dự án.
[php]#Basic Game Time + Night/Day v1.6.2
#
#
#Features: Provides a series of functions to set and recall current game time
# as well customizable tints based on current game time to give the
# appearance of night and day.
#
#Usage: Script calls:
# GameTime::minute? - returns the current minute
# GameTime::hour? - returns the current hour
# GameTime::set(time) - sets the game time to time, in frames (max:1440)
# GameTime::change(time) - increments the game time! (can be negative)
# GameTime::pause_time(set) - stops time for events and stuff, true or false
# GameTime::pause_tint(set) - time runs, but tints do not update
# GameTime::clock(set) - sets whether clock is visible or not
#
#Customization: Set below, in comments.
#
#Examples: GameTime::set(360)
#
#
#
#-- Script by: V.M of D.T
#
#- Questions or comments can be:
# posted on the thread for the script
# given by email: sumptuaryspade@live.ca
# provided on facebook: http://www.facebook.com/DaimoniousTailsGames
#
#--- Free to use in any project, commercial or non-commercial, with credit given
# - - Though a donation's always a nice way to say thank you~ (I also accept actual thank you's)
#---Game Clock---#
#USE_CLOCK to true to display game time clock
#CLOCK_POSITION for position of clock
# 1 = topleft, 2 = topright, 3 = bottomleft, 4 = bottomright
#CLOCK_TOGGLE is any input button available, see the INPUT help file for options
#
#
USE_CLOCK = true
CLOCK_POSITION = 2
CLOCK_TOGGLE = :SHIFT
module GameTime
#---Game Time Details---#
#Number of frames in a game minute, 60 frames = 1 second
TIME_COUNT = 60
#Sets whether to tint screen based on game time
USE_TINT = true
#Switch to denote day or night time
USE_SWITCH = false
NIGHT_DAY_SWITCH = 1
DAY_TIME_START = 6
NIGHT_TIME_START = 18
#True to pause time while not in map or while during a message
PAUSE_IN_COMBAT = false
PAUSE_NOT_IN_MAP = true
PAUSE_IN_MESSAGE = true
#Sets time frames of tints by minute count, one day is 1440 minutes
# 0 = 12am, 360 = 6am, 720 = 12pm, 1080 = 6pm etc...
PRESUNRISE_TIME = 240
SUNRISE_TIME = 360
NOONSTART_TIME = 660
NOONEND_TIME = 900
PRESUNSET_TIME = 1080
SUNSET_TIME = 1260
MIDNIGHT_TIME = 60 #Must be greater than 0
#Sets custome tints
PRESUNRISE_TONE = Tone.new(-75,-75,0,50)
SUNRISE_TONE = Tone.new(0,0,0,0)
NOONSTART_TONE = Tone.new(45,45,0,-25)
NOONEND_TONE = Tone.new(0,0,0,0)
PRESUNSET_TONE = Tone.new(-50,-50,0,25)
SUNSET_TONE = Tone.new(-75,-100,0,75)
MIDNIGHT_TONE = Tone.new(-125,-125,0,125)
#Include the ids of any maps not to be tinted based on time
# Usually reserved for indoor maps
NOTINTMAPS = [2]
#Store current time in a variable?
USE_VARIABLE = false
TIME_VARIABLE = 1
#---END---#
def self.init
$game_time = 0
$game_time_pause_time = false
$game_time_pause_tint = false
end
def self.update
if $game_time_pause_time then return else end
case SceneManager::scene_is?(Scene_Map)
when true
if $game_message.visible == true && PAUSE_IN_MESSAGE then else
$game_time += 1 if Graphics.frame_count % TIME_COUNT == 0 end
when false
if !PAUSE_NOT_IN_MAP and !SceneManager::scene_is?(Scene_Battle)
$game_time += 1 if Graphics.frame_count % TIME_COUNT == 0 end
if SceneManager::scene_is?(Scene_Battle) && PAUSE_IN_COMBAT != true
$game_time += 1 if Graphics.frame_count % TIME_COUNT == 0 end
end
if $game_time == 1440 then $game_time = 0 end
$game_variables[TIME_VARIABLE] = $game_time if USE_VARIABLE
update_night_switch if USE_SWITCH
GameTime::tint if $game_time_pause_tint != true
end
def self.update_night_switch
if hour? > DAY_TIME_START and hour? < NIGHT_TIME_START
$game_switches[NIGHT_DAY_SWITCH] = true unless $game_switches[NIGHT_DAY_SWITCH] == true
else
$game_switches[NIGHT_DAY_SWITCH] = false unless $game_switches[NIGHT_DAY_SWITCH] == false
end
end
def self.hour?
return $game_time / 60
end
def self.minute?
return $game_time % 60
end
def self.time?
meri = "AM"
hour = GameTime::hour?
minute = GameTime::minute?
if hour > 11 then meri = "PM" end
if hour == 0 then hour = 12; meri = "AM" end
if hour > 12 then hour -= 12 end
if hour < 10 then hour = " " + hour.to_s else hour.to_s end
if minute < 10 then minute = "0" + minute.to_s else minute.to_s end
return hour.to_s + ":" + minute.to_s + " " + meri
end
def self.set(number)
$game_time = number if number < 1440
GameTime::tint(0) if $game_time_pause_tint != true
end
def self.change(number)
$game_time += number
$game_time -= 1440 if $game_time > 1440
$game_time += 1440 if $game_time < 0
GameTime::tint(0) if $game_time_pause_tint != true
end
def self.tint(tint = 60)
if USE_TINT != true then return end
for i in NOTINTMAPS
if $game_map.map_id == i
$game_map.screen.start_tone_change(Tone.new(0,0,0,0),0)
return
end
end
if SceneManager::scene_is?(Scene_Map) then else return end
case $game_time
when PRESUNRISE_TIME .. SUNRISE_TIME
$game_map.screen.start_tone_change(PRESUNRISE_TONE, tint)
when SUNRISE_TIME .. NOONSTART_TIME
$game_map.screen.start_tone_change(SUNRISE_TONE, tint)
when NOONSTART_TIME .. NOONEND_TIME
$game_map.screen.start_tone_change(NOONSTART_TONE, tint)
when NOONEND_TIME .. PRESUNSET_TIME
$game_map.screen.start_tone_change(NOONEND_TONE, tint)
when PRESUNSET_TIME .. SUNSET_TIME
$game_map.screen.start_tone_change(PRESUNSET_TONE, tint)
when SUNSET_TIME .. 1440
$game_map.screen.start_tone_change(SUNSET_TONE, tint)
when 0 .. MIDNIGHT_TIME
$game_map.screen.start_tone_change(SUNSET_TONE, tint)
when MIDNIGHT_TIME .. PRESUNRISE_TIME
$game_map.screen.start_tone_change(MIDNIGHT_TONE, tint)
end
end
def self.pause_time(set)
$game_time_pause_time = set
end
def self.pause_tint(set)
$game_time_pause_tint = set
end
def self.clock(set)
return unless SceneManager.scene.is_a?(Scene_Map)
SceneManager.scene.clock_visible?(set)
end
class Window_Clock < Window_Base
def initialize
case CLOCK_POSITION # các vị trí đặt clock :
when 1
super(0,0,115,56)
when 2
super(429,0,115,56)
when 3
super(0,360,115,56)
when 4
super(429,360,115,56)
end
self.visible = $game_time_clock_visibility unless $game_time_clock_visibility.nil?
end
def update
self.contents.clear
self.contents.draw_text(0,0,100,24,GameTime::time?)
$game_time_clock_visibility = self.visible
end
end
end
GameTime::init
module DataManager
class << self
alias gametime_msc make_save_contents
alias gametime_esc extract_save_contents
end
def self.make_save_contents
contents = gametime_msc
contents[:gametime] = $game_time
contents
end
def self.extract_save_contents(contents)
gametime_esc(contents)
$game_time = contents[:gametime]
end
end
class Scene_Map < Scene_Base
alias gametime_post_transfer post_transfer
alias gametime_create_all_windows create_all_windows
alias gametime_update_map update
def post_transfer
GameTime::tint(0) if $game_time_pause_tint != true
gametime_post_transfer
end
def create_all_windows
gametime_create_all_windows
@gametimeclock = GameTime::Window_Clock.new if USE_CLOCK
end
def update
gametime_update_map
@gametimeclock.update if @gametimeclock.nil? == false
if Input.trigger?(CLOCK_TOGGLE) and @gametimeclock.nil? == false
@gametimeclock.visible ? @gametimeclock.visible = false : @gametimeclock.visible = true
end
end
def clock_visible?(set)
@gametimeclock.visible = set
end
end
class Scene_Base
alias gametime_update update
def update
gametime_update
GameTime::update
end
end[/php]
Mình thấy nó có quá nhiều cái ko cần thiết với game của mình.
Nó có nhiều buổi quá, cũng chả để làm gì. Mình chỉ cần ngày và đêm.
Ngày từ bắt đầu từ 6h sáng
Đêm bắt đầu từ 6h tối
Cái này thực ra mình cũng fix được nhưng ...
Nếu mình xài hiệu ứng ánh sáng trong đêm của Khas thì nó sẽ ko stack với nhau.
Cho nên mình muốn sửa lại cái script trên kia, chỉ cần 2 loại ngày và đêm.
Và ban đêm thì đổi màu của surface theo kiểu như này:
[php]s = $game_map.effect_surface
s.change_color(120,0,0,0,200)[/php]
Như vậy thì sẽ stack hoàn toàn với script Light eff của Khas
Mong được giúp đỡ cho dự án.
Comments
Link : http://pastebin.com/bXXaZhpQ
Vào script line 131 : sửa lại USE_KHAS = true
Ngày và đêm một mình thì có thể làm bằng event chứ!
Để test cái kia xem
Dùng common event chạy ở chế độ song song! ; )
Update : http://pastebin.com/raw.php?i=VRYpAbE6
Test thử nhé!
- Wait 360
- Script :
s = $game_map.effect_surface
s.change_color(120,0,0,0,200)
- Wait 360
- Script :
s = $game_map.effect_surface
s.change_color(120,0,0,0,0)
đc ko ?
mình nhớ không nhầm thì không cần lệnh wait trước chứ nhỉ? check thời gian hiện tại rồi đổi tone thôi
Mà mình làm như trên thì báo lỗi rồi. Hic. Tutorial giúp cái
Game của mình là thời cổ đại nên là mình ko thích đưa thời gian chính xác vào.
Muốn hỏi cái này :
Common event có bị ảnh hưởng hay reset nếu chuyển map ko nhỉ ?
Không hẳn!
:laclac:
THAM GIA GROUP CỦA TTC TRÊN FACEBOOK
Để mình