幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1615|回复: 9

[RM2K&2K3] 日期天候脚本,只是有个问题……

[复制链接]

7

主题

32

帖子

270

积分

③业余

积分
270
发表于 2009-1-30 17:03:53 | 显示全部楼层 |阅读模式
很完美…… 但为什么进到屋子里还下雪下雨啊……
有没有办法,比如像开关一样 进屋子就不下 出屋子还下……
要怎么样做到进屋子不下雨和不下雪……

我不懂脚本,这个也是从别的地方复制过来的……



#==============================================================================
# ■ 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)<rate
      $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)<rate
      $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
  @tt.visible = $game_map.date_system_window_on_or_off
  #----------------------
  Date.change_screen_tone
  Date.run_date_system
  Date.rand_weather_type
  #----------------------
  @tt.update
  update_old
end
end
回复

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2009-1-30 21:22:11 | 显示全部楼层
加了一个$weather 作为标识

修改方法
1.Game_Screen 的 @tone 是只读的,这需要改成可以读写的
  attr_read     :tone                     # 色调
  改成
  attr_accessor :tone                     # 色调
2.在Game_Temp 的上面添加一句 $weather = false
  class Game_Temp 在这个之上添加就可以
  这样添加了一个标识
3.原来的180行的那个类修改成下面这个样子

class Spriteset_Map
# 初始化第二天气效果
  
alias initialize_old initialize
def initialize
  initialize_old
  if $weather
    $game_screen.tone = Tone.new(0,0,0,0)
    p 1
  else
    @weather1 = RPG::Weather.new(Viewport.new(0, 0, 640, 480))
    @weather2 = RPG::Weather.new(Viewport.new(0, 0, 640, 480))
  end
  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
  unless $weather
    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
  end
  update_old
end
end


汇报完毕,都是简单工作加一个标识就可以了,但是用RMVX做了半天才发现原来是XP的。。下次请先说明你用的是什么工具
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

7

主题

32

帖子

270

积分

③业余

积分
270
 楼主| 发表于 2009-1-31 00:16:40 | 显示全部楼层
  请问一下 开关是哪个……     我找不到你说的开关 是那个标识吗? 我照你的改了 可是找不到开关……
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2009-1-31 01:00:22 | 显示全部楼层
$weather
这是标识,当然它就是开关了。。。。。。

当在外面的时候
$weather = false

屋里

$weather = true

用法,在进入房子时这样调用

脚本 $weather = true
场景移动  屋子  坐标 XY

出房子

脚本 $weather = false
场景移动  外边的地图  坐标 XY
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

7

主题

32

帖子

270

积分

③业余

积分
270
 楼主| 发表于 2009-1-31 12:48:42 | 显示全部楼层
谢谢你帮我解答了两次 我还真是小白…… 只不过好像这个脚本和我别的冲突 进屋子$weather = true
场景移动后 雨和雪是不下了 可是却是崭停的…… (画面上都是雨雪点就是不动了OTZ)
而出来直接卡一下出现个1 然后就没雪了
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2009-1-31 13:03:52 | 显示全部楼层
我忘记把p 1去掉了。。。OTL  那个是测试用的

我再看看,这个脚本MS和自己电脑上的事件还有关系。。。晚8点没有雨雪,7:30 就有。。

OTZ
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2009-1-31 13:08:33 | 显示全部楼层
只不过好像这个脚本和我别的冲突 进屋子$weather = true
场景移动后 雨和雪是不下了 可是却是崭停的……


没有这个问题啊。。。我又测试了一遍

另外:改成这样比较好

  1. class Spriteset_Map
  2. # 初始化第二天气效果
  3.   
  4. alias initialize_old initialize
  5. def initialize
  6.   initialize_old
  7.   if $weather
  8.     $game_screen.tone = Tone.new(0,0,0,0)
  9.   else
  10.     @weather1 = RPG::Weather.new(Viewport.new(0, 0, 640, 480))
  11.     @weather2 = RPG::Weather.new(Viewport.new(0, 0, 640, 480))
  12.   end
  13.   update
  14. end
  15. # 释放第二天气效果
  16. alias dispose_old dispose
  17. def dispose
  18.     if @weahter1 != nil
  19.       @weather1.dispose
  20.     end
  21.     if @weahter2 != nil
  22.       @weather2.dispose
  23.     end
  24.   dispose_old
  25. end
  26. # 更新第二天气效果
  27. alias update_old update
  28. def update
  29.   if @weather1 != nil
  30.     @weather1.type = $game_map.weather1[1]
  31.     @weather1.max = $game_map.weather1[2]
  32.     @weather1.update
  33.   end
  34.   if @weather2 != nil
  35.     @weather2.type = $game_map.weather2[1]
  36.     @weather2.max = $game_map.weather2[2]
  37.     @weather2.update
  38.   end
  39.   update_old
  40. end
  41. end
复制代码

去掉了p 1 和一个没有用的unless
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

7

主题

32

帖子

270

积分

③业余

积分
270
 楼主| 发表于 2009-1-31 16:23:28 | 显示全部楼层
摸摸,亲亲,搞定了    伟大的伸脚党 伟大的伸脚党你不是一个人在战斗……不是一个人……
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2009-1-31 16:46:48 | 显示全部楼层
搞定就好。。结贴吧
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

7

主题

32

帖子

270

积分

③业余

积分
270
 楼主| 发表于 2009-1-31 19:10:33 | 显示全部楼层
怎么结贴啊 呃…… 我找了半天没找到在哪
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-18 16:23 , Processed in 0.033183 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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