battle-maiden-mizuki/Scripts/_.9.rb
2025-06-17 11:57:06 -05:00

244 lines
11 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

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.

#==============================================================================
# ■ VXAce-RGSS3-9 パーティー編集 [Ver.1.1.0] by Claimh
#------------------------------------------------------------------------------
# パーティー編集機能を強化します。
#------------------------------------------------------------------------------
# ● 入れ替えロック flag : true(ロック) / false(ロック解除)
# $game_actors[アクターID].lock_change = flag
# … lock_changeがtrueとなっているアクターは入れ替えできません
# 初期状態は全員falseです
#------------------------------------------------------------------------------
# ●戦闘メンバーへ強制加入
# $game_party.add_battle_actor(アクターID)
# … 戦闘メンバーが最大に達しているときは
# 戦闘メンバーの終端アクターが待機メンバーへ移動します。
#------------------------------------------------------------------------------
# ●再定義
# Game_Actor#reserve_members_exp_rate
# Game_Party#max_battle_members
# Game_Followers#initialize
# Spriteset_Battle#create_actors
#==============================================================================
module PartyEdit
# 最大戦闘メンバー
MAX_MEMBERS = 1
# イベントで戦闘メンバーを外したときに待機メンバー先頭を戦闘メンバーに入れる
ADD_SUB = true
# ADD_SUB=trueのときに戦闘メンバーを最大限入れる
ADD_SUB_ALL = false
# 戦闘スプライトをメンバー数分用意する
# (Game_Actor#use_sprite = true時のみ必要)
REMAKE_BT_SPRITE = true
# 待機メンバーのEXP入手率()
# ※「待機メンバーの経験値を獲得」がありの時のみ
SUB_MEMBER_EXP = 30
# ロック状態のアクターに付けるアイコンIndex
LOCK_ICON_IDX = 495
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :lock_change # 入れ替えロック
#--------------------------------------------------------------------------
# ● セットアップ
# actor_id : アクター ID
#--------------------------------------------------------------------------
alias setup_member setup
def setup(actor_id)
setup_member(actor_id)
@lock_change = false
end
#--------------------------------------------------------------------------
# ● 控えメンバーの経験獲得率を取得 [再定義]
#--------------------------------------------------------------------------
def reserve_members_exp_rate
$data_system.opt_extra_exp ? (PartyEdit::SUB_MEMBER_EXP/100.0) : 0
end
end
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_party initialize
def initialize
initialize_party
@max_battle_members = PartyEdit::MAX_MEMBERS
end
#--------------------------------------------------------------------------
# ● バトルメンバーの最大数を取得 [再定義]
#--------------------------------------------------------------------------
def max_battle_members
@max_battle_members
end
#--------------------------------------------------------------------------
# ● バトルメンバーの最大数を変更
#--------------------------------------------------------------------------
def max_battle_members=(max)
@max_battle_members = [[max, 1].max, PartyEdit::MAX_MEMBERS].min
$game_player.refresh
$game_map.need_refresh = true
end
#--------------------------------------------------------------------------
# ● 初期パーティのセットアップ
#--------------------------------------------------------------------------
alias setup_starting_members_party setup_starting_members
def setup_starting_members
setup_starting_members_party
self.max_battle_members = @actors.size
end
#--------------------------------------------------------------------------
# ● 待機メンバーの取得
#--------------------------------------------------------------------------
def sub_members
all_members[max_battle_members, @actors.size].select {|actor| actor.exist? }
end
#--------------------------------------------------------------------------
# ● アクターを加える
#--------------------------------------------------------------------------
alias add_actor_party add_actor
def add_actor(actor_id)
if max_battle_members < PartyEdit::MAX_MEMBERS
add_battle_actor(actor_id) # 戦闘メンバーが空いているときは戦闘メンバーへ
else
add_actor_party(actor_id)
end
end
#--------------------------------------------------------------------------
# ● アクターを外す
#--------------------------------------------------------------------------
alias remove_actor_party remove_actor
def remove_actor(actor_id)
if $game_actors[actor_id].battle_member? # 戦闘メンバーのときは最大数を減らす
self.max_battle_members -= 1 # refreshはalias内で実行するので不要
end
remove_actor_party(actor_id)
add_reserves if PartyEdit::ADD_SUB
end
#--------------------------------------------------------------------------
# ● 待機メンバーを戦闘メンバーへ加入させる [all][one]
#--------------------------------------------------------------------------
def add_reserves
return if @actors.size <= max_battle_members
return if max_battle_members == PartyEdit::MAX_MEMBERS
return add_sub_member unless PartyEdit::ADD_SUB_ALL
until (max_battle_members >= PartyEdit::MAX_MEMBERS) do
add_sub_member if @actors.size > max_battle_members
end
end
#--------------------------------------------------------------------------
# ● 待機メンバーを戦闘メンバーへ加入させる [one]
#--------------------------------------------------------------------------
def add_sub_member
insert_battle_actor(max_battle_members)
end
#--------------------------------------------------------------------------
# ● 戦闘メンバーへ加入
#--------------------------------------------------------------------------
def add_battle_actor(actor_id)
return if @actors.include?(actor_id)
index = max_battle_members >= PartyEdit::MAX_MEMBERS ? (PartyEdit::MAX_MEMBERS-1) : max_battle_members
@actors.insert(index, actor_id)
self.max_battle_members += 1
end
#--------------------------------------------------------------------------
# ● メンバー入れ替え [待機→戦闘メンバー終端に挿入]
#--------------------------------------------------------------------------
def insert_battle_actor(index)
id = @actors[index]
@actors.delete_at(index)
add_battle_actor(id)
end
#--------------------------------------------------------------------------
# ● メンバー入れ替え [戦闘→待機メンバー終端に挿入]
#--------------------------------------------------------------------------
def insert_last_actor(index)
@actors.insert(@actors.size, @actors[index])
@actors.delete_at(index)
self.max_battle_members -= 1
end
end
#==============================================================================
# ■ Game_Player
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● フォロワーの再構成
#--------------------------------------------------------------------------
def refresh_followers
@followers.refresh_followers(self)
end
end
#==============================================================================
# ■ Game_Followers
#==============================================================================
class Game_Followers
#--------------------------------------------------------------------------
# ● オブジェクト初期化 [再定義]
# leader : 先頭のキャラクター
#--------------------------------------------------------------------------
def initialize(leader)
@visible = $data_system.opt_followers
@gathering = false # 集合処理中フラグ
refresh_followers(leader)
end
#--------------------------------------------------------------------------
# ● フォロワーの再構成
#--------------------------------------------------------------------------
def refresh_followers(leader)
@data = []
@data.push(Game_Follower.new(1, leader))
(2...$game_party.max_battle_members).each do |index|
@data.push(Game_Follower.new(index, @data[-1]))
end
end
end
if PartyEdit::REMAKE_BT_SPRITE
=begin
#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# ● アクタースプライトの作成
# デフォルトではアクター側の画像は表示しないが、便宜上、敵と味方を同じ
# ように扱うためにダミーのスプライトを作成する。
#--------------------------------------------------------------------------
def create_actors
# @actor_sprites = Array.new(4) { Sprite_Battler.new(@viewport1) }
# 4固定ではなくmembers.size分、生成する
@actor_sprites = Array.new($game_party.members.size) { Sprite_Battler.new(@viewport1) }
end
#--------------------------------------------------------------------------
# ● アクタースプライトの更新
#--------------------------------------------------------------------------
alias update_actors_party update_actors
def update_actors
if @actor_sprites.size != $game_party.members.size # メンバー数変化⇒再構築
dispose_actors
create_actors
end
update_actors_party
end
end
=end
end # REMAKE_BT_SPRITE