#◆◇◆◇◆ 称号・システム ver 1.20 ◇◆◇◆◇ # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin 更新履歴 ver 1.20 称号セットのショートカットを追加 ver 1.10 称号に応じてバトラーグラフィックが 変更できる様に改良。 説明 某・ARPGのあれです。 LV UPボーナスはありませんが、アクターに称号を設定できます。 称号を追加するには イベントのスクリプトで actor = $game_actors[ID] actor.degrees += ["称号名", "称号名2"] という感じにします。 手に入れた称号を自動セットさせるには actor = $game_actors[ID] actor.active_degree = "称号名" となります。 逆に称号を削除したい場合は actor = $game_actors[ID] actor.degrees -= ["称号名", "称号名2"] となります。 また、称号による分岐は イベントの条件分岐で、 スクリプト $game_actors[ID].active_degree == "称号名" となります。 称号グラフィック 特定の称号の時のみ、 適用されるバトラーグラフィックを設定できます。 それ以外の称号のときは通常のグラフィックです。 バトラーグラフィックファイル名で設定してください。 $scene = Scene_Status.new(アクターのインデックス, true) で称号セットを直接呼び出せます。 =end #============================================================================== # ■ MINTO::RGSS #============================================================================== module MINTO # 称号・システムを有効化 RGSS["actor_degrees"] = true end if MINTO::RGSS["actor_degrees"] #============================================================================== # ☆ カスタマイズ #============================================================================== class Window_Degree < Window_Selectable #-------------------------------------------------------------------------- # ● 称号の説明テキストの設定 #-------------------------------------------------------------------------- def degrees_text(degree_name) # 称号名によって分岐 case degree_name # 称号「ロード」の場合 when "ロード" # 半角のスペースで改行。 改行は4回まで可能 text = "領主のこと その土地を治める者であり、指導者" # 称号「ぶっひ〜」の場合 when "ぶっひ〜" text = "創造神の化身とも、食料とも言われる謎の豚 " + # 長い場合は↑↓のように + でつなげる事も可能 "自称・ヲトメのかほりがする豚" # 称号がない場合 when "" text = "称号はありません" # 未設定の称号の場合 else text = "予備" end end end class Game_Actor #-------------------------------------------------------------------------- # ● 称号グラフィックの設定 #-------------------------------------------------------------------------- def degree_graphic(degrees) # 称号に応じたバトラーグラフィックを返す case degrees when "ロード" name = "005-Fighter05" when "ぶっひ〜" name = "006-Fighter06" # 変更しない else name = @last_graphic end return name end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :degrees # 称号の配列 attr_reader :active_degree # 現在の称号 attr_accessor :last_graphic # 最終バトラーグラフィック #-------------------------------------------------------------------------- # ● セットアップ #-------------------------------------------------------------------------- alias setup_MINT_Degree setup def setup(actor_id) # 元の処理を実行 setup_MINT_Degree(actor_id) @degrees = [] @active_degree = "" @last_graphic = nil end #-------------------------------------------------------------------------- # ● 現在の称号(変更) # degree : 新しい称号 #-------------------------------------------------------------------------- def active_degree=(degree) @active_degree = degree # オリジナルグラフィックを複製 if @last_graphic == nil @last_graphic = @battler_name.to_s.dup end @battler_name = degree_graphic(@active_degree) end end #============================================================================== # ■ Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ● 称号の描画 #-------------------------------------------------------------------------- def draw_actor_degree(actor, x, y) self.contents.font.color = normal_color self.contents.draw_text(x, y, 160, 32, actor.active_degree.to_s) end end #============================================================================== # ■ Window_Status #============================================================================== class Window_Status < Window_Base #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- alias refresh_MINT_Degree refresh def refresh # 元の処理を実行 refresh_MINT_Degree draw_actor_degree(@actor, 190, 32) self.contents.font.size = 15 self.contents.draw_text(400, 0, 200, 32, "Y(S_key) : 称号セット", 1) self.contents.font.size = 22 end end #============================================================================== # ■ Window_Degree #============================================================================== class Window_Degree < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(actor) super(160, 240, 320, 240) @actor = actor @column_max = 2 refresh self.index = 0 self.active = false self.visible = false self.z = 255 end #-------------------------------------------------------------------------- # ● 称号の取得 #-------------------------------------------------------------------------- def degree return @data[self.index] end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh if self.contents != nil self.contents.dispose self.contents = nil end @data = [] # 習得している称号を取得 get_degree_data # 項目数が0でなければ描画 @item_max = @data.size if @item_max > 0 self.contents = Bitmap.new(width - 32, row_max * 32) for i in 0...@item_max draw_item(i) end end end #-------------------------------------------------------------------------- # ● 習得している称号を取得 #-------------------------------------------------------------------------- def get_degree_data for degrees in @actor.degrees @data.push(degrees.to_s) end end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) degrees = @data[index] actor = @actor x = 2 + index % 2 * (128 + 32) y = index / 2 * 32 self.contents.draw_text(x, y, 160, 32, degrees) end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help texe = degrees_text(self.degree) @help_window.set_text(texe) end end #============================================================================== # ■ Window_Help_Degree #============================================================================== class Window_Help_Degree < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 0, 640, 192) self.contents = Bitmap.new(width - 32, height - 32) self.visible = false self.z = 255 end #-------------------------------------------------------------------------- # ● テキスト設定 #-------------------------------------------------------------------------- def set_text(text, align = 1) # テキストとアラインメントの少なくとも一方が前回と違っている場合 if text != @text or align != @align # テキストを再描画 self.contents.clear self.contents.font.color = normal_color width = self.width - 40 # 改行の判定文字 split = " " text1 = text.split(/#{split}/)[0].to_s text2 = text.split(/#{split}/)[1].to_s text3 = text.split(/#{split}/)[2].to_s text4 = text.split(/#{split}/)[3].to_s text5 = text.split(/#{split}/)[4].to_s self.contents.draw_text(4, 0, width, 32, text1, align) self.contents.draw_text(4, 32, width, 32, text2, align) self.contents.draw_text(4, 64, width, 32, text3, align) self.contents.draw_text(4, 96, width, 32, text4, align) self.contents.draw_text(4, 128, width, 32, text5, align) @text = text @align = align end self.visible = true end end #============================================================================== # ■ Scene_Status #============================================================================== class Scene_Status #-------------------------------------------------------------------------- # ● オブジェクト初期化 # actor_index : アクターインデックス #-------------------------------------------------------------------------- def initialize(actor_index = 0, degrees = false) @actor_index = actor_index @degrees = degrees end #-------------------------------------------------------------------------- # ● メイン処理 #-------------------------------------------------------------------------- alias main_MINT_Degree main def main # アクターを取得 @actor = $game_party.actors[@actor_index] # ウィンドウを作成 @degrees_window = Window_Degree.new(@actor) @help_window = Window_Help_Degree.new # ヘルプウィンドウを関連付け @degrees_window.help_window = @help_window if @degrees # 称号ウィンドウをアクティブにする @degrees_window.active = true @degrees_window.visible = true @help_window.visible = true end # 元の処理を実行 main_MINT_Degree # ウィンドウを解放 @degrees_window.dispose @help_window.dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias update_MINT_Degree update def update # Y ボタンが押された場合 if Input.trigger?(Input::Y) # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # 称号ウィンドウをアクティブにする @degrees_window.active = true @degrees_window.visible = true @help_window.visible = true return end if @degrees_window.active @degrees_window.update update_degrees return else # 元の処理を実行 update_MINT_Degree end end #-------------------------------------------------------------------------- # ● フレーム更新 (称号ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_degrees # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # 称号ウィンドウのアクティブを解除する @degrees_window.active = false @degrees_window.visible = false @help_window.visible = false @status_window.refresh return end # C ボタンが押された場合 if Input.trigger?(Input::C) # 称号ウィンドウで現在選択されているデータを取得 @degree = @degrees_window.degree # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # 称号をセット @actor.active_degree = @degree # 称号ウィンドウのアクティブを解除する @degrees_window.active = false @degrees_window.visible = false @help_window.visible = false @status_window.refresh end # R ボタンが押された場合 if Input.trigger?(Input::R) # カーソル SE を演奏 $game_system.se_play($data_system.cursor_se) # 次のアクターへ @actor_index += 1 @actor_index %= $game_party.actors.size # 別のステータス画面に切り替え $scene = Scene_Status.new(@actor_index, true) return end # L ボタンが押された場合 if Input.trigger?(Input::L) # カーソル SE を演奏 $game_system.se_play($data_system.cursor_se) # 前のアクターへ @actor_index += $game_party.actors.size - 1 @actor_index %= $game_party.actors.size # 別のステータス画面に切り替え $scene = Scene_Status.new(@actor_index, true) return end end end end