赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 8482 |
最后登录 | 2017-6-6 |
在线时间 | 144 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 144 小时
- 注册时间
- 2009-11-14
- 帖子
- 42
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
- #==============================================================================
- # ++ 积极时间战斗 ver. 2.56 ++
- # Script by 帕拉狗(パラ犬)
- # http://para.j-mx.com/
- #
- #
- ###############################################################################
- # ********* 翻译+强化+改进: *********** #
- # 忧郁的涟漪 #
- # #
- #在日站上找到的脚本,本来打算全文翻译...不过日文能力有限...放弃了..残念.... #
- #==============================================================================
- module PARA_CTB
-
- # 当一人CP槽填满的时候,CP是否不累积(默认为false,如果希望一个CP满了后其他人CP
- # 槽进行暂时的等待,改成true)
- COMMAND_WAIT = false
- # 是否等待攻击结束以后才可以行动?默认是不等待(true)
- SELECT_WAIT = true
- # 在演示攻击动画的时候是否停止CP槽的累加,默认的false不停止
- ANIMATION_WAIT = false
-
- # CP槽的填充速度(数字越大填充越快,调到999的话....就光攻击吧,连等都不用等.)
- BATTLE_SPEED = 3
- # 队员人数,多了显示的多,适合很多有多人参加战斗的游戏~
- PARTY_SIZE = 4
-
- # 各项活动时减少的CT值(100为全部)
- ACT_ATTACK_CT = 100 # 攻击时候消耗的CT值
- ACT_GUARD_CT = 70 # 防御
- ACT_ESCAPE_CT = 50 # 逃走失败
- ACT_SKILL_CT = 100 # 使用特技
- ACT_ITEM_CT = 100 # 使用物品
-
- # 逃跑失败的时候显示的字样
- UNESCAPE_MES = "逃走失败!"
- # 当CT槽满了的时候发出的效果音
- FULL_CT_SE = "确定 SE"
- # 効果音的响度
- FULL_CT_SE_VOL = 100
- # CT槽填满的时候人物发生的颜色变化(括号里对应红,绿,蓝)
- FULL_CT_COLOR = Tone.new(120,0,0)
-
-
- # 各种槽的渐变颜色
- # HP槽左边的颜色
- HP_COLOR_LEFT = Color.new(204, 51, 0, 255)
- # HP槽右边的颜色
- HP_COLOR_RIGHT= Color.new(255, 51, 0, 255)
- # SP槽左边的颜色
- SP_COLOR_LEFT = Color.new(0, 0, 128, 255)
- # SP槽右边的颜色
- SP_COLOR_RIGHT= Color.new(0, 0, 255, 255)
- # CT槽左边的颜色
- COLOR_LEFT = Color.new(128, 128, 64, 255)
- # CT槽右边的颜色
- COLOR_RIGHT= Color.new(255, 255, 128, 255)
- # CT槽集满时候的颜色
- COLOR_FULL = Color.new(255, 225, 128, 255)
-
- # 各种条边框的颜色
- FRAME_COLOR = Color.new(192, 192, 192, 255)
- # 表范围的粗
- FRAME_BORDER = 2
- # 各种条边框的底色
- BACK_COLOR = Color.new(128, 128, 128, 128)
- # 角色名称的字号(数字越大字越大)
- NAME_FONT_SIZE = 14
- # HP/SP的字号
- HPSP_FONT_SIZE = 17
- # 敌人名称的字号
- ENEMY_FONT_SIZE = 17
- # 是否显示对大HP/MP( 显示true / 不显示false )
- MAX_DRAW = false
- # 是否进行敌人缩写(例如有5个幽灵的时候不分别显示5个幽灵的名字而是只显示一个)
- # 例子:原本显示为:
- # 幽灵
- # 幽灵
- # 改了以后显示为:
- # 幽灵 2
- ENEMY_GROUPING = false
- # 在敌人窗口中显示的东西( 0:只显示名字 / 1:显示HP / 2:显示CT )
- ENEMY_DRAWING_MATER = 2
-
- # actor的帮助窗口表示HP/SP量规( true / false )
- HELP_DRAWING_MATER_ACTOR = true
- # 是否在选择攻击对象的时候显示敌人的HP/MP和状态(默认为显示(true))
- HELP_DRAWING_MATER_ENEMY = true
-
- # 是否在一个地方强制显示攻击对话框(攻击框就显示在一个地方,默认为true(是))
- WINDOWPOS_CHANGE = true
- WINDOWPOS_X = 480 # X坐标
- WINDOWPOS_Y = 305 # Y坐标
- # 战斗窗口的不透明度,数字越高透明度越差
- WINDOW_OPACITY = 160
-
- # CT槽的增长间隔,越小越自然,大了大话..好像是在移动图块...
- CT_SKIP = 2
- end
- #==============================================================================
- # ■ Scene_Battle
- #==============================================================================
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ○ CT的计算
- #--------------------------------------------------------------------------
- def update_ct
- # 在计算提高被许可的时候
- if @countup
- for actor in $game_party.actors
- # 是否能活动
- if actor.movable? == false and actor.ct_visible and @phase4_step != 5
- # 用看不见状态计算,并且有提高
- actor.ct_visible = false
- actor.countup = true
- actor.full_ct = false
- elsif actor.movable? and actor.ct_visible == false
- # 解除看不见计算提高
- clear_ct(actor)
- actor.ct_visible = true
- end
- # アクターの入れ替えに対応
- if actor.max_ct == 0
- actor.max_ct = @max_ct
- end
- # アクターのカウントアップ
- if actor.countup
- # CTがmaxになっており、コマンド入力待ちアクターに含まれない
- if actor.now_ct >= @max_ct and !(@pre_action_battlers.include?(actor))
- # コマンド入力待ちアクターに追加
- @pre_action_battlers.push(actor)
- @action_count += 1
- # 効果音を鳴らす
- if PARA_CTB::FULL_CT_SE != "" and actor.ct_visible
- Audio.se_play("Audio/SE/" + PARA_CTB::FULL_CT_SE,PARA_CTB::FULL_CT_SE_VOL)
- end
- # それ以上カウントアップしない
- actor.countup = false
- actor.full_ct = true
- else
- # カウントアップ
- actor.make_action_speed
- ct_skip = PARA_CTB::CT_SKIP != 0 ? PARA_CTB::CT_SKIP : 1
- actor.now_ct += actor.current_action.speed * PARA_CTB::BATTLE_SPEED * ct_skip
- end
- end
- end
- for enemy in $game_troop.enemies
- # 行動できるか
- if enemy.movable? == false and enemy.ct_visible and @phase4_step == 5
- # 不可視状態でカウントアップ
- enemy.ct_visible = false
- enemy.countup = true
- enemy.full_ct = false
- elsif enemy.movable? and enemy.ct_visible == false
- # 不可視カウントアップを解除
- clear_ct(enemy)
- enemy.ct_visible = true
- end
- # エネミーのカウントアップ
- if enemy.countup
- # CTがmaxになっており、行動待ちエネミーに含まれない
- if enemy.now_ct >= @max_ct and ! @pre_action_battlers.include?(enemy)
- # 行動待ちエネミーに追加
- @pre_action_battlers.push(enemy)
- @action_count += 1
- # それ以上カウントアップしない
- enemy.countup = false
- enemy.full_ct = true
- else
- # カウントアップ
- enemy.make_action_speed
- enemy.now_ct += enemy.current_action.speed * PARA_CTB::BATTLE_SPEED
- end
- end
- end
- # CTゲージを再描画
- @status_window.refresh_ct
- @status_window2.refresh_ct
- end
- end
- #--------------------------------------------------------------------------
- # ○ バトラーのCTを0に
- #--------------------------------------------------------------------------
- def clear_ct(battler)
- battler.countup = true
- battler.now_ct = 0
- battler.full_ct = false
- end
- #--------------------------------------------------------------------------
- # ○ バトラーのCTを任意のパーセンテージに
- #--------------------------------------------------------------------------
- def declease_ct(battler,percent)
- battler.countup = true
- battler.now_ct = battler.now_ct * percent / 100
- battler.full_ct = false
- end
- #--------------------------------------------------------------------------
- # ○ CTの初期化
- #--------------------------------------------------------------------------
- def initialize_ct
- # CTの基準値を決定
- max_ct
- for battler in $game_party.actors + $game_troop.enemies
- if battler.movable?
- n = $game_party.actors.size + $game_troop.enemies.size
- # 戦闘開始時にある程度のCTを溜めておく
- battler.now_ct = battler.agi * 60 * n
- battler.ct_visible = true
- else
- clear_ct(battler)
- battler.ct_visible = false
- end
- battler.countup = true
- battler.full_ct = false
- battler.max_ct = @max_ct
- end
- end
- #--------------------------------------------------------------------------
- # ○ バトラー全員の素早さからCTの基準値を決定
- #--------------------------------------------------------------------------
- def max_ct
- for battler in $game_party.actors + $game_troop.enemies
- @max_ct += battler.agi
- end
- @max_ct *= 100
- end
- #--------------------------------------------------------------------------
- # ○ バトラーの行動順を変更
- #--------------------------------------------------------------------------
- def shift_activer(shift)
- # 一つシフトする時で後ろのアクターが2人以上
- if @pre_action_battlers != nil
- if shift == 1 and @pre_action_battlers.size >= @actor_array_index + 3
- # 現在のアクターを取得
- act = @pre_action_battlers[@actor_array_index]
- # 現在のアクターを二つ後ろに挿入
- @pre_action_battlers.insert(@actor_array_index+2, act)
- # 現在位置を消去
- @pre_action_battlers.delete_at(@actor_array_index)
- @actor_array_index -= 1
- phase3_next_actor
- else
- act = @pre_action_battlers[@actor_array_index]
- # 現在のアクターを一番後ろに追加
- @pre_action_battlers.push(act)
- # 現在位置を消去
- @pre_action_battlers.delete_at(@actor_array_index)
- @actor_array_index -= 1
- phase3_next_actor
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● メイン処理
- #--------------------------------------------------------------------------
- alias main_ctb main
- def main
- # エネミー名ウインドウを作成
- @status_window2 = Window_BattleStatus_enemy.new
- @action_battlers = []
- @pre_action_battlers = []
- @max_ct = 0
- @countup = false
- @ct_wait = 0
- @action_count = 0
- main_ctb
- # エネミー名ウインドウを破棄
- @status_window2.dispose
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- alias ctb_update update
- def update
- # バトルイベント実行中の場合
- if $game_system.battle_interpreter.running?
- # インタプリタを更新
- $game_system.battle_interpreter.update
- # アクションを強制されているバトラーが存在しない場合
- if $game_temp.forcing_battler == nil
- # バトルイベントの実行が終わった場合
- unless $game_system.battle_interpreter.running?
- # 戦闘継続の場合、バトルイベントのセットアップを再実行
- unless judge
- setup_battle_event
- end
- end
- # アフターバトルフェーズでなければ
- if @phase != 5
- # ステータスウィンドウをリフレッシュ
- @status_window.refresh
- # エネミー名リストを更新
- @status_window2.refresh
- end
- end
- else
- if PARA_CTB::CT_SKIP == 0
- update_ct
- else
- if @ct_wait > 0
- @ct_wait -= 1
- else
- update_ct
- @ct_wait = PARA_CTB::CT_SKIP
- end
- end
- end
- ctb_update
- end
- #--------------------------------------------------------------------------
- # ● プレバトルフェーズ開始
- #--------------------------------------------------------------------------
- alias ctb_start_phase1 start_phase1
- def start_phase1
- # CTを初期化
- initialize_ct
- # カウントアップ開始
- @countup = true
- ctb_start_phase1
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (プレバトルフェーズ)
- #--------------------------------------------------------------------------
- def update_phase1
- # エネミー名リストを更新
- @status_window2.refresh
- # 勝敗判定
- if judge
- # 勝利または敗北の場合 : メソッド終了
- return
- end
- # パーティーコマンドフェーズを飛ばしてアクターコマンドフェーズ開始
- start_phase3
- end
- #--------------------------------------------------------------------------
- # ● パーティコマンドフェーズ開始
- #--------------------------------------------------------------------------
- def start_phase2
- # フェーズ 2 に移行
- @phase = 2
- # アクターを非選択状態に設定
- @actor_index = -1
- @active_battler = nil
- # パーティコマンドウィンドウを有効化
- @party_command_window.active = true
- @party_command_window.visible = true
- # アクターコマンドウィンドウを無効化
- @actor_command_window.active = false
- @actor_command_window.visible = false
- # メインフェーズフラグをクリア
- $game_temp.battle_main_phase = false
- # コマンド入力不可能な場合
- unless $game_party.inputable?
- # メインフェーズ開始
- start_phase4
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (パーティコマンドフェーズ : 逃げる)
- #--------------------------------------------------------------------------
- def update_phase2_escape
- # エネミーの素早さ合計を計算
- enemies_agi = 0
- for enemy in $game_troop.enemies
- if enemy.exist?
- enemies_agi += enemy.agi
- end
- end
- # 行動可能アクターの素早さ合計を計算
- actors_agi = 0
- for actor in @pre_action_battlers
- if actor.is_a?(Game_Actor) and actor.exist?
- actors_agi += actor.agi
- end
- end
- # 逃走成功判定
- success = rand(100) < 50 * actors_agi / enemies_agi
- # 逃走成功の場合
- if success
- # 逃走 SE を演奏
- $game_system.se_play($data_system.escape_se)
- # バトル開始前の BGM に戻す
- $game_system.bgm_play($game_temp.map_bgm)
- # CTをクリア
- for battler in $game_party.actors
- clear_ct(battler)
- end
- # バトル終了
- battle_end(1)
- # 逃走失敗の場合
- else
- # ヘルプウィンドウに "逃走失敗" をセット
- @help_window.set_text(PARA_CTB::UNESCAPE_MES, 1)
- # アクターのアクションとCTをクリア
- pre_action_battlers = @pre_action_battlers.clone
- for act in pre_action_battlers
- if act.is_a?(Game_Actor)
- declease_ct(act, 100-PARA_CTB::ACT_ESCAPE_CT)
- act.current_action.clear
- @pre_action_battlers.delete(act)
- end
- end
- @party_command_window.visible = false
- # ヘルプウィンドウを表示
- @help_window.visible = true
- @wait_count = 20
- # メインフェーズ開始
- start_phase4
- end
- end
- #--------------------------------------------------------------------------
- # ● アクターコマンドフェーズ開始
- #--------------------------------------------------------------------------
- def start_phase3
- # フェーズ 3 に移行
- @phase = 3
- # アクターを非選択状態に設定
- @actor_index = -1
- @active_battler = nil
- @actor_array_index = -1
- # 次のアクターのコマンド入力へ
- if @pre_action_battlers != []
- phase3_next_actor
- else
- start_phase4
- end
- end
- #--------------------------------------------------------------------------
- # ● 次のアクターのコマンド入力へ
- #--------------------------------------------------------------------------
- def phase3_next_actor
- # ループ
- begin
- # アクターの明滅エフェクト OFF
- if @active_battler != nil
- @active_battler.blink = false
- end
- # 最後のアクターの場合
- if @actor_array_index + 1 == @pre_action_battlers.size
- # メインフェーズ開始
- start_phase4
- return
- #次がエネミーの場合
- elsif $game_troop.enemies.include?(@pre_action_battlers[@actor_array_index + 1])
- # メインフェーズ開始
- start_phase4
- return
- end
- # アクターのインデックスを進める
- @actor_array_index += 1
- @actor_index = @pre_action_battlers[@actor_array_index].index
- @active_battler = $game_party.actors[@actor_index]
- @active_battler.blink = true
- @active_battler.current_action.clear
- # アクターがコマンド入力を受け付けない状態ならもう一度
- end until @active_battler.inputable?
- # アクターコマンドウィンドウをセットアップ
- phase3_setup_command_window
- end
- #--------------------------------------------------------------------------
- # ● 前のアクターのコマンド入力へ
- #--------------------------------------------------------------------------
- def phase3_prior_actor
- # ループ
- begin
- # アクターの明滅エフェクト OFF
- if @active_battler != nil
- @active_battler.blink = false
- end
- # 最初のアクターの場合
- if @actor_array_index <= 0
- # アクターコマンドフェーズ開始
- start_phase2
- return
- end
- # アクターのインデックスを戻す
- @actor_array_index -= 1
- @actor_index = @pre_action_battlers[@actor_array_index].index
- @active_battler = $game_party.actors[@actor_index]
- @active_battler.blink = true
- @active_battler.current_action.clear
- # アクターがコマンド入力を受け付けない状態ならもう一度
- end until @active_battler.inputable?
- # アクターコマンドウィンドウをセットアップ
- phase3_setup_command_window
- end
- #--------------------------------------------------------------------------
- # ● アクターコマンドウィンドウのセットアップ
- #--------------------------------------------------------------------------
- alias phase3_setup_command_window_ctb phase3_setup_command_window
- def phase3_setup_command_window
- @actor_command_window.back_opacity = PARA_CTB::WINDOW_OPACITY
- phase3_setup_command_window_ctb
- if PARA_CTB::WINDOWPOS_CHANGE
- # アクターコマンドウィンドウの位置を設定
- @actor_command_window.x = PARA_CTB::WINDOWPOS_X
- @actor_command_window.y = PARA_CTB::WINDOWPOS_Y
- # ステータスウインドウに隠れないように
- @actor_command_window.z = 9999
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (アクターコマンドフェーズ)
- #--------------------------------------------------------------------------
- def update_phase3
- # エネミーアローが有効の場合
- if @enemy_arrow != nil
- @countup = PARA_CTB::SELECT_WAIT ? false : true
- update_phase3_enemy_select
- # アクターアローが有効の場合
- elsif @actor_arrow != nil
- @countup = PARA_CTB::SELECT_WAIT ? false : true
- update_phase3_actor_select
- # スキルウィンドウが有効の場合
- elsif @skill_window != nil
- @countup = PARA_CTB::SELECT_WAIT ? false : true
- update_phase3_skill_select
- # アイテムウィンドウが有効の場合
- elsif @item_window != nil
- @countup = PARA_CTB::SELECT_WAIT ? false : true
- update_phase3_item_select
- # アクターコマンドウィンドウが有効の場合
- elsif @actor_command_window.active
- @countup = PARA_CTB::COMMAND_WAIT ? false : true
- update_phase3_basic_command
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (アクターコマンドフェーズ : 基本コマンド)
- #--------------------------------------------------------------------------
- alias ctb_update_phase3_basic_command update_phase3_basic_command
- def update_phase3_basic_command
- ctb_update_phase3_basic_command
- # LRボタンで行動順を変更
- if Input.trigger?(Input::R)
- shift_activer(1)
- end
- if Input.trigger?(Input::L)
- shift_activer(-1)
- end
- end
- #--------------------------------------------------------------------------
- # ● メインフェーズ開始
- #--------------------------------------------------------------------------
- def start_phase4
- # フェーズ 4 に移行
- @phase = 4
- battler_count = $game_party.actors.size + $game_troop.enemies.size
- if @action_count >= battler_count or $game_temp.battle_turn == 0
- # バトルイベントの全ページを検索
- for index in 0...$data_troops[@troop_id].pages.size
- # イベントページを取得
- page = $data_troops[@troop_id].pages[index]
- # このページのスパンが [ターン] の場合
- if page.span == 1
- # 実行済みフラグをクリア
- $game_temp.battle_event_flags[index] = false
- end
- end
- # ターン数カウント
- $game_temp.battle_turn += 1
- @action_count = 0
- end
- # アクターを非選択状態に設定
- @actor_index = -1
- @active_battler = nil
- # パーティコマンドウィンドウを有効化
- @party_command_window.active = false
- @party_command_window.visible = false
- # アクターコマンドウィンドウを無効化
- @actor_command_window.active = false
- @actor_command_window.visible = false
- # メインフェーズフラグをセット
- $game_temp.battle_main_phase = true
- # エネミーアクション作成
- for enemy in $game_troop.enemies
- enemy.make_action
- end
- # 行動順序作成
- make_action_orders
- # ステップ 1 に移行
- @phase4_step = 1
- end
- #--------------------------------------------------------------------------
- # ● 行動順序作成
- #--------------------------------------------------------------------------
- def make_action_orders
- # 配列 @action_battlers を初期化
- @action_battlers = []
- if @pre_action_battlers != []
- for i in 0..@actor_array_index
- # アクターを配列 @action_battlers に追加
- @action_battlers.push(@pre_action_battlers[0])
- @pre_action_battlers.shift
- end
- if @pre_action_battlers.size != 0
- loop do
- if $game_troop.enemies.include?(@pre_action_battlers[0])
- # エネミーを配列 @action_battlers に追加
- @action_battlers.push(@pre_action_battlers[0])
- @pre_action_battlers.shift
- else
- break
- end
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
- #--------------------------------------------------------------------------
- alias ctb_update_phase4_step1 update_phase4_step1
- def update_phase4_step1
- @countup = true
- # ヘルプウィンドウを隠す
- @help_window.visible = false
- # 勝敗判定
- if judge
- # 勝利または敗北の場合 : メソッド終了
- return
- end
- # 未行動バトラーが存在しない場合 (全員行動した)
- if @action_battlers.size == 0
- # アクターコマンドフェーズ開始
- start_phase3
- return
- end
- ctb_update_phase4_step1
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
- #--------------------------------------------------------------------------
- alias ctb_update_phase4_step2 update_phase4_step2
- def update_phase4_step2
- # 強制アクションでなければ
- unless @active_battler.current_action.forcing
- # 制約が [行動できない] の場合
- if @active_battler.restriction == 4
- # CTをクリア
- clear_ct(@active_battler)
- # アクション強制対象のバトラーをクリア
- $game_temp.forcing_battler = nil
- # ステップ 1 に移行
- @phase4_step = 1
- return
- end
- end
- # アニメーション再生中にCTをカウントするか
- @countup = PARA_CTB::ANIMATION_WAIT ? false : true
- ctb_update_phase4_step2
- end
- #--------------------------------------------------------------------------
- # ● 基本アクション 結果作成
- #--------------------------------------------------------------------------
- alias make_basic_action_result_ctb make_basic_action_result
- def make_basic_action_result
- # 何もしないの場合
- if @active_battler.current_action.basic == 3
- # CTをクリア
- clear_ct(@active_battler)
- # アクション強制対象のバトラーをクリア
- $game_temp.forcing_battler = nil
- # ステップ 1 に移行
- @phase4_step = 1
- return
- end
- make_basic_action_result_ctb
- end
- #--------------------------------------------------------------------------
- # ● スキルアクション 結果作成
- #--------------------------------------------------------------------------
- def make_skill_action_result
- # スキルを取得
- @skill = $data_skills[@active_battler.current_action.skill_id]
- # 強制アクションでなければ
- unless @active_battler.current_action.forcing
- # SP 切れなどで使用できなくなった場合
- unless @active_battler.skill_can_use?(@skill.id)
- # アクション強制対象のバトラーをクリア
- $game_temp.forcing_battler = nil
- # CTをクリア
- declease_ct(@active_battler,100-PARA_CTB::ACT_SKILL_CT)
- # ステップ 1 に移行
- @phase4_step = 1
- return
- end
- end
- # SP 消費
- @active_battler.sp -= @skill.sp_cost
- # ステータスウィンドウをリフレッシュ
- @status_window.refresh
- # ヘルプウィンドウにスキル名を表示
- @help_window.set_text(@skill.name, 1)
- # アニメーション ID を設定
- @animation1_id = @skill.animation1_id
- @animation2_id = @skill.animation2_id
- # コモンイベント ID を設定
- @common_event_id = @skill.common_event_id
- # 対象側バトラーを設定
- set_target_battlers(@skill.scope)
- # スキルの効果を適用
- for target in @target_battlers
- target.skill_effect(@active_battler, @skill)
- end
- end
- #--------------------------------------------------------------------------
- # ● アイテムアクション 結果作成
- #--------------------------------------------------------------------------
- alias ctb_make_item_action_result make_item_action_result
- def make_item_action_result
- # アイテムを取得
- @item = $data_items[@active_battler.current_action.item_id]
- # アイテム切れなどで使用できなくなった場合
- unless $game_party.item_can_use?(@item.id)
- # CTをクリア
- declease_ct(@active_battler,100-PARA_CTB::ACT_ITEM_CT)
- # ステップ 1 に移行
- @phase4_step = 1
- return
- end
- ctb_make_item_action_result
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
- #--------------------------------------------------------------------------
- alias update_phase4_step5_ctb update_phase4_step5
- def update_phase4_step5
- # ダメージを記録
- for target in @target_battlers
- if target.damage != nil
- target.damage_backup = target.damage
- end
- end
- update_phase4_step5_ctb
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
- #--------------------------------------------------------------------------
- alias update_phase4_step6_ctb update_phase4_step6
- def update_phase4_step6
- @active_battler.countup = true
- if @active_battler.current_action.basic == 1
- # 防御
- declease_ct(@active_battler,100-PARA_CTB::ACT_GUARD_CT)
- else
- case @active_battler.current_action.kind
- # 攻撃
- when 0
- declease_ct(@active_battler,100-PARA_CTB::ACT_ATTACK_CT)
- # スキル
- when 1
- declease_ct(@active_battler,100-PARA_CTB::ACT_SKILL_CT)
- # アイテム
- when 2
- declease_ct(@active_battler,100-PARA_CTB::ACT_ITEM_CT)
- else
- clear_ct(@active_battler)
- end
- end
- # ターゲットが行動不能になったらCTを0に
- for target in @target_battlers
- if target.movable? == false and target.damage_backup != "Miss"
- clear_ct(target)
- @status_window.refresh_ct
- end
- end
- # エネミー名リストを更新
- @status_window2.refresh
- update_phase4_step6_ctb
- end
- #--------------------------------------------------------------------------
- # ● アフターバトルフェーズ開始
- #--------------------------------------------------------------------------
- alias ctb_start_phase5 start_phase5
- def start_phase5
- @countup = false
- ctb_start_phase5
- end
- end
- #==============================================================================
- # ■ Window_BattleStatus
- #==============================================================================
- class Window_BattleStatus < Window_Base
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super(160, 320, 480, 160)
- self.contents = Bitmap.new(width - 32, height - 32)
- @level_up_flags = [false, false, false, false]
- @before_hp = []
- @before_sp = []
- @before_states = []
- @now_hp = []
- @now_sp = []
- @now_states = []
- refresh
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- @item_max = $game_party.actors.size
- for i in 0...$game_party.actors.size
- actor = $game_party.actors[i]
- line_height = 120 / PARA_CTB::PARTY_SIZE
- actor_y = i * line_height + 4
- # 現在のステータスを配列に
- @now_hp[i] = actor.hp
- @now_sp[i] = actor.sp
- @now_states[i] = actor.states
- # レベルアップ
- if @level_up_flags[i]
- self.contents.fill_rect(344, actor_y+14, 100, 8, Color.new(0, 0, 0, 0))
- self.contents.font.color = normal_color
- self.contents.draw_text(344, actor_y, 120, 32, "LEVEL UP!")
- end
- end
- # バトルステータスの軽量化処理
- # ステータスの配列が変化したときのみ描画処理
- if @before_hp == nil or @before_sp == nil or @before_states == nil or
- @before_hp != @now_hp or @before_sp != @now_sp or @before_states != @now_states
- self.contents.clear
- for i2 in 0...$game_party.actors.size
- actor = $game_party.actors[i2]
- line_height = 120 / PARA_CTB::PARTY_SIZE
- actor_y = i2 * line_height + 4
- self.contents.font.size = PARA_CTB::NAME_FONT_SIZE
- # 名前を描画
- draw_actor_name(actor, 2, actor_y+1-PARA_CTB::NAME_FONT_SIZE)
- # HPを描画
- hp_color1 = PARA_CTB::HP_COLOR_LEFT
- hp_color2 = PARA_CTB::HP_COLOR_RIGHT
- draw_meter(actor.hp, actor.maxhp, 125, actor_y+14, 80, 8, hp_color1, hp_color2)
- draw_actor_hp(actor, 102, actor_y+16-PARA_CTB::HPSP_FONT_SIZE, 100)
- # SPを描画
- sp_color1 = PARA_CTB::SP_COLOR_LEFT
- sp_color2 = PARA_CTB::SP_COLOR_RIGHT
- draw_meter(actor.sp, actor.maxsp, 245, actor_y+14, 80, 8, sp_color1, sp_color2)
- draw_actor_sp(actor, 222, actor_y+16-PARA_CTB::HPSP_FONT_SIZE, 100)
- # 変化後のステータスを配列に
- @before_hp[i2] = actor.hp
- @before_sp[i2] = actor.sp
- @before_states[i2] = actor.states
- # レベルアップ
- if @level_up_flags[i2]
- self.contents.fill_rect(344, actor_y, 100, 8, Color.new(0, 0, 0, 0))
- self.contents.font.color = normal_color
- self.contents.draw_text(344, actor_y, 120, 32, "LEVEL UP!")
- end
- end
- end
- refresh_ct
- end
- #--------------------------------------------------------------------------
- # ● CTゲージのリフレッシュ
- #--------------------------------------------------------------------------
- def refresh_ct
- for i in 0...$game_party.actors.size
- actor = $game_party.actors[i]
- line_height = 120 / PARA_CTB::PARTY_SIZE
- actor_y = i * line_height + 4
- # CTが満タンになったときのゲージの色
- ct_color_full = PARA_CTB::COLOR_FULL
- # CTゲージの色(左端)
- ct_color_start = actor.full_ct ? ct_color_full : PARA_CTB::COLOR_LEFT
- # CTゲージの色(右端)
- ct_color_end = actor.full_ct ? ct_color_full : PARA_CTB::COLOR_RIGHT
- if @level_up_flags[i] != true and actor.ct_visible
- draw_meter(actor.now_ct, actor.max_ct, 344, actor_y+14, 100, 8, ct_color_start, ct_color_end)
- elsif @level_up_flags[i] != true
- draw_meter(0, actor.max_ct, 344, actor_y+14, 100, 8, ct_color_start, ct_color_end)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- end
- #--------------------------------------------------------------------------
- # ● HP の描画
- # actor : アクター
- # x : 描画先 X 座標
- # y : 描画先 Y 座標
- # width : 描画先の幅
- #--------------------------------------------------------------------------
- def draw_actor_hp(actor, x, y, width = 144)
- # 文字列 "HP" を描画
- self.contents.font.color = system_color
- self.contents.font.size = 16
- self.contents.draw_text(x, y+2, 32, 32, $data_system.words.hp)
- self.contents.font.color = normal_color
- self.contents.font.size = PARA_CTB::HPSP_FONT_SIZE
- if PARA_CTB::MAX_DRAW
- # MaxHP を描画
- self.contents.draw_text(x, y, width, 32, actor.maxhp.to_s, 2)
- text_size = self.contents.text_size(actor.maxhp.to_s)
- text_x = x + width - text_size.width - 12
- self.contents.draw_text(text_x, y, 12, 32, "/", 1)
- # HP を描画
- self.contents.font.color = actor.hp == 0 ? knockout_color :
- actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
- text_x = text_x - text_size.width
- self.contents.draw_text(text_x, y, text_size.width, 32, actor.hp.to_s, 2)
- else
- self.contents.font.color = actor.hp == 0 ? knockout_color :
- actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
- self.contents.draw_text(x, y, width, 32, actor.hp.to_s, 2)
- end
- end
- #--------------------------------------------------------------------------
- # ● SP の描画
- # actor : アクター
- # x : 描画先 X 座標
- # y : 描画先 Y 座標
- # width : 描画先の幅
- #--------------------------------------------------------------------------
- def draw_actor_sp(actor, x, y, width = 144)
- # 文字列 "SP" を描画
- self.contents.font.color = system_color
- self.contents.font.size = 16
- self.contents.draw_text(x, y+2, 32, 32, $data_system.words.sp)
- self.contents.font.color = normal_color
- self.contents.font.size = PARA_CTB::HPSP_FONT_SIZE
- if PARA_CTB::MAX_DRAW
- # MaxSP を描画
- self.contents.draw_text(x, y, width, 32, actor.maxsp.to_s, 2)
- text_size = self.contents.text_size(actor.maxsp.to_s)
- text_x = x + width - text_size.width - 12
- self.contents.draw_text(text_x, y, 12, 32, "/", 1)
- # SP を描画
- self.contents.font.color = actor.sp == 0 ? knockout_color :
- actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
- text_x = text_x - text_size.width
- self.contents.draw_text(text_x, y, text_size.width, 32, actor.sp.to_s, 2)
- else
- self.contents.font.color = actor.sp == 0 ? knockout_color :
- actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
- self.contents.draw_text(x, y, width, 32, actor.sp.to_s, 2)
- end
- end
- end
- #==============================================================================
- # □ 敵の名前を表示するウインドウ
- #==============================================================================
- class Window_BattleStatus_enemy < Window_Base
- #--------------------------------------------------------------------------
- # ○ オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super(0, 320, 160, 160)
- self.contents = Bitmap.new(width - 32, height - 32)
- refresh
- end
- #--------------------------------------------------------------------------
- # ○ リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- self.contents.font.color = normal_color
- self.contents.font.size = PARA_CTB::ENEMY_FONT_SIZE
- @exist_enemies = []
- if $game_troop.enemies != nil
- if PARA_CTB::ENEMY_GROUPING
- ememy_list = []
- ememy_list_index = []
- # エネミーをグループ化
- for i in 0...$game_troop.enemies.size
- enemy = $game_troop.enemies[i]
- if enemy.exist?
- if ememy_list.include?(enemy.name)
- ememy_list_index[ememy_list.index(enemy.name)] += 1
- else
- # エネミー名を記録
- ememy_list.push(enemy.name)
- ememy_list_index[ememy_list.index(enemy.name)] = 1
- end
- end
- end
- # エネミーの名前と数を描画
- enemy_index = 0
- for enemy_name in ememy_list
- enemy_y = enemy_index * (PARA_CTB::ENEMY_FONT_SIZE+6) + 4
- if ememy_list_index[enemy_index] > 1
- enemy_name = enemy_name + " " + ememy_list_index[enemy_index].to_s
- end
- self.contents.draw_text(4, enemy_y, 160, 20, enemy_name)
- enemy_index += 1
- end
- else
- # エネミーの名前を描画
- enemy_index = 0
- for i in 0...$game_troop.enemies.size
- enemy = $game_troop.enemies[i]
- if enemy.exist?
- @exist_enemies.push(enemy)
- line_height = PARA_CTB::ENEMY_FONT_SIZE + 6
- if PARA_CTB::ENEMY_DRAWING_MATER != 0
- line_height += 10
- end
- enemy_y = enemy_index * line_height + 4
- self.contents.draw_text(4, enemy_y, 160, 20, enemy.name)
- enemy_index += 1
- if PARA_CTB::ENEMY_DRAWING_MATER == 1
- hp_color1 = PARA_CTB::HP_COLOR_LEFT
- hp_color2 = PARA_CTB::HP_COLOR_RIGHT
- y = enemy_y + PARA_CTB::ENEMY_FONT_SIZE + 3
- draw_meter(enemy.hp, enemy.maxhp, 4, y, 80, 8, hp_color1, hp_color2)
- end
- end
- end
- end
- end
- refresh_ct
- end
- #--------------------------------------------------------------------------
- # ● CTゲージのリフレッシュ
- #--------------------------------------------------------------------------
- def refresh_ct
- if PARA_CTB::ENEMY_DRAWING_MATER == 2 and @exist_enemies != nil
- enemy_index = 0
- for enemy in @exist_enemies
- line_height = PARA_CTB::ENEMY_FONT_SIZE + 16
- enemy_y = enemy_index * line_height + 4
- y = enemy_y + PARA_CTB::ENEMY_FONT_SIZE + 3
- # CTが満タンになったときのゲージの色
- ct_color_full = PARA_CTB::COLOR_FULL
- # CTゲージの色(左端)
- ct_color_start = enemy.full_ct ? ct_color_full : PARA_CTB::COLOR_LEFT
- # CTゲージの色(右端)
- ct_color_end = enemy.full_ct ? ct_color_full : PARA_CTB::COLOR_RIGHT
- if enemy.ct_visible
- draw_meter(enemy.now_ct, enemy.max_ct, 4, y, 100, 8, ct_color_start, ct_color_end)
- else
- draw_meter(0, enemy.max_ct, 4, y, 100, 8, ct_color_start, ct_color_end)
- end
- enemy_index += 1
- end
- end
- end
- end
- #==============================================================================
- # ■ Window_Base
- #==============================================================================
- class Window_Base < Window
-
- #--------------------------------------------------------------------------
- # ○ ゲージを描画
- #--------------------------------------------------------------------------
- def draw_meter(now, max, x, y, width, height, start_color, end_color=start_color )
- self.contents.fill_rect(x, y, width, height, PARA_CTB::FRAME_COLOR)
- self.contents.fill_rect(x+PARA_CTB::FRAME_BORDER, y+PARA_CTB::FRAME_BORDER, width-
- PARA_CTB::FRAME_BORDER*2, height-PARA_CTB::FRAME_BORDER*2, PARA_CTB::BACK_COLOR)
- now = now > max ? max : now
- percentage = max != 0 ? (width-2) * now / max.to_f : 0
- if start_color == end_color
- self.contents.fill_rect(x+1, y+1, percentage, height-2, start_color)
- else
- for i in 1..percentage
- r = start_color.red + (end_color.red - start_color.red) / percentage * i
- g = start_color.green + (end_color.green - start_color.green) / percentage * i
- b = start_color.blue + (end_color.blue - start_color.blue) / percentage * i
- a = start_color.alpha + (end_color.alpha - start_color.alpha) / percentage * i
- self.contents.fill_rect(x+i, y+1, 1, height-2, Color.new(r, g, b, a))
- end
- end
- end
- end
- #==============================================================================
- # ■ Game_Battler
- #==============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :max_ct
- attr_accessor :now_ct
- attr_accessor :full_ct
- attr_accessor :countup
- attr_accessor :ct_visible
- attr_accessor :damage_backup
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias ctb_initialize initialize
- def initialize
- ctb_initialize
- @max_ct = 0
- @now_ct = 0
- @full_ct = false
- @countup = true
- @ct_visible = true
- end
- end
- #==============================================================================
- # ■ Sprite_Battler
- #==============================================================================
- class Sprite_Battler < RPG::Sprite
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- alias ctb_update update
- def update
- ctb_update
- if @battler != nil
- if @battler.full_ct and @battler.ct_visible
- # CTが溜まったバトラーの色調を変化させる
- fullct_color = PARA_CTB::FULL_CT_COLOR
- self.tone = fullct_color
- else
- fullct_color = Tone.new(0,0,0)
- self.tone = fullct_color
- end
- end
- end
- end
- #==============================================================================
- # ■ Window_Help
- #==============================================================================
- class Window_Help < Window_Base
- #--------------------------------------------------------------------------
- # ● アクター設定
- # actor : ステータスを表示するアクター
- #--------------------------------------------------------------------------
- alias set_actor_ctb set_actor
- def set_actor(actor)
- if PARA_CTB::HELP_DRAWING_MATER_ACTOR
- self.contents.clear
- draw_actor_name(actor, 4, 0)
- draw_actor_state(actor, 140, 0)
- hp_color1 = PARA_CTB::HP_COLOR_LEFT
- hp_color2 = PARA_CTB::HP_COLOR_RIGHT
- draw_meter(actor.hp, actor.maxhp, 316, 18, 112, 8, hp_color1, hp_color2)
- draw_actor_hp(actor, 284, 0)
- sp_color1 = PARA_CTB::SP_COLOR_LEFT
- sp_color2 = PARA_CTB::SP_COLOR_RIGHT
- draw_meter(actor.sp, actor.maxsp, 492, 18, 112, 8, sp_color1, sp_color2)
- draw_actor_sp(actor, 460, 0)
- @actor = actor
- @text = nil
- self.visible = true
- else
- set_actor_ctb(actor)
- end
- end
- #--------------------------------------------------------------------------
- # ● エネミー設定
- # enemy : 名前とステートを表示するエネミー
- #--------------------------------------------------------------------------
- alias set_enemy_ctb set_enemy
- def set_enemy(enemy)
- if PARA_CTB::HELP_DRAWING_MATER_ENEMY
- self.contents.clear
- draw_actor_name(enemy, 4, 0)
- draw_actor_state(enemy, 140, 0)
- hp_color1 = PARA_CTB::HP_COLOR_LEFT
- hp_color2 = PARA_CTB::HP_COLOR_RIGHT
- draw_meter(enemy.hp, enemy.maxhp, 316, 18, 112, 8, hp_color1, hp_color2)
- draw_actor_hp(enemy, 284, 0)
- sp_color1 = PARA_CTB::SP_COLOR_LEFT
- sp_color2 = PARA_CTB::SP_COLOR_RIGHT
- draw_meter(enemy.sp, enemy.maxsp, 492, 18, 112, 8, sp_color1, sp_color2)
- draw_actor_sp(enemy, 460, 0)
- self.visible = true
- else
- set_enemy_ctb(enemy)
- end
- end
- end
复制代码 以上是我用的战斗系统!:) 请问添加图片的脚本应该加在那一句后面? |
|