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

Project1

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

[已经过期] 是否脚本错误,帮忙看下

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2010-8-4
帖子
6
跳转到指定楼层
1
发表于 2010-8-9 20:53:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
61行说是出错,但我看不出来,我还是新人,对于脚本,还只是个接触而已,请高手帮忙。



#==============================================================================
#RTAB观光游第六站,连击效果+连击数显示 (计算部分)
#==============================================================================
# 連撃 Ver 1.02
# 配布元・サポートURL
# http://members.jcom.home.ne.jp/cogwheel/

#==============================================================================
# ■ Scene_Battle (分割定義 4)
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================
# アニメに強さ0のフラッシュが存在した場合、
# 赤:倍率 緑:+スキル・アイテムID でダメージ計算を行う。


class Scene_Battle
  attr_accessor :active_battler
  attr_reader :skill  
  #--------------------------------------------------------------------------
  # ● ATB基礎セットアップ
  #--------------------------------------------------------------------------
  alias :atb_setup_straight :atb_setup
  def atb_setup
    atb_setup_straight
    for battler in $game_party.actors + $game_troop.enemies
      battler.total_damage = {}
    end
  end
  #--------------------------------------------------------------------------
  # ● アクション更新 (メインフェーズ)
  #--------------------------------------------------------------------------
  def action_phase(battler)
    while true
      # action が 1 の場合、バトラーが行動中かどうか確認
      if @action == 1 and battler.phase < 3
        for target in battler.target
          speller = synthe?(target)
          if speller == nil
            # ターゲットが通常行動中の場合
            if @action_battlers.include?(target)
              if target.phase > 2
                return
              end
            end
          else
            # ターゲットが連携スキル発動中の場合
            for spell in speller
              if @action_battlers.include?(spell)
                if spell.phase > 2
                  return
                end
              end
            end
          end
        end
      end
      case battler.phase
      when 1
        update_phase4_step1(battler)
      when 2
        update_phase4_step2(battler)
      when 3
        update_phase4_step3(battler)
      when 4
        update_phase4_step4(battler)
      when 5
        update_phase4_step5(battler)
      when 6
        update_phase4_step6(battler)
      end
      # ウェイトが入った場合
      if battler.wait > 0
        # ウェイトカウントを減らして終了
        battler.wait -= 1
        break
      end
      # 行動終了した場合ループを抜ける
      unless @action_battlers.include?(battler)
        break
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
  #--------------------------------------------------------------------------
  def update_phase4_step1(battler)
    # すでに戦闘から外されている場合
    if battler.index == nil
      @action_battlers.delete(battler)
      anime_wait_return
      battler.wait = 1
      return
    end
    speller = synthe?(battler)
    if speller == nil
      # ダメージ食らい中の場合
      unless battler.damage.empty? or @action > 2
        battler.wait = 1
        return
      end
      # 行動可能かどうか判定
      unless battler.movable?
        battler.phase = 6
        return
      end
    else
      # ダメージ食らい中の場合
      for spell in speller
        unless spell.damage.empty? or @action > 2
          battler.wait = 1
          return
        end
        # 行動可能かどうか判定
        unless spell.movable?
          battler.phase = 6
          return
        end
      end
    end
    # スキル使用時、詠唱時間設定
    # 強制アクションかつ @force が 2 の時はスキルを即時発動
    if battler.current_action.kind == 1 and
      (not battler.current_action.forcing or @force != 2)
      if battler.rtp == 0
        # スキル詠唱中ならば、解除
        skill_reset(battler)
        # スキル詠唱時間設定
        recite_time(battler)
        # 連携技設定
        synthe_spell(battler)
        # スキルを詠唱する場合
        if battler.rtp > 0
          # 強制アクションかつ @force が 1 の時は連携スキルのみ即時発動
          speller = synthe?(battler)
          if battler.current_action.forcing and @force > 0 and speller != nil
            for spell in speller
              spell.rt = spell.rtp
            end
          else
            battler.blink = true
            if battler.current_action.forcing
              $game_temp.forcing_battler = nil
              battler.current_action.forcing = false
            end
            @action_battlers.delete(battler)
            return
          end
        end
      end
    end
    # アクターの明滅エフェクト OFF
    if battler != nil
      battler.blink = false
    end
    speller = synthe?(battler)
    if speller == nil
      @spell_p.delete(battler)
      @spell_e.delete(battler)
    else
      for spell in speller
        spell.blink = false
        @spell_p.delete(spell)
        @spell_e.delete(spell)
      end
    end
    # ステップ 2 に移行
    battler.phase = 2
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  #--------------------------------------------------------------------------
  def update_phase4_step2(battler)
    # 強制アクションでなければ
    unless battler.current_action.forcing
      # 制約が [敵を通常攻撃する] か [味方を通常攻撃する] の場合
      if battler.restriction == 2 or battler.restriction == 3
        # アクションに攻撃を設定
        battler.current_action.kind = 0
        battler.current_action.basic = 0
      end
    end
    # アクションの種別より攻撃アニメーションを取得する
    case battler.current_action.kind
    when 0 # 基本
      if battler.is_a?(Game_Actor)
        base_id = battler.weapon_id
      end
      anime_id = battler.animation2_id
      # 防御など特殊行動の場合は次のステップへ
      unless make_basic_action_preparation(battler)
        return
      end
      # 戦闘が終了した場合は行動をキャンセル
      if fin?
        battler.phase = 6
        return
      end
    when 1 # スキル
      base_id = battler.current_action.skill_id
      anime_id = $data_skills[battler.current_action.skill_id].animation2_id
      # スキルが使用できない場合は行動をキャンセル
      unless make_skill_action_preparation(battler)
        return
      end
      # 戦闘が終了した場合は行動をキャンセル
      if fin? and $data_skills[anime_id].scope == 1..2
        battler.phase = 6
        return
      end
    when 2 # アイテム
      base_id = battler.current_action.item_id
      anime_id = $data_items[battler.current_action.item_id].animation2_id
      # アイテムが使用できない場合は行動をキャンセル
      unless make_item_action_preparation(battler)
        return
      end
      # 戦闘が終了した場合は行動をキャンセル
      if fin? and $data_items[anime_id].scope == 1..2
        battler.phase = 6
        return
      end
    end
    # アニメーションを検索し、連撃性を変数serialに代入する
    serial = []
    frame = 0
    if $data_animations[anime_id] != nil
      for animation in $data_animations[anime_id].timings
        color = animation.flash_color
        # アニメーション・フラッシュの強さが0の場合
        if color.alpha == 0
          serial.push([color.red.to_i, color.green, animation.frame - frame])
          frame = animation.frame
        end
      end
      # 連撃性がない場合単発攻撃
      if serial.empty?
        serial = [[20, 100, $data_animations[anime_id].frame_max - 5]]
      end
    else
      # アニメーションが存在しない場合
      serial = [[20, 100, 0]]
    end
    # ハッシュ total_damage の作成
    total_damage = {}
    for target in battler.target
      total_damage[target] = []
    end
    # 連撃回数分ダメージ計算を行う
    for attack in serial
      # アクションの種別で分岐
      case battler.current_action.kind
      when 0  # 基本
        if battler.is_a?(Game_Actor)
          # バトラーがアクターの場合、攻撃時に武器を変更する
          battler.change_weapon(base_id + attack[1] - 100)
        end
        make_basic_action_result(battler)
      when 1  # スキル
        # 連携スキルのことを考え、スキルIDの変更は内部処理で行う
        make_skill_action_result(battler, attack[1] - 100)
      when 2  # アイテム
        # アイテムIDを設定分変化させる
        battler.current_action.item_id = base_id + attack[1] - 100
        make_item_action_result(battler)
      end
      # total_damage へダメージを代入
      for target in battler.target
        # ダメージがある場合、ダメージをX/20倍する。
        if target.damage[battler].is_a?(Numeric)
          damage = target.damage[battler] * attack[0] / 20
        else
          damage = target.damage[battler]
        end
        # 回復HP量がある場合、回復HP量をX/20倍する。
        if target.recover_hp[battler].is_a?(Numeric)
          recover_hp = target.recover_hp[battler] * attack[0] / 20
        end
        # 回復SP量がある場合、回復SP量をX/20倍する。
        if target.recover_sp[battler].is_a?(Numeric)
          recover_sp = target.recover_sp[battler] * attack[0] / 20
        end
        critical = target.critical[battler]
        # total_damage = [ダメージ, クリティカルフラグ, 回復HP量, 回復SP量,
        #                 ステート変化, ステート回復, 待ちフレーム時間]
        total_damage[target].push([damage, critical, recover_hp, recover_sp,
          target.state_p[battler], target.state_m[battler], attack[2]])
      end
    end
    # トータルダメージを、バトラーのインスタンスに代入
    for target in battler.target
      target.total_damage[battler] = total_damage[target]
    end
    # 武器・スキル・アイテムIDを通常に戻す
    case battler.current_action.kind
    when 0  # 基本
      if battler.is_a?(Game_Actor)
        battler.change_weapon(base_id)
      end
    when 1  # スキル
      battler.current_action.skill_id = base_id
    when 2  # アイテム
      battler.current_action.item_id = base_id
    end
    if battler.phase == 2
      # ステップ 3 に移行
      battler.phase = 3
    end
  end
  #--------------------------------------------------------------------------
  # ● 基本アクション 準備#到此一游(武器范围定义必须)
  #--------------------------------------------------------------------------
  def make_basic_action_preparation(battler)
    # 攻撃の場合
    if battler.current_action.basic == 0
      # アニメーション ID を設定
      battler.anime1 = battler.animation1_id
      battler.anime2 = battler.animation2_id
      # 行動側バトラーがエネミーの場合
      if battler.is_a?(Game_Enemy)
        if battler.restriction == 3
          target = $game_troop.random_target_enemy
        elsif battler.restriction == 2
          target = $game_party.random_target_actor
        else
          index = battler.current_action.target_index
          target = $game_party.smooth_target_actor(index)
        end
      end
      # 行動側バトラーがアクターの場合
      #到此一游(武器范围定义必须)
      battler.set_xrxs19_special_scope(battler.equip_element_set)
      if battler.is_a?(Game_Actor)
        if battler.restriction == 3
          target = $game_party.random_target_actor
        elsif battler.restriction == 2
          target = $game_troop.random_target_enemy
        elsif battler.current_action.scope_force == 3 # 己方单体
          index = battler.current_action.target_index
          target = $game_party.smooth_target_actor(index)
        else
          index = battler.current_action.target_index
          target = $game_troop.smooth_target_enemy(index)
        end
      end
      # 対象側バトラーの配列を設定
    case  battler.current_action.scope_force
    when 2 # 敌方全体
        for enemy in $game_troop.enemies
          if enemy.exist?
            battler.target.push(enemy)
          end
        end
    battler.target.push(battler) if battler.current_action.self_inclusion     
    when 4 # 己方全体
        for actor in $game_party.actors
          if actor.exist?
            battler.target.push(actor)
          end
        end
    battler.target -=[battler] if battler.current_action.self_exclusion   
    when 7  # 使用者
      battler.target.push(battler)
         when 8  # 全域化
        for enemy in $game_troop.enemies
          if enemy.exist?
            battler.target.push(enemy)
          end
        end
      for actor in $game_party.actors
          if actor.exist?
            battler.target.push(actor)
          end
        end
battler.target -=[battler] if battler.current_action.self_exclusion
     when 9  # 敌方随机        
        for enemy in $game_troop.enemies
          if enemy.exist?
            battler.target = [$game_troop.random_target_enemy]
          end
        end
battler.target.push(battler) if battler.current_action.self_inclusion
      when 10  # 己方随机
      for actor in $game_party.actors
          if actor.exist?
            battler.target.push(actor)
          end
        end      
battler.target -=[battler] if battler.current_action.self_exclusion
battler.target = [battler.target[rand(battler.target.size)]]
        when 11 #对象随机
      battler.target = []
        for enemy in $game_troop.enemies
          if enemy.exist?
            battler.target.push(enemy)
          end
        end
      for actor in $game_party.actors
          if actor.exist?
            battler.target.push(actor)
          end
        end
battler.target -=[battler] if battler.current_action.self_exclusion
battler.target = [battler.target[rand(battler.target.size)]]
else
      battler.target = [target]
battler.target.push(battler) if battler.current_action.self_inclusion and
battler.current_action.scope_force != 3 and
battler.restriction != 2 and
battler.restriction != 3
      end
      return true
    end
    # 防御の場合
    if battler.current_action.basic == 1
      # ステップ 3 に移行
      battler.phase = 3
      return false
    end
    # 逃げるの場合
    if battler.is_a?(Game_Enemy) and battler.current_action.basic == 2
      # 逃げる
      @help_window.set_text("逃げる", 1)
      @help_wait = @help_time
      battler.escape
      return      
      
      # 逃げる
#      battler.escape
#      # ステップ 3 に移行
#      battler.phase = 3
#      return false
    end
    # 何もしないの場合
    if battler.current_action.basic == 3
      # ステップ 6 に移行
      battler.phase = 6
      return false
    end
  end
  #--------------------------------------------------------------------------
  # ● スキルアクション 準備
  #--------------------------------------------------------------------------
  def make_skill_action_preparation(battler)
    # スキルを取得
    @skill = $data_skills[battler.current_action.skill_id]
    # 連携スキルであるかどうか確認
    speller = synthe?(battler)
    # 強制アクションでなければ
    unless battler.current_action.forcing
      # SP 切れなどで使用できなくなった場合
      if speller == nil
        unless battler.skill_can_use?(@skill.id)
          # ステップ 6 に移行
          battler.phase = 6
         return false
        end
      end
    end
    # SP 消費
    temp = false
    if speller != nil
      for spell in speller
        if spell.current_action.spell_id == 0
          spell.sp -= @skill.sp_cost
        else
          spell.sp -= $data_skills[spell.current_action.spell_id].sp_cost
        end
        # ステータスウィンドウをリフレッシュ
        status_refresh(spell)
      end
    else
      #所谓HP消费看这里
     if((@skill.element_set).include?(($data_system.elements).index("HP消费")))
      battler.hp -= @skill.sp_cost
      else
      battler.sp -= @skill.sp_cost
      end
      # ステータスウィンドウをリフレッシュ
      status_refresh(battler)
    end

    # アニメーション ID を設定
    battler.anime1 = @skill.animation1_id
    battler.anime2 = @skill.animation2_id
    # コモンイベント ID を設定
    battler.event = @skill.common_event_id
    # 対象側バトラーを設定
    set_target_battlers(@skill.scope, battler)
    return true
  end
  #--------------------------------------------------------------------------
  # ● アイテムアクション 準備
  #--------------------------------------------------------------------------
  def make_item_action_preparation(battler)
    # アイテムを取得
    @item = $data_items[battler.current_action.item_id]
    # アイテム切れなどで使用できなくなった場合
    unless $game_party.item_can_use?(@item.id)
      # ステップ 6 に移行
      battler.phase = 6
      return false
    end
    # 消耗品の場合
    if @item.consumable
      # 使用したアイテムを 1 減らす
      $game_party.lose_item(@item.id, 1)
    end
    # アニメーション ID を設定
    battler.anime1 = @item.animation1_id
    battler.anime2 = @item.animation2_id
    # コモンイベント ID を設定
    battler.event = @item.common_event_id
    # 対象を決定
    index = battler.current_action.target_index
    target = $game_party.smooth_target_actor(index)
    # 対象側バトラーを設定
    set_target_battlers(@item.scope, battler)
    return true
  end
  #--------------------------------------------------------------------------
  # ● 基本アクション 結果作成
  #--------------------------------------------------------------------------
  def make_basic_action_result(battler)
    # 通常攻撃の効果を適用
    for target in battler.target
      target.attack_effect(battler)
    end
  end
  #--------------------------------------------------------------------------
  # ● スキルアクション 結果作成
  #--------------------------------------------------------------------------
  def make_skill_action_result(battler, plus_id)
    # スキルを取得
    @skill = $data_skills[battler.current_action.skill_id + plus_id]
    # 連携スキルであるかどうか確認
    speller = synthe?(battler)
    # スキルの効果を適用
    for target in battler.target
      if speller != nil
        damage = 0
        effective = false
        state_p = []
        state_m = []
        d_result = false
        for spell in speller
          if spell.current_action.spell_id != 0
            @skill = $data_skills[spell.current_action.spell_id + plus_id]
          end
          effective |= target.skill_effect(spell, @skill)
          if target.damage[spell].class != String
            d_result = true
            damage += target.damage[spell]
          elsif effective
            effect = target.damage[spell]
          end
          state_p += target.state_p[spell]
          state_m += target.state_m[spell]
          target.damage.delete(spell)
          target.state_p.delete(spell)
          target.state_m.delete(spell)
        end
        if d_result
          target.damage[battler] = damage
        elsif effective
          target.damage[battler] = effect
        end
        target.state_p[battler] = state_p
        target.state_m[battler] = state_m
      else
        target.skill_effect(battler, @skill)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテムアクション 結果作成
  #--------------------------------------------------------------------------
  def make_item_action_result(battler)
    # アイテムを取得
    @item = $data_items[battler.current_action.item_id]
    # アイテムの効果を適用
    for target in battler.target
      target.item_effect(@item, battler)
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  #--------------------------------------------------------------------------
  def update_phase4_step4(battler)
    # カメラ設定
    if battler.target[0].is_a?(Game_Enemy) and battler.anime1 != 0
      camera_set(battler)
    end
    # 対象側アニメーション
    for target in battler.target     
      target.animation.push([battler.anime2,
                                          (target.damage[battler] != "Miss")])
      unless battler.anime2 == 0
        battler.wait = 2 * target.total_damage[battler][0][6] - 1 +
          Graphics.frame_count % 2
      end
    end
    # ステップ 5 に移行
    battler.phase = 5
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  #--------------------------------------------------------------------------
  def update_phase4_step5(battler)
    next_step = true
    # ダメージ表示
    for target in battler.target
      # total_damage より全ダメージを算出
      total_damage = target.total_damage[battler].shift
      target.damage[battler] = total_damage[0]
      target.critical[battler] = total_damage[1]
      target.recover_hp[battler] = total_damage[2]
      target.recover_sp[battler] = total_damage[3]
      target.state_p[battler] = total_damage[4]
      target.state_m[battler] = total_damage[5]
      # ダメージ表示フラグをON
      target.damage_pop[battler] = true
      target.combohit_count if target.damage[battler].to_i > 0 and target.damage[battler] != "Miss"
      # 実際にダメージを与える
      target.damage_effect(battler, battler.current_action.kind,skill)
      # 余計なハッシュを削除
      target.recover_hp.delete(battler)
      target.recover_sp.delete(battler)
      target.state_p.delete(battler)
      target.state_m.delete(battler)
      # ダメージを全て与えきった場合
      if target.total_damage[battler].empty?
        # ターゲットへの全ダメージを削除
        target.total_damage.delete(battler)
        # 指定時間ウェイトする
        battler.wait = @damage_wait
      else
        # 指定時間ウェイトする
        next_step = false
        battler.wait = 2 * target.total_damage[battler][0][6]
      end
      # ステータスウィンドウをリフレッシュ
      status_refresh(target)
    end
    if next_step
      # ステップ 6 に移行
      battler.phase = 6
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  #--------------------------------------------------------------------------
  def update_phase4_step6(battler)
    # カメラを戻す
    # SkillLearning
   if battler.target[0].is_a?(Game_Actor) and battler.current_action.kind == 1
      for target in battler.target
        skill_learning(target, target.class_id,
                        battler.current_action.skill_id)
      end
    end
    # アクション強制対象のバトラーをクリア
    if battler.current_action.forcing == true and
        battler.current_action.force_kind == 0 and
        battler.current_action.force_basic == 0 and
        battler.current_action.force_skill_id == 0
      $game_temp.forcing_battler = nil
      battler.current_action.forcing = false
    end
    refresh_phase(battler)
    speller = synthe?(battler)
    if speller != nil
      for spell in speller
        if spell != battler
          refresh_phase(spell)
        end
      end
      synthe_delete(speller)
    end
    # コモンイベント ID が有効の場合
    #if battler.event > 0
      # イベントをセットアップ
      #common_event = $data_common_events[battler.event]
      #$game_system.battle_interpreter.setup(common_event.list, 0)
    #end
    act = 0
    for actor in $game_party.actors + $game_troop.enemies
      if actor.movable?
        act += 1
      end
    end
    if @turn_cnt >= act and act > 0
      @turn_cnt %= act
      $game_temp.battle_turn += 1
      # バトルイベントの全ページを検索
      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
    end
    battler.phase = 1
    @action_battlers.delete(battler)
  end
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  alias xrxs_bp19_main main
  def main
    # コンボヒットウィンドウを作成
    @combohit_window = Window_ComboHit.new
    # 呼び戻す
    xrxs_bp19_main
    # ウィンドウを解放
    @combohit_window.dispose
    # コンボクリア
    $game_party.actors.each {|actor| actor.combohit_clear}
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias xrxs_bp19_update update
  def update
    # フレーム更新
    @combohit_window.update
    $game_party.actors.each {|actor| actor.combohit_update}
    $game_troop.enemies.each{|enemy| enemy.combohit_update}
    # 呼び戻す
    xrxs_bp19_update
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  #--------------------------------------------------------------------------
  alias xrxs_bp19_update_phase4_step5 update_phase4_step5
  def update_phase4_step5(battler)
    # 呼び戻す
    xrxs_bp19_update_phase4_step5(battler)
    # コンボ数の最も高いターゲットを探す
    max = 0
    hit_target = nil
    for target in battler.target
      if target.combohit > max
        max = target.combohit
        hit_target = target
      end
    end
    if max >= 2 and !hit_target.nil?
      @combohit_window.x = hit_target.is_a?(Game_Enemy) ? 512 : 512
      @combohit_window.refresh(max, hit_target.combohit_duration)
    end
  end  
end

#==============================================================================
# ■ Game_Battler (分割定義 1)
#------------------------------------------------------------------------------
#  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ
# スのスーパークラスとして使用されます。
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数追加
  #--------------------------------------------------------------------------
  attr_accessor :total_damage              # 総ダメージ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias :initialize_straight :initialize
  def initialize
    initialize_straight
    @total_damage = {}
  end
  #--------------------------------------------------------------------------
  # ● 存在判定
  #--------------------------------------------------------------------------
  def exist?
    return (not @hidden and (@hp > 0 or @immortal or not @total_damage.empty?))
  end
  #--------------------------------------------------------------------------
  # ● 残HP予測
  #--------------------------------------------------------------------------
  def rest_hp
    # rest_hp に現HPを代入
    rest_hp = @hp
    # バトラーが受ける全ダメージをrest_hpに反映させる
    for total in @total_damage
      for pre_damage in total[1]
        if pre_damage[0].is_a?(Numeric)
          rest_hp -= pre_damage[0]
        end
        if pre_damage[2].is_a?(Numeric)
          rest_hp += pre_damage[2]
        end
      end
    end
    return rest_hp
  end
end
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  def combohit
    @combohit = 0 if @combohit.nil?
    return @combohit
  end
  def combohit_duration
    @combohit_duration = 0 if @combohit_duration.nil?
    return @combohit_duration
  end
  #--------------------------------------------------------------------------
  # ○ コンボヒットを更新
  #--------------------------------------------------------------------------  
  def combohit_update
    # 例外補正
    @combohit_duration = 0 if @combohit_duration.nil?
    # カウント
    if @combohit_duration > 0
      @combohit_duration -= 1
      # のけぞり時間終了時、コンボ数をリセット
      @combohit = 0 if @combohit_duration == 0
    end
  end
  #--------------------------------------------------------------------------
  # ○ コンボヒットをカウント
  #--------------------------------------------------------------------------  
  def combohit_count
    # 例外補正
    @combohit = 0 if @combohit.nil?  
    # カウント
    @combohit += 1
    @combohit_duration = XRXS_BP19::COMBOHIT_DURATION
  end
  #--------------------------------------------------------------------------
  # ○ コンボヒットをクリア
  #--------------------------------------------------------------------------  
  def combohit_clear
    @combohit = nil
    @combohit_duration = nil
  end
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
#  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors)
# の内部で使用され、Game_Party クラス ($game_party) からも参照されます。
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  def change_weapon(id)
    @weapon_id = id
  end
end

#==============================================================================
# ■ Sprite_Battler
#------------------------------------------------------------------------------
#  バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、
# スプライトの状態を自動的に変化させます。
#==============================================================================

class Sprite_Battler < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    # バトラーが nil の場合
    if @battler == nil
      self.bitmap = nil
      loop_animation(nil)
      return
    end
    # ファイル名か色相が現在のものと異なる場合
    if @battler.battler_name != @battler_name or
       @battler.battler_hue != @battler_hue
      # ビットマップを取得、設定
      @battler_name = @battler.battler_name
      @battler_hue = @battler.battler_hue
      self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
      @width = bitmap.width
      @height = bitmap.height
      self.ox = @width / 2
      self.oy = @height
      if @battler.is_a?(Game_Enemy)
        @battler.height = @height
      end
      # 戦闘不能または隠れ状態なら不透明度を 0 にする
      if @battler.dead? or @battler.hidden
        self.opacity = 0
      end
    end
    if @battler.is_a?(Game_Actor)
      @nx += 1
      @nx %= 40 #每帧+1,40帧一个循环
      @xbit = @nx / 10 * self.bitmap.width/4 #获得当前的图像坐标
      self.src_rect.set(@xbit, 0, self.bitmap.width/4, self.bitmap.height) #设置当前战斗图的图像   
    end
    # アニメーション ID が現在のものと異なる場合
    if @battler.state_animation_id != @state_animation_id
      @state_animation_id = @battler.state_animation_id
      loop_animation($data_animations[@state_animation_id])
    end
    # 表示されるべきアクターの場合
    if @battler.is_a?(Game_Actor) and @battler_visible
      # メインフェーズでないときは不透明度をやや下げる
      if $game_temp.battle_main_phase
        self.opacity += 3 if self.opacity < 255
      else
        self.opacity -= 3 if self.opacity > 207
      end
    end
    # 明滅
    if @battler.blink
      blink_on
    else
      blink_off
    end
    # 不可視の場合
    unless @battler_visible
      # 出現
      if not @battler.hidden and not @battler.dead? and
         (@battler.damage.size < 2 or @battler.damage_pop.size < 2)
        appear
        @battler_visible = true
      end
    end
    # ダメージ
    for battler in @battler.damage_pop
      if battler[0].class == Array
        if battler[0][1] >= 0
          $scene.skill_se
        else
          $scene.levelup_se
        end
        damage(@battler.damage[battler[0]], false, 2)
      else
        damage(@battler.damage[battler[0]], @battler.critical[battler[0]])
      end
      if @battler.damage_sp.include?(battler[0])
        damage(@battler.damage_sp[battler[0]],
                @battler.critical[battler[0]], 1)
        @battler.damage_sp.delete(battler[0])
      end
      @battler.damage_pop.delete(battler[0])
      @battler.damage.delete(battler[0])
      @battler.critical.delete(battler[0])
    end
    # 可視の場合
    if @battler_visible
      # 逃走
      if @battler.hidden
        $game_system.se_play($data_system.escape_se)
        escape
        @battler_visible = false
      end
      # 白フラッシュ
      if @battler.white_flash
        whiten
        @battler.white_flash = false
      end
      # アニメーション
      unless @battler.animation.empty?
        for animation in @battler.animation.reverse
          animation($data_animations[animation[0]], animation[1])
          @battler.animation.delete(animation)
        end
      end
      # コラプス
      if @battler.total_damage.empty? and @battler.dead?
        if $scene.dead_ok?(@battler)
          if @battler.is_a?(Game_Enemy)
            $game_system.se_play($data_system.enemy_collapse_se)
          else
            $game_system.se_play($data_system.actor_collapse_se)
          end
          collapse
          @battler_visible = false
        end
      end
    end
    # スプライトの座標を設定
    self.x = @battler.screen_x
    self.y = @battler.screen_y
    self.z = @battler.screen_z
    if @battler.is_a?(Game_Enemy)
      self.zoom_x = @battler.real_zoom * @battler.zoom
      self.zoom_y = @battler.real_zoom * @battler.zoom
    end
  end
end

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2010-8-4
帖子
6
2
 楼主| 发表于 2010-8-9 20:56:58 | 只看该作者
这是截图。。帮个忙。

未命名.jpg (15.86 KB, 下载次数: 0)

