https://tm.yumineko.com/viewtopic.php?f=46&t=2666
↑のトピックにてfaidaさんが作成されたスクリプトに下記の機能を追加したいと思いました。
①発動する効果に『ステートの解除』を追加
②発動条件に『TPが満タンになった時』を追加
③発動条件に『そのバトラーが敵を倒した時』を追加
コード: 全て選択
=begin
◆概要
瀕死時に効果を発動したり特徴を付加したりします。
◆機能
・メモ欄に<瀕死時効果 id, n>と記入すると、瀕死時に以下の効果を発揮します。
idが0…指定コモンイベント予約(予約するだけ)
1…HPをn回復 2…HPをn%回復 3、4は1、2のMP版 5…IDnのステート付加
6…IDnのステート解除 7…パラメータnの弱体解除しつつ強化付加(2段階)
・メモ欄に<瀕死時特徴 [code, data_id, value]>と記入すると、
その特徴を付加します。
・ステートのメモ欄に<瀕死付加時アニメ id>と記入すると、瀕死付加時のみ
そのアニメを再生します。
・地味にコモンイベント複数予約のおまけつき。
◆仕様
・特徴が分かりづらいのは仕様です。わかりやすいようにリメイク予定。
◆使用上の注意
・★……エイリアス ●……再定義 ○……新規定義
◆作者:faida @faida3983
◆更新履歴
ver1.0 : 公開
ver1.1 : 拙作「ログ出力」に対応
ver1.2 : 戦闘途中からアクターが加入する場合のエラー修正
ステートごとにアニメ指定できるように
=end
module FAI_CECF
# 設定項目:コモンイベント予約時にアクターID(か敵の並び順)を代入する変数ID
# 代入しない場合は0
COMMON_EVENT_VAR_ID = 1
# 設定項目:HP回復時に表示するアニメーション(表示しない場合は0)
HP_RECOVER_ANI_ID = 37
# 設定項目:MP回復時に表示するアニメーション(表示しない場合は0)
MP_RECOVER_ANI_ID = 38
# 設定項目:指定なしステート付加時に表示するアニメーション(表示しない場合は0)
ADD_STATE_ANI_ID = 43
# 設定項目:強化付加時に表示するアニメーション(表示しない場合は0)
ADD_BUFF_ANI_ID = 43
# 設定項目:強化付加時に持続するターン数
# "$game_variables[2]"ってやると(変数ID2)ターン続きます。
ADD_BUFF_TURN = "5"
# 設定項目:無効化するスイッチID(使用しない場合は0)
FORBID_SW_ID = 0
end
class RPG::BaseItem
#--------------------------------------------------------------------------
# ● 瀕死時に効果を発動
#--------------------------------------------------------------------------
def crisis_effects
return @crisis_effects if @crisis_effects
@crisis_effects = []
note.each_line{|line|
if line =~ /<瀕死時効果\s*(\d+)\s*\,\s*(\d+)>/
@crisis_effects << [$1.to_i, $2.to_i]
@crisis_effects[-1][1]/=100.0 if [2,4].include?(@crisis_effects[-1][0])
end
}
@crisis_effects
end
#--------------------------------------------------------------------------
# ● 瀕死時に特徴を付加
#--------------------------------------------------------------------------
def crisis_features
return @crisis_features if @crisis_features
@crisis_features = []
note.each_line{|line|
if line =~ /<瀕死時特徴\s*(\[.+\])>/
@crisis_features << eval($1)
end
}
@crisis_features
end
end
class RPG::State
#--------------------------------------------------------------------------
# ● 瀕死付加時に再生されるアニメ
#--------------------------------------------------------------------------
def crisis_add_anime
return @crisis_add_anime if @crisis_add_anime
@crisis_add_anime = FAI_CECF::ADD_STATE_ANI_ID
@crisis_add_anime = $1.to_i if note =~ /<瀕死付加時アニメ\s*(\d+)>/
@crisis_add_anime
end
end
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
include FAI_CECF
#--------------------------------------------------------------------------
# ○ 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :reserved_ce_battlers # なんか
#--------------------------------------------------------------------------
# ★ オブジェクト初期化
#--------------------------------------------------------------------------
alias fai_cecf_initialize initialize
def initialize
fai_cecf_initialize
@reserved_common_event_ids = []
@reserved_ce_battlers = []
end
#--------------------------------------------------------------------------
# ★ コモンイベントの呼び出しを予約
#--------------------------------------------------------------------------
alias fai_cecf_reserve_common_event reserve_common_event
def reserve_common_event(common_event_id)
if @common_event_id > 0
return @reserved_common_event_ids << common_event_id
end
fai_cecf_reserve_common_event(common_event_id)
end
#--------------------------------------------------------------------------
# ★ コモンイベントの呼び出し予約をクリア
#--------------------------------------------------------------------------
alias fai_cecf_clear_common_event clear_common_event
def clear_common_event
fai_cecf_clear_common_event
if !@reserved_common_event_ids.empty?
fai_cecf_reserve_common_event(@reserved_common_event_ids.shift)
end
end
end
class Game_BattlerBase
include FAI_CECF
#--------------------------------------------------------------------------
# ★ オブジェクト初期化
#--------------------------------------------------------------------------
alias fai_cecf_initialize initialize
def initialize
fai_cecf_initialize
@crisis_effects = []
end
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def crisis_effects
feature_objects.collect{|obj|obj.crisis_effects}.flatten(1)
end
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def crisis_features
return [] if !$game_party.in_battle
return [] if FORBID_SW_ID > 0 && $game_switches[FORBID_SW_ID]
return [] if hp == 0 || !@mhp || hp >= @mhp / 4
feature_objects.collect{|obj|obj.crisis_features}.flatten(1).collect{|arr|
RPG::BaseItem::Feature.new(arr[0], arr[1], arr[2])
}
end
#--------------------------------------------------------------------------
# ★
#--------------------------------------------------------------------------
alias fai_cecf_all_features all_features
def all_features
fai_cecf_all_features + crisis_features
end
#--------------------------------------------------------------------------
# ★ リフレッシュ
#--------------------------------------------------------------------------
alias fai_cecf_refresh refresh
def refresh
fai_cecf_refresh
@mhp = mhp
end
end
class Game_Battler < Game_BattlerBase
include FAI_CECF
#--------------------------------------------------------------------------
# ★ ステートの付加
#--------------------------------------------------------------------------
alias fai_cecf_add_state add_state
def add_state(state_id)
cf = self.crisis_effects
fai_cecf_add_state(state_id)
if cf != self.crisis_effects
a = self.crisis_effects; cf.each{|eff|i = a.index(eff); a[i] = nil if i}
@crisis_effects += a.compact
end
end
#--------------------------------------------------------------------------
# ★ 戦闘開始処理
#--------------------------------------------------------------------------
alias fai_cecf_on_battle_start on_battle_start
def on_battle_start
fai_cecf_on_battle_start
init_crisis_effects
end
#--------------------------------------------------------------------------
# ● 瀕死時効果の初期化
#--------------------------------------------------------------------------
def init_crisis_effects
@crisis_effects = self.crisis_effects
end
#--------------------------------------------------------------------------
# ● idの数字で発動する効果を分岐
#--------------------------------------------------------------------------
def check_crisis_effects
return if FORBID_SW_ID > 0 && $game_switches[FORBID_SW_ID]
return if hp >= mhp / 4 || hp == 0
@crisis_effects.each_with_index{|arr|
case arr[0]
when 0
if COMMON_EVENT_VAR_ID > 0
$game_temp.reserved_ce_battlers << i = actor? ? id : -index
end
$game_temp.reserve_common_event(arr[1])
when 1
self.hp += arr[1]
self.animation_id = HP_RECOVER_ANI_ID if HP_RECOVER_ANI_ID > 0
when 2
self.hp += arr[1] * mhp
self.animation_id = HP_RECOVER_ANI_ID if HP_RECOVER_ANI_ID > 0
when 3
self.mp += arr[1]
self.animation_id = MP_RECOVER_ANI_ID if MP_RECOVER_ANI_ID > 0
when 4
self.mp += arr[1] * mmp
self.animation_id = MP_RECOVER_ANI_ID if MP_RECOVER_ANI_ID > 0
when 5
add_state(arr[1])
anime_id = $data_states[arr[1]].crisis_add_anime
self.animation_id = anime_id if anime_id > 0
when 6
remove_state(arr[1])
anime_id = $data_states[arr[1]].crisis_add_anime
self.animation_id = anime_id if anime_id > 0
when 7
remove_buff(arr[1]) if @buffs[arr[1]] < 0
add_buff(arr[1], 1); add_buff(arr[1], eval(ADD_BUFF_TURN))
self.animation_id = ADD_BUFF_ANI_ID if ADD_BUFF_ANI_ID > 0
end
@crisis_effects[@crisis_effects.index(arr)] = nil
}
@crisis_effects.compact!
end
end
class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# ● アクターを加える
#--------------------------------------------------------------------------
alias fai_cecf_add_actor add_actor
def add_actor(actor_id)
$game_actors[actor_id].init_crisis_effects unless @actors.include?(actor_id)
fai_cecf_add_actor(actor_id)
end
end
class Game_Interpreter
include FAI_CECF
#--------------------------------------------------------------------------
# ★ 呼び出し予約されたコモンイベントを検出/セットアップ
#--------------------------------------------------------------------------
alias fai_cecf_setup_reserved_common_event setup_reserved_common_event
def setup_reserved_common_event
if $game_temp.common_event_reserved?
if !$game_temp.reserved_ce_battlers.empty?
n = $game_temp.reserved_ce_battlers.shift
$game_variables[COMMON_EVENT_VAR_ID] = n
end
end
fai_cecf_setup_reserved_common_event
end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ★ イベントの処理
#--------------------------------------------------------------------------
alias fai_cecf_process_event process_event
def process_event
fai_cecf_process_event
all_battle_members.each{|a|a.check_crisis_effects}
end
#--------------------------------------------------------------------------
# ★ 戦闘行動の処理
#--------------------------------------------------------------------------
alias fai_cecf_process_action process_action
def process_action
fai_cecf_process_action
all_battle_members.each{|a|a.check_crisis_effects}
end
end
この内、①だけは何とか追加出来たのですが②、③に関してはスクリプトの記述方法が分からず
『● idの数字で発動する効果を分岐』の
return if hp >= mhp / 4 || hp == 0 の部分を
return if tp == 100 等に変えてみたみたのですがTPが溜まっていない戦闘開始時に
いきなり効果が発動したりして上手くいきません。
どなたかお知恵を貸していただけませんでしょうか?