赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 1520 |
最后登录 | 2017-6-25 |
在线时间 | 27 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 27 小时
- 注册时间
- 2016-8-3
- 帖子
- 15
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
是关于 <MP同時ダメ割合:100>的问题,下面是脚本中这个能力的说明及设定,这个能力在角色对敌人造成攻击的时候,将对敌人造成HP伤害的50%转化成MP伤害
意思就是角色攻击造成敌人100点HP伤害,有这个能力后,就变成了攻击敌人同时造成HP伤害50点、MP伤害50点
但是这个能力本身限定为只有技能中可用,无法添加到角色备注中,角色普通攻击无法触发,但是敌人却可以备注,普通攻击同时伤害角色HP和MP
萌新看了脚本,想让角色和敌人一样,可以通过普通攻击造成双重伤害,却无从下手
# ■ RGSS3 吸収通常攻撃特徴 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# ステート付加:通常攻撃の攻撃を行った際
# 一定確率でダメージのうち一定割合分のHPを吸収するか
# 自らのMPとして変換する特徴を作成できるようになります。
# HP吸収の場合はHP吸収発動率とHP吸収割合の設定が必要となります。
# 同様に、MP変換の場合はMP変換発動率とMP変換割合の設定が必要となります。
# ※スキルのメモ欄でも可能にした。その際は割合のみ見てる。発動率は100%
# ○(追加)MPも同時にダメージ。HPダメージのうち○%をMPダメージとする。
# (その分HPダメージ減る)※スキルのみ
# <MP同時ダメ割合:100>
# ■ Game_Battler
#------------------------------------------------------------------------------
# スプライトや行動に関するメソッドを追加したバトラーのクラスです。このクラス
# は Game_Actor クラスと Game_Enemy クラスのスーパークラスとして使用されます。
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● [エイリアス]:使用効果[ステート付加]:通常攻撃
# 併用化ベーススクリプトD で再定義されているので、入れるならその下 add zorome
#--------------------------------------------------------------------------
alias :item_effect_add_state_attack_drain :item_effect_add_state_attack
def item_effect_add_state_attack(user, item, effect)
item_effect_add_state_attack_drain(user, item, effect)
return if user == nil or item == nil
temp_drain_flag = false # add zorome
if rand(100) < user.at_h_drain_execute_rate
temp_h_drain_rate = user.h_drain_rate
# @result.hp_damage がマイナスだと逆にダメージ受けるのでチェック追加 add zorome
if temp_h_drain_rate > 0 && @result.hp_damage > 0
# HP吸収時のメッセージ表示方法をデフォルトから変更するか?
if !DRAIN_ATTACK::M_C
# デフォルト
# @result.hp_drain = @result.hp_damage * user.h_drain_rate / 100
@result.hp_drain = @result.hp_damage * temp_h_drain_rate / 100
@result.hp_drain = [@result.hp_drain, @result.pre_hp].min
user.hp += @result.hp_drain if !user.dead?
temp_drain_flag = true # add zorome
else
# デフォルトから変更する
# @result.exhp_drain = @result.hp_damage * user.h_drain_rate / 100
@result.exhp_drain = @result.hp_damage * temp_h_drain_rate / 100
@result.exhp_drain = [@result.exhp_drain, @result.pre_hp].min
user.hp += @result.exhp_drain if !user.dead?
temp_drain_flag = true # add zorome
end
end
end
if rand(100) < user.at_m_drain_execute_rate
temp_m_drain_rate = user.m_drain_rate
# @result.hp_damage がマイナスだと逆にダメージ受けるのでチェック追加 add zorome
if temp_m_drain_rate > 0 && @result.hp_damage > 0
if !DRAIN_ATTACK::M_C
# デフォルト
# @result.mp_drain = @result.hp_damage * user.m_drain_rate / 100
@result.mp_drain = @result.hp_damage * temp_m_drain_rate / 100
@result.mp_drain = [@result.mp_drain, @result.pre_hp].min
user.mp += @result.mp_drain if !user.dead?
temp_drain_flag = true # add zorome
else
# デフォルトから変更する
# @result.exmp_drain = @result.hp_damage * user.m_drain_rate / 100
@result.exmp_drain = @result.hp_damage * temp_m_drain_rate / 100
@result.exmp_drain = [@result.exmp_drain, @result.pre_hp].min
user.mp += @result.exmp_drain if !user.dead?
temp_drain_flag = true # add zorome
end
end
end
if temp_drain_flag == true
DRAIN_ATTACK::DRAIN_SE.play # 吸収SE add zorome
# execute_damage(user) # add zorome
execute_damage_popup(user) # add zorome
end
end
#--------------------------------------------------------------------------
# ● [追加]:
#--------------------------------------------------------------------------
def at_h_drain_execute_rate
rate = 0
feature_objects.each do |object|
data = object.note
data.each_line { |line|
memo = line.scan(/<#{DRAIN_ATTACK::HPD}[::](\S+)>/)
memo = memo.flatten
rate += memo[0].to_i if memo != nil && !memo.empty?
}
end
return rate
end
#--------------------------------------------------------------------------
# ● [追加]:
#--------------------------------------------------------------------------
def at_m_drain_execute_rate
rate = 0
feature_objects.each do |object|
data = object.note
data.each_line { |line|
memo = line.scan(/<#{DRAIN_ATTACK::MPD}[::](\S+)>/)
memo = memo.flatten
rate += memo[0].to_i if memo != nil && !memo.empty?
}
end
return rate
end
#--------------------------------------------------------------------------
# ● [追加]:
#--------------------------------------------------------------------------
def h_drain_rate
rate = 0
feature_objects.each do |object|
data = object.note
data.each_line { |line|
memo = line.scan(/<#{DRAIN_ATTACK::HPDR}[::](\S+)>/)
memo = memo.flatten
rate += memo[0].to_i if memo != nil && !memo.empty?
}
end
return rate
end
#--------------------------------------------------------------------------
# ● [追加]:
#--------------------------------------------------------------------------
def m_drain_rate
rate = 0
feature_objects.each do |object|
data = object.note
data.each_line { |line|
memo = line.scan(/<#{DRAIN_ATTACK::MPDR}[::](\S+)>/)
memo = memo.flatten
rate += memo[0].to_i if memo != nil && !memo.empty?
}
end
return rate
end
#--------------------------------------------------------------------------
# ● [追加]:MP同時ダメージ add zorome
#--------------------------------------------------------------------------
#~ def m_double_rate
#~ rate = 0
#~ feature_objects.each do |object|
#~ data = object.note
#~ data.each_line { |line|
#~ memo = line.scan(/<#{DRAIN_ATTACK::MPDDR}[::](\S+)>/)
#~ memo = memo.flatten
#~ rate += memo[0].to_i if memo != nil && !memo.empty?
#~ }
#~ end
#~ return rate
#~ end # def
end # class
#==============================================================================
# ■ Game_ActionResult
#------------------------------------------------------------------------------
# 戦闘行動の結果を扱うクラスです。このクラスは Game_Battler クラスの内部で
# 使用されます。
#==============================================================================
class Game_ActionResult
attr_accessor :exhp_drain
attr_accessor :exmp_drain
attr_accessor :pre_hp
#--------------------------------------------------------------------------
# ● [エイリアス]:ダメージ値のクリア
#--------------------------------------------------------------------------
alias :clear_damage_values_drain :clear_damage_values
def clear_damage_values
clear_damage_values_drain
@exhp_drain = 0
@exmp_drain = 0
@pre_hp = 0
end
#--------------------------------------------------------------------------
# ● [エイリアス]:ダメージの作成
#--------------------------------------------------------------------------
alias :make_damage_drain :make_damage
def make_damage(value, item)
@pre_hp = @battler.hp
make_damage_drain(value, item)
end
#--------------------------------------------------------------------------
# ● [追加]:HP 吸収の文章を取得
#--------------------------------------------------------------------------
def hp_damage_exdrain_text
fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
sprintf(fmt, @battler.name, Vocab::hp, @exhp_drain)
end
#--------------------------------------------------------------------------
# ● [追加]:MP 吸収の文章を取得
#--------------------------------------------------------------------------
def mp_damage_exdrain_text
fmt = @battler.actor? ? DRAIN_ATTACK::MESS1 : DRAIN_ATTACK::MESS2
if !DRAIN_ATTACK::M_C
mpd = @mp_drain
else
mpd = @exmp_drain
end
sprintf(fmt, Vocab::mp, mpd, "")
end
end
#==============================================================================
# ■ Window_BattleLog
#------------------------------------------------------------------------------
# 戦闘の進行を実況表示するウィンドウです。枠は表示しませんが、便宜上ウィンド
# ウとして扱います。
#==============================================================================
class Window_BattleLog < Window_Selectable
#--------------------------------------------------------------------------
# ● HP ダメージ表示
#--------------------------------------------------------------------------
alias :display_hp_damage_drain :display_hp_damage
def display_hp_damage(target, item)
display_hp_damage_drain(target, item)
if target.result.exhp_drain > 0 && DRAIN_ATTACK::M_C
add_text(target.result.hp_damage_exdrain_text)
wait
end
if (target.result.mp_drain > 0 && !DRAIN_ATTACK::M_C) or
(target.result.exmp_drain > 0 && DRAIN_ATTACK::M_C)
add_text(target.result.mp_damage_exdrain_text)
wait
end
end
end
# ● [追加]:MP同時ダメージ add zorome
#--------------------------------------------------------------------------
def m_double_rate
#~ rate = 0
return 0 unless @note
@note.match(/<#{DRAIN_ATTACK::MPDDR}[::](\S+)>/)
return 0 unless $1
return $1.to_i
end # def
#--------------------------------------------------------------------------
# ● [追加]:MP吸収ダメージ add zorome
#--------------------------------------------------------------------------
def m_drain_rate
#~ rate = 0
return 0 unless @note
@note.match(/<#{DRAIN_ATTACK::MPDR}[::](\S+)>/)
return 0 unless $1
return $1.to_i
end # def
#--------------------------------------------------------------------------
# ● [追加]:HP吸収ダメージ add zorome
#--------------------------------------------------------------------------
def h_drain_rate
#~ rate = 0
return 0 unless @note
@note.match(/<#{DRAIN_ATTACK::HPDR}[::](\S+)>/)
return 0 unless $1
return $1.to_i
end # def
# MP同時ダメージ処理 add zorome
if item.is_a?(RPG::Skill) == true
# temp_md_rate = user.m_double_rate # 武器防具ならこっちだが、
temp_md_rate = item.m_double_rate # スキルなので
if temp_md_rate > 0
# p "Game_Battler make_damage_value item.id = #{item.id}" # add zorome
# p " 元 value = #{value}"
# p " 元 temp_md_rate = #{temp_md_rate}"
temp_md_damage = value * temp_md_rate / 100
# temp_md_damage = value * temp_md_rate * 0.01 # 少数は×
value -= temp_md_damage.round.to_i
value = 0 if value < 0
# p " temp_md_damage = #{temp_md_damage}"
# p " 減 value = #{value}"
end
end
# そのままだと小数点以下は切り捨てるようなので四捨五入する
# ダメージを出す直前でやらないと踏み止まらない orz
value = apply_stand(value.round.to_i, item) # 踏みとどまり
# p " 元 value = #{value}"
# p " value.to_i = #{value.to_i}"
# p " value.round = #{value.round}" # 四捨五入するようだ add zorome
@result.make_damage(value.to_i, item)
# MP同時ダメージ処理 add zorome
if item.is_a?(RPG::Skill) == true
if temp_md_rate > 0
@result.mp_damage += temp_md_damage.to_i
@result.mp_damage = [self.mp, @result.mp_damage].min
end
# HP吸収ダメージ処理 add zorome
# HP吸収時のメッセージ表示方法をデフォルトから変更するか?
temp_h_drain_rate = item.h_drain_rate
# @result.hp_damage がマイナスだと逆にダメージ受けるのでチェック追加 add zorome
if temp_h_drain_rate > 0 && @result.hp_damage > 0
if !DRAIN_ATTACK::M_C
# デフォルト
# @result.hp_drain = @result.hp_damage * user.h_drain_rate / 100
@result.hp_drain = @result.hp_damage * temp_h_drain_rate / 100
@result.hp_drain = [@result.hp_drain, @result.pre_hp].min
# user.hp += @result.hp_drain if !user.dead?
else
# デフォルトから変更する
# @result.exhp_drain = @result.hp_damage * user.h_drain_rate / 100
@result.exhp_drain = @result.hp_damage * temp_h_drain_rate / 100
@result.exhp_drain = [@result.exhp_drain, @result.pre_hp].min
# execute_damage(user) で回復しないのでここで回復させる
user.hp += @result.exhp_drain if !user.dead?
end
end
# MP吸収ダメージ処理 add zorome
temp_m_drain_rate = item.m_drain_rate
# @result.hp_damage がマイナスだと逆にダメージ受けるのでチェック追加 add zorome
if temp_m_drain_rate > 0 && @result.hp_damage > 0
if !DRAIN_ATTACK::M_C
# デフォルト
# @result.mp_drain = @result.hp_damage * user.m_drain_rate / 100
@result.mp_drain = @result.hp_damage * temp_m_drain_rate / 100
@result.mp_drain = [@result.mp_drain, @result.pre_hp].min
# user.mp += @result.mp_drain if !user.dead?
else
# デフォルトから変更する
# @result.exmp_drain = @result.hp_damage * user.m_drain_rate / 100
@result.exmp_drain = @result.hp_damage * temp_m_drain_rate / 100
@result.exmp_drain = [@result.exmp_drain, @result.pre_hp].min
# execute_damage(user) で回復しないのでここで回復させる
# p "@result.hp_damage = #{@result.hp_damage}"
# p "@result.pre_hp = #{@result.pre_hp}"
# p "@result.exmp_drain = #{@result.exmp_drain}"
user.mp += @result.exmp_drain if !user.dead?
end
end
end |
-
1.png
(106.39 KB, 下载次数: 21)
-
2.png
(101.29 KB, 下载次数: 25)
|