#==============================================================================
# ■ 事件头上显血条 RMXP
#--------------------------------------------------------------------------
# 作者:后知后觉
# 日期:2012-6-26
# 版本:1.0
# 申明:刺夜之枪定制 正太君改
# [url]http://bbs.66rpg.com/thread-237126-1-1.html[/url]
#==============================================================================
#==============================================================================
# ■ Sprite_Character
#==============================================================================
class Sprite_Character < RPG::Sprite
#--------------------------------------------------------------------------
# ● 参数设置 正太君改
#--------------------------------------------------------------------------
# 设置图片文件名.不想要底图就让底图完全透明或设置为 ""
# 图片放在 Graphics/Pictures/ 文件夹下
HPBarFileName = "HPBar"
HPBarBackFileName = "HPBarBack"
MPBarFileName = "MPBar"
MPBarBackFileName = "MPBarBack"
# 设置显示友军血条的开关号
#TeamHPBarSwitchID = 5
# 设置显示敌军血条的开关号
#EnemyHPBarSwitchID = 6
# 设置显示血条的开关号
HPBarSwitchID = 5
#禁止显示血条 开关
HPBarDOESNOTSwitchID = 6
# 被攻击后血条显示多久
HPbarTimeDisplay = 60
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
#别名hzhj旧初始化使事件参数栏初始化
alias hzhj_old_init_make_event_param_bar initialize
def initialize(*args)#定义初始化(*参数)
@hp_sprite = Sprite.new(args[0])#@hp精灵=精灵.新(参数[0])
@hp_back_sprite = Sprite.new(args[0])#@hp后台精灵 = 精灵.新(参数[0])
@mp_sprite = Sprite.new(args[0])
@mp_back_sprite = Sprite.new(args[0])
@param_sprites = []#@参数精灵=[]
@param_sprites << @hp_sprite# @参数精灵 << @hp精灵
@param_sprites << @hp_back_sprite# @参数精灵=@hp后台精灵
@param_sprites << @mp_sprite
@param_sprites << @mp_back_sprite
#@hp精灵。位图 = RPG::Cache.picture(HPBarFileName)绿色
@hp_sprite.bitmap = RPG::Cache.picture(HPBarFileName)
#@hp后台精灵.位图= RPG::Cache.picture(HPBarBackFileName)#黑色
@hp_back_sprite.bitmap = RPG::Cache.picture(HPBarBackFileName)#黑色
@mp_sprite.bitmap = RPG::Cache.picture(MPBarFileName)
@mp_back_sprite.bitmap = RPG::Cache.picture(MPBarBackFileName)
#别名hzhj旧初始化使事件参数栏(*参数)
hzhj_old_init_make_event_param_bar(*args)
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
#别名hzhj旧的布置使事件参数栏布置除非$@
alias hzhj_old_dispose_make_event_param_bar dispose unless $@
def dispose#定义可用
#@参数精灵。每个{|精灵|精灵.释放}
@param_sprites.each{|sprite|sprite.dispose}
#hzhj旧的布置生成事件参数栏
hzhj_old_dispose_make_event_param_bar
end
#--------------------------------------------------------------------------
# ● 获取事件 HP # 正太君改
#--------------------------------------------------------------------------
def event_hp#定义事件hp
return 0 if @character.nil?#如果@角色,则返回0。无
return @character.hp#返回角色HP
end
#--------------------------------------------------------------------------
# ● 获取事件 MHP # 正太君改
#--------------------------------------------------------------------------
def event_mhp#定义事件MHP
return 0 if @character.nil?#如果@角色,则返回0。无
return @character.hp_max#返回角色HP最大值
end
#--------------------------------------------------------------------------
# ● 获取事件 MP # 正太君改
#--------------------------------------------------------------------------
def event_mp
return 0 if @character.nil?
return @character.sp if @character.is_a?(EFS_Hero)
return @character.ammo
#return @character.get_group.morale
end
#--------------------------------------------------------------------------
# ● 获取事件 MMP # 正太君改
#--------------------------------------------------------------------------
def event_mmp
return 0 if @character.nil?
return @character.sp_max if @character.is_a?(EFS_Hero)
return @character.ammo_max
#return 100
end
#--------------------------------------------------------------------------
# ● 判断是否显示 HP 条
#--------------------------------------------------------------------------
def show_hp_bar?#是否显示hp栏?
#return false if @character.is_a?(EFS_Hero)
# 如果$场景,则返回假的。efs故事模式
return false if $scene.efs_story_mode
#如果事件hp>0&&@角色已删除 &&表示与,意为同时都要满足。&&逻辑运算符,并且是双目运算符
if event_hp > 0 && !@character.removed
#返回$游戏开关[HPBarSwitchID]||@角色.hp计数器>0
return $game_switches[HPBarSwitchID] || @character.hp_counter > 0 #) && ! $game_switches[HPBarDOESNOTSwitchID]
else #否则
return false#返回假的
end
end
#--------------------------------------------------------------------------
# ● 判断是否显示 MP 条
#--------------------------------------------------------------------------
def show_mp_bar?
#return false if @character.is_a?(EFS_Hero)
return false if $scene.efs_story_mode
if event_mmp > 0 && !@character.removed
return $game_switches[HPBarSwitchID] || @character.hp_counter > 0 #) && ! $game_switches[HPBarDOESNOTSwitchID]
else
return false
end
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
#别名hzhj旧更新使事件参数栏更新
alias hzhj_old_update_make_event_param_bar update
def update #定义更新
#hzhj旧更新生成事件参数栏
hzhj_old_update_make_event_param_bar
#如果@角色.是_a?(EFS_战斗者)
if !@character.is_a?(EFS_Battler)
# @参数精灵。每个{|精灵|精灵.可见=假的}
@param_sprites.each{|sprite|sprite.visible = false}
else
# 刷新 HP 可见状态
if show_hp_bar? #如果显示hp栏?
#@hp精灵。可见=@hp后台精灵可见=真
@hp_sprite.visible = @hp_back_sprite.visible = true
# @hp精灵。bitmap=角色扮演::缓存图片(“HPBar-E”)如果@角色。团队!=1.
@hp_sprite.bitmap = RPG::Cache.picture("HPBar-E") if @character.team != 1 #wtf you doing
#减少计数
# 除非$游戏切换[HPBarSwitchID]
unless $game_switches[HPBarSwitchID]
#如果@角色。hp计数器==hp条形时间显示
if @character.hp_counter == HPbarTimeDisplay
@param_sprites.each do |sprite| #@参数精灵。每个做|精灵|
sprite.opacity = 255 #精灵不透明度=255
end
#els if@字符。hp计数器< HPbarTimeDisplay /3
elsif @character.hp_counter < HPbarTimeDisplay/3
@param_sprites.each do |sprite|#@参数精灵。每个做|精灵|
##精灵不透明度-=255/(HPbarTimeDisplay/3)
sprite.opacity -= 255/(HPbarTimeDisplay/3)
end
end
#@性格。hp计数器-=1
@character.hp_counter -= 1
else#否则
@param_sprites.each do |sprite|#@参数精灵。每个做|精灵|
sprite.opacity = 255#精灵不透明度=255
end
end
# 刷新坐标
@param_sprites.each do |sprite|#@参数精灵。每个做|精灵|
sprite.ox = sprite.bitmap.width / 2#精灵ox=精灵位图宽度/2
sprite.oy = sprite.bitmap.height#精灵.oy=精灵。位图高度
sprite.x = x
#sprite.y = y - 52
#sprite.opacity = 255
shif = @character.is_cal#盖印图层=@角色。是计算函数
sprite.y = y - (shif ? 82 : 52)#精灵.y=y-(盖印图层?82:52)
sprite.z = z#精灵.z = z
end
@hp_sprite.z += 1#hp_精灵.z = z
@mp_sprite.z += 1
# 计算 HP 显示区域
#hp宽=(@hp 精灵.位图.宽*1.0*事件hp/事件mhp)。圆形的
hpw = (@hp_sprite.bitmap.width * 1.0 * event_hp / event_mhp).round
# hp宽=[hp宽,@hp精灵位图宽度].最小值,0].最大值
hpw = [[hpw, @hp_sprite.bitmap.width].min, 0].max
hph = @hp_sprite.bitmap.height#hp高=@hp精灵位图高度
#@hp精灵。src矩形。集合(0,0,hp宽,hp高)
@hp_sprite.src_rect.set(0, 0, hpw, hph)
# 刷新 MP 可见状态
@mp_sprite.visible = @mp_back_sprite.visible = (show_mp_bar? and event_mmp > 0) # 正太君改
if show_mp_bar?
# 修正 HP 坐标
@hp_sprite.y -= (@mp_sprite.oy + 1)
@hp_back_sprite.y = @hp_sprite.y
# 计算 MP 显示区域
if event_mmp > 0 # 正太君改
mpw = (@mp_sprite.bitmap.width * 1.0 * event_mp / event_mmp).round
mpw = [[mpw, @mp_sprite.bitmap.width].min, 0].max
mph = @mp_sprite.bitmap.height
@mp_sprite.src_rect.set(0, 0, mpw, mph)
end
end
else
@param_sprites.each{|sprite|sprite.visible = false}
end
end
end
end