lunariafantasia/Scripts/_.8.rb
2024-01-12 03:12:38 -06:00

643 lines
No EOL
25 KiB
Ruby
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#==============================================================================
# ■ RGSS3 逃走後処理修正 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# アクター側の逃走成功時、隠れているはずの敵が出現してしまう不具合を修正します。
#==============================================================================
class Game_BattlerBase
attr_accessor :void_appear
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_hidden initialize
def initialize
initialize_hidden
@void_appear = false
end
#--------------------------------------------------------------------------
# ● 現れる
#--------------------------------------------------------------------------
alias appear_hidden appear
def appear
return if @void_appear == true
appear_hidden
end
end
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● 戦闘終了処理
#--------------------------------------------------------------------------
alias on_battle_end_hidden on_battle_end
def on_battle_end
self.void_appear = true if self.enemy? && self.hidden?
on_battle_end_hidden
end
end
#==============================================================================
# ■ RGSS3 敵スキル選択挙動改善&戦闘不能無視回復 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# プリセットスクリプトにおいて
# 敵から敵へ回復スキル(戦闘不能回復含む)を行う際に
# 必ず最後尾(敵選択ウィンドウの最後)を最優先で選択する挙動を変更し
# ランダムターゲットによる選択を行います。
#
# また、戦闘不能状態か否かに関わらず回復を行う
# アイテムやスキルの作成が可能となります。
#==============================================================================
#Game_Actionを一箇所再定義しております。
#極力、素材挿入場所は▼ 素材の直下にしていただく事をお勧めします。
#アイテム・スキルのメモ欄に
#下で設定する戦闘不能無視設定用ワードを記入する事で
#そのアイテム・スキルは味方の戦闘不能状態を無視して
#回復を行う事が出来ます。
module D_V_HEAL
#アイテム・スキルのメモ欄に記入する戦闘不能無視設定用ワードを設定します。
WORD = "[戦闘不能無視]"
end
class Game_Action
#--------------------------------------------------------------------------
# ● 味方に対するターゲット
#--------------------------------------------------------------------------
def targets_for_friends
if item.for_user?
[subject]
elsif item.for_dead_friend?
if item.for_one?
if @target_index < 0
[friends_unit.random_dead_target]
else
[friends_unit.smooth_dead_target(@target_index)]
end
else
friends_unit.dead_members
end
elsif item.for_friend?
if item.note.include?(D_V_HEAL::WORD)
if item.for_one?
if @target_index < 0
[friends_unit.random_target_void_all]
else
[friends_unit.smooth_target_void_all(@target_index)]
end
else
friends_unit.exist_members
end
else
if item.for_one?
if @target_index < 0
[friends_unit.random_target]
else
[friends_unit.smooth_target(@target_index)]
end
else
friends_unit.alive_members
end
end
end
end
#--------------------------------------------------------------------------
# ● スキル/アイテムの使用対象候補を取得
#--------------------------------------------------------------------------
alias item_target_candidates_void_all item_target_candidates
def item_target_candidates
if item.note.include?(D_V_HEAL::WORD)
if item.for_opponent?
opponents_unit.exist_members
else
friends_unit.exist_members
end
else
item_target_candidates_void_all
end
end
end
class Game_Unit
#--------------------------------------------------------------------------
# ● 戦闘不能の対象を含むターゲットのスムーズな決定
#--------------------------------------------------------------------------
def smooth_target_void_all(index)
member = members[index]
end
#--------------------------------------------------------------------------
# ● 戦闘不能の対象を含むターゲットのランダムな決定
#--------------------------------------------------------------------------
def random_target_void_all
exist_members.empty? ? nil : exist_members[rand(exist_members.size)]
end
#--------------------------------------------------------------------------
# ● 存在しているメンバーの配列取得
#--------------------------------------------------------------------------
def exist_members
members.select {|member| member.exist? }
end
end
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● スキル/アイテムの適用テスト
# 使用対象が全快しているときの回復禁止などを判定する。
#--------------------------------------------------------------------------
alias item_test_void_all item_test
def item_test(user, item)
if item.note.include?(D_V_HEAL::WORD)
return true if $game_party.in_battle
return true if item.for_opponent?
return true if item.damage.recover? && item.damage.to_hp? && hp < mhp
return true if item.damage.recover? && item.damage.to_mp? && mp < mmp
return true if item_has_any_valid_effects?(user, item)
return false
else
item_test_void_all(user, item)
end
end
end
#==============================================================================
# ■ RGSS3 画面のシェイク不具合修正 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# ウェイト設定が正常に機能しない不具合を修正します。
# 素材欄のなるべく上の方に導入されるといいと思います。
# ぶっちゃけると数字を2箇所変えただけです。
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 画面のシェイク
#--------------------------------------------------------------------------
def command_225
screen.start_shake(@params[0], @params[1], @params[2])
wait(@params[2]) if @params[3]
end
end
#==============================================================================
# ■ RGSS3 ステート行動制限修正 Ver1.01 by 星潟
#------------------------------------------------------------------------------
# プリセットスクリプトでは、行動制限のあるステートにかかっている状態で
# 新たに何らかのステートを付与された際、強制的に行動がクリアさせられます。
# この仕様を変更し、行動制限レベルに変動がない場合は
# 行動のクリアを行わないように修正します。
#
# 例.スクリプト適用前
# 混乱中のキャラクターが行動前に毒を受けた場合
# 混乱による無差別攻撃がキャンセルされる。
#
# スクリプト適用後
# 混乱中のキャラクターが行動前に毒を受けた場合でも
# 混乱による無差別攻撃はキャンセルされない。
# ただし、制限レベルの高いステート(麻痺や、味方のみを攻撃するステート等)を
# 付与された場合は、行動をキャンセルされる。
#------------------------------------------------------------------------------
# Ver1.01 戦闘不能ステート付与時の処理を修正
#==============================================================================
class Game_Battler < Game_BattlerBase
alias add_new_state_restrict add_new_state
def add_new_state(state_id)
if restriction == 0 or state_id == death_state_id
#元々の制限がない場合
#もしくは指定IDが戦闘不能ステートIDの場合
#プリセットスクリプトの処理を実行する
add_new_state_restrict(state_id)
else
#元々何らかの制限がある場合
#ステート付与前に制限レベルを取得
pre_restriciton = restriction
#ステート付与
@states.push(state_id)
#付与前と制限レベルを比較して
#制限レベルの変動があった場合にのみ行動を制限する。
on_restrict if restriction != pre_restriciton
#ステート並び替え
sort_states
#リフレッシュ
refresh
end
end
end
#==============================================================================
# ■ RGSS3 通常攻撃時の攻撃追加回数強制適用 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# 通常攻撃時、攻撃範囲がランダム、もしくは全体になっている場合は
# 攻撃回数が追加されず、1回しか攻撃しない不具合を修正します。
#==============================================================================
class Game_Action
#--------------------------------------------------------------------------
# ● 敵に対するターゲット
#--------------------------------------------------------------------------
alias targets_for_opponents_attack_change targets_for_opponents
def targets_for_opponents
#本来の処理を行い、ターゲット配列を取得する。
array_data = targets_for_opponents_attack_change
#行動が通常攻撃の場合は分岐する。
if attack?
#行動者の攻撃追加回数を取得する。
number = @subject.atk_times_add.to_i
#行動者の攻撃追加回数が0以下の場合は既存の配列を返す。
return array_data if number <= 0
if item.for_random?#行動がランダムターゲットの場合
#攻撃追加回数分だけ、ランダムターゲットを配列に加える。
number.times do
#array_data += Array.new(item.number_of_targets) { opponents_unit.random_target }
#ランダムターゲット最適化合わせ
array_data += opponents_unit.random_target_extra(item.number_of_targets)
end
elsif item.for_one?#行動が単体の場合
#何もしない
else#行動が全体の場合
#攻撃追加回数分だけ、敵全体を配列に加える。
number.times do
array_data += opponents_unit.alive_members
end
end
end
#配列を返す。
return array_data
end
end
#==============================================================================
# ■ RGSS3 暗号化作品テストモード禁止 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# 暗号化ファイルが作成されている状態でも特定の手順を踏む事で
# テストモードでゲームプレイを行える問題を解決します。
# エディタ上でのテストモードには影響ありません。
#==============================================================================
class Scene_Base
#--------------------------------------------------------------------------
# ● フレーム更新(基本)
#--------------------------------------------------------------------------
alias update_basic_exit update_basic
def update_basic
SceneManager.illegal_test_mode_prevent
update_basic_exit
end
end
class << SceneManager
attr_reader :protect_flag
#--------------------------------------------------------------------------
# ● 実行
#--------------------------------------------------------------------------
alias :run_exit :run
def run
protect_execute
run_exit
end
#--------------------------------------------------------------------------
# ● 暗号化ファイルの有無を確認し、保護の有無を設定する
#--------------------------------------------------------------------------
def protect_execute
@protect_flag = !Dir.glob('Game.rgss3a').empty?
end
#--------------------------------------------------------------------------
# ● 不正テストモードの場合、ゲームを強制終了させる
#--------------------------------------------------------------------------
def illegal_test_mode_prevent
exit if illegal_test?
end
#--------------------------------------------------------------------------
# ● 不正テストモード判定
#--------------------------------------------------------------------------
def illegal_test?
#保護が有効で、なおかつテストモードの場合は不正テストモードと判定
protect_flag == true && ($TEST or $DEBUG)
end
end
#==============================================================================
# ■ RGSS3 イベントステート付与/解除不具合修正 Ver1.01 by 星潟
#------------------------------------------------------------------------------
# イベントコマンドでステートを一度解除してから
# ステート付与を行うと、ステート付与が無効化される不具合を修正します。
# VXAce_SP1で修正されたように見えますが、あの修正では不完全です。
#==============================================================================
# [×]VXAce_SP1なし
# 不具合発生の手順を踏む事で無条件に不具合発生。
#------------------------------------------------------------------------------
# [△]VXAce_SP1あり
# 不具合発生の手順を踏む事で
# 味方パーティメンバーのみ不具合の影響を受けない
# パーティにいないアクター、戦闘中であれば、戦闘メンバー以外のアクターや
# 敵側は不具合の影響をしっかり受けてしまう。
#------------------------------------------------------------------------------
# [○]本スクリプト導入
# 不具合発生の手順を踏んでも異常は起きない。
#==============================================================================
class Game_Temp
attr_accessor :event_state_changing
end
class Game_Interpreter
#--------------------------------------------------------------------------
# ステートの変更
#--------------------------------------------------------------------------
alias command_313_event_state_changing command_313
def command_313
$game_temp.event_state_changing = true
command_313_event_state_changing
$game_temp.event_state_changing = nil
end
#--------------------------------------------------------------------------
# 敵キャラのステート変更
#--------------------------------------------------------------------------
alias command_333_event_state_changing command_333
def command_333
$game_temp.event_state_changing = true
command_333_event_state_changing
$game_temp.event_state_changing = nil
end
end
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ステートの付加
#--------------------------------------------------------------------------
alias add_state_event_state_changing add_state
def add_state(state_id)
add_state_event_state_changing(state_id)
@result.clear_status_effects if $game_temp.event_state_changing
end
#--------------------------------------------------------------------------
# ステートの解除
#--------------------------------------------------------------------------
alias remove_state_event_state_changing remove_state
def remove_state(state_id)
remove_state_event_state_changing(state_id)
@result.clear_status_effects if $game_temp.event_state_changing
end
end
#==============================================================================
# ■ RGSS3 連続回数/攻撃追加回数評価不具合修正 Ver1.01 by 星潟
#------------------------------------------------------------------------------
# アイテム/スキルの連続回数や通常攻撃に対する攻撃追加回数特徴の効果が
# 行動評価時に反映されない不具合を修正します。
# これにより、連続攻撃系のスキルが自動戦闘で選択されにくい現象を解消出来ます。
#==============================================================================
class Game_Action
#--------------------------------------------------------------------------
# スキル/アイテムの評価
#--------------------------------------------------------------------------
alias evaluate_item_i_repeats evaluate_item
def evaluate_item
#本来の処理を実行。
evaluate_item_i_repeats
#連続回数を適用。
@value *= item.repeats
#通常攻撃の場合、攻撃追加回数を反映。
@value *= (1 + subject.atk_times_add.to_i) if attack?
end
end
#==============================================================================
# ■ RGSS3 イベントコマンド「HPの増減」
# 「敵キャラのHP増減」不具合修正 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# イベントコマンド「敵キャラのHP増減」実行時
# 対象が敵全体で、敵先頭インデックスの敵キャラが戦闘不能になっている場合
# 後続インデックスの敵に対して処理が行われない不具合を修正します。
#
# また、ステート無効化で「戦闘不能」を無効化したアクター/敵キャラの
# HPを0にした後、イベントコマンド「HPの増減」/「敵キャラのHP増減」を実行し
# 操作で「減らす」を選択、「戦闘不能を許可」のチェックをしない場合
# HPが0から1に回復してしまう不具合を修正します。
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# 敵キャラの HP 増減
#--------------------------------------------------------------------------
def command_331
#途中まで通常処理で進める。
value = operate_value(@params[1], @params[2], @params[3])
iterate_enemy_index(@params[0]) do |enemy|
#ここだけ変更。returnをnextへ。
next if enemy.dead?
#以降は通常処理。
enemy.change_hp(value, @params[4])
enemy.perform_collapse_effect if enemy.dead?
end
end
end
class Game_BattlerBase
#--------------------------------------------------------------------------
# HP の増減(イベント用)
#--------------------------------------------------------------------------
alias change_hp_no_h1 change_hp
def change_hp(value, enable_death)
#現在HPが0以下で変動値が負の値ダメージの場合は何もしない。
return if self.hp <= 0 && value < 0
#本来の処理を実行。
change_hp_no_h1(value, enable_death)
end
end
#==============================================================================
# ■ RGSS3 行動条件合致判定ターン数修正 Ver1.00 by 星潟
#==============================================================================
# 敵の行動条件合致処理がターン数増加前に判定される為に
# 1ターン目が0ターン目の行動として計算される現象を修正します。
#==============================================================================
class Game_Troop < Game_Unit
attr_accessor :tc_p1_flag
#--------------------------------------------------------------------------
# 現在のターン数
#--------------------------------------------------------------------------
alias turn_count_plus1 turn_count
def turn_count
#行動条件合致判定時は1を足す。
turn_count_plus1 + (@tc_p1_flag ? 1 : 0)
end
end
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# 行動条件合致判定[ターン数]
#--------------------------------------------------------------------------
alias conditions_met_turns_tc_p1_flag? conditions_met_turns?
def conditions_met_turns?(param1, param2)
#行動条件合致判定をtrueにする。
$game_troop.tc_p1_flag = true
#本来の処理を実行し、結果を取得しておく。
f = conditions_met_turns_tc_p1_flag?(param1, param2)
#行動条件合致判定をnilにする。
$game_troop.tc_p1_flag = nil
#結果を返す。
f
end
end
#==============================================================================
# ■ RGSS3 タイトルでゲームオブジェクト再生成 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# RPGツクールVXAceではRPGツクールVXと違い
# 起動時とニューゲームの選択時にのみゲームオブジェクトが生成され
# タイトル画面でゲームオブジェクトが生成されません。
#
# これにより、コモンイベントを設定したアイテム・スキルにより全滅した場合や
# メニュー画面やイベントからタイトル画面に戻った際等に
# セーブデータをロードすると、発生するはずだったコモンイベントが
# ロードしたタイミングで発動し、致命的な進行異常が発生する場合があります。
#
# このスクリプトを使用する事で、選択したゲームオブジェクトを
# タイトル画面で毎回再生成するように変更出来ます。
#
# ただし、デフォルト仕様のタイトル画面での実行を想定しております。
# マップ画面を背景にする等の場合は
# 正常に動作しない場合がありますのでご容赦下さい。
#==============================================================================
module TitleReset
#Game_Tempを初期化するか
TEM = true
#Game_Systemを初期化するか
SYS = true
#Game_Timerを初期化するか
TIM = true
#Game_Messageを初期化するか
MES = true
#Game_Switchesを初期化するか
SWI = true
#Game_Variablesを初期化するか
VAR = true
#Game_SelfSwitchesを初期化するか
SEL = true
#Game_Actorsを初期化するか
ACT = true
#Game_Partyを初期化するか
PAR = true
#Game_Troopを初期化するか
TRO = true
#Game_Mapを初期化するか
MAP = true
#Game_Playerを初期化するか
PLA = true
end
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# 開始処理
#--------------------------------------------------------------------------
alias start_create_game_objects start
def start
$game_temp = Game_Temp.new if TitleReset::TEM
$game_system = Game_System.new if TitleReset::SYS
$game_timer = Game_Timer.new if TitleReset::TIM
$game_message = Game_Message.new if TitleReset::MES
$game_switches = Game_Switches.new if TitleReset::SWI
$game_variables = Game_Variables.new if TitleReset::VAR
$game_self_switches = Game_SelfSwitches.new if TitleReset::SEL
$game_actors = Game_Actors.new if TitleReset::ACT
$game_party = Game_Party.new if TitleReset::PAR
$game_troop = Game_Troop.new if TitleReset::TRO
$game_map = Game_Map.new if TitleReset::MAP
$game_player = Game_Player.new if TitleReset::PLA
start_create_game_objects
end
end
#==============================================================================
# ■ RGSS3 VXAce_SP1ピクチャ処理致命的不具合修正 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# ファイル名を指定せずに基準位置を中心にしてピクチャの表示を行った際
# エラーが出る致命的不具合を修正します。
#==============================================================================
class Sprite_Picture < Sprite
#--------------------------------------------------------------------------
# 原点の更新
#--------------------------------------------------------------------------
alias update_origin_noname update_origin
def update_origin
if @picture.name.empty?
self.ox = 0
self.oy = 0
else
update_origin_noname
end
end
end