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

Project1

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

关于 ‘RTAB连击数-计算部分’技能伤害比率设置

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
7 小时
注册时间
2008-9-21
帖子
26
跳转到指定楼层
1
发表于 2009-5-9 23:26:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
脚本如下
  1. #==============================================================================
  2. #RTAB观光游第六站,连击效果+连击数显示 (计算部分)
  3. #==============================================================================
  4. # 連撃 Ver 1.03
  5. # 配布元・サポートURL
  6. # http://members.jcom.home.ne.jp/cogwheel/

  7. #==============================================================================
  8. # ■ Scene_Battle (分割定義 4)
  9. #------------------------------------------------------------------------------
  10. #  バトル画面の処理を行うクラスです。
  11. #==============================================================================
  12. # アニメに強さ0のフラッシュが存在した場合、
  13. # 赤:倍率 緑:+スキル・アイテムID でダメージ計算を行う。
  14. #
  15. # 连击数,每次伤害比率如何设置,参考动画“千裂斩”

  16. class Scene_Battle
  17. attr_reader :skill#到此一游
  18. #--------------------------------------------------------------------------
  19. # ● ATB基礎セットアップ
  20. #--------------------------------------------------------------------------
  21.   alias :atb_setup_straight :atb_setup
  22.   def atb_setup
  23.     atb_setup_straight
  24.     for battler in $game_party.actors + $game_troop.enemies
  25.       battler.total_damage = {}
  26.     end
  27.   end
  28. #--------------------------------------------------------------------------
  29. # ● アクション更新 (メインフェーズ)
  30. #--------------------------------------------------------------------------
  31.   def action_phase(battler)
  32.     while true
  33.       # action が 1 の場合、バトラーが行動中かどうか確認
  34.       if @action == 1 and battler.phase < 3
  35.         for target in battler.target
  36.           speller = synthe?(target)
  37.           if speller == nil
  38.             # ターゲットが通常行動中の場合
  39.             if @action_battlers.include?(target)
  40.               if target.phase > 2
  41.                 return
  42.               end
  43.             end
  44.           else
  45.             # ターゲットが連携スキル発動中の場合
  46.             for spell in speller
  47.               if @action_battlers.include?(spell)
  48.                 if spell.phase > 2
  49.                   return
  50.                 end
  51.               end
  52.             end
  53.           end
  54.         end
  55.       end
  56.       case battler.phase
  57.       when 1
  58.         update_phase4_step1(battler)
  59.       when 2
  60.         update_phase4_step2(battler)
  61.       when 3
  62.         update_phase4_step3(battler)
  63.       when 4
  64.         update_phase4_step4(battler)
  65.       when 5
  66.         update_phase4_step5(battler)
  67.       when 6
  68.         update_phase4_step6(battler)
  69.       end
  70.       # ウェイトが入った場合
  71.       if battler.wait > 0
  72.         # ウェイトカウントを減らして終了
  73.         battler.wait -= 1
  74.         break
  75.       end
  76.       # 行動終了した場合ループを抜ける
  77.       unless @action_battlers.include?(battler)
  78.         break
  79.       end
  80.     end
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
  84.   #--------------------------------------------------------------------------
  85.   def update_phase4_step1(battler)
  86.     # すでに戦闘から外されている場合
  87.     if battler.index == nil
  88.       @action_battlers.delete(battler)
  89.       anime_wait_return
  90.       battler.wait = 1
  91.       return
  92.     end
  93.     speller = synthe?(battler)
  94.     if speller == nil
  95.       # ダメージ食らい中の場合
  96.       unless battler.damage.empty? or @action > 2
  97.         battler.wait = 1
  98.         return
  99.       end
  100.       # 行動可能かどうか判定
  101.       unless battler.movable?
  102.         battler.phase = 6
  103.         return
  104.       end
  105.     else
  106.       # ダメージ食らい中の場合
  107.       for spell in speller
  108.         unless spell.damage.empty? or @action > 2
  109.           battler.wait = 1
  110.           return
  111.         end
  112.         # 行動可能かどうか判定
  113.         unless spell.movable?
  114.           battler.phase = 6
  115.           return
  116.         end
  117.       end
  118.     end
  119.     # スキル使用時、詠唱時間設定
  120.     # 強制アクションかつ @force が 2 の時はスキルを即時発動
  121.     if battler.current_action.kind == 1 and
  122.       (not battler.current_action.forcing or @force != 2)
  123.       if battler.rtp == 0
  124.         # スキル詠唱中ならば、解除
  125.         skill_reset(battler)
  126.         # スキル詠唱時間設定
  127.         recite_time(battler)
  128.         # 連携技設定
  129.         synthe_spell(battler)
  130.         # スキルを詠唱する場合
  131.         if battler.rtp > 0
  132.           # 強制アクションかつ @force が 1 の時は連携スキルのみ即時発動
  133.           speller = synthe?(battler)
  134.           if battler.current_action.forcing and @force > 0 and speller != nil
  135.             for spell in speller
  136.               spell.rt = spell.rtp
  137.             end
  138.           else
  139.             battler.blink = true
  140.             if battler.current_action.forcing
  141.               $game_temp.forcing_battler = nil
  142.               battler.current_action.forcing = false
  143.             end
  144.             @action_battlers.delete(battler)
  145.             return
  146.           end
  147.         end
  148.       end
  149.     end
  150.     # アクターの明滅エフェクト OFF
  151.     if battler != nil
  152.       battler.blink = false
  153.     end
  154.     speller = synthe?(battler)
  155.     if speller == nil
  156.       @spell_p.delete(battler)
  157.       @spell_e.delete(battler)
  158.     else
  159.       for spell in speller
  160.         spell.blink = false
  161.         @spell_p.delete(spell)
  162.         @spell_e.delete(spell)
  163.       end
  164.     end
  165.     # ステップ 2 に移行
  166.     battler.phase = 2
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  170.   #--------------------------------------------------------------------------
  171.   def update_phase4_step2(battler)
  172.     # 強制アクションでなければ
  173.     unless battler.current_action.forcing
  174.       # 制約が [敵を通常攻撃する] か [味方を通常攻撃する] の場合
  175.       if battler.restriction == 2 or battler.restriction == 3
  176.         # アクションに攻撃を設定
  177.         battler.current_action.kind = 0
  178.         battler.current_action.basic = 0
  179.       end
  180.     end
  181.     # アクションの種別より攻撃アニメーションを取得する
  182.     case battler.current_action.kind
  183.     when 0 # 基本
  184.       if battler.is_a?(Game_Actor)
  185.         base_id = battler.weapon_id
  186.       end
  187.       anime_id = battler.animation2_id
  188.       # 防御など特殊行動の場合は次のステップへ
  189.       unless make_basic_action_preparation(battler)
  190.         return
  191.       end
  192.       # 戦闘が終了した場合は行動をキャンセル
  193.       if fin?
  194.         battler.phase = 6
  195.         return
  196.       end
  197.     when 1 # スキル
  198.       base_id = battler.current_action.skill_id
  199.       anime_id = $data_skills[battler.current_action.skill_id].animation2_id
  200.       # スキルが使用できない場合は行動をキャンセル
  201.       unless make_skill_action_preparation(battler)
  202.         return
  203.       end
  204.       # 戦闘が終了した場合は行動をキャンセル
  205.       if fin? and $data_skills[anime_id].scope == 1..2
  206.         battler.phase = 6
  207.         return
  208.       end
  209.     when 2 # アイテム
  210.       base_id = battler.current_action.item_id
  211.       anime_id = $data_items[battler.current_action.item_id].animation2_id
  212.       # アイテムが使用できない場合は行動をキャンセル
  213.       unless make_item_action_preparation(battler)
  214.         return
  215.       end
  216.       # 戦闘が終了した場合は行動をキャンセル
  217.       if fin? and $data_items[anime_id].scope == 1..2
  218.         battler.phase = 6
  219.         return
  220.       end
  221.     end
  222.     # アニメーションを検索し、連撃性を変数serialに代入する
  223.     serial = []
  224.     frame = 0
  225.     if $data_animations[anime_id] != nil
  226.       for animation in $data_animations[anime_id].timings
  227.         color = animation.flash_color
  228.         # アニメーション・フラッシュの強さが0の場合
  229.         if color.alpha == 0
  230.           serial.push([color.red.to_i, color.green, animation.frame - frame])
  231.           frame = animation.frame
  232.         end
  233.       end
  234.       # 連撃性がない場合単発攻撃
  235.       if serial.empty?
  236.         serial = [[20, 100, $data_animations[anime_id].frame_max - 5]]
  237.       end
  238.     else
  239.       # アニメーションが存在しない場合
  240.       serial = [[20, 100, 0]]
  241.     end
  242.     # ハッシュ total_damage の作成
  243.     total_damage = {}
  244.     for target in battler.target
  245.       total_damage[target] = []
  246.     end
  247.     # 連撃回数分ダメージ計算を行う
  248.     for attack in serial
  249.       # アクションの種別で分岐
  250.       case battler.current_action.kind
  251.       when 0  # 基本
  252.         if battler.is_a?(Game_Actor)
  253.           # バトラーがアクターの場合、攻撃時に武器を変更する
  254.           battler.change_weapon(base_id + attack[1] - 100)
  255.         end
  256.         make_basic_action_result(battler)
  257.       when 1  # スキル
  258.         # 連携スキルのことを考え、スキルIDの変更は内部処理で行う
  259.         make_skill_action_result(battler, attack[1] - 100)
  260.       when 2  # アイテム
  261.         # アイテムIDを設定分変化させる
  262.         battler.current_action.item_id = base_id + attack[1] - 100
  263.         make_item_action_result(battler)
  264.       end
  265.       # total_damage へダメージを代入
  266.       for target in battler.target
  267.         # ダメージがある場合、ダメージをX/20倍する。
  268.         if target.damage[battler].is_a?(Numeric)
  269.           damage = target.damage[battler] * attack[0] / 20
  270.         else
  271.           damage = target.damage[battler]
  272.         end
  273.         # 回復HP量がある場合、回復HP量をX/20倍する。
  274.         if target.recover_hp[battler].is_a?(Numeric)
  275.           recover_hp = target.recover_hp[battler] * attack[0] / 20
  276.         end
  277.         # 回復SP量がある場合、回復SP量をX/20倍する。
  278.         if target.recover_sp[battler].is_a?(Numeric)
  279.           recover_sp = target.recover_sp[battler] * attack[0] / 20
  280.         end
  281.         critical = target.critical[battler]
  282.         # total_damage = [ダメージ, クリティカルフラグ, 回復HP量, 回復SP量,
  283.         #                 ステート変化, ステート回復, 待ちフレーム時間]
  284.         total_damage[target].push([damage, critical, recover_hp, recover_sp,
  285.           target.state_p[battler], target.state_m[battler], attack[2]])
  286.       end
  287.     end
  288.     # トータルダメージを、バトラーのインスタンスに代入
  289.     for target in battler.target
  290.       target.total_damage[battler] = total_damage[target]
  291.     end
  292.     # 武器・スキル・アイテムIDを通常に戻す
  293.     case battler.current_action.kind
  294.     when 0  # 基本
  295.       if battler.is_a?(Game_Actor)
  296.         battler.change_weapon(base_id)
  297.       end
  298.     when 1  # スキル
  299.       battler.current_action.skill_id = base_id
  300.     when 2  # アイテム
  301.       battler.current_action.item_id = base_id
  302.     end
  303.     if battler.phase == 2
  304.       # ステップ 3 に移行
  305.       battler.phase = 3
  306.     end
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # ● 基本アクション 準備
  310.   #--------------------------------------------------------------------------
  311.   def make_basic_action_preparation(battler)
  312.     # 攻撃の場合
  313.     if battler.current_action.basic == 0
  314.       # アニメーション ID を設定
  315.       battler.anime1 = battler.animation1_id
  316.       battler.anime2 = battler.animation2_id
  317.       # 行動側バトラーがエネミーの場合
  318.       if battler.is_a?(Game_Enemy)
  319.         if battler.restriction == 3
  320.           target = $game_troop.random_target_enemy
  321.         elsif battler.restriction == 2
  322.           target = $game_party.random_target_actor
  323.         else
  324.           index = battler.current_action.target_index
  325.           target = $game_party.smooth_target_actor(index)
  326.         end
  327.       end
  328.       # 行動側バトラーがアクターの場合
  329.       if battler.is_a?(Game_Actor)
  330.         if battler.restriction == 3
  331.           target = $game_party.random_target_actor
  332.         elsif battler.restriction == 2
  333.           target = $game_troop.random_target_enemy
  334.         else
  335.           index = battler.current_action.target_index
  336.           target = $game_troop.smooth_target_enemy(index)
  337.         end
  338.       end
  339.       # 対象側バトラーの配列を設定
  340.       battler.target = [target]
  341.       return true
  342.     end
  343.     # 防御の場合
  344.     if battler.current_action.basic == 1
  345.       # ステップ 3 に移行
  346.       battler.phase = 3
  347.       return false
  348.     end
  349. #===============0.15b(RTAB官方更新)===========================================   
  350.     # 逃げるの場合
  351.     if battler.is_a?(Game_Enemy) and battler.current_action.basic == 2
  352.       # ステップ 3 に移行
  353.       battler.phase = 3
  354.       return false
  355.     end
  356. #=============================================================================
  357.     # 何もしないの場合
  358.     if battler.current_action.basic == 3
  359.       # ステップ 6 に移行
  360.       battler.phase = 6
  361.       return false
  362.     end
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # ● スキルアクション 準備
  366.   #--------------------------------------------------------------------------
  367.   def make_skill_action_preparation(battler)
  368.     # スキルを取得
  369.     @skill = $data_skills[battler.current_action.skill_id]
  370.     # 連携スキルであるかどうか確認
  371.     speller = synthe?(battler)
  372.     # 強制アクションでなければ
  373.     unless battler.current_action.forcing
  374.       # SP 切れなどで使用できなくなった場合
  375.       if speller == nil
  376.         unless battler.skill_can_use?(@skill.id)
  377.           # ステップ 6 に移行
  378.           battler.phase = 6
  379.          return false
  380.         end
  381.       end
  382.     end
  383.     # SP 消費
  384.     temp = false
  385.     if speller != nil
  386.       for spell in speller
  387.         if spell.current_action.spell_id == 0
  388.           spell.sp -= @skill.sp_cost
  389.         else
  390.           spell.sp -= $data_skills[spell.current_action.spell_id].sp_cost
  391.         end
  392.         # ステータスウィンドウをリフレッシュ
  393.         status_refresh(spell)
  394.       end
  395.     else
  396.       battler.sp -= @skill.sp_cost
  397.       # ステータスウィンドウをリフレッシュ
  398.       status_refresh(battler)
  399.     end
  400.     # アニメーション ID を設定
  401.     battler.anime1 = @skill.animation1_id
  402.     battler.anime2 = @skill.animation2_id
  403.     # コモンイベント ID を設定
  404.     battler.event = @skill.common_event_id
  405.     # 対象側バトラーを設定
  406.     set_target_battlers(@skill.scope, battler)
  407.     return true
  408.   end
  409.   #--------------------------------------------------------------------------
  410.   # ● アイテムアクション 準備
  411.   #--------------------------------------------------------------------------
  412.   def make_item_action_preparation(battler)
  413.     # アイテムを取得
  414.     @item = $data_items[battler.current_action.item_id]
  415.     # アイテム切れなどで使用できなくなった場合
  416.     unless $game_party.item_can_use?(@item.id)
  417.       # ステップ 6 に移行
  418.       battler.phase = 6
  419.       return false
  420.     end
  421.     # 消耗品の場合
  422.     if @item.consumable
  423.       # 使用したアイテムを 1 減らす
  424.       $game_party.lose_item(@item.id, 1)
  425.     end
  426.     # アニメーション ID を設定
  427.     battler.anime1 = @item.animation1_id
  428.     battler.anime2 = @item.animation2_id
  429.     # コモンイベント ID を設定
  430.     battler.event = @item.common_event_id
  431.     # 対象を決定
  432.     index = battler.current_action.target_index
  433.     target = $game_party.smooth_target_actor(index)
  434.     # 対象側バトラーを設定
  435.     set_target_battlers(@item.scope, battler)
  436.     return true
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # ● 基本アクション 結果作成
  440.   #--------------------------------------------------------------------------
  441.   def make_basic_action_result(battler)
  442.     # 通常攻撃の効果を適用
  443.     for target in battler.target
  444.       target.attack_effect(battler)
  445.     end
  446.   end
  447.   #--------------------------------------------------------------------------
  448.   # ● スキルアクション 結果作成
  449.   #--------------------------------------------------------------------------
  450.   def make_skill_action_result(battler, plus_id)
  451.     # スキルを取得
  452.     @skill = $data_skills[battler.current_action.skill_id + plus_id]
  453.     # 連携スキルであるかどうか確認
  454.     speller = synthe?(battler)
  455.     # スキルの効果を適用
  456.     for target in battler.target
  457.       if speller != nil
  458.         damage = 0
  459.         effective = false
  460.         state_p = []
  461.         state_m = []
  462.         d_result = false
  463.         for spell in speller
  464.           if spell.current_action.spell_id != 0
  465.             @skill = $data_skills[spell.current_action.spell_id + plus_id]
  466.           end
  467.           effective |= target.skill_effect(spell, @skill)
  468.           if target.damage[spell].class != String
  469.             d_result = true
  470.             damage += target.damage[spell]
  471.           elsif effective
  472.             effect = target.damage[spell]
  473.           end
  474.           state_p += target.state_p[spell]
  475.           state_m += target.state_m[spell]
  476.           target.damage.delete(spell)
  477.           target.state_p.delete(spell)
  478.           target.state_m.delete(spell)
  479.         end
  480.         if d_result
  481.           target.damage[battler] = damage
  482.         elsif effective
  483.           target.damage[battler] = effect
  484.         end
  485.         target.state_p[battler] = state_p
  486.         target.state_m[battler] = state_m
  487.       else
  488.         target.skill_effect(battler, @skill)
  489.       end
  490.     end
  491.   end
  492.   #--------------------------------------------------------------------------
  493.   # ● アイテムアクション 結果作成
  494.   #--------------------------------------------------------------------------
  495.   def make_item_action_result(battler)
  496.     # アイテムを取得
  497.     @item = $data_items[battler.current_action.item_id]
  498.     # アイテムの効果を適用
  499.     for target in battler.target
  500.       target.item_effect(@item, battler)
  501.     end
  502.   end
  503.   #--------------------------------------------------------------------------
  504.   # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  505.   #--------------------------------------------------------------------------
  506.   def update_phase4_step4(battler)
  507.     # カメラ設定
  508.     if battler.target[0].is_a?(Game_Enemy) and battler.anime1 != 0
  509.       camera_set(battler)
  510.     end
  511.     # 対象側アニメーション
  512.     for target in battler.target
  513.       target.animation.push([battler.anime2,
  514.                                           (target.damage[battler] != "Miss")])
  515.       unless battler.anime2 == 0
  516.         battler.wait = 2 * target.total_damage[battler][0][6] - 1 +
  517.           Graphics.frame_count % 2
  518.       end
  519.     end
  520.     # ステップ 5 に移行
  521.     battler.phase = 5
  522.   end
  523.   #--------------------------------------------------------------------------
  524.   # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  525.   #--------------------------------------------------------------------------
  526.   def update_phase4_step5(battler)
  527.     next_step = true
  528.     # ダメージ表示
  529.     for target in battler.target
  530.       # total_damage より全ダメージを算出
  531.       total_damage = target.total_damage[battler].shift
  532.       target.damage[battler] = total_damage[0]
  533.       target.critical[battler] = total_damage[1]
  534.       target.recover_hp[battler] = total_damage[2]
  535.       target.recover_sp[battler] = total_damage[3]
  536.       target.state_p[battler] = total_damage[4]
  537.       target.state_m[battler] = total_damage[5]
  538.       # ダメージ表示フラグをON
  539.       target.damage_pop[battler] = true
  540.       # 恭喜你发现了连击计算的关键一行!
  541.       target.combohit_count if target.damage[battler].to_i > 0 and target.damage[battler] != "Miss"
  542.       # 実際にダメージを与える
  543. #      target.damage_effect(battler, battler.current_action.kind)
  544.       target.damage_effect(battler, battler.current_action.kind,skill)#到此一游
  545.       # 余計なハッシュを削除
  546.       target.recover_hp.delete(battler)
  547.       target.recover_sp.delete(battler)
  548.       target.state_p.delete(battler)
  549.       target.state_m.delete(battler)
  550.       # ダメージを全て与えきった場合
  551.       if target.total_damage[battler].empty?
  552.         # ターゲットへの全ダメージを削除
  553.         target.total_damage.delete(battler)
  554.         # 指定時間ウェイトする
  555.         battler.wait = @damage_wait
  556.       else
  557.         # 指定時間ウェイトする
  558.         next_step = false
  559.         battler.wait = 2 * target.total_damage[battler][0][6]
  560.       end
  561.       # ステータスウィンドウをリフレッシュ
  562.       status_refresh(target)
  563.     end
  564.     if next_step
  565.       # ステップ 6 に移行
  566.       battler.phase = 6
  567.     end
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  571.   #--------------------------------------------------------------------------
  572.   def update_phase4_step6(battler)
  573.     # カメラを戻す
  574.     if battler.target[0].is_a?(Game_Enemy) and @camera == battler
  575.       @spriteset.screen_target(0, 0, 1)
  576.     end
  577.     # スキルラーニング
  578.     if battler.target[0].is_a?(Game_Actor) and battler.current_action.kind == 1
  579.       for target in battler.target        
  580.         if target.is_a?(Game_Actor)#(0.16)
  581.         skill_learning(target, target.class_id,
  582.                         battler.current_action.skill_id)
  583.         end #(0.16)               
  584.       end
  585.     end
  586.     # アクション強制対象のバトラーをクリア
  587.     if battler.current_action.forcing == true and
  588.         battler.current_action.force_kind == 0 and
  589.         battler.current_action.force_basic == 0 and
  590.         battler.current_action.force_skill_id == 0
  591.       $game_temp.forcing_battler = nil
  592.       battler.current_action.forcing = false
  593.     end
  594.     refresh_phase(battler)
  595.     speller = synthe?(battler)
  596.     if speller != nil
  597.       for spell in speller
  598.         if spell != battler
  599.           refresh_phase(spell)
  600.         end
  601.       end
  602.       synthe_delete(speller)
  603.     end
  604.     # コモンイベント ID が有効の場合
  605.     if battler.event > 0
  606.       # イベントをセットアップ
  607.       common_event = $data_common_events[battler.event]
  608.       $game_system.battle_interpreter.setup(common_event.list, 0)
  609.     end
  610.     act = 0
  611.     for actor in $game_party.actors + $game_troop.enemies
  612.       if actor.movable?
  613.         act += 1
  614.       end
  615.     end
  616.     if @turn_cnt >= act and act > 0
  617.       @turn_cnt %= act
  618.       $game_temp.battle_turn += 1
  619.       # バトルイベントの全ページを検索
  620.       for index in 0...$data_troops[@troop_id].pages.size
  621.         # イベントページを取得
  622.         page = $data_troops[@troop_id].pages[index]
  623.         # このページのスパンが [ターン] の場合
  624.         if page.span == 1
  625.           # 実行済みフラグをクリア
  626.           $game_temp.battle_event_flags[index] = false
  627.         end
  628.       end
  629.     end
  630.     battler.phase = 1
  631.     @action_battlers.delete(battler)
  632.   end
  633. #//////////////////////////////////////////////////////////////////////////////
  634. #连击数计算的基础部分Part1  by 桜雅 在土
  635. #------------------------------------------------------------------------------
  636. # ● メイン処理
  637. #------------------------------------------------------------------------------
  638.   alias xrxs_bp19_main main
  639.   def main
  640.     # コンボヒットウィンドウを作成
  641.     @combohit_window = Window_ComboHit.new
  642.     # 呼び戻す
  643.     xrxs_bp19_main
  644.     # ウィンドウを解放
  645.     @combohit_window.dispose
  646.     # コンボクリア
  647.     $game_party.actors.each {|actor| actor.combohit_clear}
  648.   end
  649. #------------------------------------------------------------------------------
  650. # ● フレーム更新
  651. #------------------------------------------------------------------------------
  652.   alias xrxs_bp19_update update
  653.   def update
  654.     # フレーム更新
  655.     @combohit_window.update
  656.     $game_party.actors.each {|actor| actor.combohit_update}
  657.     $game_troop.enemies.each{|enemy| enemy.combohit_update}
  658.     # 呼び戻す
  659.     xrxs_bp19_update
  660.   end
  661. #------------------------------------------------------------------------------
  662. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  663. #------------------------------------------------------------------------------
  664.   alias xrxs_bp19_update_phase4_step5 update_phase4_step5
  665.   def update_phase4_step5(battler)
  666.     # 呼び戻す
  667.     xrxs_bp19_update_phase4_step5(battler)
  668.     # コンボ数の最も高いターゲットを探す
  669.     max = 0
  670.     hit_target = nil
  671.     for target in battler.target
  672.       if target.combohit > max
  673.         max = target.combohit
  674.         hit_target = target
  675.       end
  676.     end
  677.     if max >= 2 and !hit_target.nil?
  678.       @combohit_window.x = hit_target.is_a?(Game_Enemy) ? 512 : 512
  679.       @combohit_window.refresh(max, hit_target.combohit_duration)
  680.     end
  681.   end  
  682. end
  683. #//////////////////////////////////////////////////////////////////////////////
  684. #==============================================================================
  685. # ■ Game_Battler (分割定義 1)
  686. #------------------------------------------------------------------------------
  687. #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ
  688. # スのスーパークラスとして使用されます。
  689. #==============================================================================

  690. class Game_Battler
  691.   #--------------------------------------------------------------------------
  692.   # ● 公開インスタンス変数追加
  693.   #--------------------------------------------------------------------------
  694.   attr_accessor :total_damage              # 総ダメージ
  695.   #--------------------------------------------------------------------------
  696.   # ● オブジェクト初期化
  697.   #--------------------------------------------------------------------------
  698.   alias :initialize_straight :initialize
  699.   def initialize
  700.     initialize_straight
  701.     @total_damage = {}
  702.   end
  703.   #--------------------------------------------------------------------------
  704.   # ● 存在判定
  705.   #--------------------------------------------------------------------------
  706.   def exist?
  707.     return (not @hidden and (@hp > 0 or @immortal or not @total_damage.empty?))
  708.   end
  709.   #--------------------------------------------------------------------------
  710.   # ● 残HP予測
  711.   #--------------------------------------------------------------------------
  712.   def rest_hp
  713.     # rest_hp に現HPを代入
  714.     rest_hp = @hp
  715.     # バトラーが受ける全ダメージをrest_hpに反映させる
  716.     for total in @total_damage
  717.       for pre_damage in total[1]
  718.         if pre_damage[0].is_a?(Numeric)
  719.           rest_hp -= pre_damage[0]
  720.         end
  721.         if pre_damage[2].is_a?(Numeric)
  722.           rest_hp += pre_damage[2]
  723.         end
  724.       end
  725.     end
  726.     return rest_hp
  727.   end
  728. end
  729. #//////////////////////////////////////////////////////////////////////////////
  730. #连击数计算的基础部分Part2  by 桜雅 在土
  731. #------------------------------------------------------------------------------
  732. # ● 公開インスタンス変数
  733. #------------------------------------------------------------------------------
  734.   def combohit
  735.     @combohit = 0 if @combohit.nil?
  736.     return @combohit
  737.   end
  738.   def combohit_duration
  739.     @combohit_duration = 0 if @combohit_duration.nil?
  740.     return @combohit_duration
  741.   end
  742. #------------------------------------------------------------------------------
  743. # ○ コンボヒットを更新
  744. #------------------------------------------------------------------------------  
  745.   def combohit_update
  746.     # 例外補正
  747.     @combohit_duration = 0 if @combohit_duration.nil?
  748.     # カウント
  749.     if @combohit_duration > 0
  750.       @combohit_duration -= 1
  751.       # のけぞり時間終了時、コンボ数をリセット
  752.       @combohit = 0 if @combohit_duration == 0
  753.     end
  754.   end
  755. #------------------------------------------------------------------------------
  756. # ○ コンボヒットをカウント
  757. #------------------------------------------------------------------------------
  758.   def combohit_count
  759.     # 例外補正
  760.     @combohit = 0 if @combohit.nil?  
  761.     # カウント
  762.     @combohit += 1
  763.     @combohit_duration = XRXS_BP19::COMBOHIT_DURATION
  764.   end
  765. #------------------------------------------------------------------------------
  766. # ○ コンボヒットをクリア
  767. #------------------------------------------------------------------------------  
  768.   def combohit_clear
  769.     @combohit = nil
  770.     @combohit_duration = nil
  771.   end

  772. #//////////////////////////////////////////////////////////////////////////////
  773. #==============================================================================
  774. # ■ Game_Actor
  775. #------------------------------------------------------------------------------
  776. #  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors)
  777. # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。
  778. #==============================================================================

  779. class Game_Actor < Game_Battler
  780.   #--------------------------------------------------------------------------
  781.   # ● 公開インスタンス変数
  782.   #--------------------------------------------------------------------------
  783.   def change_weapon(id)
  784.     @weapon_id = id
  785.   end
  786. end

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

  793. class Sprite_Battler < RPG::Sprite
  794.   #--------------------------------------------------------------------------
  795.   # ● フレーム更新
  796.   #--------------------------------------------------------------------------
  797.   def update
  798.     super
  799.     # バトラーが nil の場合
  800.     if @battler == nil
  801.       self.bitmap = nil
  802.       loop_animation(nil)
  803.       return
  804.     end
  805.     # ファイル名か色相が現在のものと異なる場合
  806.     if @battler.battler_name != @battler_name or
  807.        @battler.battler_hue != @battler_hue
  808.       # ビットマップを取得、設定
  809.       @battler_name = @battler.battler_name
  810.       @battler_hue = @battler.battler_hue
  811.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  812.       @width = bitmap.width
  813.       @height = bitmap.height
  814.       self.ox = @width / 2
  815.       self.oy = @height
  816.       if @battler.is_a?(Game_Enemy)
  817.         @battler.height = @height
  818.       end
  819.       # 戦闘不能または隠れ状態なら不透明度を 0 にする
  820.       if @battler.dead? or @battler.hidden
  821.         self.opacity = 0
  822.       end
  823.     end
  824.     # アニメーション ID が現在のものと異なる場合
  825.     if @battler.state_animation_id != @state_animation_id
  826.       @state_animation_id = @battler.state_animation_id
  827.       loop_animation($data_animations[@state_animation_id])
  828.     end
  829.     # 表示されるべきアクターの場合
  830.     if @battler.is_a?(Game_Actor) and @battler_visible
  831.       # メインフェーズでないときは不透明度をやや下げる
  832.       if $game_temp.battle_main_phase
  833.         self.opacity += 3 if self.opacity < 255
  834.       else
  835.         self.opacity -= 3 if self.opacity > 207
  836.       end
  837.     end
  838.     # 明滅
  839.     if @battler.blink
  840.       blink_on
  841.     else
  842.       blink_off
  843.     end
  844.     # 不可視の場合
  845.     unless @battler_visible
  846.       # 出現
  847.       if not @battler.hidden and not @battler.dead? and
  848.          (@battler.damage.size < 2 or @battler.damage_pop.size < 2)
  849.         appear
  850.         @battler_visible = true
  851.       end
  852.     end
  853.     # ダメージ
  854.     for battler in @battler.damage_pop
  855.       if battler[0].class == Array
  856.         if battler[0][1] >= 0
  857.           $scene.skill_se
  858.         else
  859.           $scene.levelup_se
  860.         end
  861.         damage(@battler.damage[battler[0]], false, 2)
  862.       else
  863.         damage(@battler.damage[battler[0]], @battler.critical[battler[0]])
  864.       end
  865.       if @battler.damage_sp.include?(battler[0])
  866.         damage(@battler.damage_sp[battler[0]],
  867.                 @battler.critical[battler[0]], 1)
  868.         @battler.damage_sp.delete(battler[0])
  869.       end
  870.       @battler.damage_pop.delete(battler[0])
  871.       @battler.damage.delete(battler[0])
  872.       @battler.critical.delete(battler[0])
  873.     end
  874.     # 可視の場合
  875.     if @battler_visible
  876.       # 逃走
  877.       if @battler.hidden
  878.         $game_system.se_play($data_system.escape_se)
  879.         escape
  880.         @battler_visible = false
  881.       end
  882.       # 白フラッシュ
  883.       if @battler.white_flash
  884.         whiten
  885.         @battler.white_flash = false
  886.       end
  887.       # アニメーション
  888.       unless @battler.animation.empty?
  889.         for animation in @battler.animation.reverse
  890.           animation($data_animations[animation[0]], animation[1])
  891.           @battler.animation.delete(animation)
  892.         end
  893.       end
  894.       # コラプス
  895.       if @battler.total_damage.empty? and @battler.dead?
  896.         if $scene.dead_ok?(@battler)
  897.           if @battler.is_a?(Game_Enemy)
  898.             $game_system.se_play($data_system.enemy_collapse_se)
  899.           else
  900.             $game_system.se_play($data_system.actor_collapse_se)
  901.           end
  902.           collapse
  903.           @battler_visible = false
  904.         end
  905.       end
  906.     end
  907.     # スプライトの座標を設定
  908.     self.x = @battler.screen_x
  909.     self.y = @battler.screen_y
  910.     self.z = @battler.screen_z
  911.     if @battler.is_a?(Game_Enemy)
  912.       self.zoom_x = @battler.real_zoom * @battler.zoom
  913.       self.zoom_y = @battler.real_zoom * @battler.zoom
  914.     end
  915.   end
  916. end
