赞 | 5 |
VIP | 71 |
好人卡 | 22 |
积分 | 6 |
经验 | 32145 |
最后登录 | 2013-8-9 |
在线时间 | 184 小时 |
Lv2.观梦者 天仙
- 梦石
- 0
- 星屑
- 620
- 在线时间
- 184 小时
- 注册时间
- 2008-4-15
- 帖子
- 5023
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
超自定义时间日期天气昼夜脚本系统
有人可能会说:「站上不是早就有这类脚本了吗?还发来作啥?」
但是我这与站上其他脚本不同的地方是「超自定义」四个字
啥叫「超自定义」呢?
就是说所有的东西,包括窗口座标, 字形颜色、大小,显示的文字,排版的方式
都可以按照你所要的去编排
写这个脚本的起因是因为我载了站上的时间脚本系统,但是想要把他改成适合我游戏风格的样式却很很很麻烦,於是发狠自己写了一个。……刚开始也没想到会成功 =_=”
後来写成功後,考虑到可能有其他像我一样的脚本新人会有同样的问题
於是乎…就把它发上来了
功能吗…看下面的介绍吧:
snstar2006 超自定义时间日期天气昼夜系统
站上已经有许多类似的脚本, 只是如果要修改成有游戏的特色的方式实在不容易
所以我自己重新写一个脚本, 顺便练习脚本的写法,
方法绝对不是最好的,可能也很复杂,但是我用了大量的变量来定义
所以对像我一样的新手来说,要修改起来,难度应该不会很大
只要把字符串替换掉,或是把窗口坐标修改成想要的地方就好了
几乎所有的变量定义都在脚本最上面, 其他的我在后面有说明
要修改的话最大的问题应该是排版问题
我在脚本里定义了三个排版,只要把7号变量改成 1 就能切换了
参考脚本:
kira 的 事件+脚本 时间系统
黑羽毛的 完美昼夜脚本
灼眼的夏娜的 日期,天气,昼夜系统(养成游戏可用)
sphinger 的 带远景图的小地图(缩略图)
我不是很熟悉脚本语法,所以参考了以上所列的脚本的内容
snstar2006 向以上诸位致上最高的敬意, 因为我终于完成了人生中第一个脚本系统
功能:
1. 显示游戏内日期时间, 全部文字和位置都能自己设定.
2. 按 A 或是 shift 可以显示真实时间, 方便全屏幕时察看时间.
3. 全部日期时间等都使用变量, 方便在游戏中设定时间.
(比如说: 过了几天后, 在事件中增加天数的变量就好了)
4. 打开4号开关开启计时和显示时间功能
打开5号开关开启天气变化
打开6号开关开启色调功能
打开7号开关开启自动隐藏时间窗口功能, 类似window的自动隐藏工具栏
与4号开关不同的是, 这个开关只是隐藏窗口, 并不取消
计时功能
打开8号开关变更真实时间显示格式 true = 12小时制 false = 24小时制
5. 季节和区域天气比例变化
可以设定不同季节和不同区域所发生的天气
如:冬天的时候下雪的机率较大, 夏天则多雨
或是到了沙漠地区就多刮风少下雨, 而到了沼泽区则多下雨少刮风等等
6. 特定日期指定天气
如:圣诞节那天一定会下雪
7. 综合以上两项, 可能会导致在沙漠中圣诞节时下雪 囧
所以天气选择的优先度是 区域>日期>季节
8. 模拟真实季节昼夜长短情况
夏天的时候白天会比较长, 冬天则比较短等
9. 地图名称自动判断是否在室内
如果地图名称内有[内]字或在名称之后加上 [,IN], 自动关闭天气功能
10. 本脚本支持鼠标, 只要把215行的注释取消掉就好了
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
#分两部分是因为本脚本太长了
#第一部分脚本是主处理,不会改的话就别改了
#第二部分脚本是自定义变量, 文字, 排版等, 要改都到那里改去
默认定义了24节气
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
第一部分定义修改部分
148 行 定义天气音效
362 行 定义真实时间 AM/PM 的字
372 行 定义真实时间 星期 的字
第二部分定义修改部分
22 行 窗口自定义
38 行 时间换算率
45 行 时间变量ID
55 行 天气机率百分比
79 行 窗口字型颜色定义
131 行 定义[年]的字
147 行 定义[月]的字
201 行 定义[日]的字
296 行 定义[时]的字
328 行 定义[刻]的字
192 行 定义[季节]的字
273 行 定义[星期]的字
346 行 定义[天气]的字
367 行 定义 二十八星宿
451 行 定义时间色调
585 行 定义区域和区域天气
653 行 定义窗口模式所有坐标长度等等等...
窗口隐藏方向:2→下 4→左 6→右 8→上
800 行 节日自定义
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
二十八星宿使用思路
站上有关于二十八星宿的数据, 可以参考看看
二十八星宿包含三个部分: 名称, 七耀, 对应动物
所以总共要三个部份可以拿来用, 其中七耀又包含日月 + 五行
首先我们可以设置(用公共事件)当某个星宿出现时, 开启XX功能
如: 当[胃土雉]出现时, 任何地方都可以存盘
再者我们可以设置当某个星宿出现时, X系魔法功能加倍, Y系魔法减弱
如: 当[尾火虎]出现时, 火系魔法功能加倍
当[心月狐]或[参水猿]出现时, 最适合打火系BOSS
最后我们可以设置当某个星宿出现时, X怪出线机率最频繁, 或是某张地图的入口开启
如: 当[牛金牛]出现时, 牛魔王的子孙会常常遇到
当[觜火猴]出现时, 水濂洞的入口出现
又想到另外一条思路
可以把控制二十八星宿的变量改为[月份]
然后把二十八星宿改成12生肖或是星座, 用星座的话就可以用在非东方背景的游戏了
超自定义时间日期天气昼夜脚本系统
截图:
冲突可能:其他时间系统脚本(废话~~)、其馀不确定(应该没有吧)
使用地图名称显示脚本时请注意:
本脚本有三种方法分辨角色是否在室内
1. 地图名称包含「内」字
2. 地图名称以 ,IN 结尾(注意有",")
3. 设定地图地形为 98
4. 直接关掉天气开关
看情况使用
功能增新:时段作息变数控制
类似作息开关的功能,只是改用变数控制
脚本1
- #================================================================================#
- #****Window_Time #
- #--------------------------------------------------------------------------------#
- # 显示时间的窗口类 #
- #================================================================================#
- class Window_Time < Window_Base
- #----------------------#
- #*初始化对象 #
- #----------------------#
- def initialize
- #更新窗口坐标
- $game_variables[$time_window_pattern] = $default_pattern
- @pattern_now = $default_pattern
- time_date_window_update
-
- #设定窗口
- super($time_date_X, $time_date_Y, $time_date_W, $time_date_H)
- self.contents = Bitmap.new($time_date_W - 32, $time_date_H - 32)
- #self.contents.font.name = (["标楷体"]) #防错用
- self.opacity = $time_window_opacity
-
- #开关初始化 -- 预设防错的 不喜欢再用事件初始化
- $game_switches[$time_date_running] = true #时间功能开启
- $game_switches[$time_date_tone] = true #色调功能开启
- $game_switches[$hide_window] = false #隐藏功能关闭
- $game_switches[$real_time_format] = true #真实时间12小时制
- $game_switches[$time_date_weather] = true #天气功能开启
- $game_switches[$time_map_region] = true #区域功能开启
-
- #变数归零
- $weather_hour = nil
- $weather_type_rand = 0
- $hour_count = 0
- $weather_hour = 0
- $game_variables[$week] = 1
- @id = $game_map.map_id
- for i in [$min, $hour, $day, $month, $year]
- if $game_variables[i] == 0
- $game_variables[i] = 1
- i+=1
- end # end if
- end # end for
-
- #刷新窗口
- refresh
- end # end def initialize
- #----------------------#
- #*刷新 #
- #----------------------#
- def refresh
- self.contents.clear
- self.contents.font.size = $time_window_font_size
- self.contents.font.color = game_date
-
- #计算时间
- if $game_switches[$time_date_running] == true
- @total_sec = Graphics.frame_count
- if @total_sec % $min_rate ==0
- $game_variables[$min] += 1
- end
- if $game_variables[$min] >= $hour_rate + 1
- $game_variables[$min] = 1
- $game_variables[$hour] += 1
- $hour_count += 1
- end
- if $game_variables[$hour] >= $day_rate + 1
- $game_variables[$hour] = 1
- $game_variables[$day] += 1
- $game_variables[$week] += 1
- if $game_variables[$week] == 8
- $game_variables[$week] = 1
- end
- end
- if $game_variables[$day] >= $month_rate + 1
- $game_variables[$day] = 1
- $game_variables[$month] += 1
- end
- if $game_variables[$month] >= $year_rate + 1
- $game_variables[$month] = 1
- $game_variables[$year] += 1
- end
- end
-
-
- #判断是否在室内
- newid = $game_map.map_id #获取地图ID
- if newid != @id
- @id = newid
- end
- $mapnames = load_data("Data/MapInfos.rxdata") #读取地图名称
- map_name = $mapnames[@id].name
- if map_name.include?("内") or map_name.include?(",IN")
- #如果地图名称包含"内"或",IN"
- $game_switches[$time_date_weather] = false #则不显示天气
- $weather_hour = 0
- $weather_type = 99 #99是让窗口不会显示天气
- #应该不会有人定义99种天气吧
- $game_variables[$time_map_region] = 98
- end
- time_date_window_update #窗口文字坐标调整
- print_date #显示文字
- get_season_weather #计算季节天气机率
- show_festival #显示节日
- get_region_weather #计算区域天气机率
- get_time_range #计算时段
-
- #时段控制
- case $game_variables[$time_range]
- when 1 # 午夜
- $tone_R, $tone_G, $tone_B, $tone_K = [-187, -153, -102, 119]
- when 2 # 日出
- $tone_R, $tone_G, $tone_B, $tone_K = [-51, -51, -51, 170]
- when 3 # 凌晨
- $tone_R, $tone_G, $tone_B, $tone_K = [0, 0, 0, 40]
- when 4 # 天亮
- $tone_R, $tone_G, $tone_B, $tone_K = [0, 0, 0, 0]
- when 5 # 中午
- $tone_R, $tone_G, $tone_B, $tone_K = [68, 68, 44, 204]
- when 6 # 天亮
- $tone_R, $tone_G, $tone_B, $tone_K = [0, 0, 0, 0]
- when 7 # 黄昏
- $tone_R, $tone_G, $tone_B, $tone_K = [68, 0, -17, 204]
- when 8 # 日落
- $tone_R, $tone_G, $tone_B, $tone_K = [68, 17, -17, 204]
- when 9 # 天黑
- $tone_R, $tone_G, $tone_B, $tone_K = [-51, -51, -51, 170]
- when 10 # 午夜
- $tone_R, $tone_G, $tone_B, $tone_K = [-187, -153, -102, 119]
- end
-
-
- if $game_switches[$time_date_weather] == true #天气功能开关为ON时
- #如果天气需要归零
- if $hour_count >= $weather_hour or $weather_hour == 0
- $hour_count = 0 #天气持续时间归零
- $weather_type_rand = rand(100) + 1 #随机数生成天气类型
- $weather_power = rand(9) + 1 #随机数生成天气强度
- $weather_hour = rand($weather_hour_max) + 1 #随机数出现天气时间
- $weather_dur = 50
- else
- $weather_1_min = 1 #天气一最低机率
- $weather_1_max = $weather_1_rate #天气一最高机率
- $weather_2_min = $weather_1_max + 1 #天气二最低机率
- $weather_2_max = $weather_2_min + $weather_2_rate #天气二最高机率
- $weather_3_min = $weather_2_max + 1 #天气三最低机率
- $weather_3_max = $weather_3_min + $weather_3_rate #天气三最高机率
- $weather_4_min = $weather_3_max + 1 #天气四最低机率
- $weather_4_max = $weather_4_min + $weather_4_rate #天气四最高机率
-
- if $weather_1_rate != 0
- if $weather_type_rand >= $weather_1_min and $weather_type_rand <=$weather_1_max
- $weather_type = 0 #无
- end
- end
- if $weather_2_rate != 0
- if $weather_type_rand >= $weather_2_min and $weather_type_rand <=$weather_2_max
- $weather_type = 1 #雨
- end
- end
- if $weather_3_rate != 0
- if $weather_type_rand >= $weather_3_min and $weather_type_rand <=$weather_3_max
- $weather_type = 2 #风
- end
- end
- if $weather_4_rate != 0
- if $weather_type_rand >= $weather_4_min and $weather_type_rand <=$weather_4_max
- $weather_type = 3 #雪
- end
- end
-
- #播放天气BGS
- #Audio.bgs_play("文件名",音量,节奏速度)
- case $weather_type #当天气
- when 0
- Audio.bgs_stop
- when 1 #是雨的情况下
- Audio.bgs_play("Audio/BGS/005-Rain01", 60)
-
- when 2 #是风的情况下
- Audio.bgs_play("Audio/BGS/001-Wind01", 70)
-
- when 3 #是雪的情况下
- Audio.bgs_play("Audio/BGS/003-Wind03", 80)
-
- end# end case
- end # end if
- $weather_dur = 50
- else #如果天气开关为off
- $weather_type, $weather_power, $weather_dur = [0,0,0]#将天气回复为无
- end # end if
-
- $game_screen.weather($weather_type, $weather_power, $weather_dur) #显示天气
-
- if $game_switches[$time_date_tone] == true #如果色调开关为on
- $game_screen.start_tone_change(Tone.new($tone_R, $tone_G, $tone_B, $tone_K), 50)
- else #如果为off
- #色调回复正常
- $game_screen.start_tone_change(Tone.new(0, 0, 0, 0), 1)
- end # end if
-
- #当人物走到窗口坐标时移动时间窗口
- if $game_player.screen_x >= ($time_date_X - 16) && $game_player.screen_x <= ($time_date_X + $time_date_W + 16)
- if $game_player.screen_y >= ($time_date_Y - 16) && $game_player.screen_y <= ($time_date_Y + $time_date_H + 16)
- # +/- 16 像素是调整手感
- self.x = $time_date_XM
- self.y = $time_date_YM
- time_date_screen_moved = true #避免与自动隐藏功能互相冲突
-
- case $hide_direction #将隐藏方向改为相反的方向
- when 2
- $hide_direction = 8
- when 4
- $hide_direction = 6
- when 6
- $hide_direction = 4
- when 8
- $hide_direction = 2
- end # end case
-
- else #窗口回到原位
- self.x = $time_date_X
- self.y = $time_date_Y
- time_date_screen_moved = false #避免与自动隐藏功能互相冲突
- end # end if
- else #窗口回到原位
- self.x = $time_date_X
- self.y = $time_date_Y
- time_date_screen_moved = false #避免与自动隐藏功能互相冲突
- end # end if
- mouse_x, mouse_y = [-1, -1] #没使用鼠标脚本时防错
- #如果使用鼠标脚本的话就取消注释
- #如果不使用鼠标脚本的话就注释掉,否则会报错
- #mouse_x, mouse_y = Mouse.get_mouse_pos #获得鼠标位置
-
- #当按住A键时
- #显示现实时间
- if Input.press?(Input::A)
- show_real_time
- end # end if
-
- #当鼠标移动到窗口时位置 或是按下Z键时
- #显示已自动隐藏的时间窗口
- if $game_switches[$hide_window] == true
- case $hide_direction #调整隐藏方向
- when 2
- self.y = $time_date_Y + $time_date_H - $hide_window_width
- when 4
- self.x = -($time_date_W) + $hide_window_width
- when 6
- self.x = $time_date_X + $time_date_W - $hide_window_width
- when 8
- self.y = -($time_date_H) + $hide_window_width
- end # end case
- if Input.press?(Input::Z) or (mouse_x >= $time_date_X && mouse_x <= ($time_date_X + $time_date_W)) && (mouse_y >= $time_date_Y and mouse_y <= ($time_date_Y + $time_date_H))
- if time_date_screen_moved == false #避免与自动移动功能互相冲突
- self.x = $time_date_X
- self.y = $time_date_Y
- else
- self.x = $time_date_XM
- self.y = $time_date_YM
- end
- end # end if
- else
- if time_date_screen_moved == false #避免与自动移动功能互相冲突
- self.x = $time_date_X
- self.y = $time_date_Y
- end
- end # end if
-
- #更新窗口坐标等
- if $game_variables[$time_window_pattern] != @pattern_now
- time_date_window_update
- self.x = $time_date_X
- self.y = $time_date_Y
- self.z = $time_window_z
- self.width = $time_date_W
- self.height = $time_date_H
- self.contents = Bitmap.new($time_date_W - 32, $time_date_H - 32)
- @pattern_now = $game_variables[$time_window_pattern]
- end
- end # end def refresh
- #----------------------#
- #*刷新画面 #
- #----------------------#
- def update
- super
- refresh
- end # end def update
- end# end class Window_time
- #================================================================================#
- #****Scene_Map #
- #--------------------------------------------------------------------------------#
- # 处理地图画面的类别。 #
- #================================================================================#
- class Scene_Map
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- alias timedate_main main
- def main
- # 产生活动区块
- @spriteset = Spriteset_Map.new
- # 产生讯息窗口
- @message_window = Window_Message.new
- # 产生时间窗口
- @time_window = Window_Time.new
- if $game_switches[$time_date_running] == false
- @time_window.visible = false
- end # end if
- # 执行过渡
- Graphics.transition
- # 主循环
- loop do
- # 更新游戏画面
- Graphics.update
- # 更新输入讯息
- Input.update
- # 更新画面
- update
- # 如果画面切换的话就中断循环
- if $scene != self
- break
- end # end if
- end # end loop
- # 准备过渡
- Graphics.freeze
- # 释放活动区块
- @spriteset.dispose
- # 释放讯息窗口
- @message_window.dispose
- # 释放时间窗口
- @time_window.dispose
- # 标题画面切换中的情况下
- if $scene.is_a?(Scene_Title)
- # 淡入淡出画面
- Graphics.transition
- Graphics.freeze
- end # end if
- end # end def main
-
- alias timedate_update update
- def update
-
- #如果时间日期功能开关为OFF则不显示时间窗口
- if $game_switches[$time_date_running] == false
- @time_window.visible = false
- else
- @time_window.visible = true
- end # end if
- @time_window.refresh
- timedate_update
- end # end def update
- end #end class Scene_Map
- #================================================================================#
- #****Window_Time #
- #--------------------------------------------------------------------------------#
- # 显示时间的窗口类 #
- #================================================================================#
- class Window_Time < Window_Base
-
- def show_real_time
- @time = Time.now
- @time_hour = @time.hour # 用来计算十二小时制的 注意 . 和 _ 的差别
-
- #text = sprintf("%02d年%02d月%02d日 [ ] %02d:%002d ", @time.year, @time.month, @time.day, @time_hour, @time.min)
- self.contents.clear
- self.contents.font.color = real_date
- self.contents.font.size = 22
-
- if $game_switches[$real_time_format] == true
- if @time_hour >= 12
- @time_hour -= 12
- text = "PM"
- else
- text = "AM"
- end # end if
- else
- text = ""
- end # end if
-
- self.contents.draw_text($APM_x, $APM_y, 128, 32, text)
- self.contents.draw_text($year_x, $year_y, 128, $year_font_size + 14, @time.year.to_s + "年")
- self.contents.draw_text($month_x, $month_y, 128, $month_font_size + 14, @time.month.to_s + "月")
- self.contents.draw_text($day_x, $day_y, 128, $day_font_size + 14, @time.day.to_s + "日")
- self.contents.draw_text($hour_x , $hour_y, 128, $hour_font_size + 14, @time_hour.to_s)
- self.contents.draw_text($hour_x + 26, $hour_y - 3, 128, $hour_font_size + 14, ":")
- @time_min = sprintf("%02d", @time.min.to_s)
- self.contents.draw_text($min_x - 3, $min_y, 128, $min_font_size + 14, @time_min)
-
- #!!!!注意!!!!
- #这里是真实时间的星期名称,
- #若是要改变游戏时间的星期名称,请到第二部分282行
- case @time.wday
- when 0
- weektxt = "周日"
- when 1
- weektxt = "周一"
- when 2
- weektxt = "周二"
- when 3
- weektxt = "周三"
- when 4
- weektxt = "周四"
- when 5
- weektxt = "周五"
- when 6
- weektxt = "周六"
- end # end case
- self.contents.draw_text($week_x, $week_y, 128, $week_font_size + 14, weektxt)
- end# end def show_real_time
-
- def get_season_weather
- # 用季节区分天气类型出现机率
- # 春天
- case $game_variables[$season]
- when 1
- $weather_1_rate = $spring_none
- $weather_2_rate = $spring_rain
- $weather_3_rate = $spring_wind
- $weather_4_rate = $spring_snow
-
- # 夏天
- when 2
- $weather_1_rate = $summer_none
- $weather_2_rate = $summer_rain
- $weather_3_rate = $summer_wind
- $weather_4_rate = $summer_snow
- # 秋天
- when 3
- $weather_1_rate = $autumn_none
- $weather_2_rate = $autumn_rain
- $weather_3_rate = $autumn_wind
- $weather_4_rate = $autumn_snow
- # 冬天
- when 4
- $weather_1_rate = $winter_none
- $weather_2_rate = $winter_rain
- $weather_3_rate = $winter_wind
- $weather_4_rate = $winter_snow
-
- end # end case
- end #end definition
-
- end
复制代码
[本贴由 K’ 于 2007-7-31 8:28:00 进行了编辑] |
|