Project1
标题:
如何设置伤害反弹,还有选择人物
[打印本页]
作者:
勇者兔
时间:
2015-5-24 10:32
标题:
如何设置伤害反弹,还有选择人物
就是一个荆棘光环这样的东西,可以反弹伤害,虽然自己不受伤,但不是百分百反弹
或者像LOL荆棘之甲这样,自己受伤害,但也可以反弹的
还有如何选择初期人物,比如10个中选4个这样
作者:
三途亚梦
时间:
2015-5-24 12:35
反伤挺麻烦的,粗糙的做可以通过改make_damage_value的方法做出效果,当然具体得按你的要求才能确定如何写。
详细的可以学习图书馆中《伤害公式的妙用》中的知识。
选择角色就是在游戏初期做一个事件,比如在一张地图里摆出10个人物事件,然后让玩家通过操作来选择人物。
也可以通过选项来做,但是不推荐。
作者:
勇者兔
时间:
2015-5-24 14:54
三途亚梦 发表于 2015-5-24 12:35
反伤挺麻烦的,粗糙的做可以通过改make_damage_value的方法做出效果,当然具体得按你的要求才能确定如何写 ...
反伤觉得没指望了。但是如果通过对话事件选择角色应该不会很麻烦吧。
作者:
jianyulei
时间:
2015-5-24 19:09
#==============================================================================
# ■ RGSS3 一定割合ダメージ共有特徴 Ver1.01 by 星潟
#------------------------------------------------------------------------------
# ダメージを受けた際、相手にもダメージを与える特徴を作成します。
# HP版とMP版をそれぞれ利用できます。
# なお、ダメージが負の値(回復)の際には効果を発揮しません。
#==============================================================================
# 特徴(アクター/エネミー/ステート/装備品)設定例
#==============================================================================
# <HPDB:50,25>
# 25%の確率で受けたHPダメージの50%分のHPダメージを相手に返す。
#------------------------------------------------------------------------------
# <MPDB:100,50>
# 50%の確率で受けたMPダメージの100%分のMPダメージを相手に返す。
#------------------------------------------------------------------------------
# <HPDBR:75,65>
# 65%の確率で受けたHPダメージの75%分のMPダメージを相手に返す。
#------------------------------------------------------------------------------
# <MPDBR:25,100>
# 100%の確率で受けたMPダメージの25%分のHPダメージを相手に返す。
#------------------------------------------------------------------------------
# <HPDB:a.atk,25>
# 25%の確率で受けたHPダメージの
# 攻撃を受けた側の攻撃力の値%分のHPダメージを相手に返す。
#------------------------------------------------------------------------------
# <MPDB:100,b.def>
# 攻撃した側の防御力%の確率で
# 受けたMPダメージの100%分のMPダメージを相手に返す。
#------------------------------------------------------------------------------
# <HPDBR:a.mat,100-b.mdf>
# 100から攻撃した側の魔法防御を引いた値%の確率で受けたHPダメージの
# 攻撃を受けた側の魔法力の値%分のMPダメージを相手に返す。
#------------------------------------------------------------------------------
# <ダメージ共有無効特徴:100>
# 100%の確率で、相手のダメージ共有効果を無効化します。
#------------------------------------------------------------------------------
# <ダメージ共有無効特徴:a.mat-b.mdf>
# 自分の魔法力から相手の魔法防御を引いた値%の確率で
# 相手のダメージ共有効果を無効化します。
#==============================================================================
# アイテム/スキル設定例
#==============================================================================
# <ダメージ共有無効特徴:50>
# 100%の確率で、相手のダメージ共有効果を無効化します。
#------------------------------------------------------------------------------
# <ダメージ共有無効特徴:a.mat-b.mdf>
# 自分の魔法力から相手の魔法防御を引いた値%の確率で
# 相手のダメージ共有効果を無効化します。
#==============================================================================
# ももまるLabs様のXPスタイルバトルを使用されている方は
# 他サイト対応素材ページから一定割合ダメージ共有特徴XPSも併せて使用してください。
#==============================================================================
# Ver1.01 処理を効率化しました。
# ダメージ共有を一定確率で無効化する特徴と
# ダメージ共有を一定確率で無効化するアイテム/スキルを
# 作成できるようにしました。
# 回復効果まで共有していた不具合を修正しました。
# また、計算式を以て処理を行えるように変更しました。
#==============================================================================
module PAINBOND
#HPダメージをHPダメージで返す場合のキーワードを設定します。
WORD1 = "HPDB"
#MPダメージをMPダメージで返す場合のキーワードを設定します。
WORD2 = "MPDB"
#HPダメージをMPダメージで返す場合のキーワードを設定します。
WORD3 = "HPDBR"
#MPダメージをHPダメージで返す場合のキーワードを設定します。
WORD4 = "MPDBR"
#共有無効スキル設定用のキーワードを設定します。
WORD5 = "ダメージ共有無効"
#共有無効特徴設定用のキーワードを設定します。
WORD6 = "ダメージ共有無効特徴"
#使用者と対象者が同じ場合に共有効果を有効にするかどうかを指定。
#trueで有効、falseで無効。
SELF_FLAG = false
end
module Vocab
#アクターがHPダメージを返された場合のメッセージを設定します。
ActorHPB = "%s受到了%s的反弹伤害!"
#エネミーがHPダメージを返された場合のメッセージを設定します。
EnemyHPB = "%s受到了%s的反弹伤害!"
#アクターがMPダメージを返された場合のメッセージを設定します。
ActorMPB = "呪いにより%sの%sが %s 減った!"
#エネミーがMPダメージを返された場合のメッセージを設定します。
EnemyMPB = "呪いにより%s%sの%sが %s 減った!"
end
class Game_Temp
attr_accessor :pbd_user
attr_accessor :pbd_target
end
class Game_ActionResult
attr_reader :hpb_star
attr_reader :mpb_star
#--------------------------------------------------------------------------
# ダメージ値のクリア
#--------------------------------------------------------------------------
alias clear_damage_values_painbond clear_damage_values
def clear_damage_values
#本来の処理を実行。
clear_damage_values_painbond
#ダメージ共有用変数の初期化。
@hpb_star = 0
@mpb_star = 0
end
#--------------------------------------------------------------------------
# ダメージの作成
#--------------------------------------------------------------------------
alias make_damage_painbond make_damage
def make_damage(value, item)
#本来の処理を実行。
make_damage_painbond(value, item)
#使用失敗時は処理を中断する。
return if !@success
#ダメージ共有の値を作成。
make_pb_hpdamage(@hp_damage)
make_pb_mpdamage(@mp_damage)
#値を整数にする。
@hpb_star = @hpb_star.to_i
@mpb_star = @mpb_star.to_i
end
#--------------------------------------------------------------------------
# HP ダメージ共有の計算
#--------------------------------------------------------------------------
def make_pb_hpdamage(damage)
#ダメージ量が0以下の時は処理を行わない。
return unless damage > 0
#HPダメージからデータを作成する。
@hpb_star += damage * @battler.hpb_star / 100
@mpb_star += damage * @battler.hpbr_star / 100
end
#--------------------------------------------------------------------------
# MP ダメージ共有の計算
#--------------------------------------------------------------------------
def make_pb_mpdamage(damage)
#ダメージ量が0以下の時は処理を行わない。
return unless damage > 0
#MPダメージからデータを作成する。
@mpb_star += damage * @battler.mpb_star / 100
@hpb_star += damage * @battler.mpbr_star / 100
end
#--------------------------------------------------------------------------
# HP ダメージ共有の文章を取得
#--------------------------------------------------------------------------
def hpb_text(damage)
#フォーマットを取得し、文章を作成する。
fmt = @battler.actor? ? Vocab::ActorHPB : Vocab::EnemyHPB
sprintf(fmt, @battler.name, damage)
end
#--------------------------------------------------------------------------
# MP ダメージ共有の文章を取得
#--------------------------------------------------------------------------
def mpb_text(damage)
#フォーマットを取得し、文章を作成する。
fmt = @battler.actor? ? Vocab::ActorMPB : Vocab::EnemyMPB
sprintf(fmt, @battler.name, Vocab::mp, damage)
end
end
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ダメージ共有無効発動率を作成
#--------------------------------------------------------------------------
def painbond_break(item)
#戦闘中でなければ0を返す。
return 0 unless SceneManager.scene_is?(Scene_Battle)
#使用者と対象をそれぞれ取得。
a = self
b = $game_temp.pbd_target
#アイテム/スキルのダメージ共有無効発動率を取得。
number = eval(item.i_painbond_break)
#各特徴のダメージ共有無効率を加算する。
feature_objects.each {|object| number += eval(object.f_painbond_break)}
#ダメージ共有無効率を返す。
number
end
#--------------------------------------------------------------------------
# HPダメージをHPダメージで返す
#--------------------------------------------------------------------------
def hpb_star
#戦闘中でなければ0を返す。
return 0 unless SceneManager.scene_is?(Scene_Battle)
#使用者と対象をそれぞれ取得。
a = self
b = $game_temp.pbd_user
#使用者と対象者が同じ場合は処理を行わない場合、それに該当するなら0を返す。
return 0 if a == b && !PAINBOND::SELF_FLAG
#初期値を0とする。
number = 0
#特徴別にデータを取得し、ダメージ共有効果を判定する。
feature_objects.each {|object|
number += eval(object.hpb_star[0]) if eval(object.hpb_star[1]) > rand(100)}
#値を返す。
return number
end
#--------------------------------------------------------------------------
# MPダメージをMPダメージで返す
#--------------------------------------------------------------------------
def mpb_star
#戦闘中でなければ0を返す。
return 0 unless SceneManager.scene_is?(Scene_Battle)
#使用者と対象をそれぞれ取得。
a = self
b = $game_temp.pbd_user
#使用者と対象者が同じ場合は処理を行わない場合、それに該当するなら0を返す。
return 0 if a == b && !PAINBOND::SELF_FLAG
#初期値を0とする。
number = 0
#特徴別にデータを取得し、ダメージ共有効果を判定する。
feature_objects.each {|object|
number += eval(object.mpb_star[0]) if eval(object.mpb_star[1]) > rand(100)}
#値を返す。
return number
end
#--------------------------------------------------------------------------
# HPダメージをMPダメージで返す
#--------------------------------------------------------------------------
def hpbr_star
#戦闘中でなければ0を返す。
return 0 unless SceneManager.scene_is?(Scene_Battle)
#使用者と対象をそれぞれ取得。
a = self
b = $game_temp.pbd_user
#使用者と対象者が同じ場合は処理を行わない場合、それに該当するなら0を返す。
return 0 if a == b && !PAINBOND::SELF_FLAG
#初期値を0とする。
number = 0
#特徴別にデータを取得し、ダメージ共有効果を判定する。
feature_objects.each {|object|
number += eval(object.hpbr_star[0]) if eval(object.hpbr_star[1]) > rand(100)}
#値を返す。
return number
end
#--------------------------------------------------------------------------
# MPダメージをHPダメージで返す
#--------------------------------------------------------------------------
def mpbr_star
#戦闘中でなければ0を返す。
return 0 unless SceneManager.scene_is?(Scene_Battle)
#使用者と対象をそれぞれ取得。
a = self
b = $game_temp.pbd_user
#使用者と対象者が同じ場合は処理を行わない場合、それに該当するなら0を返す。
return 0 if a == b && !PAINBOND::SELF_FLAG
#初期値を0とする。
number = 0
#特徴別にデータを取得し、ダメージ共有効果を判定する。
feature_objects.each {|object|
number += eval(object.mpbr_star[0]) if eval(object.mpbr_star[1]) > rand(100)}
#値を返す。
return number
end
end
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# スキル/アイテムの効果を適用
#--------------------------------------------------------------------------
alias apply_item_effects_painbond apply_item_effects
def apply_item_effects(target, item)
$game_temp.pbd_user = @subject
$game_temp.pbd_target = target
a = @subject
b = target
#本来の処理を実行。
apply_item_effects_painbond(target, item)
#リフレッシュする。
refresh_status
#行動主体が存在しないか
#行動主体かアイテムのダメージ共有効果無効判定に成功した場合は飛ばす。
if !@subject or @subject.painbond_break(item) > rand(100)
$game_temp.pbd_user = nil
$game_temp.pbd_target = nil
return
end
#HPダメージ共有効果が有効かつ、HPが0より大きいなら実行する。
if target.result.hpb_star > 0 && @subject.hp > 0
@subject.hp -= target.result.hpb_star
refresh_status
@log_window.display_hpb(@subject, item, target.result.hpb_star)
@log_window.display_added_states(@subject) if @subject.dead?
end
#MPダメージ共有効果が有効かつ、MPが0より大きいなら実行する。
if target.result.mpb_star > 0 && @subject.mp > 0
@subject.mp -= target.result.mpb_star
refresh_status
@log_window.display_mpb(@subject, item, target.result.mpb_star)
end
$game_temp.pbd_user = nil
$game_temp.pbd_target = nil
end
end
class Window_BattleLog < Window_Selectable
#--------------------------------------------------------------------------
# HP ダメージ共有表示
#--------------------------------------------------------------------------
def display_hpb(target, item, hpb_star)
#ダメージエフェクト実行。
target.perform_damage_effect
#メッセージの表示。
add_text(target.result.hpb_text(hpb_star))
#ウェイト
wait
end
#--------------------------------------------------------------------------
# MP ダメージ共有表示
#--------------------------------------------------------------------------
def display_mpb(target, item, mpb_star)
#メッセージの表示。
add_text(target.result.mpb_text(mpb_star))
#ウェイト
wait
end
end
class RPG::BaseItem
#--------------------------------------------------------------------------
# HPダメージをHPダメージで返す
#--------------------------------------------------------------------------
def hpb_star
#キャッシュが存在する場合はキャッシュを返す。
return @hpb_star if @hpb_star != nil
#メモ欄からデータを取得。
memo = self.note.scan(/<#{PAINBOND::WORD1}[::](\S+),(\S+)>/).flatten
@hpb_star = memo != nil && !memo.empty? ? memo : ["0","0"]
#データを返す。
@hpb_star
end
#--------------------------------------------------------------------------
# MPダメージをMPダメージで返す
#--------------------------------------------------------------------------
def mpb_star
#キャッシュが存在する場合はキャッシュを返す。
return @mpb_star if @mpb_star != nil
#メモ欄からデータを取得。
memo = self.note.scan(/<#{PAINBOND::WORD2}[::](\S+),(\S+)>/).flatten
@mpb_star = memo != nil && !memo.empty? ? memo : ["0","0"]
#データを返す。
@mpb_star
end
#--------------------------------------------------------------------------
# HPダメージをMPダメージで返す
#--------------------------------------------------------------------------
def hpbr_star
#キャッシュが存在する場合はキャッシュを返す。
return @hpbr_star if @hpbr_star != nil
#メモ欄からデータを取得。
memo = self.note.scan(/<#{PAINBOND::WORD3}[::](\S+),(\S+)>/).flatten
@hpbr_star = memo != nil && !memo.empty? ? memo : ["0","0"]
#データを返す。
@hpbr_star
end
#--------------------------------------------------------------------------
# MPダメージをHPダメージで返す
#--------------------------------------------------------------------------
def mpbr_star
#キャッシュが存在する場合はキャッシュを返す。
return @mpbr_star if @mpbr_star != nil
#メモ欄からデータを取得。
memo = self.note.scan(/<#{PAINBOND::WORD4}[::](\S+),(\S+)>/).flatten
@mpbr_star = memo != nil && !memo.empty? ? memo : ["0","0"]
#データを返す。
@mpbr_star
end
#--------------------------------------------------------------------------
# 特徴のダメージ共有無効確率
#--------------------------------------------------------------------------
def f_painbond_break
#キャッシュが存在する場合はキャッシュを返す。
return @f_painbond_break if @f_painbond_break != nil
#メモ欄からデータを取得。
memo = self.note.scan(/<#{PAINBOND::WORD6}[::](\S+)>/).flatten
@f_painbond_break = memo != nil && !memo.empty? ? memo[0] : "0"
#データを返す。
@f_painbond_break
end
end
class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# アイテム/スキルのダメージ共有無効確率
#--------------------------------------------------------------------------
def i_painbond_break
#キャッシュが存在する場合はキャッシュを返す。
return @i_painbond_break if @i_painbond_break != nil
#メモ欄からデータを取得。
memo = self.note.scan(/<#{PAINBOND::WORD5}[::](\S+)>/).flatten
@i_painbond_break = memo != nil && !memo.empty? ? memo[0] : "0"
#データを返す。
@i_painbond_break
end
end
复制代码
作者:
勇者兔
时间:
2015-5-26 19:07
三途亚梦 发表于 2015-5-24 12:35
反伤挺麻烦的,粗糙的做可以通过改make_damage_value的方法做出效果,当然具体得按你的要求才能确定如何写 ...
就是给自己添加一个反上的BUFF,自己受到攻击会减血,但是怪物也跟着减血
作者:
chd114
时间:
2015-5-27 04:41
在game_battler的
#--------------------------------------------------------------------------
# ● 处理伤害
# 调用前需要设置好
# @result.hp_damage @result.mp_damage
# @result.hp_drain @result.mp_drain
#--------------------------------------------------------------------------
def execute_damage(user)
on_damage(@result.hp_damage) if @result.hp_damage > 0
self.hp -= @result.hp_damage
self.mp -= @result.mp_damage
user.hp += @result.hp_drain
user.mp += @result.mp_drain
end
复制代码
的
self.hp -= @result.hp_damage
复制代码
前面加判定或直接修改呗···
可以改成
if self.state(x)?#被击者有某个状态时
[email protected]
_damage#攻击者受到全额反弹,被击者不受伤害
else
[email protected]
_damage
end
复制代码
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1