赞 | 38 |
VIP | 2420 |
好人卡 | 100 |
积分 | 33 |
经验 | 75384 |
最后登录 | 2024-7-7 |
在线时间 | 3619 小时 |
Lv3.寻梦者 (暗夜天使) 名侦探小柯
- 梦石
- 0
- 星屑
- 3299
- 在线时间
- 3619 小时
- 注册时间
- 2006-9-6
- 帖子
- 37400
|
主站有一些脚本……
随便帮你找了一个:
- #==============================================================================
- # ++ 积极时间战斗 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 = 4
- # 队员人数,多了显示的多,适合很多有多人参加战斗的游戏~
- PARTY_SIZE = 4
-
- # 各项活动时减少的CT值(100为全部)
- ACT_ATTACK_CT = 100 # 攻击时候消耗的CT值
- ACT_GUARD_CT = 100 # 防御
- ACT_ESCAPE_CT = 100 # 逃走失败
- ACT_SKILL_CT = 100 # 使用特技
- ACT_ITEM_CT = 100 # 使用物品
-
- # 逃跑失败的时候显示的字样
- UNESCAPE_MES = "逃跑失败"
- # 当CT槽满了的时候发出的效果音
- FULL_CT_SE = "015-Jump01"
- # 効果音的响度
- FULL_CT_SE_VOL = 80
- # CT槽填满的时候人物发生的颜色变化(括号里对应红,绿,蓝)
- FULL_CT_COLOR = Tone.new(120,0,0)
-
-
- # 各种槽的渐变颜色
- # HP槽左边的颜色
- HP_COLOR_LEFT = Color.new(128, 0, 0, 255)
- # HP槽右边的颜色
- HP_COLOR_RIGHT= Color.new(255, 0, 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 = 1
- # 各种条边框的底色
- BACK_COLOR = Color.new(128, 128, 128, 128)
- # 角色名称的字号(数字越大字越大)
- NAME_FONT_SIZE = 16
- # HP/SP的字号
- HPSP_FONT_SIZE = 18
- # 敌人名称的字号
- ENEMY_FONT_SIZE = 16
- # 是否显示对大HP/MP( 显示true / 不显示false )
- MAX_DRAW = false
- # 是否进行敌人缩写(例如有5个幽灵的时候不分别显示5个幽灵的名字而是只显示一个)
- # 例子:原本显示为:
- # 幽灵
- # 幽灵
- # 改了以后显示为:
- # 幽灵 2
- ENEMY_GROUPING = false
- # 在敌人窗口中显示的东西( 0:只显示名字 / 1:显示HP / 2:显示CT )
- ENEMY_DRAWING_MATER = 0
-
- # actor的帮助窗口表示HP/SP量规( true / false )
- HELP_DRAWING_MATER_ACTOR = true
- # 是否在选择攻击对象的时候显示敌人的HP/MP和状态(默认为显示(true))
- HELP_DRAWING_MATER_ENEMY = false
-
- # 是否在一个地方强制显示攻击对话框(攻击框就显示在一个地方,默认为true(是))
- WINDOWPOS_CHANGE = true
- WINDOWPOS_X = 100 # X坐标
- WINDOWPOS_Y = 320 # Y坐标
- # 战斗窗口的不透明度,数字越高透明度越差
- WINDOW_OPACITY = 120
-
- # 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, 4, actor_y+16-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)
复制代码 |
|