复制代码

其中“连击数,每次伤害比率如何设置,参考动画‘千裂斩’” 一直不懂,我去数据看了下‘千裂斩’没发现什么特别的,在脚本中也没什么针对某一技能的地方
麻烦高手告诉下怎么设置,谢谢!


此贴于 2009-5-10 11:52:37 被版主darkten提醒,请楼主看到后对本贴做出回应。
版务信息:版主帮忙结贴~
本贴由论坛斑竹darkten结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^

Lv1.梦旅人

梦石
0
星屑
50
在线时间
601 小时
注册时间
2007-8-14
帖子
635

短篇七彩虹组冠军

2
发表于 2009-5-9 23:32:28 | 只看该作者
看一下数据库千裂斩的动画设置,注意里面一些闪光=v=
填坑填坑填坑填坑填坑填坑填坑填坑填坑
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
7 小时
注册时间
2008-9-21
帖子
26
3
 楼主| 发表于 2009-5-9 23:45:40 | 只看该作者
对不起……本人笨,没发现什么(这个我注意过,我把十字斩14贞全都弄成闪烁了也没用)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
601 小时
注册时间
2007-8-14
帖子
635

短篇七彩虹组冠军

4
发表于 2009-5-10 00:01:19 | 只看该作者

这样设置闪光,其中“10”可以变成任何数,数越大威力越大
系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~
填坑填坑填坑填坑填坑填坑填坑填坑填坑
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
7 小时
注册时间
2008-9-21
帖子
26
5
 楼主| 发表于 2009-5-10 01:06:25 | 只看该作者
