class Spriteset_Battle
# 获取保存了我方和敌人精灵的数组
def battler_sprites
return @actor_sprites + @enemy_sprites
end
end
class Scene_Battle
alias make_skill_action_result_old make_skill_action_result
alias update_phase4_step6_old update_phase4_step6
def make_skill_action_result
make_skill_action_result_old
# 此处按照 ‘|' 将技能名分开,无视空格,查找是否包含 "<暗>"
# 包含的话即是特殊技能,降低与技能无关的人的不透明度
# 比如 "十字斩 | <暗>"、"扫荡|<暗>|<魔>" 都是匹配的技能
# (此处自行修改)~
if(@skill.name.split(/\s*\|\s*/).include?("<暗>"))
# 遍历数组中 Sprite_Battler 类型的元素 sp
# 通过这个元素可以获取到与精灵相关的 Game_Actor 对象
# 所以就能直接和同样是 Game_Actor 类型的 @active_battler
# 以及 @target_battlers 数组中的元素比较
for sp in @spriteset.battler_sprites
# 跳过施放技能者及被攻击者
next if (sp.battler == @active_battler ||
@target_battlers.include?(sp.battler))
sp.dime = true
end
end
end
def update_phase4_step6
update_phase4_step6_old
# 技能动画刷新结束时恢复不透明度
for sp in @spriteset.battler_sprites
sp.dime = false
end
end
end
class Sprite_Battler < RPG::Sprite
attr_accessor :dime
def initialize(viewport, battler = nil)
super(viewport)
@battler = battler
@battler_visible = false
@dime = false
end
def update
super
# 战斗者为 nil 的情况下
if @battler == nil
self.bitmap = nil
loop_animation(nil)
return
end
# 文件名和色相与当前情况有差异的情况下
if @battler.battler_name != @battler_name or
@battler.battler_hue != @battler_hue
# 获取、设置位图
@battler_name = @battler.battler_name
@battler_hue = @battler.battler_hue
self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
@width = bitmap.width
@height = bitmap.height
self.ox = @width / 2
self.oy = @height
# 如果是战斗不能或者是隐藏状态就把透明度设置成 0
if @battler.dead? or @battler.hidden
self.opacity = 0
end
end
# 动画 ID 与当前的情况有差异的情况下
if @battler.damage == nil and
@battler.state_animation_id != @state_animation_id
@state_animation_id = @battler.state_animation_id
loop_animation($data_animations[@state_animation_id])
end
# 施放特殊技能时以 5 每帧的比率降低不透明度到 40
if @dime
self.opacity -= 5 if self.opacity > 40
# 应该被显示的角色的情况下
elsif @battler_visible
# 不在主状态或在特殊技能施放完毕的时候恢复到不透明
if $game_temp.battle_main_phase
self.opacity += 3 if self.opacity < 255
else
self.opacity -= 3 if self.opacity > 207
end
end
# 明灭
if @battler.blink
blink_on
else
blink_off
end
# 不可见的情况下
unless @battler_visible
# 出现
if not @battler.hidden and not @battler.dead? and
(@battler.damage == nil or @battler.damage_pop)
appear
@battler_visible = true
end
end
# 可见的情况下
if @battler_visible
# 逃跑
if @battler.hidden
$game_system.se_play($data_system.escape_se)
escape
@battler_visible = false
end
# 白色闪烁
if @battler.white_flash
whiten
@battler.white_flash = false
end
# 动画
if @battler.animation_id != 0
animation = $data_animations[@battler.animation_id]
animation(animation, @battler.animation_hit)
@battler.animation_id = 0
end
# 伤害
if @battler.damage_pop
damage(@battler.damage, @battler.critical)
@battler.damage = nil
@battler.critical = false
@battler.damage_pop = false
end
# korapusu
if @battler.damage == nil and @battler.dead?
if @battler.is_a?(Game_Enemy)
$game_system.se_play($data_system.enemy_collapse_se)
else
$game_system.se_play($data_system.actor_collapse_se)
end
collapse
@battler_visible = false
end
end
# 设置活动块的坐标
self.x = @battler.screen_x
self.y = @battler.screen_y
self.z = @battler.screen_z
end
end
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |