| 
 
| 赞 | 0 |  
| VIP | 0 |  
| 好人卡 | 3 |  
| 积分 | 1 |  
| 经验 | 14100 |  
| 最后登录 | 2024-6-29 |  
| 在线时间 | 393 小时 |  
 Lv1.梦旅人 
	梦石0 星屑105 在线时间393 小时注册时间2008-11-7帖子353 | 
| 
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  复制代码#使用方法:不透明的物体在光源旁边会产生一个阴影。 
#所以,在光源的事件里面(例如火),请在第一页加上一个注释“s”(请不要带引号) 
#然后将此脚本命名为“人物阴影”插入到main上方即可。 
#============================================================================== 
# ■ 阴影精灵 (渐变精灵 ) 
# 以 Genzai Kawakami的阴影脚本为基础, 
# Rataime为其重写和更新, 
# Boushy 为其添加附属功能 
# 精灵使者汉化 
# 
#============================================================================== 
CATERPILLAR_COMPATIBLE = true 
class Game_Party 
attr_reader :characters 
end 
class Sprite_Shadow < RPG::Sprite 
attr_accessor :character 
def initialize(viewport, character = nil,source = nil,anglemin=0,anglemax=0,distancemax=0) 
super(viewport) 
@anglemin=anglemin.to_f 
@anglemax=anglemax.to_f 
@distancemax=distancemax.to_f 
@character = character 
@source = source 
update 
end 
def update 
super 
if @tile_id != @character.tile_id or 
@character_name != @character.character_name or 
@character_hue != @character.character_hue 
@tile_id = @character.tile_id 
@character_name = @character.character_name 
@character_hue = @character.character_hue 
if @tile_id >= 384 
self.bitmap = RPG::Cache.tile($game_map.tileset_name, 
@tile_id, @character.character_hue) 
self.src_rect.set(0, 0, 32, 32) 
self.ox = 16 
self.oy = 32 
else 
self.bitmap = RPG::Cache.character(@character.character_name, 
@character.character_hue) 
@cw = bitmap.width / 8 
@ch = bitmap.height / 8 
self.ox = @cw / 2 
self.oy = @ch 
end 
end 
self.visible = (not @character.transparent) 
if @tile_id == 0 
sx = @character.pattern * @cw 
sy = (@character.direction - 2) / 2 * @ch 
if self.angle>90 or angle<-90 
if @character.direction== 6 
sy = ( 4- 2) / 2 * @ch 
end 
if @character.direction== 4 
sy = ( 6- 2) / 2 * @ch 
end 
if @character.direction== 2 
sy = ( 8- 2) / 2 * @ch 
end 
if @character.direction== 8 
sy = ( 2- 2) / 2 * @ch 
end 
end 
self.src_rect.set(sx, sy, @cw, @ch) 
end 
self.x = @character.screen_x 
self.y = @character.screen_y-5 
self.z = @character.screen_z(@ch)-1 
self.opacity = @character.opacity 
self.blend_type = @character.blend_type 
self.bush_depth = @character.bush_depth 
if @character.animation_id != 0 
animation = $data_animations[@character.animation_id] 
animation(animation, true) 
@character.animation_id = 0 
end 
@[email protected] 
@deltay= @source.y-self.y 
self.angle = 57.3*Math.atan2(@deltax, @deltay ) 
@angle_trigo=self.angle+90 
if @angle_trigo<0 
@angle_trigo=360+@angle_trigo 
end 
self.color = Color.new(0, 0, 0) 
@distance = ((@deltax ** 2) + (@deltay ** 2)) 
if$game_map.shadows==-1 
self.opacity = 0 
else 
self.opacity = 1200000/(@distance+6000) 
end 
@distance = @distance ** 0.5 
if @distancemax !=0 and @distance>=@distancemax 
self.opacity=0 
end 
if @anglemin !=0 or @anglemax !=0 
if (@angle_trigo<@anglemin or @angle_trigo>@anglemax) and @anglemin<@anglemax 
self.opacity=0 
end 
if (@angle_trigo<@anglemin and @angle_trigo>@anglemax) and @anglemin>@anglemax 
self.opacity=0 
end 
end 
end 
end 
#=================================================== 
# ■ 重定义 Sprite_Character 
#=================================================== 
class Sprite_Character < RPG::Sprite 
alias shadow_initialize initialize 
def initialize(viewport, character = nil) 
@character = character 
super(viewport) 
@ombrelist=[] 
if (character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["s"]) 
if (character.list[1]!=nil and character.list[1].code == 108) 
@anglemin=character.list[1].parameters[0] 
end 
if (character.list[2]!=nil and character.list[2].code == 108) 
@anglemax=character.list[2].parameters[0] 
end 
if (character.list[3]!=nil and character.list[3].code == 108) 
@distancemax=character.list[3].parameters[0] 
end 
for i in $game_map.events.keys.sort 
if ($game_map.events[i].is_a?(Game_Event) and $game_map.events[i].list!=nil and $game_map.events[i].list[0].code == 108 and $game_map.events[i].list[0].parameters == ["o"]) 
@ombrelist[i+1] = Sprite_Shadow.new(viewport, $game_map.events[i],self,@anglemin,@anglemax,@distancemax) 
end 
end 
@ombrelist[1] = Sprite_Shadow.new(viewport, $game_player,self,@anglemin,@anglemax,@distancemax) 
#=================================================== 
# ● 原装人物跟随兼容脚本 
#=================================================== 
if CATERPILLAR_COMPATIBLE and $game_party.characters!=nil 
for member in $game_party.characters 
@ombrelist.push(Sprite_Shadow.new(viewport, member,self,@anglemin,@anglemax,@distancemax)) 
end 
end 
#=================================================== 
# ● 兼容脚本结束 
#=================================================== 
end 
shadow_initialize(viewport, @character) 
end 
alias shadow_update update 
def update 
shadow_update 
if @ombrelist!=[] 
for i in [email protected] 
if @ombrelist[i]!=nil 
@ombrelist[i].update 
end 
end 
end 
end 
end 
#=================================================== 
# ■ 新定义类Scene_Save 
#=================================================== 
class Scene_Save < Scene_File 
alias shadows_write_save_data write_save_data 
def write_save_data(file) 
$game_map.shadows = nil 
shadows_write_save_data(file) 
end 
end 
#=================================================== 
# ■ 新定义类 Game_Map 
#=================================================== 
class Game_Map 
attr_accessor :shadows 
end
 | 
 |