谢谢啦
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3309
在线时间
3620 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

6
发表于 2009-5-10 01:06:53 | 只看该作者
应该是闪烁效果吧,
和彩虹神剑一样的。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
7 小时
注册时间
2008-9-21
帖子
26
7
 楼主| 发表于 2009-5-16 03:26:31 | 只看该作者
新疑问1:为什么范例工程的‘千裂斩‘打出来,伤害和音效都是暴击的效果?
新疑问2:为什么我在战斗的时候,只看到我或者敌人掉血(飞出伤害值)实际上却不掉血?
         不过使用法术还是要消耗相应sp。
         我使用了一下脚本:
                          RTAB战斗系统 Ver 1.16
                          RTAB连击数-显示部分
                          RTAB连击数-计算部分
                          RTAB伤害美化 Ver 1.02  
                          战斗背景暗化 Ver.1.11
                          显示敌人HP
                          随机装备生成系统·核心
                          随机装备生成系统·接入
                          得失物品金钱提示
                          远景的操作
                          防止事件过多卡
                          菜单透明
                          升级加点  
                          清爽版血条
         另外:我还将Scene_Battle 2改成了
        
  1. #==============================================================================
  2. # ■ Scene_Battle (分割定义 2)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================

  6. class Scene_Battle
  7.   #--------------------------------------------------------------------------
  8.   # ● 开始自由战斗回合
  9.   #--------------------------------------------------------------------------
  10.   def start_phase1
  11.     # 转移到回合 1
  12.     @phase = 1
  13.     # 清除全体同伴的行动
  14.     $game_party.clear_actions
  15.     # 设置战斗事件
  16.     setup_battle_event
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 刷新画面 (自由战斗回合)
  20.   #--------------------------------------------------------------------------
  21.   def update_phase1
  22.     # 胜败判定
  23.     if judge
  24.       # 胜利或者失败的情况下 : 过程结束
  25.       return
  26.     end
  27.     # 开始同伴命令回合
  28.     start_phase2
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 开始同伴命令回合
  32.   #--------------------------------------------------------------------------
  33.   def start_phase2
  34.     # 转移到回合 2
  35.     @phase = 2
  36.     # 设置角色为非选择状态
  37.     @actor_index = -1
  38.     @active_battler = nil
  39. #------------------------------------------------------------------------------
  40. #RTAB观光游第一站,去除“战斗/逃跑”选项部分   
  41.     # 有效化同伴指令窗口
  42. #    @party_command_window.active = true
  43. #    @party_command_window.visible = true
  44. #------------------------------------------------------------------------------
  45.     # 无效化角色指令窗口
  46.     @actor_command_window.active = false
  47.     @actor_command_window.visible = false
  48.     # 清除主回合标志
  49.     $game_temp.battle_main_phase = false
  50.     # 清除全体同伴的行动
  51.     $game_party.clear_actions
  52.     # 不能输入命令的情况下
  53.     unless $game_party.inputable?
  54.       # 开始主回合
  55.       start_phase4
  56.     end
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 刷新画面 (同伴命令回合)
  60.   #--------------------------------------------------------------------------
  61.   def update_phase2
  62.     # 按下 C 键的情况下
  63.     if Input.trigger?(Input::C)
  64.       # 同伴指令窗口光标位置分支
  65.       case @party_command_window.index
  66.       when 0  # 战斗
  67.         # 演奏确定 SE
  68.         $game_system.se_play($data_system.decision_se)
  69.         # 开始角色的命令回合
  70.         start_phase3
  71.       when 1  # 逃跑
  72.         # 不能逃跑的情况下
  73.         if $game_temp.battle_can_escape == false
  74.           # 演奏冻结 SE
  75.           $game_system.se_play($data_system.buzzer_se)
  76.           return
  77.         end
  78.         # 演奏确定 SE
  79.         $game_system.se_play($data_system.decision_se)
  80.         # 逃走处理
  81.         update_phase2_escape
  82.       end
  83.       return
  84.     end
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● 画面更新 (同伴指令回合 : 逃跑)
  88.   #--------------------------------------------------------------------------
  89.   def update_phase2_escape
  90.     # 计算敌人速度的平均值
  91.     enemies_agi = 0
  92.     enemies_number = 0
  93.     for enemy in $game_troop.enemies
  94.       if enemy.exist?
  95.         enemies_agi += enemy.agi
  96.         enemies_number += 1
  97.       end
  98.     end
  99.     if enemies_number > 0
  100.       enemies_agi /= enemies_number
  101.     end
  102.     # 计算角色速度的平均值
  103.     actors_agi = 0
  104.     actors_number = 0
  105.     for actor in $game_party.actors
  106.       if actor.exist?
  107.         actors_agi += actor.agi
  108.         actors_number += 1
  109.       end
  110.     end
  111.     if actors_number > 0
  112.       actors_agi /= actors_number
  113.     end
  114.     # 逃跑成功判定
  115.     success = rand(100) < 50 * actors_agi / enemies_agi
  116.     # 成功逃跑的情况下
  117.     if success
  118.       # 演奏逃跑 SE
  119.       $game_system.se_play($data_system.escape_se)
  120.       # 还原为战斗开始前的 BGM
  121.       $game_system.bgm_play($game_temp.map_bgm)
  122.       # 战斗结束
  123.       battle_end(1)
  124.     # 逃跑失败的情况下
  125.     else
  126.       # 清除全体同伴的行动
  127.       $game_party.clear_actions
  128.       # 开始主回合
  129.       start_phase4
  130.     end
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 开始结束战斗回合
  134.   #--------------------------------------------------------------------------
  135.   def start_phase5
  136.     # 转移到回合 5
  137.     @phase = 5
  138.     # 演奏战斗结束 ME
  139.     $game_system.me_play($game_system.battle_end_me)
  140.     # 还原为战斗开始前的 BGM
  141.     $game_system.bgm_play($game_temp.map_bgm)
  142.     # 初始化 EXP、金钱、宝物
  143.     exp = 0
  144.     gold = 0
  145.     treasures = []
  146.     # 循环
  147.     for enemy in $game_troop.enemies
  148.       # 敌人不是隐藏状态的情况下
  149.       unless enemy.hidden
  150.         # 获得 EXP、增加金钱
  151.         exp += enemy.exp
  152.         gold += enemy.gold
  153.         # 出现宝物判定
  154.         if rand(100) < enemy.treasure_prob
  155.           if enemy.item_id > 0
  156.             treasures.push($data_items[enemy.item_id])
  157.           end
  158.           if enemy.weapon_id > 0
  159.             treasures.push($data_weapons[enemy.weapon_id])
  160.           end
  161.           if enemy.armor_id > 0
  162.             treasures.push($data_armors[enemy.armor_id])
  163.           end
  164.         end
  165.       end
  166.     end
  167.     # 限制宝物数为 6 个
  168.     treasures = treasures[0..5]
  169.     # 获得 EXP
  170.     for i in 0...$game_party.actors.size
  171.       actor = $game_party.actors[i]
  172.       if actor.cant_get_exp? == false
  173.         last_level = actor.level
  174.         actor.exp += exp
  175.         if actor.level > last_level
  176.           @status_window.level_up(i)
  177.         end
  178.       end
  179.     end
  180.     # 获得金钱
  181.     $game_party.gain_gold(gold)
  182.     # 获得宝物
  183.     for item in treasures
  184.       case item
  185.       when RPG::Item
  186.         $game_party.gain_item(item.id, 1)
  187.       when RPG::Weapon
  188.         $game_party.gain_weapon(item.id, 1)
  189.       when RPG::Armor
  190.         $game_party.gain_armor(item.id, 1)
  191.       end
  192.     end
  193.     # 生成战斗结果窗口
  194.     @result_window = Window_BattleResult.new(exp, gold, treasures)
  195.     # 设置等待计数
  196.     @phase5_wait_count = 100
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 画面更新 (结束战斗回合)
  200.   #--------------------------------------------------------------------------
  201.   def update_phase5
  202.     # 等待计数大于 0 的情况下
  203.     if @phase5_wait_count > 0
  204.       # 减少等待计数
  205.       @phase5_wait_count -= 1
  206.       # 等待计数为 0 的情况下
  207.       if @phase5_wait_count == 0
  208.         # 显示结果窗口
  209.         @result_window.visible = true
  210.         # 清除主回合标志
  211.         $game_temp.battle_main_phase = false
  212.         # 刷新状态窗口
  213.         @status_window.refresh
  214.       end
  215.       return
  216.     end
  217.     # 按下 C 键的情况下
  218.     if Input.trigger?(Input::C)
  219.       # 战斗结束
  220.       battle_end(0)
  221.     end
  222.   end
  223. end
复制代码
     
请各位高手帮忙,谢谢了      

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
7 小时
注册时间
2008-9-21
帖子
26
8
 楼主| 发表于 2009-5-17 04:12:01 | 只看该作者
补充:我想问,是不是因为脚本冲突才出现这个问题

各路高手帮帮忙!谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-15 07:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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