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

Project1

 找回密码
 注册会员
搜索
Project1 查看内容

日期,天气,昼夜系统(养成游戏可用)

2006-4-7 00:00| 发布者: 柳柳| 查看: 7606| 评论: 0|原作者: 66RPG

摘要:    作者 灼眼的夏娜  版本与更新  2006年3月  相关网址 点此进发布贴  范例工程 脚本功能 养成游戏中可用的一些系统:日期,天气,昼夜系统 使用方法 复
 

 作者

灼眼的夏娜

 版本与更新

 2006年3月

 相关网址

点此进发布贴

 范例工程



脚本功能

养成游戏中可用的一些系统:日期,天气,昼夜系统

使用方法

复制全部脚本内容,在Main脚本之前按insert,插入此脚本全部内容。

=begin
 日期、天气、昼夜系统
 by 灼眼的夏娜
 
 使用:直接复制在main前粘贴
 
 关于:1、日期窗口的开关:直接在事件的脚本的输入 cdw 即关闭;
                         输入 odw 即可打开。
       2、在 module Date 模块中的 RATE 可以设置 时间折换比率;
       3、在 Game_Map 处进行初始化。某日、某月、等;
       4、在 Game_Temp 处可以定义各时刻的色调,并注意
          module Date 模块下 Date.change_screen_tone 方法的稍微修改。
           
 说明:主要用于养成等游戏。
=end

相关截图

 


 

 脚本内容

#==============================================================================
# ■ Date模块
#------------------------------------------------------------------------------
#  时间日期系统模块
#==============================================================================
module Date
 #============================================================================
 # ● 常量设定
 #============================================================================
 
 RATE = Graphics.frame_rate#(可自行设置次值,但不能大于Graphics.frame_rate值)
 
 #============================================================================
 # ■ 1、更新画面色调
 #============================================================================
 def Date.change_screen_tone
   case $game_map.date_season
   when 1
     if $game_map.date_hour <= 7
       $game_screen.start_tone_change($bright_cq7, 420*Date::RATE)
     elsif $game_map.date_hour > 7 && $game_map.date_hour <= 12
       $game_screen.start_tone_change($bright_cq12, 300*Date::RATE)
     elsif $game_map.date_hour > 12 && $game_map.date_hour <= 19
       $game_screen.start_tone_change($bright_cq7, 420*Date::RATE)
     else
       $game_screen.start_tone_change($bright_cq0, 300*Date::RATE)
     end
   when 2
     if $game_map.date_hour <= 6
        $game_screen.start_tone_change($bright_x6, 360*Date::RATE)
     elsif $game_map.date_hour > 6 && $game_map.date_hour <=14
        $game_screen.start_tone_change($bright_x14, 480*Date::RATE)
     elsif $game_map.date_hour > 14 && $game_map.date_hour <=19
        $game_screen.start_tone_change($bright_x19, 300*Date::RATE)
     elsif $game_map.date_hour > 19 && $game_map.date_hour <=21
        $game_screen.start_tone_change($bright_x21, 120*Date::RATE)
     else
        $game_screen.start_tone_change($bright_x0, 180*Date::RATE)
     end
   when 3
     if $game_map.date_hour <= 7
       $game_screen.start_tone_change($bright_cq7, 420*Date::RATE)
     elsif $game_map.date_hour > 7 && $game_map.date_hour <= 12
       $game_screen.start_tone_change($bright_cq12, 300*Date::RATE)
     elsif $game_map.date_hour > 12 && $game_map.date_hour <= 19
       $game_screen.start_tone_change($bright_cq7, 420*Date::RATE)
     else
       $game_screen.start_tone_change($bright_cq0, 300*Date::RATE)
     end
   when 4
     if $game_map.date_hour <= 8
        $game_screen.start_tone_change($bright_d8, 480*Date::RATE)
     elsif $game_map.date_hour > 8 && $game_map.date_hour <=12
        $game_screen.start_tone_change($bright_d12, 240*Date::RATE)
     elsif $game_map.date_hour > 12 && $game_map.date_hour <=18
        $game_screen.start_tone_change($bright_d18, 360*Date::RATE)
     else
        $game_screen.start_tone_change($bright_d0, 360*Date::RATE)
     end
   end
 end
 #============================================================================
 # ■ 2、时间系统的运作
 #============================================================================
 def Date.run_date_system
   if Graphics.frame_count%Date::RATE == 0
     $game_map.date_minute += 1
   end
   if $game_map.date_minute >= 60
     $game_map.date_minute = 0
     $game_map.date_hour += 1
   end
   if $game_map.date_hour >= 24
     $game_map.date_hour = 0
     $game_map.date_day += 1
     $game_map.date_week += 1
   end
   if $game_map.date_week >= 8
     $game_map.date_week = 1
   end
   if $game_map.date_day > $game_map.every_month_days[$game_map.date_season-1]
     $game_map.date_day = 1
     $game_map.date_season += 1
   end
   if $game_map.date_season >= 5
     $game_map.date_season = 1
   end
 end
 #============================================================================
 # ■ 3、各种天气系统
 #============================================================================
 def Date.rand_weather_type
   if $game_map.date_season == 1  
     Date.judge_weather1(12,15,50)
     if $game_map.date_day<=10
       Date.judge_weather2(15,15,20)
     end
   elsif $game_map.date_season == 2
     Date.judge_weather1(10,30,60)
     Date.judge_weather2(10,25,0)
   elsif $game_map.date_season == 3
     Date.judge_weather1(12,15,50)
     if $game_map.date_day>=20
       Date.judge_weather2(15,15,20)
     end
   elsif $game_map.date_season == 4
     Date.judge_weather1(8,8,20)
     Date.judge_weather2(10,25,40)
   end
 end
 # 雨
 def Date.judge_weather1(wait,pp,rate=30)
   # 等待时间为零,清楚天气效果
   if $game_map.waittime[0] == 0
     $game_map.weather1[1] = 0
     $game_map.weather1[0] = false
     $game_system.bgs_restore
   elsif $game_map.waittime[0]<=5
     $game_system.bgs_fade(Integer(5*Date::RATE/Graphics.frame_rate))
   end
   # 等待时间不为零,则递减
   if $game_map.waittime[0] > 0
     if Graphics.frame_count%Date::RATE == 0
       $game_map.waittime[0] -= 1
     end
     return
   end
   # 天气判断
   if $game_map.weather1[0] == false
     $game_map.waittime[0] = (wait+rand(wait))*60
     if rand(100)       $game_system.bgs_memorize
       Audio.bgs_fade(1)
       if pp>=30
         name = "007-Rain03"
         volume = 80
       else
         name = "005-Rain01"
         volume = 60
       end
       Audio.bgs_play("Audio/BGS/" + name, volume, 50)
       $game_map.weather1[0] = true
       $game_map.weather1[1] = 1
       $game_map.weather1[2] = pp + rand(40-pp)
       return
     end
     $game_map.waittime[0] *= (100-rate)
     $game_map.waittime[0] = Integer($game_map.waittime[0]/100)
   end
 end
 # 雪
 def Date.judge_weather2(wait,pp,rate=30)
   # 等待时间为零,清楚天气效果
   if $game_map.waittime[1] == 0
     $game_map.weather2[1] = 0
     $game_map.weather2[0] = false
   end
   # 等待时间不为零,则递减
   if $game_map.waittime[1] > 0
     if Graphics.frame_count%Date::RATE == 0
       $game_map.waittime[1] -= 1
     end
     return
   end
   # 天气判断
   if $game_map.weather2[0] == false
     $game_map.waittime[1] = (wait+rand(wait))*60
     if rand(100)       $game_map.weather2[0] = true
       $game_map.weather2[1] = 3
       $game_map.weather2[2] = pp + rand(40-pp)
       return
     end
     $game_map.waittime[1] *= (100-rate)
     $game_map.waittime[1] = Integer($game_map.waittime[1]/100)
   end
 end 
