Project1
标题:
受到攻击触发反伤
[打印本页]
作者:
方风悠然
时间:
2019-4-8 19:29
标题:
受到攻击触发反伤
啊,最近问的比较多
和上个问的差不多,在拥有x号状态下受到xxx点伤害,反伤x%的伤害这种orz
作者:
KB.Driver
时间:
2019-4-8 22:32
试着写了一个,伤害确实能反,不过似乎没有效果的演示。
看看有没有人接着完善一下吧。
[pre lang="ruby"]
# 在状态备注中写<反伤 0.1>则拥有该状态时,反弹所受伤害的10%给使用者。
class RPG::State
def reflect?
self.reflect > 0.0
end
def reflect
tag = "(?:反伤|reflect)"
int = "[ :=]*"
cap = "([0-9.]+)"
m = self.note.match(/<#{tag}#{int}#{cap}>/)
m ? m[1].to_f : 0.0
end
end
class Game_Battler
#--------------------------------------------------------------------------
# ● [别名修改]伤害效果
#--------------------------------------------------------------------------
alias execute_damage_for_reflect execute_damage
def execute_damage(user)
execute_damage_for_reflect(user)
if self.states.any?{|s| s.reflect?}
rt = self.states.map{|s| s.reflect}.max
if @hp_damage > 0
user.hp -= (@hp_damage * rt).to_i
end
end
end
end[/pre]
作者:
方风悠然
时间:
2019-4-10 21:06
KB.Driver 发表于 2019-4-8 22:32
试着写了一个,伤害确实能反,不过似乎没有效果的演示。
看看有没有人接着完善一下吧。
哇哇!这个太棒啦~,有空学了脚本后我看看能不能完善~
作者:
活气寒露
时间:
2019-4-16 21:13
本帖最后由 活气寒露 于 2019-4-16 21:16 编辑
(, 下载次数: 147)
上传
点击文件名下载附件
使用正则表达式很简单就能实现了。
附上脚本:
#==============================================================================
# ■ State
#==============================================================================
module State
State_Reflect = /\<反彈傷害[ ]([\+\-]?\d+)\>/
end
#==============================================================================
# ■ RPG::State
#==============================================================================
class RPG::State
#--------------------------------------------------------------------------
# * create_state_angel_cache
#--------------------------------------------------------------------------
def create_state_angel_cache
@state_reflect = 0
self.note.each_line { |line|
case line
when State::State_Reflect
@state_reflect = ($1 != nil ? $1.to_i : 0)
end
}
end
#--------------------------------------------------------------------------
# * state_reflect
#--------------------------------------------------------------------------
def state_reflect
create_state_angel_cache if @state_reflect == nil
return @state_reflect
end
end
#==============================================================================
# ** Vocab
#==============================================================================
module Vocab
ReflectDamage = "%s受到了%s點反彈傷害。"
end
#==============================================================================
# ** Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# * reflect
#--------------------------------------------------------------------------
def reflect
n = 0
states.compact.each { |state| n += state.state_reflect }
return n
end
#--------------------------------------------------------------------------
# * execute_damage
#--------------------------------------------------------------------------
alias angel_execute_damage execute_damage
def execute_damage(user)
$reflect = 0
angel_execute_damage(user)
if self.reflect > 0
if @hp_damage > 0
$reflect = (@hp_damage * self.reflect) / 100
user.hp -= $reflect
end
end
end
end
#==============================================================================
# ** Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# * 顯示HP傷害資訊 display_hp_damage
#--------------------------------------------------------------------------
def display_hp_damage(target, obj = nil)
if target.hp_damage == 0 # 無HP傷害
return if obj != nil and obj.damage_to_mp
return if obj != nil and obj.base_damage == 0
fmt = target.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
text = sprintf(fmt, target.name)
elsif target.absorbed # HP被汲取
fmt = target.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
text = sprintf(fmt, target.name, Vocab::hp, target.hp_damage)
elsif target.hp_damage > 0 # HP傷害
if target.actor?
text = sprintf(Vocab::ActorDamage, target.name, target.hp_damage)
Sound.play_actor_damage
$game_troop.screen.start_shake(5, 5, 10)
else
text = sprintf(Vocab::EnemyDamage, target.name, target.hp_damage)
Sound.play_enemy_damage
target.blink = true
end
if $reflect > 0
@message_window.add_instant_text(text)
wait(30)
text = sprintf(Vocab::ReflectDamage, @active_battler.name, "#{$reflect}")
end
else # HP恢復
fmt = target.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
text = sprintf(fmt, target.name, Vocab::hp, -target.hp_damage)
Sound.play_recovery
end
@message_window.add_instant_text(text)
wait(30)
end
end
复制代码
使用方法:在所需装备的备注里填写<反彈傷害 数值>
则处于该状态时就会反弹数值/100 的伤害指数。
(, 下载次数: 166)
上传
点击文件名下载附件
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X5.0