H5游戏论坛

 找回密码
 入驻H5
查看: 1885|回复: 11

[其它] 额...真冷清...就发个脚本吧...VX美化用的...

[复制链接]

老湿 - 老湿

发表于 2011-6-29 21:28:31 | 显示全部楼层 |阅读模式
本帖最后由 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区的人写好他们翻译而来也说不定...总之这种东西还是共享好啊!

有爱就有H5~

老湿 - 老湿

 楼主| 发表于 2011-6-29 21:30:37 | 显示全部楼层
额....变成表情了???嘛,如果有人要的话,我再上传附件好了......话说为什么没有“脚本”这种类型的帖子。
有爱就有H5~
回复 支持 反对

使用道具 举报

老湿 - 老湿大湿 - 大湿

发表于 2011-6-29 21:55:53 | 显示全部楼层
2个脚本 发的时候最好分开发 还有注明下是那个制作软件的脚本 谢谢合作
有爱就有H5~
回复 支持 反对

使用道具 举报

老湿 - 老湿

 楼主| 发表于 2011-6-30 07:48:12 | 显示全部楼层
已经修改过了......
有爱就有H5~
回复 支持 反对

使用道具 举报

大湿 - 大湿

发表于 2011-6-30 10:07:19 | 显示全部楼层
.........看那个天气那个 看的我头大 外行就是外行啊 有说明也不懂 悲催啊
有爱就有H5~
回复 支持 反对

使用道具 举报

老湿 - 老湿大湿 - 大湿

发表于 2011-7-1 21:01:29 | 显示全部楼层
回复 瑷萝 的帖子

还好吧 这不是有说明手册么
挺简单的啊
使用手册

◆当地图名后加上[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是变换时所用的时间)
有爱就有H5~
回复 支持 反对

使用道具 举报

大湿 - 大湿

发表于 2011-7-10 05:29:11 | 显示全部楼层
什么都不懂的表示压力很大啊,我学
有爱就有H5~
回复 支持 反对

使用道具 举报

Lv.3 - 老鸟

发表于 2013-5-1 13:49:10 | 显示全部楼层
研究研究
有爱就有H5~
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2013-7-26 20:40:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
有爱就有H5~
回复 支持 反对

使用道具 举报

发表于 2014-11-20 10:57:25 | 显示全部楼层
表示看不懂。。。。
有爱就有H5~
回复 支持 反对

使用道具 举报

Lv.2 - 菜鸟

发表于 2014-12-26 17:22:13 | 显示全部楼层
支持一下
有爱就有H5~
回复 支持 反对

使用道具 举报

大虾 - 大虾

发表于 2014-12-28 20:33:52 | 显示全部楼层
新人表示感谢  VA能用吗
有爱就有H5~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 入驻H5

本版积分规则

Archiver|手机版|小黑屋|免责声明|H5Gal游戏论坛 |网站地图|网站地图

GMT+8, 2025-5-11 12:45 , Processed in 0.030463 second(s), 13 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表