end

class Spriteset_Map
 # 初始化第二天气效果
 alias initialize_old initialize
 def initialize
   initialize_old
   @weather1 = RPG::Weather.new(Viewport.new(0, 0, 640, 480))
   @weather2 = RPG::Weather.new(Viewport.new(0, 0, 640, 480))
   update
 end
 # 释放第二天气效果
 alias dispose_old dispose
 def dispose
   if @weahter1 != nil
     @weather1.dispose
   end
   if @weahter2 != nil
     @weather2.dispose
   end
   dispose_old
 end
 # 更新第二天气效果
 alias update_old update
 def update
   if @weather1 != nil
     @weather1.type = $game_map.weather1[1]
     @weather1.max = $game_map.weather1[2]
     @weather1.update
   end
   if @weather2 != nil
     @weather2.type = $game_map.weather2[1]
     @weather2.max = $game_map.weather2[2]
     @weather2.update
   end
   update_old
 end
end

class Interpreter
 def odw
   $game_map.date_system_window_on_or_off = true
   return
 end
 def cdw
   $game_map.date_system_window_on_or_off = false
   return
 end
end
#==============================================================================
# ■ Window_TimeDate
#------------------------------------------------------------------------------
#  时间日期系统窗口
#==============================================================================

class Window_TimeDate < Window_Base
 #--------------------------------------------------------------------------
 # ● 初始化对像
 #--------------------------------------------------------------------------
 def initialize
   super(0, 0, 228, 86)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.opacity = 0
   refresh
 end
 #--------------------------------------------------------------------------
 # ● 刷新
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   @fen_timedate = $game_map.date_minute  # 此变量用于刷新 画面
   # 描绘 季节
   if $game_map.date_season == 2
     seasoncolor = Color.new(250,80,5)
     wordj = "夏"
   elsif $game_map.date_season == 4
     seasoncolor = Color.new(150,170,250)
     wordj = "冬"
   elsif $game_map.date_season == 1
     seasoncolor = Color.new(5,255,50)
     wordj = "春"
   else
     seasoncolor = Color.new(228,208,38)
     wordj = "秋"
   end
   self.contents.font.size = 52
   self.contents.font.name = ["楷体_GB2312","黑体"]
   self.contents.font.color = seasoncolor
   self.contents.draw_text(0, 0, 52, 52, wordj)
   # 描绘 号数
   self.contents.font.size = 42    
   self.contents.font.name = ["楷体_GB2312","黑体"]
   self.contents.draw_text(56,10, 84, 42,$game_map.date_day.to_s)
   # 描绘 星期
   case $game_map.date_week
   when 1
     self.contents.font.color = Color.new(170,170,170,255)
     wordx = "月"
   when 2
     self.contents.font.color = Color.new(50,100,240,255)
     wordx = "火"
   when 3
     self.contents.font.color = Color.new(227,59,13,255)
     wordx = "水"
   when 4
     self.contents.font.color = Color.new(74,4,4,255)
     wordx = "木"
   when 5
     self.contents.font.color = Color.new(228,231,10,255)
     wordx = "金"
   when 6
     self.contents.font.color = Color.new(155,50,36,255)
     wordx = "土"
   when 7
     self.contents.font.color = Color.new(55,244,246,255)
     wordx = "日"
   end
   self.contents.font.size = 24
   self.contents.font.name = ["楷体_GB2312","黑体"]
   self.contents.draw_text(112, 22, 128, 32, wordx)
   self.contents.font.color = Color.new(0,0,0,255)
   self.contents.draw_text(112+24, 22, 128, 32, "曜日")
    
   self.contents.font.size = 24
   self.contents.font.color = Color.new(0,0,0,255)
   # 描绘 时间
   tt = sprintf("%2d点%2d分", $game_map.date_hour,$game_map.date_minute)
   self.contents.draw_text(100, 0, 128, 32, tt)
 end

 def update
   super
   # 刷新窗口
   if @fen_timedate != $game_map.date_minute
     refresh
   end
 end 
