设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1282|回复: 0
打印 上一主题 下一主题

[已经过期] 有关"大航海时代昼夜脚本"的问题

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
36 小时
注册时间
2008-7-3
帖子
10
跳转到指定楼层
1
发表于 2011-5-2 10:04:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
想问一个非常新手的问题,就是如何让时间窗口在我需要的时候打开 不需要时关闭消失??。。不然过场事件和自制标题时总是出现在左上角。。。。哪为高人可以帮我?


roger1231于2011-5-2 10:24补充以下内容:
不好意思 忘记附上脚本了:loveliness:

=begin

  大航海时代昼夜系统 v0.4
  
  作者:秀秀
  
  功能:1.地图显示时间
        2.随时间变化 产生昼夜交替 房间内不会产生变化
        3.自定义进入某地图会消耗时间
        
  用法:设置模块常量 HOUSE 为房间属性(不会产生色相变化)
  
        设置模块常量 HOUSE_TIME 为消耗时间
        比如 1=>20 代表进入ID为1的地图 消耗时间20分钟
        
        其他设置见脚本开始的其他模块常量
        基本已经注释的非常清楚了
  
   更新:v0.2
        增加了事件中判断时间         
        可用于某房间(商店)在某时间段才开放
        用法:在事件中插入条件分歧
        在第四页脚本中输入:Time_System.kind_of_time(kind) == true
        kind 是时间段种类 比如kind设置为4 就判断是否为酒吧
        具体看脚本开头的kind_of_time(kind)方法 可以自行添加修改
        
   更新:v0.3
        更新了通过事件脚本功能 Time_System.time = x
        更改时间 x 为时间
        此功能可以实现大航海时代睡觉选择 起床时间
        用法见范例或者截图
        
   更新:v0.4
        新增了一些插件(非大航海用)(菜刀灯笼王的提议)
        1. 时光倒流
        2. 疯狂时钟功能,自定义时间流速。
        3.时间闸门功能,时间流速为之前的几分之一。
        4.时间银行功能,可以把时间存起来,需要的时候提取出来,这个时候时间停止
        5.双重时间系统(精灵使者的提议)
        
        使用方法
        1.时光倒流
          HOUSE_TIME里面  时间改为负数就可以了 比如 1=> -20
        2.疯狂时钟和时间闸门
          Time_System.time_speed=(x) x就是倍数 默认为1
        3.时间银行  
          Time_System.stop_time    设置为时间停止
          Time_System.start_time   设置为时间恢复运行
        4.双重时间系统
          Time_System.change_time_world1  还原世界世界
          Time_System.change_time_world2  改变时间世界
=end     

