#==============================================================================
# ■ 聪聪的多人烛光系统
#------------------------------------------------------------------------------
# 使用方法:
#
# 【事件脚本】输入:
# $game_system.candle_ch_new = [0,x,y,z...]
# 0表示主角,x,y,z...表示事件编号,所有涉及的角色和事件周围会有烛光效果...
#
# 【事件脚本】输入:
# $game_system.candle_ch_new = []
# 取消烛光效果显示,但环境仍然黑暗...
#
# 【事件脚本】输入:
# $game_system.candle_ch_new = nil
# 取消烛光效果显示,且环境亮度还原...
#
#------------------------------------------------------------------------------
#
# 转载请保留脚本来源:本脚本来自rpg.blue
# 作者:聪聪(正太君)
# 2016-05-11
#==============================================================================
class Candle
# 设置暗处不透明度(0-255)...
OPACITY = 128
# 设置昏暗度(0-255)...
DARK = 200
#--------------------------------------------------------------------------
# ● # 生成黑暗背景和烛光
#--------------------------------------------------------------------------
def candlelight
@black_rect = Sprite.new
@black_rect.bitmap = Bitmap.new(Graphics.width, Graphics.height)
@black_rect.bitmap.fill_rect(0, 0, Graphics.width, Graphics.height, Color.new(DARK, DARK, DARK))
@black_rect.blend_type = 2
@black_rect.opacity = OPACITY
@candle_rect = Sprite.new
@candle_rect.bitmap = Cache.picture("Light0")
@candle_rect.visible = false
@candle_rect.ox = @candle_rect.bitmap.width / 2
@candle_rect.oy = @candle_rect.bitmap.height / 2
end
#--------------------------------------------------------------------------
# ● 设置有烛光的角色
#--------------------------------------------------------------------------
def set_candles(candle_ch)
return if candle_ch == nil
chs = candle_ch
@game_lighterlist = [] if @game_lighterlist.nil?
@game_lighterlist << $game_player if chs.include?(0)
chs.each {|i| @game_lighterlist << $game_map.events[i] if i != 0}
# 移除重复的角色
@game_lighterlist.uniq!
# 开启烛光功能
candlelight
end
#--------------------------------------------------------------------------
# ● 初始化烛光
#--------------------------------------------------------------------------
def initialize_candle(ch)
lsx = @candle_rect.x = ch.screen_x - @candle_rect.ox
lsy = @candle_rect.y = ch.screen_y - @candle_rect.oy - 16
@black_rect.bitmap.blt(lsx, lsy, @candle_rect.bitmap, @black_rect.bitmap.rect)
end
#--------------------------------------------------------------------------
# ● 更新烛光
#--------------------------------------------------------------------------
def update_candle
if $game_system.candle_ch == $game_system.candle_ch_new and @black_rect
@black_rect.bitmap.fill_rect(0, 0, Graphics.width, Graphics.height, Color.new(DARK, DARK, DARK))
@game_lighterlist.each {|i| initialize_candle(i)}
else
dispose_candle
end
end
#--------------------------------------------------------------------------
# ● 释放烛光
#--------------------------------------------------------------------------
def dispose_candle
@black_rect.dispose if @black_rect
@candle_rect.dispose if @candle_rect
@game_lighterlist.clear if @game_lighterlist
end
end
class Scene_Map < Scene_Base
attr_reader :candle
#--------------------------------------------------------------------------
# ● 开始后处理
#--------------------------------------------------------------------------
def post_start
@candle = Candle.new
@candle.set_candles($game_system.candle_ch)
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
alias :o_update :update
def update
o_update
if $game_system.candle_ch != $game_system.candle_ch_new
@candle.dispose_candle
$game_system.candle_ch = $game_system.candle_ch_new
@candle = Candle.new
@candle.set_candles($game_system.candle_ch)
end
@candle.update_candle
end
end
class Game_System
attr_accessor :candle_ch
attr_accessor :candle_ch_new
end