未命名.jpg
梦浅,未醉。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
29 小时
注册时间
2010-7-5
帖子
483
3
发表于 2010-8-9 22:14:47 | 只看该作者
用这个试下。。。(不行的话也不是我的问题。。。我也搞不懂RTAB这东西)
  1. #==============================================================================
  2. #RTAB观光游第六站,连击效果+连击数显示 (计算部分)
  3. #==============================================================================
  4. # 連撃 Ver 1.02
  5. # 配布元・サポートURL
  6. # http://members.jcom.home.ne.jp/cogwheel/

  7. #==============================================================================
  8. # ■ Scene_Battle (分割定義 4)
  9. #------------------------------------------------------------------------------
  10. #  バトル画面の処理を行うクラスです。
  11. #==============================================================================
  12. # アニメに強さ0のフラッシュが存在した場合、
  13. # 赤:倍率 緑:+スキル・アイテムID でダメージ計算を行う。


  14. class Scene_Battle
  15.   attr_accessor :active_battler
  16.   attr_reader :skill  
  17.   #--------------------------------------------------------------------------
  18.   # ● ATB基礎セットアップ
  19.   #--------------------------------------------------------------------------
  20.   alias :atb_setup_straight :atb_setup
  21.   def atb_setup
  22.     atb_setup_straight
  23.     for battler in $game_party.actors + $game_troop.enemies
  24.       battler.total_damage = {}
  25.     end
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● アクション更新 (メインフェーズ)
  29.   #--------------------------------------------------------------------------
  30.   def action_phase(battler)
  31.     while true
  32.       # action が 1 の場合、バトラーが行動中かどうか確認
  33.       if @action == 1 and battler.phase < 3
  34.         for target in battler.target
  35.           speller = synthe?(target)
  36.           if speller == nil
  37.             # ターゲットが通常行動中の場合
  38.             if @action_battlers.include?(target)
  39.               if target.phase > 2
  40.                 return
  41.               end
  42.             end
  43.           else
  44.             # ターゲットが連携スキル発動中の場合
  45.             for spell in speller
  46.               if @action_battlers.include?(spell)
  47.                 if spell.phase > 2
  48.                   return
  49.                 end
  50.               end
  51.             end
  52.           end
  53.         end
  54.       end
  55.       case battler.phase
  56.       when 1
  57.         update_phase4_step1(battler)
  58.       when 2
  59.         update_phase4_step2(battler)
  60.       when 3
  61.         update_phase4_step3(battler)
  62.       when 4
  63.         update_phase4_step4(battler)
  64.       when 5
  65.         update_phase4_step5(battler)
  66.       when 6
  67.         update_phase4_step6(battler)
  68.       end
  69.       # ウェイトが入った場合
  70.       if battler.wait > 0
  71.         # ウェイトカウントを減らして終了
  72.         battler.wait -= 1
  73.         break
  74.       end
  75.       # 行動終了した場合ループを抜ける
  76.       unless @action_battlers.include?(battler)
  77.         break
  78.       end
  79.     end
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
  83.   #--------------------------------------------------------------------------
  84.   def update_phase4_step1(battler)
  85.     # すでに戦闘から外されている場合
  86.     if battler.index == nil
  87.       @action_battlers.delete(battler)
  88.       anime_wait_return
  89.       battler.wait = 1
  90.       return
  91.     end
  92.     speller = synthe?(battler)
  93.     if speller == nil
  94.       # ダメージ食らい中の場合
  95.       unless battler.damage.empty? or @action > 2
  96.         battler.wait = 1
  97.         return
  98.       end
  99.       # 行動可能かどうか判定
  100.       unless battler.movable?
  101.         battler.phase = 6
  102.         return
  103.       end
  104.     else
  105.       # ダメージ食らい中の場合
  106.       for spell in speller
  107.         unless spell.damage.empty? or @action > 2
  108.           battler.wait = 1
  109.           return
  110.         end
  111.         # 行動可能かどうか判定
  112.         unless spell.movable?
  113.           battler.phase = 6
  114.           return
  115.         end
  116.       end
  117.     end
  118.     # スキル使用時、詠唱時間設定
  119.     # 強制アクションかつ @force が 2 の時はスキルを即時発動
  120.     if battler.current_action.kind == 1 and
  121.       (not battler.current_action.forcing or @force != 2)
  122.       if battler.rtp == 0
  123.         # スキル詠唱中ならば、解除
  124.         skill_reset(battler)
  125.         # スキル詠唱時間設定
  126.         recite_time(battler)
  127.         # 連携技設定
  128.         synthe_spell(battler)
  129.         # スキルを詠唱する場合
  130.         if battler.rtp > 0
  131.           # 強制アクションかつ @force が 1 の時は連携スキルのみ即時発動
  132.           speller = synthe?(battler)
  133.           if battler.current_action.forcing and @force > 0 and speller != nil
  134.             for spell in speller
  135.               spell.rt = spell.rtp
  136.             end
  137.           else
  138.             battler.blink = true
  139.             if battler.current_action.forcing
  140.               $game_temp.forcing_battler = nil
  141.               battler.current_action.forcing = false
  142.             end
  143.             @action_battlers.delete(battler)
  144.             return
  145.           end
  146.         end
  147.       end
  148.     end
  149.     # アクターの明滅エフェクト OFF
  150.     if battler != nil
  151.       battler.blink = false
  152.     end
  153.     speller = synthe?(battler)
  154.     if speller == nil
  155.       @spell_p.delete(battler)
  156.       @spell_e.delete(battler)
  157.     else
  158.       for spell in speller
  159.         spell.blink = false
  160.         @spell_p.delete(spell)
  161.         @spell_e.delete(spell)
  162.       end
  163.     end
  164.     # ステップ 2 に移行
  165.     battler.phase = 2
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  169.   #--------------------------------------------------------------------------
  170.   def update_phase4_step2(battler)
  171.     # 強制アクションでなければ
  172.     unless battler.current_action.forcing
  173.       # 制約が [敵を通常攻撃する] か [味方を通常攻撃する] の場合
  174.       if battler.restriction == 2 or battler.restriction == 3
  175.         # アクションに攻撃を設定
  176.         battler.current_action.kind = 0
  177.         battler.current_action.basic = 0
  178.       end
  179.     end
  180.     # アクションの種別より攻撃アニメーションを取得する
  181.     case battler.current_action.kind
  182.     when 0 # 基本
  183.       if battler.is_a?(Game_Actor)
  184.         base_id = battler.weapon_id
  185.       end
  186.       anime_id = battler.animation2_id
  187.       # 防御など特殊行動の場合は次のステップへ
  188.       unless make_basic_action_preparation(battler)
  189.         return
  190.       end
  191.       # 戦闘が終了した場合は行動をキャンセル
  192.       if fin?
  193.         battler.phase = 6
  194.         return
  195.       end
  196.     when 1 # スキル
  197.       base_id = battler.current_action.skill_id
  198.       anime_id = $data_skills[battler.current_action.skill_id].animation2_id
  199.       # スキルが使用できない場合は行動をキャンセル
  200.       unless make_skill_action_preparation(battler)
  201.         return
  202.       end
  203.       # 戦闘が終了した場合は行動をキャンセル
  204.       if fin? and $data_skills[anime_id].scope == 1..2
  205.         battler.phase = 6
  206.         return
  207.       end
  208.     when 2 # アイテム
  209.       base_id = battler.current_action.item_id
  210.       anime_id = $data_items[battler.current_action.item_id].animation2_id
  211.       # アイテムが使用できない場合は行動をキャンセル
  212.       unless make_item_action_preparation(battler)
  213.         return
  214.       end
  215.       # 戦闘が終了した場合は行動をキャンセル
  216.       if fin? and $data_items[anime_id].scope == 1..2
  217.         battler.phase = 6
  218.         return
  219.       end
  220.     end
  221.     # アニメーションを検索し、連撃性を変数serialに代入する
  222.     serial = []
  223.     frame = 0
  224.     if $data_animations[anime_id] != nil
  225.       for animation in $data_animations[anime_id].timings
  226.         color = animation.flash_color
  227.         # アニメーション・フラッシュの強さが0の場合
  228.         if color.alpha == 0
  229.           serial.push([color.red.to_i, color.green, animation.frame - frame])
  230.           frame = animation.frame
  231.         end
  232.       end
  233.       # 連撃性がない場合単発攻撃
  234.       if serial.empty?
  235.         serial = [[20, 100, $data_animations[anime_id].frame_max - 5]]
  236.       end
  237.     else
  238.       # アニメーションが存在しない場合
  239.       serial = [[20, 100, 0]]
  240.     end
  241.     # ハッシュ total_damage の作成
  242.     total_damage = {}
  243.     for target in battler.target
  244.       total_damage[target] = []
  245.     end
  246.     # 連撃回数分ダメージ計算を行う
  247.     for attack in serial
  248.       # アクションの種別で分岐
  249.       case battler.current_action.kind
  250.       when 0  # 基本
  251.         if battler.is_a?(Game_Actor)
  252.           # バトラーがアクターの場合、攻撃時に武器を変更する
  253.           battler.change_weapon(base_id + attack[1] - 100)
  254.         end
  255.         make_basic_action_result(battler)
  256.       when 1  # スキル
  257.         # 連携スキルのことを考え、スキルIDの変更は内部処理で行う
  258.         make_skill_action_result(battler, attack[1] - 100)
  259.       when 2  # アイテム
  260.         # アイテムIDを設定分変化させる
  261.         battler.current_action.item_id = base_id + attack[1] - 100
  262.         make_item_action_result(battler)
  263.       end
  264.       # total_damage へダメージを代入
  265.       for target in battler.target
  266.         # ダメージがある場合、ダメージをX/20倍する。
  267.         if target.damage[battler].is_a?(Numeric)
  268.           damage = target.damage[battler] * attack[0] / 20
  269.         else
  270.           damage = target.damage[battler]
  271.         end
  272.         # 回復HP量がある場合、回復HP量をX/20倍する。
  273.         if target.recover_hp[battler].is_a?(Numeric)
  274.           recover_hp = target.recover_hp[battler] * attack[0] / 20
  275.         end
  276.         # 回復SP量がある場合、回復SP量をX/20倍する。
  277.         if target.recover_sp[battler].is_a?(Numeric)
  278.           recover_sp = target.recover_sp[battler] * attack[0] / 20
  279.         end
  280.         critical = target.critical[battler]
  281.         # total_damage = [ダメージ, クリティカルフラグ, 回復HP量, 回復SP量,
  282.         #                 ステート変化, ステート回復, 待ちフレーム時間]
  283.         total_damage[target].push([damage, critical, recover_hp, recover_sp,
  284.           target.state_p[battler], target.state_m[battler], attack[2]])
  285.       end
  286.     end
  287.     # トータルダメージを、バトラーのインスタンスに代入
  288.     for target in battler.target
  289.       target.total_damage[battler] = total_damage[target]
  290.     end
  291.     # 武器・スキル・アイテムIDを通常に戻す
  292.     case battler.current_action.kind
  293.     when 0  # 基本
  294.       if battler.is_a?(Game_Actor)
  295.         battler.change_weapon(base_id)
  296.       end
  297.     when 1  # スキル
  298.       battler.current_action.skill_id = base_id
  299.     when 2  # アイテム
  300.       battler.current_action.item_id = base_id
  301.     end
  302.     if battler.phase == 2
  303.       # ステップ 3 に移行
  304.       battler.phase = 3
  305.     end
  306.   end
  307.   #--------------------------------------------------------------------------
  308.   # ● 基本アクション 準備#到此一游(武器范围定义必须)
  309.   #--------------------------------------------------------------------------
  310.   def make_basic_action_preparation(battler)
  311.     # 攻撃の場合
  312.     if battler.current_action.basic == 0
  313.       # アニメーション ID を設定
  314.       battler.anime1 = battler.animation1_id
  315.       battler.anime2 = battler.animation2_id
  316.       # 行動側バトラーがエネミーの場合
  317.       if battler.is_a?(Game_Enemy)
  318.         if battler.restriction == 3
  319.           target = $game_troop.random_target_enemy
  320.         elsif battler.restriction == 2
  321.           target = $game_party.random_target_actor
  322.         else
  323.           index = battler.current_action.target_index
  324.           target = $game_party.smooth_target_actor(index)
  325.         end
  326.       end
  327.       # 行動側バトラーがアクターの場合
  328.       #到此一游(武器范围定义必须)
  329.       battler.set_xrxs19_special_scope(battler.equip_element_set)
  330.       if battler.is_a?(Game_Actor)
  331.         if battler.restriction == 3
  332.           target = $game_party.random_target_actor
  333.         elsif battler.restriction == 2
  334.           target = $game_troop.random_target_enemy
  335.         elsif battler.current_action.scope_force == 3 # 己方单体
  336.           index = battler.current_action.target_index
  337.           target = $game_party.smooth_target_actor(index)
  338.         else
  339.           index = battler.current_action.target_index
  340.           target = $game_troop.smooth_target_enemy(index)
  341.         end
  342.       end
  343.       # 対象側バトラーの配列を設定
  344.     case  battler.current_action.scope_force
  345.     when 2 # 敌方全体
  346.         for enemy in $game_troop.enemies
  347.           if enemy.exist?
  348.             battler.target.push(enemy)
  349.           end
  350.         end
  351.     battler.target.push(battler) if battler.current_action.self_inclusion     
  352.     when 4 # 己方全体
  353.         for actor in $game_party.actors
  354.           if actor.exist?
  355.             battler.target.push(actor)
  356.           end
  357.         end
  358.     battler.target -=[battler] if battler.current_action.self_exclusion   
  359.     when 7  # 使用者
  360.       battler.target.push(battler)
  361.          when 8  # 全域化
  362.         for enemy in $game_troop.enemies
  363.           if enemy.exist?
  364.             battler.target.push(enemy)
  365.           end
  366.         end
  367.       for actor in $game_party.actors
  368.           if actor.exist?
  369.             battler.target.push(actor)
  370.           end
  371.         end
  372. battler.target -=[battler] if battler.current_action.self_exclusion
  373.      when 9  # 敌方随机        
  374.         for enemy in $game_troop.enemies
  375.           if enemy.exist?
  376.             battler.target = [$game_troop.random_target_enemy]
  377.           end
  378.         end
  379. battler.target.push(battler) if battler.current_action.self_inclusion
  380.       when 10  # 己方随机
  381.       for actor in $game_party.actors
  382.           if actor.exist?
  383.             battler.target.push(actor)
  384.           end
  385.         end      
  386. battler.target -=[battler] if battler.current_action.self_exclusion
  387. battler.target = [battler.target[rand(battler.target.size)]]
  388.         when 11 #对象随机
  389.       battler.target = []
  390.         for enemy in $game_troop.enemies
  391.           if enemy.exist?
  392.             battler.target.push(enemy)
  393.           end
  394.         end
  395.       for actor in $game_party.actors
  396.           if actor.exist?
  397.             battler.target.push(actor)
  398.           end
  399.         end
  400. battler.target -=[battler] if battler.current_action.self_exclusion
  401. battler.target = [battler.target[rand(battler.target.size)]]
  402. else
  403.       battler.target = [target]
  404. battler.target.push(battler) if battler.current_action.self_inclusion and
  405. battler.current_action.scope_force != 3 and
  406. battler.restriction != 2 and
  407. battler.restriction != 3
  408.       end
  409.       return true
  410.     end
  411.     # 防御の場合
  412.     if battler.current_action.basic == 1
  413.       # ステップ 3 に移行
  414.       battler.phase = 3
  415.       return false
  416.     end
  417.     # 逃げるの場合
  418.     if battler.is_a?(Game_Enemy) and battler.current_action.basic == 2
  419.       # 逃げる
  420.       @help_window.set_text("逃げる", 1)
  421.       @help_wait = @help_time
  422.       battler.escape
  423.       return      
  424.       
  425.       # 逃げる
  426. #      battler.escape
  427. #      # ステップ 3 に移行
  428. #      battler.phase = 3
  429. #      return false
  430.     end
  431.     # 何もしないの場合
  432.     if battler.current_action.basic == 3
  433.       # ステップ 6 に移行
  434.       battler.phase = 6
  435.       return false
  436.     end
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # ● スキルアクション 準備
  440.   #--------------------------------------------------------------------------
  441.   def make_skill_action_preparation(battler)
  442.     # スキルを取得
  443.     @skill = $data_skills[battler.current_action.skill_id]
  444.     # 連携スキルであるかどうか確認
  445.     speller = synthe?(battler)
  446.     # 強制アクションでなければ
  447.     unless battler.current_action.forcing
  448.       # SP 切れなどで使用できなくなった場合
  449.       if speller == nil
  450.         unless battler.skill_can_use?(@skill.id)
  451.           # ステップ 6 に移行
  452.           battler.phase = 6
  453.          return false
  454.         end
  455.       end
  456.     end
  457.     # SP 消費
  458.     temp = false
  459.     if speller != nil
  460.       for spell in speller
  461.         if spell.current_action.spell_id == 0
  462.           spell.sp -= @skill.sp_cost
  463.         else
  464.           spell.sp -= $data_skills[spell.current_action.spell_id].sp_cost
  465.         end
  466.         # ステータスウィンドウをリフレッシュ
  467.         status_refresh(spell)
  468.       end
  469.     else
  470.       #所谓HP消费看这里
  471.      if((@skill.element_set).include?(($data_system.elements).index("HP消费")))
  472.       battler.hp -= @skill.sp_cost
  473.       else
  474.       battler.sp -= @skill.sp_cost
  475.       end
  476.       # ステータスウィンドウをリフレッシュ
  477.       status_refresh(battler)
  478.     end

  479.     # アニメーション ID を設定
  480.     battler.anime1 = @skill.animation1_id
  481.     battler.anime2 = @skill.animation2_id
  482.     # コモンイベント ID を設定
  483.     battler.event = @skill.common_event_id
  484.     # 対象側バトラーを設定
  485.     set_target_battlers(@skill.scope, battler)
  486.     return true
  487.   end
  488.   #--------------------------------------------------------------------------
  489.   # ● アイテムアクション 準備
  490.   #--------------------------------------------------------------------------
  491.   def make_item_action_preparation(battler)
  492.     # アイテムを取得
  493.     @item = $data_items[battler.current_action.item_id]
  494.     # アイテム切れなどで使用できなくなった場合
  495.     unless $game_party.item_can_use?(@item.id)
  496.       # ステップ 6 に移行
  497.       battler.phase = 6
  498.       return false
  499.     end
  500.     # 消耗品の場合
  501.     if @item.consumable
  502.       # 使用したアイテムを 1 減らす
  503.       $game_party.lose_item(@item.id, 1)
  504.     end
  505.     # アニメーション ID を設定
  506.     battler.anime1 = @item.animation1_id
  507.     battler.anime2 = @item.animation2_id
  508.     # コモンイベント ID を設定
  509.     battler.event = @item.common_event_id
  510.     # 対象を決定
  511.     index = battler.current_action.target_index
  512.     target = $game_party.smooth_target_actor(index)
  513.     # 対象側バトラーを設定
  514.     set_target_battlers(@item.scope, battler)
  515.     return true
  516.   end
  517.   #--------------------------------------------------------------------------
  518.   # ● 基本アクション 結果作成
  519.   #--------------------------------------------------------------------------
  520.   def make_basic_action_result(battler)
  521.     # 通常攻撃の効果を適用
  522.     for target in battler.target
  523.       target.attack_effect(battler)
  524.     end
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ● スキルアクション 結果作成
  528.   #--------------------------------------------------------------------------
  529.   def make_skill_action_result(battler, plus_id)
  530.     # スキルを取得
  531.     @skill = $data_skills[battler.current_action.skill_id + plus_id]
  532.     # 連携スキルであるかどうか確認
  533.     speller = synthe?(battler)
  534.     # スキルの効果を適用
  535.     for target in battler.target
  536.       if speller != nil
  537.         damage = 0
  538.         effective = false
  539.         state_p = []
  540.         state_m = []
  541.         d_result = false
  542.         for spell in speller
  543.           if spell.current_action.spell_id != 0
  544.             @skill = $data_skills[spell.current_action.spell_id + plus_id]
  545.           end
  546.           effective |= target.skill_effect(spell, @skill)
  547.           if target.damage[spell].class != String
  548.             d_result = true
  549.             damage += target.damage[spell]
  550.           elsif effective
  551.             effect = target.damage[spell]
  552.           end
  553.           state_p += target.state_p[spell]
  554.           state_m += target.state_m[spell]
  555.           target.damage.delete(spell)
  556.           target.state_p.delete(spell)
  557.           target.state_m.delete(spell)
  558.         end
  559.         if d_result
  560.           target.damage[battler] = damage
  561.         elsif effective
  562.           target.damage[battler] = effect
  563.         end
  564.         target.state_p[battler] = state_p
  565.         target.state_m[battler] = state_m
  566.       else
  567.         target.skill_effect(battler, @skill)
  568.       end
  569.     end
  570.   end
  571.   #--------------------------------------------------------------------------
  572.   # ● アイテムアクション 結果作成
  573.   #--------------------------------------------------------------------------
  574.   def make_item_action_result(battler)
  575.     # アイテムを取得
  576.     @item = $data_items[battler.current_action.item_id]
  577.     # アイテムの効果を適用
  578.     for target in battler.target
  579.       target.item_effect(@item, battler)
  580.     end
  581.   end
  582.   #--------------------------------------------------------------------------
  583.   # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  584.   #--------------------------------------------------------------------------
  585.   def update_phase4_step4(battler)
  586.     # カメラ設定
  587.     if battler.target[0].is_a?(Game_Enemy) and battler.anime1 != 0
  588.       camera_set(battler)
  589.     end
  590.     # 対象側アニメーション
  591.     for target in battler.target
  592.       target.animation.push([battler.anime2,
  593.                                           (target.damage[battler] != "Miss")])
  594.       unless battler.anime2 == 0
  595.         battler.wait = 2 * target.total_damage[battler][0][6] - 1 +
  596.           Graphics.frame_count % 2
  597.       end
  598.     end
  599.     # ステップ 5 に移行
  600.     battler.phase = 5
  601.   end
  602.   #--------------------------------------------------------------------------
  603.   # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  604.   #--------------------------------------------------------------------------
  605.   def update_phase4_step5(battler)
  606.     next_step = true
  607.     # ダメージ表示
  608.     for target in battler.target
  609.       # total_damage より全ダメージを算出
  610.       total_damage = target.total_damage[battler].shift
  611.       target.damage[battler] = total_damage[0]
  612.       target.critical[battler] = total_damage[1]
  613.       target.recover_hp[battler] = total_damage[2]
  614.       target.recover_sp[battler] = total_damage[3]
  615.       target.state_p[battler] = total_damage[4]
  616.       target.state_m[battler] = total_damage[5]
  617.       # ダメージ表示フラグをON
  618.       target.damage_pop[battler] = true
  619.       target.combohit_count if target.damage[battler].to_i > 0 and target.damage[battler] != "Miss"
  620.       # 実際にダメージを与える
  621.       target.damage_effect(battler, battler.current_action.kind,skill)
  622.       # 余計なハッシュを削除
  623.       target.recover_hp.delete(battler)
  624.       target.recover_sp.delete(battler)
  625.       target.state_p.delete(battler)
  626.       target.state_m.delete(battler)
  627.       # ダメージを全て与えきった場合
  628.       if target.total_damage[battler].empty?
  629.         # ターゲットへの全ダメージを削除
  630.         target.total_damage.delete(battler)
  631.         # 指定時間ウェイトする
  632.         battler.wait = @damage_wait
  633.       else
  634.         # 指定時間ウェイトする
  635.         next_step = false
  636.         battler.wait = 2 * target.total_damage[battler][0][6]
  637.       end
  638.       # ステータスウィンドウをリフレッシュ
  639.       status_refresh(target)
  640.     end
  641.     if next_step
  642.       # ステップ 6 に移行
  643.       battler.phase = 6
  644.     end
  645.   end
  646.   #--------------------------------------------------------------------------
  647.   # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  648.   #--------------------------------------------------------------------------
  649.   def update_phase4_step6(battler)
  650.     # カメラを戻す
  651.     # SkillLearning
  652.    if battler.target[0].is_a?(Game_Actor) and battler.current_action.kind == 1
  653.       for target in battler.target
  654.         skill_learning(target, target.class_id,
  655.                         battler.current_action.skill_id)
  656.       end
  657.     end
  658.     # アクション強制対象のバトラーをクリア
  659.     if battler.current_action.forcing == true and
  660.         battler.current_action.force_kind == 0 and
  661.         battler.current_action.force_basic == 0 and
  662.         battler.current_action.force_skill_id == 0
  663.       $game_temp.forcing_battler = nil
  664.       battler.current_action.forcing = false
  665.     end
  666.     refresh_phase(battler)
  667.     speller = synthe?(battler)
  668.     if speller != nil
  669.       for spell in speller
  670.         if spell != battler
  671.           refresh_phase(spell)
  672.         end
  673.       end
  674.       synthe_delete(speller)
  675.     end
  676.     # コモンイベント ID が有効の場合
  677.     if battler.event > 0
  678.       # イベントをセットアップ
  679.       common_event = $data_common_events[battler.event]
  680.       $game_system.battle_interpreter.setup(common_event.list, 0)
  681.     end
  682.     act = 0
  683.     for actor in $game_party.actors + $game_troop.enemies
  684.       if actor.movable?
  685.         act += 1
  686.       end
  687.     end
  688.     if @turn_cnt >= act and act > 0
  689.       @turn_cnt %= act
  690.       $game_temp.battle_turn += 1
  691.       # バトルイベントの全ページを検索
  692.       for index in 0...$data_troops[@troop_id].pages.size
  693.         # イベントページを取得
  694.         page = $data_troops[@troop_id].pages[index]
  695.         # このページのスパンが [ターン] の場合
  696.         if page.span == 1
  697.           # 実行済みフラグをクリア
  698.           $game_temp.battle_event_flags[index] = false
  699.         end
  700.       end
  701.     end
  702.     battler.phase = 1
  703.     @action_battlers.delete(battler)
  704.   end
  705.   #--------------------------------------------------------------------------
  706.   # ● メイン処理
  707.   #--------------------------------------------------------------------------
  708.   alias xrxs_bp19_main main
  709.   def main
  710.     # コンボヒットウィンドウを作成
  711.     @combohit_window = Window_ComboHit.new
  712.     # 呼び戻す
  713.     xrxs_bp19_main
  714.     # ウィンドウを解放
  715.     @combohit_window.dispose
  716.     # コンボクリア
  717.     $game_party.actors.each {|actor| actor.combohit_clear}
  718.   end
  719.   #--------------------------------------------------------------------------
  720.   # ● フレーム更新
  721.   #--------------------------------------------------------------------------
  722.   alias xrxs_bp19_update update
  723.   def update
  724.     # フレーム更新
  725.     @combohit_window.update
  726.     $game_party.actors.each {|actor| actor.combohit_update}
  727.     $game_troop.enemies.each{|enemy| enemy.combohit_update}
  728.     # 呼び戻す
  729.     xrxs_bp19_update
  730.   end
  731.   #--------------------------------------------------------------------------
  732.   # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  733.   #--------------------------------------------------------------------------
  734.   alias xrxs_bp19_update_phase4_step5 update_phase4_step5
  735.   def update_phase4_step5(battler)
  736.     # 呼び戻す
  737.     xrxs_bp19_update_phase4_step5(battler)
  738.     # コンボ数の最も高いターゲットを探す
  739.     max = 0
  740.     hit_target = nil
  741.     for target in battler.target
  742.       if target.combohit > max
  743.         max = target.combohit
  744.         hit_target = target
  745.       end
  746.     end
  747.     if max >= 2 and !hit_target.nil?
  748.       @combohit_window.x = hit_target.is_a?(Game_Enemy) ? 512 : 512
  749.       @combohit_window.refresh(max, hit_target.combohit_duration)
  750.     end
  751.   end  
  752. end

  753. #==============================================================================
  754. # ■ Game_Battler (分割定義 1)
  755. #------------------------------------------------------------------------------
  756. #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ
  757. # スのスーパークラスとして使用されます。
  758. #==============================================================================

  759. class Game_Battler
  760.   #--------------------------------------------------------------------------
  761.   # ● 公開インスタンス変数追加
  762.   #--------------------------------------------------------------------------
  763.   attr_accessor :total_damage              # 総ダメージ
  764.   #--------------------------------------------------------------------------
  765.   # ● オブジェクト初期化
  766.   #--------------------------------------------------------------------------
  767.   alias :initialize_straight :initialize
  768.   def initialize
  769.     initialize_straight
  770.     @total_damage = {}
  771.   end
  772.   #--------------------------------------------------------------------------
  773.   # ● 存在判定
  774.   #--------------------------------------------------------------------------
  775.   def exist?
  776.     return (not @hidden and (@hp > 0 or @immortal or not @total_damage.empty?))
  777.   end
  778.   #--------------------------------------------------------------------------
  779.   # ● 残HP予測
  780.   #--------------------------------------------------------------------------
  781.   def rest_hp
  782.     # rest_hp に現HPを代入
  783.     rest_hp = @hp
  784.     # バトラーが受ける全ダメージをrest_hpに反映させる
  785.     for total in @total_damage
  786.       for pre_damage in total[1]
  787.         if pre_damage[0].is_a?(Numeric)
  788.           rest_hp -= pre_damage[0]
  789.         end
  790.         if pre_damage[2].is_a?(Numeric)
  791.           rest_hp += pre_damage[2]
  792.         end
  793.       end
  794.     end
  795.     return rest_hp
  796.   end
  797. end
  798.   #--------------------------------------------------------------------------
  799.   # ● 公開インスタンス変数
  800.   #--------------------------------------------------------------------------
  801.   def combohit
  802.     @combohit = 0 if @combohit.nil?
  803.     return @combohit
  804.   end
  805.   def combohit_duration
  806.     @combohit_duration = 0 if @combohit_duration.nil?
  807.     return @combohit_duration
  808.   end
  809.   #--------------------------------------------------------------------------
  810.   # ○ コンボヒットを更新
  811.   #--------------------------------------------------------------------------  
  812.   def combohit_update
  813.     # 例外補正
  814.     @combohit_duration = 0 if @combohit_duration.nil?
  815.     # カウント
  816.     if @combohit_duration > 0
  817.       @combohit_duration -= 1
  818.       # のけぞり時間終了時、コンボ数をリセット
  819.       @combohit = 0 if @combohit_duration == 0
  820.     end
  821.   end
  822.   #--------------------------------------------------------------------------
  823.   # ○ コンボヒットをカウント
  824.   #--------------------------------------------------------------------------  
  825.   def combohit_count
  826.     # 例外補正
  827.     @combohit = 0 if @combohit.nil?  
  828.     # カウント
  829.     @combohit += 1
  830.     @combohit_duration = XRXS_BP19::COMBOHIT_DURATION
  831.   end
  832.   #--------------------------------------------------------------------------
  833.   # ○ コンボヒットをクリア
  834.   #--------------------------------------------------------------------------  
  835.   def combohit_clear
  836.     @combohit = nil
  837.     @combohit_duration = nil
  838.   end
  839. #==============================================================================
  840. # ■ Game_Actor
  841. #------------------------------------------------------------------------------
  842. #  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors)
  843. # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。
  844. #==============================================================================

  845. class Game_Actor < Game_Battler
  846.   #--------------------------------------------------------------------------
  847.   # ● 公開インスタンス変数
  848.   #--------------------------------------------------------------------------
  849.   def change_weapon(id)
  850.     @weapon_id = id
  851.   end
  852. end

  853. #==============================================================================
  854. # ■ Sprite_Battler
  855. #------------------------------------------------------------------------------
  856. #  バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、
  857. # スプライトの状態を自動的に変化させます。
  858. #==============================================================================

  859. class Sprite_Battler < RPG::Sprite
  860.   #--------------------------------------------------------------------------
  861.   # ● フレーム更新
  862.   #--------------------------------------------------------------------------
  863.   def update
  864.     super
  865.     # バトラーが nil の場合
  866.     if @battler == nil
  867.       self.bitmap = nil
  868.       loop_animation(nil)
  869.       return
  870.     end
  871.     # ファイル名か色相が現在のものと異なる場合
  872.     if @battler.battler_name != @battler_name or
  873.        @battler.battler_hue != @battler_hue
  874.       # ビットマップを取得、設定
  875.       @battler_name = @battler.battler_name
  876.       @battler_hue = @battler.battler_hue
  877.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  878.       @width = bitmap.width
  879.       @height = bitmap.height
  880.       self.ox = @width / 2
  881.       self.oy = @height
  882.       if @battler.is_a?(Game_Enemy)
  883.         @battler.height = @height
  884.       end
  885.       # 戦闘不能または隠れ状態なら不透明度を 0 にする
  886.       if @battler.dead? or @battler.hidden
  887.         self.opacity = 0
  888.       end
  889.     end
  890.     # アニメーション ID が現在のものと異なる場合
  891.     if @battler.state_animation_id != @state_animation_id
  892.       @state_animation_id = @battler.state_animation_id
  893.       loop_animation($data_animations[@state_animation_id])
  894.     end
  895.     # 表示されるべきアクターの場合
  896.     if @battler.is_a?(Game_Actor) and @battler_visible
  897.       # メインフェーズでないときは不透明度をやや下げる
  898.       if $game_temp.battle_main_phase
  899.         self.opacity += 3 if self.opacity < 255
  900.       else
  901.         self.opacity -= 3 if self.opacity > 207
  902.       end
  903.     end
  904.     # 明滅
  905.     if @battler.blink
  906.       blink_on
  907.     else
  908.       blink_off
  909.     end
  910.     # 不可視の場合
  911.     unless @battler_visible
  912.       # 出現
  913.       if not @battler.hidden and not @battler.dead? and
  914.          (@battler.damage.size < 2 or @battler.damage_pop.size < 2)
  915.         appear
  916.         @battler_visible = true
  917.       end
  918.     end
  919.     # ダメージ
  920.     for battler in @battler.damage_pop
  921.       if battler[0].class == Array
  922.         if battler[0][1] >= 0
  923.           $scene.skill_se
  924.         else
  925.           $scene.levelup_se
  926.         end
  927.         damage(@battler.damage[battler[0]], false, 2)
  928.       else
  929.         damage(@battler.damage[battler[0]], @battler.critical[battler[0]])
  930.       end
  931.       if @battler.damage_sp.include?(battler[0])
  932.         damage(@battler.damage_sp[battler[0]],
  933.                 @battler.critical[battler[0]], 1)
  934.         @battler.damage_sp.delete(battler[0])
  935.       end
  936.       @battler.damage_pop.delete(battler[0])
  937.       @battler.damage.delete(battler[0])
  938.       @battler.critical.delete(battler[0])
  939.     end
  940.     # 可視の場合
  941.     if @battler_visible
  942.       # 逃走
  943.       if @battler.hidden
  944.         $game_system.se_play($data_system.escape_se)
  945.         escape
  946.         @battler_visible = false
  947.       end
  948.       # 白フラッシュ
  949.       if @battler.white_flash
  950.         whiten
  951.         @battler.white_flash = false
  952.       end
  953.       # アニメーション
  954.       unless @battler.animation.empty?
  955.         for animation in @battler.animation.reverse
  956.           animation($data_animations[animation[0]], animation[1])
  957.           @battler.animation.delete(animation)
  958.         end
  959.       end
  960.       # コラプス
  961.       if @battler.total_damage.empty? and @battler.dead?
  962.         if $scene.dead_ok?(@battler)
  963.           if @battler.is_a?(Game_Enemy)
  964.             $game_system.se_play($data_system.enemy_collapse_se)
  965.           else
  966.             $game_system.se_play($data_system.actor_collapse_se)
  967.           end
  968.           collapse
  969.           @battler_visible = false
  970.         end
  971.       end
  972.     end
  973.     # スプライトの座標を設定
  974.     self.x = @battler.screen_x
  975.     self.y = @battler.screen_y
  976.     self.z = @battler.screen_z
  977.     if @battler.is_a?(Game_Enemy)
  978.       self.zoom_x = @battler.real_zoom * @battler.zoom
  979.       self.zoom_y = @battler.real_zoom * @battler.zoom
  980.     end
  981.   end
  982. end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2010-8-4
帖子
6
4
 楼主| 发表于 2010-8-10 17:29:45 | 只看该作者
还是不行。。。。汗。。。还是感谢你:)
梦浅,未醉。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
171 小时
注册时间
2008-8-19
帖子
542
5
发表于 2010-8-10 20:24:39 | 只看该作者
貌似RTAB脚本都是整套的……
主站搜RTAB,用整套的脚本把..
HQSouL
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-29 22:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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