244 lines
11 KiB
Ruby
244 lines
11 KiB
Ruby
#==============================================================================
|
||
# ■ 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
|