module Time_System
  
  # 最大时间(分钟)
  MAX = 24 * 60
  
  # 初始时间
  INIT_TIME = 8 * 60
   
  # 窗口信息 x坐标 y坐标 是否在地图上显示
  X = 0
  Y = 0
  VISIBLE = false
  
  # 对应白天 黄昏 夜晚 的色调 自己设置
  DAY = Tone.new(0,0,0,0)
  EVE = Tone.new(-255,-85,68,0)
  DUSK = Tone.new(34,-17,-17,0)
  
  # 天气类型
  @@kind = -1
  
  # 真实时间
  @@time = 0
  
  # 文本
  @@text = ""
  
  # 时间流速(默认1倍速)
  @@time_speed = 1
  
  # 时间停止
  @@stop = false
  
  #保存双重时间(默认初始时间)
  @@time1 = 8 * 60
  @@time2 = 8 * 60
  @@time_world = 1
  
  #时间世界(用于双重时间系统)
  @@time_world = 1
  
  @@proc = Proc.new{ self.start }
  
  # 房间ID的数组(地图) 对应地图ID 不会改变天气色相
  HOUSE = [2,3,4,5,6]
  
  # 各个地图ID消耗时间表
  # 世界1
  HOUSE_TIME = { 1=>20,
                 2=>80,
                 3=>60,
                 4=>80,
                 5=>100,
                 6=>120,
                 }
  # 世界2
  HOUSE_TIME2 = { 1=>10,
                 2=>20,
                 3=>30,
                 4=>40,
                 5=>50,
                 6=>60,
                 }
                 
  # 这里设置几种时间段 用于某房间或者商店何时可以进入  
  def self.kind_of_time(kind)
    case kind
    when 1 #时间段1 上午8点到晚上8点
      if @@time >= 8*60 and @@time < 20*60
        return true
      end  
    when 2 #时间段2 中午12点到晚上6点
      if @@time >= 12*60 and @@time < 18*60
        return true
      end  
    when 3 #时间段3 晚上六点到晚上12点
      if @@time >= 18*60 and @@time < 24*60
        return true
      end  
    when 4#时间段4 (酒吧分2个间段 0:00-6.00 , 20:00-24:00)
      if @@time >= 0*60 and @@time < 6*60
        return true
      end  
      if @@time >= 20*60 and @@time < 24*60
        return true
      end  
    end
  end         
                 
  def self.start
    $game_system.time_window_need_refresh = true
    self.time
    self.change
  end  
                 
  def self.load
    @@time = $game_system.change_time
    @@time_speed = $game_system.time_speed
    @@stop = $game_system.stop
    @@time1 = $game_system.time1
    @@time2 = $game_system.time2
    @@time_world = $game_system.time_world
    self.init_set_text
    self.change
    $game_system.time_window_need_refresh = true
  end
  
  def self.save_time
    $game_system.change_time = @@time
    $game_system.time_speed = @@time_speed
    $game_system.stop = @@stop
    $game_system.time1 = @@time1
    $game_system.time2 = @@time2
    $game_system.time_world = @@time_world
  end
  
  def self.start_time
    @@stop = false
    return
  end
  
  def self.stop_time
    @@stop = true
    return
  end  
  
  def self.stop!
    return @@stop
  end  
   
  def self.time_speed=(speed)
    return (@@time_speed = speed)
  end
   
  def self.change_time_world1
    @@time2 = @@time #保存世界2
    @@time = @@time1
    @@time_world = 1
    return
  end  
  
  def self.change_time_world2
    @@time1 = @@time #保存世界1
    @@time = @@time2
    @@time_world = 2
    return
  end
  
  def self.init_set_text
    @@time = (@@time - MAX) if @@time >= MAX
    hour = @@time / 60
    min = @@time % 60
    @@text = sprintf("%02d:%02d", hour, min)
  end  
  
  def self.time=(time)
    @@time = time * 60
    hour = @@time / 60
    min = @@time % 60
    @@text = sprintf("%02d:%02d", hour, min)
    $game_system.time_window_need_refresh = true
  end  
   
  def self.time
    case @@time_world
     when 1
       time = HOUSE_TIME[$game_map.map_id]
     when 2
       time = HOUSE_TIME2[$game_map.map_id]
    end   
     @@time += (time.to_i * @@time_speed) unless self.stop!
     @@time = (@@time - MAX) if @@time >= MAX
     hour = @@time / 60
     min = @@time % 60
     text = sprintf("%02d:%02d", hour, min)
     case hour
       when 6..15   # 白天
         @@kind = 0
       when 16..20  # 黄昏
         @@kind = 1
       when 21..23  #夜晚
         @@kind = 2
       when 0..5    #夜晚
         @@kind = 3
     end
     @@text = text
     $game_system.time_window_need_refresh = true
  end  
   
  def self.set_text
    return @@text
  end  
   
  def self.set_time
    return @@time
  end
   
  def self.change #改变天气(色相)  
      case @@kind
        when 0
          $game_screen.start_tone_change(DAY,0)
        when 1
          $game_screen.start_tone_change(DUSK,0)
        when 2
          $game_screen.start_tone_change(EVE,0)
        when 3  
          $game_screen.start_tone_change(EVE,0)
      end
      if HOUSE.include?($game_map.map_id)
        $game_screen.start_tone_change(DAY,0)
      end  
  end
   
  def self.start_trace
    Kernel.trace_var :$game_temp.player_transferring,@@proc
  end  
  
  def self.stop_trace
    Kernel.trace_var(:$game_temp.player_transferring,nil)
  end  

end  

