|
本帖最后由 861583152 于 2011-6-30 07:46 编辑
1.发光字体:
独立运行版(三种特效随时调用各自的方法):
#==============================================================================
# ■ Bitmap
#==============================================================================
class Bitmap
#--------------------------------------------------------------------------
# ○ 描边字
#--------------------------------------------------------------------------
def draw_edge_text(x, y, width, height, str, align = 0, color = nil)
font_backup = self.font.clone
self.font.color.set(color.red,color.green,color.blue) if color
self.font.shadow = false
# 描绘边缘
self.draw_text(x-1, y-1, width, height, str, align)
self.draw_text(x-1, y+1, width, height, str, align)
self.draw_text(x+1, y-1, width, height, str, align)
self.draw_text(x+1, y+1, width, height, str, align)
self.draw_text(x, y-1, width, height, str, align)
self.draw_text(x, y+1, width, height, str, align)
self.draw_text(x-1, y, width, height, str, align)
self.draw_text(x+1, y, width, height, str, align)
# 描绘主文字
self.font.color = font_backup.color
self.draw_text(x, y, width, height, str, align)
# 还原默认字体
self.font = font_backup
end
#--------------------------------------------------------------------------
# ○ 发光字
#--------------------------------------------------------------------------
def draw_glow_text(x, y, width, height, str, align = 0, color = nil)
buff = Bitmap.new(width, height)
buff.font = self.font.clone
buff.font.shadow = false
buff.font.color.set(color.red,color.green,color.blue) if color
# 描绘边缘
buff.draw_text(-1, -1, width, height, str, align)
buff.draw_text(-1, 1, width, height, str, align)
buff.draw_text(1, -1, width, height, str, align)
buff.draw_text(1, 1, width, height, str, align)
buff.draw_text(0, -1, width, height, str, align)
buff.draw_text(0, 1, width, height, str, align)
buff.draw_text(0-1, 0, width, height, str, align)
buff.draw_text(1, 0, width, height, str, align)
buff.blur
# 描绘主文字
buff.font.color = self.font.color
buff.draw_text(0, 0, width, height, str, align)
self.blt(x, y, buff, Rect.new(0, 0, width, height))
buff.dispose
end
#--------------------------------------------------------------------------
# ○ 多层字
#--------------------------------------------------------------------------
def draw_sedimentary_text(x, y, width, height, str, align = 0, *color)
color.unshift font.color
sheet = (font.size.to_f / color.size).ceil
buff = Bitmap.new(width, sheet)
buff.font = font.clone
max = (height - font.size)/2 > 0 ? (height - font.size)/2 : 0
min = buff.font.size < height ? buff.font.size : height
color.each_index do |i|
buff.clear
buff.font.color = color
buff.draw_text(0, -i*sheet, width, min, str, align)
blt(x, y+i*sheet+max, buff, Rect.new(0, 0, width, sheet))
break if i*sheet >= height
end
end
end
替换默认字效版(3种字效择其一):
#==============================================================================
# ■ Bitmap
#==============================================================================
class Bitmap
#--------------------------------------------------------------------------
# ○ 描边字
#--------------------------------------------------------------------------
## 默认描边颜色
Default_EdgeColor = Color.new(0,64,0)
alias global_draw_text draw_text unless method_defined?(:global_draw_text)
def draw_text(arg1, arg2, arg3=nil, arg4=nil, arg5=nil, arg6=nil, arg7=nil)
if arg1.is_a? Rect
x = arg1.x; y = arg1.y; width = arg1.width; height = arg1.height
str = arg2; align = arg3.nil? ? 0 : arg3
color = arg4.nil? ? Default_EdgeColor : arg4
else
x = arg1; y = arg2; width = arg3; height = arg4
str = arg5; align = arg6.nil? ? 0 : arg6
color = arg7.nil? ? Default_EdgeColor : arg7
end
font_backup = self.font.clone
self.font.shadow = false
## 描边色
self.font.color.set(color.red,color.green,color.blue,font_backup.color.alpha)
## 描绘边缘
self.global_draw_text(x-1, y-1, width, height, str, align)
self.global_draw_text(x-1, y+1, width, height, str, align)
self.global_draw_text(x+1, y-1, width, height, str, align)
self.global_draw_text(x+1, y+1, width, height, str, align)
self.global_draw_text(x, y-1, width, height, str, align)
self.global_draw_text(x, y+1, width, height, str, align)
self.global_draw_text(x-1, y, width, height, str, align)
self.global_draw_text(x+1, y, width, height, str, align)
## 描绘主文字
self.font.color = font_backup.color
self.global_draw_text(x, y, width, height, str, align)
## 还原默认字体
self.font = font_backup
end
end
#==============================================================================
# ■ Bitmap
#==============================================================================
class Bitmap
#--------------------------------------------------------------------------
# ○ 发光字
#--------------------------------------------------------------------------
## 默认发光颜色
Default_GlowColor = Color.new(128,0,128)
alias global_draw_text draw_text unless method_defined?(:global_draw_text)
def draw_text(arg1, arg2, arg3=nil, arg4=nil, arg5=nil, arg6=nil, arg7=nil)
if arg1.is_a? Rect
x = arg1.x; y = arg1.y; width = arg1.width; height = arg1.height
str = arg2; align = arg3.nil? ? 0 : arg3
color = arg4.nil? ? Default_GlowColor : arg4
else
x = arg1; y = arg2; width = arg3; height = arg4
str = arg5; align = arg6.nil? ? 0 : arg6
color = arg7.nil? ? Default_GlowColor : arg7
end
buff = Bitmap.new(width, height)
buff.font = self.font.clone
buff.font.shadow = false
buff.font.color.set(color.red,color.green,color.blue,buff.font.color.alpha)
## 描绘边缘
buff.global_draw_text(-1, -1, width, height, str, align)
buff.global_draw_text(-1, 1, width, height, str, align)
buff.global_draw_text(1, -1, width, height, str, align)
buff.global_draw_text(1, 1, width, height, str, align)
buff.global_draw_text(0, -1, width, height, str, align)
buff.global_draw_text(0, 1, width, height, str, align)
buff.global_draw_text(0-1, 0, width, height, str, align)
buff.global_draw_text(1, 0, width, height, str, align)
buff.blur
## 描绘主文字
buff.font.color = self.font.color
buff.global_draw_text(0, 0, width, height, str, align)
self.blt(x, y, buff, Rect.new(0, 0, width, height))
buff.dispose
end
end
#==============================================================================
# ■ Bitmap
#==============================================================================
class Bitmap
#--------------------------------------------------------------------------
# ○ 多层字
#--------------------------------------------------------------------------
## 默认第二层的颜色(第一层为当前字色)
Default_SedimentaryColor = Color.new(255,64,64)
alias global_draw_text draw_text unless method_defined?(:global_draw_text)
def draw_text(arg1, arg2, arg3=nil, arg4=nil, arg5=nil, arg6=nil, *arg7=nil)
if arg1.is_a? Rect
x = arg1.x; y = arg1.y; width = arg1.width; height = arg1.height
str = arg2; align = arg3.nil? ? 0 : arg3
color = arg4.nil? ?
[Default_SedimentaryColor] : ([arg4,arg5,arg6]+arg7).compact
else
x = arg1; y = arg2; width = arg3; height = arg4
str = arg5; align = arg6.nil? ? 0 : arg6
color = arg7.nil? ? Default_SedimentaryColor : arg7
end
## 取当前字色
color.unshift font.color
## 计算层高度
sheet = (font.size.to_f / color.size).ceil
buff = Bitmap.new(width, sheet)
buff.font = font.clone
max = (height - font.size)/2 > 0 ? (height - font.size)/2 : 0
min = buff.font.size < height ? buff.font.size : height
color.each_index do |i|
buff.clear
buff.font.color = color
buff.global_draw_text(0, -i*sheet, width, min, str, align)
blt(x, y+i*sheet+max, buff, Rect.new(0, 0, width, sheet))
break if i*sheet >= height
end
end
end
2.昼夜交替:
使用手册
◆当地图名后加上[DN_STOP]时,这个地图将不会有昼夜交替,但效果保持在进去前的天色上
◆当地图名后加上[DN_VOID]时,这个地图不单不会有昼夜交替,也会不显示进去前的天色
◆当敌方队名上加入[DN ...]时,(此处点省略的是天色的编号),就会使这个敌人在某个时段不出现,或者只有某个时段才会出现
例如 [DN 2] 就是让这个敌人只有在夜晚(3号)才会出现
而[DN -0,-3] 则是让他在白天(0号)和早晨(3号)不会出现
◆可以变更每个时段的天色,具体请在脚本开头寻找
PHASE = [
["白日", Tone.new( 0, 0, 0), 300], # 天色阶段 0
["傍晚", Tone.new( -32, -96, -96), 100], # 天色阶段 1
["夜晚", Tone.new(-128, -128, -32), 250], # 天色阶段 2
["早晨", Tone.new( -48, -48, -16), 100], # 天色阶段 3
会自动从第一个编号0开始循环
这里括号中的内容为色调,后面的数字在根据时间经过变更天色时为到下个时段所需要用的时间,步数计算时为到下个时段所需要用的步数
◆本脚本默认为事件进行中不变更天色
如果有需要变更时,请用事件,脚本 调用change_daynight_phase 即可
◆关于事件中脚本可以控制的部分
◇stop_daynight 停止昼夜交替
◇start_daynight 开启昼夜交替(游戏开始
时自动开启)
◇get_daynight_name 获取现在时段名
◇get_daynight_week(variable_id)
现在的日期从variable_id所设置的变量中获取日期(星期日数)是从0~6的整数值,使用显示时间时,会获取显示中的日期
例如
get_daynight_week(21) 是从21号变量中获取现在的日期
◇get_daynight_week_name 获取现在的日期名
◇change_daynight_phase(phase[, duration[, pass_days]])
切换时段
phase处为切换到的时段编号
duration处为切换时段所用的时间(最小值为1),省略时会自动采用指导项目中默认的(默认的为60=1秒)
pass_days处为切换后经过的日期数,省略时日期将不会改变
例如
change_daynight_phase(2)
为使天色变为夜晚(2号)
change_daynight_phase(0, 1)
为一瞬间使天色变为早晨(0号)
change_daynight_phase(3, 1, 1)
为一瞬间使天色变为早晨并且使日期经过1
◇transit_daynight_phase(duration)
变换到下一个天色阶段(括号中duration是变换时所用的时间)
◇set_daynight_default(duration)
将色调还原到初期状态(括号中duration是变换时所用的时间)
◇restore_daynight_phase(duration)
将画面的色调返回到现在的时段(括号中duration是变换时所用的时间)
脚本:
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆ 昼夜交替 - KGC_DayNight ◆ VX ◆
#_/ ◇ Last update : 2008/03/08 ◇
#_/ 汉化 by 约束
#_/
#_/----------------------------------------------------------------------------
#_/ 在游戏中加入了昼夜交替。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#==============================================================================
# ★ 指导项目 - Customize ★
#==============================================================================
module KGC
module DayNight
# ◆ 昼夜切换方式
# 0..根据时间的经过 1..根据行走步数 2..根据现实时间(微妙)
METHOD = 1
# ◆ 保存天色阶段的变量号码
# 在这里被设定的变量中、存入现在的天色阶段。
PHASE_VARIABLE = 11
# ◆ 保存日期的变量号码
# 在这里被设定的变量中、存入经过日数的阶段。
PASS_DAYS_VARIABLE = 12
# ◆ 在事件中不变更天色阶段
STOP_ON_EVENT = true
# ◆ 在战斗中、只有背景使用当前色调
# 改成 false 时、夜晚时会变的不合常理。
TONE_BACK_ONLY_IN_BATTLE = true
# ◆ 各个天色阶段的设置
# 将各个天色阶段
# ["名称", 色调(Tone), 切换时间],
# 像如上设置。
# 可以增加天色阶段、但是在不习惯时不推荐增加。
#
# [名称]
# 天色阶段的名字。
# 名字自身没有意义。
# [色调]
# 画面全体的颜色。
# 并不是很明白时请不要轻易变更。
# [切换时间]
# 到下个天色阶段的间隔时间。
# 切换方式是 使用时间经过方式为秒、步数方式为步数。
# 现实时间方式时、到下个状态切换的时刻 (24小时方式)。
PHASE = [
["白日", Tone.new( 0, 0, 0), 300], # 天色阶段 0
["傍晚", Tone.new( -32, -96, -96), 100], # 天色阶段 1
["夜晚", Tone.new(-128, -128, -32), 250], # 天色阶段 2
["早晨", Tone.new( -48, -48, -16), 100], # 天色阶段 3
] # ← 这里不要消去!
# 现实时间时、
# ["白日", Tone.new( 0, 0, 0), 16], # 天色阶段 0 (现实为16点时傍晚)
# ["傍晚", Tone.new( 0, -96, -96), 20], # 天色阶段 1 (现实为20点时夜晚)
# ["夜晚", Tone.new(-96, -96, -64), 6], # 天色阶段 2 (现实为6点时早上)
# ["早晨", Tone.new(-48, -48, -16), 10], # 天色阶段 3 (现实为10点时白日)
# 像这样的。
# ◆ 变换日期的天色阶段
# 到了这里设定过的天色阶段时、日数增加。
# 初期状况 0..白日 1..傍晚 2..夜晚 3..早上
# ※ 现实时间时、并不能与现实使用相同日数,请注意。
PASS_DAY_PHASE = 3
# ◆ 切换状态是的天色阶段时间 (画面)
# 省略时也会使用这个数值。
PHASE_DURATION = 60
# ◆ 日期名
# 从最初开始、到最后一个日期然后再从第一个循环开始。
# 日期名自身没有任何意义。
# ※ 使用现实时间时 请设置为7个日期。
WEEK_NAME = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$imported = {} if $imported == nil
$imported["DayNight"] = true
if $data_mapinfos == nil
$data_mapinfos = load_data("Data/MapInfos.rvdata")
end
module KGC::DayNight
METHOD_TIME = 0 # 时间经过
METHOD_STEP = 1 # 步数
METHOD_RTIME = 2 # 现实时间
# 正规表现
module Regexp
# 地图情报
module MapInfo
# 停止变换
DAYNIGHT_STOP = /\[DN_STOP\]/i
# 使昼夜系统无效
DAYNIGHT_VOID = /\[DN_VOID\]/i
end
# 敌人队伍
module Troop
# 出现天色阶段
APPEAR_PHASE = /\[DN((?:[ ]*[\-]?\d+(?:[ ]*,)?)+)\]/i
end
end
#--------------------------------------------------------------------------
# ○ 确认敌人队伍的出现
# troop : 确认对象的敌人队伍
# phase : 确认天色阶段
#--------------------------------------------------------------------------
def self.troop_appear?(troop, phase = $game_system.daynight_phase)
# 确认出现
unless troop.appear_daynight_phase.empty?
return false unless troop.appear_daynight_phase.include?(phase)
end
# 确认没出现
unless troop.nonappear_daynight_phase.empty?
return false if troop.nonappear_daynight_phase.include?(phase)
end
return true
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ KGC::Commands
#==============================================================================
module KGC
module Commands
module_function
#--------------------------------------------------------------------------
# ○ 停止昼夜切换
#--------------------------------------------------------------------------
def stop_daynight
$game_system.daynight_change_enabled = false
end
#--------------------------------------------------------------------------
# ○ 启动昼夜却换
#--------------------------------------------------------------------------
def start_daynight
$game_system.daynight_change_enabled = true
end
#--------------------------------------------------------------------------
# ○ 获取现在的天色阶段名
#--------------------------------------------------------------------------
def get_daynight_name
return KGC::DayNight::PHASE[get_daynight_phase][0]
end
#--------------------------------------------------------------------------
# ○ 获取现在的日期名
# variable_id : 代入变量 ID
#--------------------------------------------------------------------------
def get_daynight_week(variable_id = 0)
if KGC::DayNight::METHOD == KGC::DayNight::METHOD_RTIME
week = Time.now.wday
else
days = $game_variables[KGC::DayNight::PASS_DAYS_VARIABLE]
week = (days % KGC::DayNight::WEEK_NAME.size)
end
if variable_id > 0
$game_variables[variable_id] = week
end
return week
end
#--------------------------------------------------------------------------
# ○获取现在的日期名
#--------------------------------------------------------------------------
def get_daynight_week_name
return KGC::DayNight::WEEK_NAME[get_daynight_week]
end
#--------------------------------------------------------------------------
# ○ 天色阶段的切换
# phase : 切换后的天色阶段
# duration : 切换时间(画面)
# pass_days : 经过日数 (省略时: 0)
#--------------------------------------------------------------------------
def change_daynight_phase(phase,
duration = KGC::DayNight::PHASE_DURATION,
pass_days = 0)
$game_temp.manual_daynight_duration = duration
$game_system.daynight_counter = 0
$game_system.daynight_phase = phase
$game_variables[KGC::DayNight::PASS_DAYS_VARIABLE] += pass_days
$game_map.need_refresh = true
end
#--------------------------------------------------------------------------
# ○ 转移到下一个天色阶段
# duration : 切换时间(画面)
#--------------------------------------------------------------------------
def transit_daynight_phase(duration = KGC::DayNight::PHASE_DURATION)
$game_screen.transit_daynight_phase(duration)
$game_map.need_refresh = true
end
#--------------------------------------------------------------------------
# ○ 返回到默认的色调
# duration : 切换时间(画面)
#--------------------------------------------------------------------------
def set_daynight_default(duration = KGC::DayNight::PHASE_DURATION)
$game_screen.set_daynight_default(duration)
$game_map.need_refresh = true
end
#--------------------------------------------------------------------------
# ○ 还原现在的天色阶段
# duration : 切换时间(画面)
#--------------------------------------------------------------------------
def restore_daynight_phase(duration = KGC::DayNight::PHASE_DURATION)
$game_screen.restore_daynight_phase(duration)
$game_map.need_refresh = true
end
end
end
class Game_Interpreter
include KGC::Commands
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::MapInfo
#==============================================================================
class RPG::MapInfo
#--------------------------------------------------------------------------
# ● 获取地图名
#--------------------------------------------------------------------------
def name
return @name.gsub(/\[.*\]/) { "" }
end
#--------------------------------------------------------------------------
# ○ 获取自制地图名
#--------------------------------------------------------------------------
def original_name
return @name
end
#--------------------------------------------------------------------------
# ○ 停止昼夜交替
#--------------------------------------------------------------------------
def daynight_stop
return @name =~ KGC::DayNight::Regexp::MapInfo::DAYNIGHT_STOP
end
#--------------------------------------------------------------------------
# ○ 使昼夜效果无效
#--------------------------------------------------------------------------
def daynight_void
return @name =~ KGC::DayNight::Regexp::MapInfo::DAYNIGHT_VOID
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Area
#==============================================================================
unless $@
class RPG::Area
#--------------------------------------------------------------------------
# ○ 获取遇敌
#--------------------------------------------------------------------------
alias encounter_list_KGC_DayNight encounter_list
def encounter_list
list = encounter_list_KGC_DayNight.clone
# 确认出现条件
list.each_index { |i|
list = nil unless KGC::DayNight.troop_appear?($data_troops)
}
return list.compact
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Troop
#==============================================================================
class RPG::Troop
#--------------------------------------------------------------------------
# ○ 作成昼夜交替的存储
#--------------------------------------------------------------------------
def create_daynight_cache
@__appear_daynight_phase = []
@__nonappear_daynight_phase = []
# 出现的天色阶段
if @name =~ KGC::DayNight::Regexp::Troop::APPEAR_PHASE
$1.scan(/[\-]?\d+/).each { |num|
phase = num.to_i
if phase < 0
# 不出现
@__nonappear_daynight_phase << phase.abs
else
# 出现
@__appear_daynight_phase << phase
end
}
end
end
#--------------------------------------------------------------------------
# ○ 出现的天色阶段
#--------------------------------------------------------------------------
def appear_daynight_phase
create_daynight_cache if @__appear_daynight_phase == nil
return @__appear_daynight_phase
end
#--------------------------------------------------------------------------
# ○ 不出现的天色阶段
#--------------------------------------------------------------------------
def nonappear_daynight_phase
create_daynight_cache if @__nonappear_daynight_phase == nil
return @__nonappear_daynight_phase
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :manual_daynight_duration # 手动改变天色阶段的标志
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
alias initialize_KGC_DayNight initialize
def initialize
initialize_KGC_DayNight
@manual_daynight_duration = nil
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_writer :daynight_counter # 天色阶段转换的计数器
attr_writer :daynight_change_enabled # 使昼夜交替有效
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
alias initialize_KGC_DayNight initialize
def initialize
initialize_KGC_DayNight
@daynight_counter = 0
@daynight_change_enabled = true
end
#--------------------------------------------------------------------------
# ○ 获取天色阶段转换的计数器
#--------------------------------------------------------------------------
def daynight_counter
@daynight_counter = 0 if @daynight_counter == nil
return @daynight_counter
end
#--------------------------------------------------------------------------
# ○ 获取现在的天色阶段
#--------------------------------------------------------------------------
def daynight_phase
return $game_variables[KGC::DayNight::PHASE_VARIABLE]
end
#--------------------------------------------------------------------------
# ○ 变换现在的天色阶段
#--------------------------------------------------------------------------
def daynight_phase=(value)
$game_variables[KGC::DayNight::PHASE_VARIABLE] = value
end
#--------------------------------------------------------------------------
# ○ 获取使昼夜交替有效的标志
#--------------------------------------------------------------------------
def daynight_change_enabled
@daynight_change_enabled = 0 if @daynight_change_enabled == nil
return @daynight_change_enabled
end
#--------------------------------------------------------------------------
# ○ 进行天色阶段
#--------------------------------------------------------------------------
def progress_daynight_phase
self.daynight_phase += 1
if self.daynight_phase >= KGC::DayNight::PHASE.size
self.daynight_phase = 0
end
$game_map.need_refresh = true
end
#--------------------------------------------------------------------------
# ○ 获取现在的天色阶段对象
#--------------------------------------------------------------------------
def daynight_phase_object
return KGC::DayNight::PHASE[daynight_phase]
end
#--------------------------------------------------------------------------
# ○ 获取以前的天色阶段对象
#--------------------------------------------------------------------------
def previous_daynight_phase_object
return KGC::DayNight::PHASE[daynight_phase - 1]
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Screen
#==============================================================================
class Game_Screen
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_reader :daynight_tone # 昼夜的色调
#--------------------------------------------------------------------------
# ● 清除
#--------------------------------------------------------------------------
alias clear_KGC_DayNight clear
def clear
clear_KGC_DayNight
clear_daynight
end
#--------------------------------------------------------------------------
# ○ 清除昼夜交替的变量
#--------------------------------------------------------------------------
def clear_daynight
@default_tone = Tone.new(0, 0, 0)
# 初期化用于确认移动的坐标
@daynight_x = 0
@daynight_y = 0
# 初期化用于更新天色阶段的计数器
@frame_count = Graphics.frame_count
@daynight_tone_duration = 0
apply_daynight
end
#--------------------------------------------------------------------------
# ○ 使用昼夜的色调
#--------------------------------------------------------------------------
def apply_daynight
return if $game_map == nil
# 切换成无效的地图时
if $game_map.daynight_void?
if @daynight_tone_changed
# 返回到处起的色调
@tone = @default_tone.clone
@daynight_tone_changed = false
end
@daynight_tone = @tone.clone
return
end
# 天色阶段奇怪时修复它
if $game_system.daynight_phase_object == nil
$game_system.daynight_phase = 0
end
# 使用现在的色调
@tone = $game_system.daynight_phase_object[1].clone
@daynight_tone = @tone.clone
# 现实时间经过时
if KGC::DayNight::METHOD == KGC::DayNight::METHOD_RTIME
time = Time.now
# 变换到调和的天色阶段
KGC::DayNight::PHASE.each_with_index { |phase, i|
if phase[2] <= time.hour
start_tone_change(phase[1], 1)
$game_system.daynight_phase = i
break
end
}
end
@daynight_tone_changed = true
end
#--------------------------------------------------------------------------
# ○ 色调的获取
#--------------------------------------------------------------------------
def tone
if $game_temp.in_battle && KGC::DayNight::TONE_BACK_ONLY_IN_BATTLE
return @default_tone
else
return @tone
end
end
#--------------------------------------------------------------------------
# ● 色调更改的开始
# tone : 色调
# duration : 时间
#--------------------------------------------------------------------------
alias start_tone_change_KGC_DayNight start_tone_change
def start_tone_change(tone, duration)
duration = [duration, 1].max
start_tone_change_KGC_DayNight(tone, duration)
@daynight_tone_target = tone.clone
@daynight_tone_duration = duration
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
alias update_KGC_DayNight update
def update
update_KGC_DayNight
update_daynight_transit
end
#--------------------------------------------------------------------------
# ● 色调的更新
#--------------------------------------------------------------------------
alias update_tone_KGC_DayNight update_tone
def update_tone
update_tone_KGC_DayNight
if @daynight_tone_duration >= 1
d = @daynight_tone_duration
target = @daynight_tone_target
@daynight_tone.red = (@daynight_tone.red * (d - 1) + target.red) / d
@daynight_tone.green = (@daynight_tone.green * (d - 1) + target.green) / d
@daynight_tone.blue = (@daynight_tone.blue * (d - 1) + target.blue) / d
@daynight_tone.gray = (@daynight_tone.gray * (d - 1) + target.gray) / d
@daynight_tone_duration -= 1
end
end
#--------------------------------------------------------------------------
# ○ 天色阶段变换的更新
#--------------------------------------------------------------------------
def update_daynight_transit
# 不能手动切换时
if $game_temp.manual_daynight_duration
start_tone_change($game_system.daynight_phase_object[1],
$game_temp.manual_daynight_duration)
$game_temp.manual_daynight_duration = nil
@daynight_tone_changed = true
end
return unless $game_system.daynight_change_enabled # 将切换
return if $game_map.daynight_stop? # 停止
if KGC::DayNight::STOP_ON_EVENT
interpreter = ($game_temp.in_battle ? $game_troop.interpreter :
$game_map.interpreter)
return if interpreter.running? # 事件进行中
end
case KGC::DayNight::METHOD
when KGC::DayNight::METHOD_TIME # 时间
update_daynight_pass_time
when KGC::DayNight::METHOD_STEP # 步数
update_daynight_step
when KGC::DayNight::METHOD_RTIME # 现实时间
update_daynight_real_time
end
end
#--------------------------------------------------------------------------
# ○ 转换 : 时间切换
#--------------------------------------------------------------------------
def update_daynight_pass_time
# 计算出计算器的增加量
inc_count = Graphics.frame_count - @frame_count
# 加算量很奇怪时,取消
if inc_count >= 100
@frame_count = Graphics.frame_count
return
end
# 计算器的加算
$game_system.daynight_counter += inc_count
@frame_count = Graphics.frame_count
# 确认状态转换
count = $game_system.daynight_counter / Graphics.frame_rate
if count >= $game_system.daynight_phase_object[2]
transit_daynight_next
end
end
#--------------------------------------------------------------------------
# ○ 转换 : 步数
#--------------------------------------------------------------------------
def update_daynight_step
# 没有移动时 取消
return if @daynight_x == $game_player.x && @daynight_y == $game_player.y
@daynight_x = $game_player.x
@daynight_y = $game_player.y
# 计算器的加算
$game_system.daynight_counter += 1
# 确认状态转换
count = $game_system.daynight_counter
if count >= $game_system.daynight_phase_object[2]
transit_daynight_next
end
end
#--------------------------------------------------------------------------
# ○ 转换 : 现实时间
#--------------------------------------------------------------------------
def update_daynight_real_time
time = Time.now
# 确认状态的转换
time1 = $game_system.daynight_phase_object[2]
transit = (time1 <= time.hour)
if $game_system.previous_daynight_phase_object != nil
time2 = $game_system.previous_daynight_phase_object[2]
if time1 < time2
transit &= (time.hour < time2)
end
end
if transit
transit_daynight_next
end
end
#--------------------------------------------------------------------------
# ○ 转换到下一个状态
# duration : 转换时间
#--------------------------------------------------------------------------
def transit_daynight_next(duration = KGC::DayNight::PHASE_DURATION)
$game_system.daynight_counter = 0
$game_system.progress_daynight_phase
# 确认日数的经过
if $game_system.daynight_phase == KGC::DayNight::PASS_DAY_PHASE
$game_variables[KGC::DayNight::PASS_DAYS_VARIABLE] += 1
end
# 色调的切换
start_tone_change($game_system.daynight_phase_object[1], duration)
@daynight_tone_changed = true
end
#--------------------------------------------------------------------------
# ○ 还原到画面的状态(0, 0, 0)
# duration : 转换时间
#--------------------------------------------------------------------------
def set_daynight_default(duration)
start_tone_change(@default_tone, duration)
end
#--------------------------------------------------------------------------
# ○ 复原现在的天色阶段
# duration : 转换时间
#--------------------------------------------------------------------------
def restore_daynight_phase(duration)
start_tone_change($game_system.daynight_phase_object[1], duration)
@daynight_tone_changed = true
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● 组合地图
# map_id : 地图 ID
#--------------------------------------------------------------------------
alias setup_KGC_DayNight setup
def setup(map_id)
setup_KGC_DayNight(map_id)
@screen.apply_daynight
end
#--------------------------------------------------------------------------
# ○ 是否停止昼夜交替
#--------------------------------------------------------------------------
def daynight_stop?
info = $data_mapinfos[map_id]
return false if info == nil
return (info.daynight_stop || info.daynight_void)
end
#--------------------------------------------------------------------------
# ○ 是否让昼夜交替无效
#--------------------------------------------------------------------------
def daynight_void?
info = $data_mapinfos[map_id]
return false if info == nil
return info.daynight_void
end
#--------------------------------------------------------------------------
# ● 遇敌的获取
#--------------------------------------------------------------------------
alias encounter_list_KGC_DayNight encounter_list
def encounter_list
list = encounter_list_KGC_DayNight.clone
# 确认出现条件
list.each_index { |i|
list = nil unless KGC::DayNight.troop_appear?($data_troops)
}
return list.compact
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
if KGC::DayNight::TONE_BACK_ONLY_IN_BATTLE
class Spriteset_Battle
#--------------------------------------------------------------------------
# ● 袭击的精灵的作成
#--------------------------------------------------------------------------
alias create_battleback_KGC_DayNight create_battleback
def create_battleback
create_battleback_KGC_DayNight
if @battleback_sprite.wave_amp == 0
@battleback_sprite.tone = $game_troop.screen.daynight_tone
end
end
#--------------------------------------------------------------------------
# ● 战斗层精灵的作成
#--------------------------------------------------------------------------
alias create_battlefloor_KGC_DayNight create_battlefloor
def create_battlefloor
create_battlefloor_KGC_DayNight
@battlefloor_sprite.tone = $game_troop.screen.daynight_tone
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ● 开始处理
#--------------------------------------------------------------------------
alias start_KGC_DayNight start
def start
$game_map.screen.clear_daynight
start_KGC_DayNight
end
end
我承认不是我写的,转载自66RPG?貌似是要这么说的。事实上是11区的人写好他们翻译而来也说不定...总之这种东西还是共享好啊!
|
|