设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1204|回复: 2
打印 上一主题 下一主题

[已经解决] 想请教一下怎么改下这个脚本(我是五指少年没钱经验少)

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
329 小时
注册时间
2011-7-14
帖子
50
跳转到指定楼层
1
发表于 2012-1-27 16:40:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 panhengyi123 于 2012-1-27 16:50 编辑

我直接上脚本和截图
我用的是菜鸟的横版+这个我不知道叫什么的脚本

#==============================================================================
# ++ 积极时间战斗 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
      line_height = 120 / PARA_CTB::PARTY_SIZE
      actor_y = i * line_height + 4
      # 現在のステータスを配列に
      @now_hp = actor.hp
      @now_sp = actor.sp
      @now_states = actor.states
      # レベルアップ
      if @level_up_flags
        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
      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 != 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 != 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
          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
          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




我先在这里加一个敌方怪物的CP槽(应该叫这个吧,同时我是个菜鸟+脚本白痴,欢迎勒索我为了这脚本)




──panhengyi123于2012-1-27 16:45补充以上内容’




我先在这里添加一个敌方的CP槽(我是个脚本白痴,为了这脚本欢迎来勒索我)



──panhengyi123于2012-1-27 16:48补充以上内容’




我先在这里添加一个敌方的CP槽(我是个脚本白痴,为了这脚本欢迎来勒索我)



──panhengyi123于2012-1-27 16:48补充以上内容’ 就是这个图了

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
2
发表于 2012-1-27 18:34:06 | 只看该作者
本帖最后由 Wind2010 于 2012-1-27 18:37 编辑

竟然和我的游戏用的是同一个脚本囧
  1. # 在敌人窗口中显示的东西( 0:只显示名字 / 1:显示HP / 2:显示CT )
  2.   ENEMY_DRAWING_MATER = 0
复制代码
我也和LZ一样只贴个脚本,截图就不用了,怎么改自己想吧
PS:CT即CP

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
329 小时
注册时间
2011-7-14
帖子
50
3
 楼主| 发表于 2012-1-27 18:47:34 | 只看该作者
谢谢,原来在这里啊经验给你,不过怎么关帖子来着???




马上电脑好卡,点了几次认可都是登陆


──panhengyi123于2012-1-27 19:12补充以上内容’

点评

按认可就行了  发表于 2012-1-27 18:50
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-1 11:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表