class Game_System
  attr_accessor :change_time
  attr_accessor :time_window_need_refresh
  attr_accessor :time_speed
  attr_accessor :stop
  attr_accessor :time1
  attr_accessor :time2
  attr_accessor :time_world
  alias ori_initialize initialize
  def initialize
    ori_initialize
    @change_time = Time_System::INIT_TIME
    @time_window_need_refresh = false
    @time_speed = 1
    @stop = false
    @time1 = 8 * 60
    @time2 = 8 * 60
    @time_world = 1
  end
end  

class Scene_Map
  #--------------------------------------------------------------------------
  # ● 主角的场所移动
  #--------------------------------------------------------------------------
  def transfer_player
    # 清除主角场所移动调试标志
    $game_temp.player_transferring = false
    # 移动目标与现在的地图有差异的情况下
    if $game_map.map_id != $game_temp.player_new_map_id
      # 设置新地图
      $game_map.setup($game_temp.player_new_map_id)
    end
   
    Time_System.start
   
    # 设置主角位置
    $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
    # 设置主角朝向
    case $game_temp.player_new_direction
    when 2  # 下
      $game_player.turn_down
    when 4  # 左
      $game_player.turn_left
    when 6  # 右
      $game_player.turn_right
    when 8  # 上
      $game_player.turn_up
    end
    # 矫正主角姿势
    $game_player.straighten
    # 刷新地图 (执行并行事件)
    $game_map.update
    # 在生成活动块
    @spriteset.dispose
    @spriteset = Spriteset_Map.new
    # 处理过渡中的情况下
    if $game_temp.transition_processing
      # 清除过渡处理中标志
      $game_temp.transition_processing = false
      # 执行过渡
      Graphics.transition(20)
    end
    # 执行地图设置的 BGM、BGS 的自动切换
    $game_map.autoplay
    # 设置画面
    Graphics.frame_reset
    # 刷新输入信息
    Input.update
  end
end

class Game_Map
  attr_reader  :map_id
end  
  
class Scene_Title
  alias ori_command_new_game command_new_game
  def command_new_game
    ori_command_new_game
    Time_System.load
   
  end
end

class Scene_Save < Scene_File
  def on_decision(filename)
    # 演奏存档 SE
    $game_system.se_play($data_system.save_se)
    Time_System.save_time
    # 写入存档数据
    file = File.open(filename, "wb")
    write_save_data(file)
    file.close
    # 如果被事件调用
    if $game_temp.save_calling
      # 清除存档调用标志
      $game_temp.save_calling = false
      # 切换到地图画面
      $scene = Scene_Map.new
      return
    end
    # 切换到菜单画面
    $scene = Scene_Menu.new(4)
  end
end

class Scene_Load < Scene_File
  def on_decision(filename)
    unless FileTest.exist?(filename)
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    $game_system.se_play($data_system.load_se)
    file = File.open(filename, "rb")
    read_save_data(file)
    file.close
    $game_system.bgm_play($game_system.playing_bgm)
    $game_system.bgs_play($game_system.playing_bgs)
    $game_map.update
    Time_System.load
    $scene = Scene_Map.new
  end
end

class Scene_Map
  alias ori_main main
  def main
    @time_window = Window_Base.new(0,0,100,64)
    @time_window.x = Time_System::X
    @time_window.y = Time_System::Y
    @time_window.opacity = 128
    @time_window.visible = Time_System::VISIBLE
    @time_window.contents = Bitmap.new(64,32)
    $game_system.time_window_need_refresh = true
    ori_main
    @time_window.dispose
  end

  alias ori_update update
  def update
    if $game_system.time_window_need_refresh
      time_window_refresh
    end
    ori_update
  end  
  
  def time_window_refresh
    @time_window.contents.clear
    @time_window.contents.draw_text(0,0,100,32,Time_System.set_text)
    $game_system.time_window_need_refresh = false
  end
end   
   
  
  
  
  
  
  


roger1231于2011-5-2 10:26补充以下内容:
我的本意是想用一个脚本事件做开关。。可以关闭或打开时间窗口。。。5555 无奈我是个脚本盲

点评

脚本或工程...  发表于 2011-5-2 10:19
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-25 22:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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