416 lines
No EOL
14 KiB
Ruby
416 lines
No EOL
14 KiB
Ruby
#==============================================================================
|
||
# ■ RGSS3 逃走処理変更 Ver1.00 by 星潟
|
||
#==============================================================================
|
||
# 機能1
|
||
# デフォルトでは、逃走成功率は戦闘開始時に計算され
|
||
# 逃走失敗時に10%ずつ加算していく以外に変更はされませんが
|
||
# このスクリプトを導入する事で
|
||
# その時の状態に応じた値に計算する事ができるようになります。
|
||
# (敏捷性の強化等で逃げやすくする事が出来ます)
|
||
#==============================================================================
|
||
# 機能2
|
||
# 逃走成功率を上昇させる特徴と
|
||
# 逃走成功率を減少させる特徴を設定できるようになります。
|
||
#------------------------------------------------------------------------------
|
||
# ★機能2の設定例(特徴を有する項目に設定)
|
||
#------------------------------------------------------------------------------
|
||
# 味方側の逃走成功率に25%分加算したい場合
|
||
#
|
||
# <逃走成功率増加:25>
|
||
#------------------------------------------------------------------------------
|
||
# 敵側の逃走成功率を33%分減少させたい場合
|
||
#
|
||
# <逃走成功率減少:33>
|
||
#------------------------------------------------------------------------------
|
||
# 敵側の逃走成功率は基本100%で計算されますが
|
||
# アクター側に逃走成功率減少設定がある場合、逃走を失敗させる事も出来ます。
|
||
#------------------------------------------------------------------------------
|
||
# 戦闘開始時のみ計算を行う場合は、戦闘前に準備しておかなければ
|
||
# アクターには効果がないので注意が必要です。
|
||
#==============================================================================
|
||
# 機能3
|
||
# 逃走可否を戦闘中に変更するイベントコマンドのスクリプトが可能になります。
|
||
# (戦闘毎に効果はリセットされます)
|
||
# なお、イベントでの戦闘で逃走が許可されてない場合は逃走できません。
|
||
# この場合に途中で逃走可能にする場合は、あらかじめ逃走可能にしておき
|
||
# バトルイベントでターン0で逃走不可にしておくことで
|
||
# 逃走可否を戦闘中に切り替えできるイベントバトルが作成できます。
|
||
#------------------------------------------------------------------------------
|
||
# ★機能3の設定例
|
||
#------------------------------------------------------------------------------
|
||
# アクター側を逃走不可にする場合
|
||
#
|
||
# BattleManager.actor_escape_seal(true)
|
||
#------------------------------------------------------------------------------
|
||
# アクター側を逃走可能にする場合
|
||
#
|
||
# BattleManager.actor_escape_seal(false)
|
||
#------------------------------------------------------------------------------
|
||
# エネミー側を逃走不可にする場合
|
||
#
|
||
# BattleManager.enemy_escape_seal(true)
|
||
#------------------------------------------------------------------------------
|
||
# エネミー側を逃走可能にする場合
|
||
#
|
||
# BattleManager.enemy_escape_seal(false)
|
||
#==============================================================================
|
||
module ESC_PLUS
|
||
|
||
#基本逃走成功率の計算を戦闘開始時のみ行う場合は0、
|
||
#戦闘中随時行う場合は1を指定。
|
||
|
||
TYPE1 = 1
|
||
|
||
#逃走成功率の計算を全メンバーで行う場合は0
|
||
#戦闘メンバーのみで行う場合は1を指定。
|
||
|
||
TYPE2 = 1
|
||
|
||
#逃走成功率の最低保証を設定するかどうかを設定。
|
||
#trueで設定する。falseで設定しない。
|
||
|
||
UNDER = true
|
||
|
||
#逃走成功率の最低保証を設定する場合
|
||
#最低保証成功率をいくつにするかを指定。
|
||
|
||
URATE = 20
|
||
|
||
#逃走失敗時、次の逃走時の成功率への加算値を設定。
|
||
|
||
PLUS = 15
|
||
|
||
#逃走成功率増加特徴設定用キーワードを指定。(アクター側用)
|
||
|
||
WORD1 = "逃走成功率増加"
|
||
|
||
#逃走成功率減少特徴設定用キーワードを指定。(エネミー側用)
|
||
|
||
WORD2 = "逃走成功率減少"
|
||
|
||
end
|
||
class << BattleManager
|
||
#--------------------------------------------------------------------------
|
||
# アクター側の逃走許可の取得
|
||
#--------------------------------------------------------------------------
|
||
alias can_escape_change? can_escape?
|
||
def can_escape?
|
||
|
||
#逃走可能な戦闘であり、なおかつ逃走が封印されていない場合は逃走可能。
|
||
|
||
can_escape_change? && !@actor_escape_seal
|
||
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# エネミー側の逃走許可の取得
|
||
#--------------------------------------------------------------------------
|
||
def enemy_can_escape?
|
||
|
||
#100に逃走成功率補正を加えた値で基本逃走率判定を実行。
|
||
|
||
flag = (100 + $game_troop.escape_rate_plus - $game_party.escape_rate_minus) > rand(100)
|
||
|
||
#基本逃走率判定を満たし、敵の逃走が封印されていない場合は逃走可能。
|
||
|
||
flag && !@enemy_escape_seal
|
||
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# アクター側の逃走封印の設定
|
||
#--------------------------------------------------------------------------
|
||
def actor_escape_seal(data)
|
||
|
||
#アクター側の逃走封印設定を行う。
|
||
|
||
@actor_escape_seal = data
|
||
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# エネミー側の逃走封印の設定
|
||
#--------------------------------------------------------------------------
|
||
def enemy_escape_seal(data)
|
||
|
||
#エネミー側の逃走封印設定を行う。
|
||
|
||
@enemy_escape_seal = data
|
||
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# セットアップ
|
||
#--------------------------------------------------------------------------
|
||
alias setup_escape_rate_change setup
|
||
def setup(troop_id, can_escape = true, can_lose = false)
|
||
|
||
#アクター・エネミー双方の逃走封印設定を初期化する。
|
||
|
||
@actor_escape_seal = false
|
||
@enemy_escape_seal = false
|
||
|
||
#基本逃走成功率の計算を戦闘開始時のみ行う場合の為の前段階処理を実行。
|
||
|
||
@first_make_escape_ratio = [false, 0.0] if ESC_PLUS::TYPE1 == 0
|
||
|
||
#本来の処理を実行。
|
||
|
||
setup_escape_rate_change(troop_id, can_escape, can_lose)
|
||
|
||
#逃走失敗回数を初期化。
|
||
|
||
@escape_fail_count = 0
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 逃走成功率の作成
|
||
#--------------------------------------------------------------------------
|
||
alias make_escape_ratio_rate_change make_escape_ratio
|
||
def make_escape_ratio
|
||
|
||
#基本逃走成功率の計算を戦闘開始時のみ行う場合は
|
||
#初期逃走成功率の作成と、それに基づいた処理を行うようにする。
|
||
#そうでない場合は随時処理を行う。
|
||
|
||
if ESC_PLUS::TYPE1 == 0
|
||
|
||
#初回のみ初期基本逃走成功率を行う。
|
||
|
||
unless @first_make_escape_ratio[0]
|
||
|
||
#本来の処理を実行する。
|
||
|
||
make_escape_ratio_rate_change
|
||
|
||
#初期基本逃走成功率の作成。
|
||
|
||
first_make_escape_ratio
|
||
|
||
end
|
||
|
||
#初期逃走成功率を成功率に反映させる。
|
||
|
||
@escape_ratio = 0
|
||
@escape_ratio += @first_make_escape_ratio[1]
|
||
|
||
else
|
||
|
||
#本来の処理を実行する。
|
||
|
||
make_escape_ratio_rate_change
|
||
|
||
end
|
||
|
||
#逃走失敗回数に応じた逃走成功率加算値を加算する。
|
||
|
||
@escape_ratio += ($game_party.escape_rate_plus - $game_troop.escape_rate_minus) * 0.01
|
||
|
||
#最低保証成功率が設定されており
|
||
#逃走率が最低保証成功率を下回っている場合に限り
|
||
#逃走率を最低保証成功率の値まで引き上げる。
|
||
|
||
@escape_ratio = ESC_PLUS::URATE * 0.01 if ESC_PLUS::UNDER && ESC_PLUS::URATE * 0.01 > @escape_ratio
|
||
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 初期基本逃走成功率の作成
|
||
#--------------------------------------------------------------------------
|
||
def first_make_escape_ratio
|
||
|
||
#初期基本逃走成功率作成済みフラグを立てる。
|
||
|
||
@first_make_escape_ratio[0] = true
|
||
|
||
#初期基本逃走成功率を作成する。
|
||
|
||
@first_make_escape_ratio[1] += @escape_ratio
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 逃走の処理
|
||
#--------------------------------------------------------------------------
|
||
alias process_escape_rate_change process_escape
|
||
def process_escape
|
||
|
||
#基本逃走成功率を計算する。
|
||
|
||
make_escape_ratio
|
||
|
||
#逃走失敗回数に応じた逃走成功率加算値を加算する。
|
||
|
||
@escape_ratio += @escape_fail_count * ESC_PLUS::PLUS * 0.01
|
||
|
||
#本来の処理を実行。
|
||
|
||
data = process_escape_rate_change
|
||
|
||
#逃走に失敗した場合は失敗カウントを足す。
|
||
|
||
@escape_fail_count += 1 if !data
|
||
|
||
data
|
||
end
|
||
end
|
||
|
||
class Game_Unit
|
||
#--------------------------------------------------------------------------
|
||
# 逃走成功率追加加算値(全体)
|
||
#--------------------------------------------------------------------------
|
||
def escape_rate_plus
|
||
|
||
#値を用意。
|
||
|
||
data = 0
|
||
|
||
#逃走成功率追加値判定者の取得。
|
||
|
||
array = self.is_a?(Game_Party) ? (ESC_PLUS::TYPE2 == 0 ? all_members : battle_members) : members
|
||
|
||
#各メンバーの値を加算。
|
||
|
||
array.each {|m| data += m.escape_rate_plus}
|
||
|
||
#データを返す。
|
||
|
||
data
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 逃走成功率追加減算値(全体)
|
||
#--------------------------------------------------------------------------
|
||
def escape_rate_minus
|
||
|
||
#値を用意。
|
||
|
||
data = 0
|
||
|
||
#逃走成功率追加値判定者の取得。
|
||
|
||
array = self.is_a?(Game_Party) ? (ESC_PLUS::TYPE2 == 0 ? all_members : battle_members) : members
|
||
|
||
#各メンバーの値を加算。
|
||
|
||
array.each {|m| data += m.escape_rate_minus}
|
||
|
||
#データを返す。
|
||
|
||
data
|
||
end
|
||
end
|
||
class Game_Battler < Game_BattlerBase
|
||
attr_accessor :escape_failed_flag
|
||
#--------------------------------------------------------------------------
|
||
# 逃走成功率追加加算値(個人)
|
||
#--------------------------------------------------------------------------
|
||
def escape_rate_plus
|
||
|
||
#値を用意。
|
||
|
||
data = 0
|
||
|
||
#各メンバーの値を加算。
|
||
|
||
feature_objects.each {|f| data += f.escape_rate_plus}
|
||
|
||
#データを返す。
|
||
|
||
data
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 逃走成功率追加減算値(個人)
|
||
#--------------------------------------------------------------------------
|
||
def escape_rate_minus
|
||
|
||
#値を用意。
|
||
|
||
data = 0
|
||
|
||
#各メンバーの値を加算。
|
||
|
||
feature_objects.each {|f| data += f.escape_rate_minus}
|
||
|
||
#データを返す。
|
||
|
||
data
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 逃げる
|
||
#--------------------------------------------------------------------------
|
||
alias escape_seal escape
|
||
def escape
|
||
|
||
#基本的にこれがアクターに使われる事はないが
|
||
#もしもアクターが対象の時は逃走が行えるかどうかの判定で処理する。
|
||
#エネミーの場合は、専用の逃走率判定を行う。
|
||
|
||
return escape_seal if self.actor? ? BattleManager.can_escape? : BattleManager.enemy_can_escape?
|
||
|
||
#逃走できなかった場合は、逃走失敗フラグを立てておく。
|
||
|
||
@escape_failed_flag = true
|
||
end
|
||
end
|
||
class Scene_Battle < Scene_Base
|
||
#--------------------------------------------------------------------------
|
||
# スキル/アイテムの効果を適用
|
||
#--------------------------------------------------------------------------
|
||
alias apply_item_effects_escape_seal apply_item_effects
|
||
def apply_item_effects(target, item)
|
||
|
||
#本来の処理を実行する。
|
||
|
||
apply_item_effects_escape_seal(target, item)
|
||
|
||
#逃走失敗フラグが立っている時は分岐。
|
||
|
||
if target.escape_failed_flag
|
||
|
||
#逃走失敗フラグを消去する。
|
||
|
||
target.escape_failed_flag = nil
|
||
|
||
#対象が生存している場合のみ逃走失敗メッセージを表示する。
|
||
|
||
@log_window.add_text(Vocab::EscapeFailure) if target.alive?
|
||
|
||
end
|
||
end
|
||
end
|
||
class RPG::BaseItem
|
||
#--------------------------------------------------------------------------
|
||
# 逃走成功率追加加算値(特徴)
|
||
#--------------------------------------------------------------------------
|
||
def escape_rate_plus
|
||
|
||
#キャッシュがある場合はキャッシュを返す。
|
||
|
||
return @escape_rate_plus if @escape_rate_plus != nil
|
||
|
||
#データを取得。
|
||
|
||
data = self.note.scan(/<#{ESC_PLUS::WORD1}[::](\S+)>/).flatten
|
||
|
||
#データが存在しない場合は常に0を返す。
|
||
|
||
@escape_rate_plus = data != nil && !data.empty? ? data[0].to_i : 0
|
||
|
||
#データを返す。
|
||
|
||
@escape_rate_plus
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 逃走成功率追加減算値(特徴)
|
||
#--------------------------------------------------------------------------
|
||
def escape_rate_minus
|
||
|
||
#キャッシュがある場合はキャッシュを返す。
|
||
|
||
return @escape_rate_minus if @escape_rate_minus != nil
|
||
|
||
#データを取得。
|
||
|
||
data = self.note.scan(/<#{ESC_PLUS::WORD2}[::](\S+)>/).flatten
|
||
|
||
#データが存在しない場合は常に0を返す。
|
||
|
||
@escape_rate_minus = data != nil && !data.empty? ? data[0].to_i : 0
|
||
|
||
#データを返す。
|
||
|
||
@escape_rate_minus
|
||
end
|
||
end |