end

class Game_Temp
 #    春天 和 秋天
 # 分 0 - 7 点钟; 7 - 12 点; 12 - 7点; 7 - 0点;
 $bright_cq7 = Tone.new(-40, -40, -40, 0)
 $bright_cq12 = Tone.new(0, 0, 0, 0)
 $bright_cq19 = Tone.new(-40, -40, -40, 0)
 $bright_cq0 = Tone.new(-110, -110, -110, 0)
 #     夏天
 # 分 0 - 6 点; 6 - 14 点; 14 - 21 点; 21 - 0点
 $bright_x6 = Tone.new(-40, -40, -40, 0)
 $bright_x14 = Tone.new(30, 30, 30, 0)
 $bright_x19 = Tone.new(20, 0, 0, 0)
 $bright_x21 = Tone.new(-60, -60, -60, 0)
 $bright_x0 = Tone.new(-110, -110, -110, 0)
 #     冬天
 # 分 0 - 8 点;8 - 12 点; 12 - 6 点 ; 6 - 0点
 $bright_d8 = Tone.new(-45, -45, -45, 0)
 $bright_d12 = Tone.new(-10, -10, -10, 0)
 $bright_d18 = Tone.new(-45, -45, -45, 0)
 $bright_d0 = Tone.new(-115, -115, -115, 0)
end

class Game_Screen
 alias initialize_old initialize
 def initialize
   initialize_old
   @tone = $bright_cq7
 end
end

class Game_Map
 attr_accessor :date_minute
 attr_accessor :date_hour
 attr_accessor :date_day
 attr_accessor :date_week
 attr_accessor :date_season
 attr_reader   :every_month_days
 attr_accessor :date_system_window_on_or_off
 attr_accessor :weather1
 attr_accessor :weather2
 attr_accessor :waittime
 def initialize
   @date_minute = 50
   @date_hour = 7
   @date_day = 25
   @date_week = 5
   @date_season = 4
   @every_month_days = [31,31,30,28]
   @date_system_window_on_or_off = true
   @weather1 = [false,0,0]
   @weather2 = [false,0,0]
   @waittime = [0,0]
 end
end

class Scene_Map
 # 主处理
 alias main_old main
 def main
   @tt = Window_TimeDate.new
   if $game_map.date_system_window_on_or_off == false
     @tt.visible = false
   end
   main_old
   @tt.dispose
 end
 # 更新
 alias update_old update
 def update
   if $game_map.date_system_window_on_or_off == false
     @tt.visible = false
   else
     @tt.visible = true
   end
   #----------------------
   Date.change_screen_tone
   Date.run_date_system
   Date.rand_weather_type
   #----------------------
   @tt.update
   update_old
 end
end


 

脚本使用的通用说明

约定:本脚本来源于网络,任何人不得随意将本脚本应用于商业用途,如需转载,必须保留所有版权信息,如果是国内作者,最好征求作者同意——否则发生任何后果,66RPG不予负责。使用此脚本表示您默认接受上述约定。

说明:不同脚本之间、尤其是不同作者脚本之间会有冲突,本站会对已知脚本冲突进行简单说明。测试新脚本请下载本站提供的测试文件或者新建工程测试。脚本不要贪多,否则可能会互相冲突对您的游戏造成未知的影响。如果脚本内或者本站内提供了解释,请务必完全看完解释后再使用,如有问题,请到论坛讨论。


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

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

GMT+8, 2024-11-27 07:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部