#==============================================================================
# 菜单中添加系统音量设置 by 沉影不器
#------------------------------------------------------------------------------
# 功能: 在菜单选项中添加[系统音量]选项,可调节:
# 背景音乐.背景声效.音乐和声效
# 说明: 两个脚本(包括slider控件脚本)插入到Main之前
# 在脚本第10行设定初始化系统音量
# 在脚本第11行设定系统音量各自的名称
# 在脚本第12行设定菜单中新增选项的名称
#==============================================================================
$volume = [60,60,60,60] # 初始化系统音量
VOLUME_NAME = ["背景音乐","背景声效","音乐","声效"] # 各系统音量名称
OPTION_NAME = "系统音量" # 菜单中新增选项名称
#==============================================================================
# ■ Scene_System
#==============================================================================
class Scene_System < Scene_Base
#--------------------------------------------------------------------------
# ● 开始处理
#--------------------------------------------------------------------------
def start
super
create_menu_background
@viewport = Viewport.new(0, 0, 544, 416)
@base_window = Window_Base.new(64, 78, 416, 280)
@base_window.viewport = @viewport
@base_window.active = false
# 处理帮助窗体
@help_window = Window_Help.new
@help_window.viewport = @viewport
@help_window.x = 64
@help_window.y = 22
@help_window.width = 416
@help_window.contents = Bitmap.new(416 - 32, 56 - 32)
# slider窗体
@slider_window = []
for i in 0..3
@slider_window[i] = Window_Slider.new(64, 78+48*i, 280, 96)
@slider_window[i].setup(VOLUME_NAME[i],32,32,120,8,100,0,0,1)
# 绑定变量
@slider_window[i].value = $volume[i]
@slider_window[i].active = true
@slider_window[i].opacity = 0
@slider_window[i].contents_opacity = 128
end
@index = 0
end
#--------------------------------------------------------------------------
# ● 结束处理
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
@viewport.dispose
@help_window.dispose
@base_window.dispose
for i in 0..3
@slider_window[i].dispose
end
end
#--------------------------------------------------------------------------
# ● 返回至原来的画面
#--------------------------------------------------------------------------
def return_scene
$scene = Scene_Menu.new(5)
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def slider_switch
if Input.repeat?(Input::UP)
@index -= 1 if @index > 0
Sound.play_cursor
end
if Input.repeat?(Input::DOWN)
@index += 1 if @index < 3
Sound.play_cursor
end
for i in 0..3
@slider_window[i].active = false
@slider_window[i].contents_opacity = 128
end
@slider_window[@index].active = true
@slider_window[@index].contents_opacity = 255
text = "更改" + @slider_window[@index].name + "的音量。"
@help_window.set_text(text)
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
super
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
end
update_menu_background
slider_switch
@slider_window[@index].update
@help_window.update
# 绑定变量
$volume[@index] = @slider_window[@index].value
end
end
#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu < Scene_Base
#--------------------------------------------------------------------------
# ● 生成指令窗口
#--------------------------------------------------------------------------
def create_command_window
s1 = Vocab::item
s2 = Vocab::skill
s3 = Vocab::equip
s4 = Vocab::status
s5 = Vocab::save
s6 = OPTION_NAME
s7 = Vocab::game_end
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
@command_window.index = @menu_index
if $game_party.members.size == 0 # 同伴人数为 0 的情况下
@command_window.draw_item(0, false) # 物品无效化
@command_window.draw_item(1, false) # 特技无效化
@command_window.draw_item(2, false) # 装备无效化
@command_window.draw_item(3, false) # 状态无效化
end
if $game_system.save_disabled # 禁止存档的情况下
@command_window.draw_item(4, false) # 存档无效化
end
end
#--------------------------------------------------------------------------
# ● 更新指令选择
#--------------------------------------------------------------------------
def update_command_selection
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
if $game_party.members.size == 0 and @command_window.index < 4
Sound.play_buzzer
return
elsif $game_system.save_disabled and @command_window.index == 4
Sound.play_buzzer
return
end
Sound.play_decision
case @command_window.index
when 0 # 物品
$scene = Scene_Item.new
when 1,2,3 # 特技、装备、状态
start_actor_selection
when 4 # 存档
$scene = Scene_File.new(true, false, false)
when 5 # 系统设置
$scene = Scene_System.new
when 6 # 游戏结束
$scene = Scene_End.new
end
end
end
end
#==============================================================================
# ■ 背景音乐
#==============================================================================
module RPG
class BGM < AudioFile
@@last = BGM.new
def play
if @name.empty?
Audio.bgm_stop
@@last = BGM.new
else
Audio.bgm_play("Audio/BGM/" + @name, @volume * $volume[0]/100 , @pitch)
@@last = self
end
end
end
#==============================================================================
# ■ 背景声效
#==============================================================================
class BGS < AudioFile
@@last = BGS.new
def play
if @name.empty?
Audio.bgs_stop
@@last = BGS.new
else
Audio.bgs_play("Audio/BGS/" + @name, @volume * $volume[1]/100, @pitch)
@@last = self
end
end
end
#==============================================================================
# ■ 音乐
#==============================================================================
class ME < AudioFile
def play
if @name.empty?
Audio.me_stop
else
Audio.me_play("Audio/ME/" + @name, @volume * $volume[2]/100, @pitch)
end
end
end
#==============================================================================
# ■ 声效
#==============================================================================
class SE < AudioFile
def play
unless @name.empty?
Audio.se_play("Audio/SE/" + @name, @volume * $volume[3]/100, @pitch)
end
end
end
end