class Game_Party
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_reader :characters
end
id = $game_map.map_id
name = $data_mapinfos[id].name
if name.include?("★")
rate = @character.y.to_f / $game_map.height.to_f + 0.5 # ← 这个值是到达屏幕最上方时的人物比例 1.0为默认大小 最下方比例则为 1+这个值
self.zoom_x = self.zoom_y = rate
end
#===========
end
end
class Sprite_Character < RPG::Sprite
#--------------------------------------------------------------------------
# ● 重命名函数列表
#--------------------------------------------------------------------------
alias sun_initialize initialize
alias sun_update update
#--------------------------------------------------------------------------
# ● 初始化对像
# viewport : 显示端口
# character : 角色 (Game_Character)
#--------------------------------------------------------------------------
def initialize(viewport, character = nil)
#@viewport0 = Viewport.new(0, 0, 544, 416)
@viewport = Viewport.new(0, 0, 800, 600)#修改影子的行动范围,不做剪切
viewport.z = 0#战斗清除影子,地图切换清楚影子,改为1则有延迟
@character = character
super(viewport)
@sunlist=[]
if character.is_a?(Game_Event) and $game_temp.sun_spriteset.sun != []
params = XPML.XPML_read("Shadow", @character.id, 2)
if params != nil
for i in 0...$game_temp.sun_spriteset.sun.size
@sunlist.push(Sprite_Sun.new(viewport, @character, i))
end
end
end
if character.is_a?(Game_Player) and $game_temp.sun_spriteset.sun != []
for i in 0...$game_temp.sun_spriteset.sun.size
@sunlist.push(Sprite_Sun.new(viewport, $game_player, i))
end
#===================================================
# ● 与人物跟随功能兼容脚本
#===================================================
if CATERPILLAR_COMPATIBLE and $game_party.characters != nil
for member in $game_party.characters
for i in 0...$game_temp.sun_spriteset.sun.size
@sunlist.push(Sprite_Sun.new(viewport, member, i))
end
end
end
if SQUAD_MOVE_COMPATIBLE and $game_allies.values != nil
for member in $game_allies.values
for i in 0...$game_temp.sun_spriteset.sun.size
@sunlist.push(Sprite_Sun.new(viewport, member, i))
end
end
end
if CCOA_CATER_COMPATIBLE and $game_train.actors != nil
for member in $game_train.actors
for i in 0...$game_temp.sun_spriteset.sun.size
@sunlist.push(Sprite_Sun.new(viewport, member, i))
end
end
end
if TRICKSTER_CATER_COMPATIBLE and $game_party.followers != nil
for member in $game_party.followers
for i in 0...$game_temp.sun_spriteset.sun.size
@sunlist.push(Sprite_Sun.new(viewport, member, i))
end
end
end
#===================================================
# ● 兼容脚本结束
#===================================================
end
# 执行原始函数调用
sun_initialize(viewport, @character)
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
sun_update
if @sunlist != []
for i in [email protected]
@sunlist.update
end
end
end
end
class Spriteset_Map
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :sun
#--------------------------------------------------------------------------
# ● 重命名函数列表
#--------------------------------------------------------------------------
alias sun_initialize initialize
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize
@sun = []
$game_temp.sun_spriteset = self
warn = false
for k in $game_map.events.keys.sort
if ($game_map.events[k].list != nil and
$game_map.events[k].list[0].code == 108 and
($game_map.events[k].list[0].parameters == ["Sun"] or
$game_map.events[k].list[0].parameters == ["o"]))
warn = true
end
params = XPML.XPML_read("Sun", k, 2)
$game_temp.sun_spriteset.sun.push(params) if params != nil
end
if warn == true and SUN_WARN
p "警告:在地图上至少有一个事件使用了过去的方法来添加太阳效果"
end
# 执行原始函数调用
sun_initialize
end
end
#==============================================================================
# ■ module XPML
#------------------------------------------------------------------------------
# 本模块用来读取并传递注释中的参数。
#
# 使用此模块的主要用途就是检查和读出事件的注释。
# * 标记的关键字的注明方法:
# begin 关键字
# * 注意参数之间必须用关键字隔开。
# * 调用此函数的方法:
# XPML_read("关键字",事件ID,读取参数的最大值)
# * 最后一项可以忽略,默认为整个事件。
# * 赋值方法:
# 变量名 参数
# * 每个变量名和参数各占一行。
# * 如果指明的关键字在事件里面不存在的话,则返回nil。
# * 如果两个标记之间没有参数的话,则返回空数组。
# * 如果参数中有数字参数的话,会自动返回为数字变量。
# 举例:在一个事件中的注释写入(每个注释写一行,#号后面的不写)
# begin first # 第一关键字
# begin second #第二关键字
# 变量1 1
# 变量2 two
# begin third #第三关键字
# 任何东西 3
# 然后得出转换结果:
# p XPML_read("first", event_id) -> [] #第一关键字和第二关键字没有参数
# p XPML_read("second", event_id) -> [1,"two"] #第二关键字和第三关键字之间有2个参数
# p XPML_read("third", event_id) -> [3] #第三关键字之间有一个参数
# p XPML_read("forth", event_id) -> nil #找不到第四关键字则返回nil
#===================================================
module XPML
module_function
#--------------------------------------------------------------------------
# ● XPML_read
# markup : 需要在文件注释里检查的关键字。
# event_id : 事件ID
# max_param_number : 读取参数/注释的最大值,0为事件内的所有注释
#--------------------------------------------------------------------------
def XPML_read(markup, event_id, max_param_number = 0)
parameter_list = nil
event = $game_map.events[event_id]
return if event.list == nil
for i in 0...event.list.size
if event.list.code == 108 and
event.list.parameters[0].downcase == "begin " + markup.downcase
parameter_list = [] if parameter_list == nil
for j in i + 1...event.list.size
if event.list[j].code == 108
parts = event.list[j].parameters[0].split
if parts.size != 1 and parts[0].downcase != "begin"
if parts[1].to_i != 0 or parts[1] == "0"
parameter_list.push(parts[1].to_i)
else
parameter_list.push(parts[1])
end
else
return parameter_list
end
else
return parameter_list
end
if max_param_number != 0 and j == i + max_param_number
return parameter_list
end
end
end
end
return parameter_list
end
end