Kingdommangas Ninja (niveau 4)
Messages postés : 210 Date d'inscription : 19/12/2015 Jauge LPC :
| Sujet: Avoir sa revanche en cas de défaite. Lun 28 Déc 2015 - 14:01 | |
| Alors voici un script qui permet de retanter sa chance après avoir été vaincu en combats. - Code:
-
=begin RGSS3 ★ バトルリトライ ★ 戦闘敗北時に、リトライするかの選択を可能にします。 ver1.00
Last Update : 2012/02/06 02/06 : 新規 ろかん http://kaisou-ryouiki.sakura.ne.jp/ =end
#=========================================== # 設定箇所 #=========================================== module Rokan module Retry_Battle # Interrupteur a actionner pour l'utilisation RETRY_ENABLE_SWITCH = 10 # コマンドに表示する文字列 RETRY_COMMAND = "Revanche" GIVEUP_COMMAND = "Abandonner" end end #=========================================== # ここまで #===========================================
$rsi ||= {} $rsi["バトルリトライ"] = true
class << BattleManager #-------------------------------------------------------------------------- # ● インクルード Rokan::Retry_Battle #-------------------------------------------------------------------------- include Rokan::Retry_Battle #-------------------------------------------------------------------------- # ● セットアップ #-------------------------------------------------------------------------- alias _retry_battle_setup setup def setup(troop_id, can_escape = true, can_lose = false) _retry_battle_setup(troop_id, can_escape, can_lose) setup_retry_data end #-------------------------------------------------------------------------- # ● オブジェクトをディープコピーして返す #-------------------------------------------------------------------------- def deep_cp(obj) Marshal.load(Marshal.dump(obj)) end #-------------------------------------------------------------------------- # ● リトライ用にデータを保持する #-------------------------------------------------------------------------- def backup_retry_data @retry_data = [] @retry_data << deep_cp($game_switches) @retry_data << deep_cp($game_variables) @retry_data << deep_cp($game_actors) @retry_data << deep_cp($game_party) @retry_data << deep_cp($game_troop) end #-------------------------------------------------------------------------- # ● リトライ用データを読み込む #-------------------------------------------------------------------------- def restore_retry_data $game_switches = deep_cp(@retry_data[0]) $game_variables = deep_cp(@retry_data[1]) $game_actors = deep_cp(@retry_data[2]) $game_party = deep_cp(@retry_data[3]) $game_troop = deep_cp(@retry_data[4]) end #-------------------------------------------------------------------------- # ● リトライの為の準備を行う #-------------------------------------------------------------------------- def setup_retry_data backup_retry_data end #-------------------------------------------------------------------------- # ● リトライの是非の選択開始 #-------------------------------------------------------------------------- def start_retry_selection SceneManager.scene.start_retry_selection end #-------------------------------------------------------------------------- # ● リトライの処理 #-------------------------------------------------------------------------- def process_retry Graphics.update Graphics.freeze restore_retry_data SceneManager.goto(Scene_Battle) BattleManager.play_battle_bgm Sound.play_battle_start end #-------------------------------------------------------------------------- # ● 敗北の処理 #-------------------------------------------------------------------------- alias _retry_battle_process_defeat process_defeat def process_defeat if $game_switches[RETRY_ENABLE_SWITCH] start_retry_selection else _retry_battle_process_defeat end end end
class Game_Screen #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_writer :brightness # 明るさ end
class Retry_Window < Window_Command #-------------------------------------------------------------------------- # ● インクルード Rokan::Retry_Battle #-------------------------------------------------------------------------- include Rokan::Retry_Battle #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 0) update_placement select_symbol(:reset_battle) self.openness = 0 self.active = false end #-------------------------------------------------------------------------- # ● ウィンドウ幅の取得 #-------------------------------------------------------------------------- def window_width return 160 end #-------------------------------------------------------------------------- # ● ウィンドウ位置の更新 #-------------------------------------------------------------------------- def update_placement self.x = (Graphics.width - width) / 2 self.y = (Graphics.height - height) / 2 end #-------------------------------------------------------------------------- # ● コマンドリストの作成 #-------------------------------------------------------------------------- def make_command_list add_command(RETRY_COMMAND, :retry) add_command(GIVEUP_COMMAND, :giveup) end #-------------------------------------------------------------------------- # ● ウィンドウのアクティブ化 #-------------------------------------------------------------------------- def activate open super end #-------------------------------------------------------------------------- # ● ウィンドウの非アクティブ化 #-------------------------------------------------------------------------- def deactivate close super end end
class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias _retry_battle_start start def start _retry_battle_start create_command_window end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- alias _retry_battle_terminate terminate def terminate _retry_battle_terminate @command_window.dispose perform_battle_transition if SceneManager.scene_is?(Scene_Battle) end #-------------------------------------------------------------------------- # ● 確認コマンドウィンドウの作成 #-------------------------------------------------------------------------- def create_command_window @command_window = Retry_Window.new @command_window.set_handler(:retry, method(:reset_battle)) @command_window.set_handler(:giveup, method(:giveup_battle)) end #-------------------------------------------------------------------------- # ● リトライの是非の選択開始 #-------------------------------------------------------------------------- def start_retry_selection @command_window.activate bgm = RPG::BGM.last bgm.volume -= 20 bgm.play update_basic until @command_window.open? end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias _retry_battle_update update def update if @command_window.active super else _retry_battle_update end end #-------------------------------------------------------------------------- # ● フレーム更新(基本) #-------------------------------------------------------------------------- alias _retry_battle_update_basic update_basic def update_basic if @command_window && @command_window.active $game_troop.screen.brightness = [$game_troop.screen.brightness - 8, 160].max end _retry_battle_update_basic end #-------------------------------------------------------------------------- # ● 戦闘をあきらめる #-------------------------------------------------------------------------- def giveup_battle @command_window.deactivate BattleManager._retry_battle_process_defeat end #-------------------------------------------------------------------------- # ● 戦闘のリセット #-------------------------------------------------------------------------- def reset_battle @command_window.deactivate update_basic until @command_window.close? BattleManager.process_retry end #-------------------------------------------------------------------------- # ● 戦闘前トランジション実行 #-------------------------------------------------------------------------- def perform_battle_transition Graphics.transition(60, "Graphics/System/BattleStart", 100) Graphics.freeze end end Pour l'utilisation c'est simple. Il suffit d'activer un interrupteur pour autoriser le joueur à renter sa chance en combats. à la ligne 22, on peut modifier l’interrupteur qui autorise un nouveau combats. - Code:
-
RETRY_ENABLE_SWITCH = 10 Juste en dessous il y a les mots qui apparaitrons à l'écran, ils sont modifiable à condition de bien rester entre les accolades. - Code:
-
RETRY_COMMAND = "Revanche" GIVEUP_COMMAND = "Abandonner" C'est tout, un screen. Pour la source c'est encore et toujours http://kaisou-ryouiki.sakura.ne.jp/. |
|