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

Project1

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

[已经过期] 求合击技能脚本修改

[复制链接]

Lv1.梦旅人

水土火风重逢处

梦石
0
星屑
239
在线时间
691 小时
注册时间
2010-7-17
帖子
3042
跳转到指定楼层
1
发表于 2010-9-3 18:48:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 429259591 于 2010-9-15 20:28 编辑

我看了合击技能的脚本,觉得想要增加一项合击成功率的这一效果,哪位会脚本改改帮帮我吧
这个是脚本
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 合击技能 - KGC_CooperationSkill ◆ VX ◆
  3. #_/    ◇ Last update : 2009/08/07 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  多个人一起使用的合击技能
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  7. #    翻译:星月桜           http://blog.sina.com.cn/rpgs
  8. #==============================================================================
  9. # ★ 设置項目 - Customize BEGIN ★
  10. #==============================================================================

  11. module KGC
  12. module CooperationSkill
  13.   # ◆ 合击发动名子的分割符号
  14.   NAME_SEPARATOR = "、"

  15.   # ◆ 是否按速度发动技能,
  16.   #    就是说如果合击技能如果在4人当中最后一个发动的话就会没有合击
  17.   #  true  是
  18.   #  false 否
  19.   EXECUTE_ORIGIN_SKILL = false

  20.   # ◆ 是否在目标相同的时候才发动
  21.   #  true  : 是
  22.   #           
  23.   #  false : 否
  24.   #         
  25.   SAME_TARGET_ONLY = true

  26.   # ◆ 怪物是否使用连击技能
  27.   #  true  : 可以。
  28.   #  false : 不可以
  29.   PERMIT_ENEMY = true
  30. end
  31. end

  32. #==============================================================================
  33. # ☆ カスタマイズ項目終了 - Customize END ☆
  34. #==============================================================================

  35. $imported = {} if $imported == nil
  36. $imported["CooperationSkill"] = true

  37. module KGC
  38. module CooperationSkill
  39.   # 合击技能显著等级
  40.   PARAMS = {
  41.     :level_avg => "LEVEL_AVG|平均等级",
  42.     :level_min => "LEVEL_MIN|最[小低]等级",
  43.     :level_max => "LEVEL_MAX|最[大高]等级",
  44.   }

  45.   # 合击技能用属性?状态ID
  46.   ARRAYS = {
  47.     :attack_element => "ATTACK_ELEMENT|攻击属性",
  48.     :state          => "STATE|状态",
  49.   }

  50.   module Regexp
  51.     module Skill
  52.       # 合击技能开始
  53.       BEGIN_COOPERATE = /<(?:COOPERATION_SKILL|合击技能)>/i
  54.       # 合击技能结束
  55.       END_COOPERATE   = /<\/(?:COOPERATION_SKILL|合击技能)>/i
  56.       # 必要技能ID
  57.       NEED_SKILLS = /^\s*(?:NEED_SKILLS?|必要技能)\s*(\d+(?:\s*,\s*\d+)*)\s*/i

  58.       REG_NAME = '[^:\+\-\d\s]+'
  59.       REG_OU   = 'OVER|UNDER|以上|以下'

  60.       # 条件等级
  61.       #  等级在10 以上  
  62.       COOPERATE_PARAMS = /^\s*(#{REG_NAME})\s*(\d+)\s*(#{REG_OU})?\s*$/i
  63.       # 属性?状态ID
  64.       #  状态 1,-2,3  
  65.       COOPERATE_ARRAYS = /^\s*(#{REG_NAME})\s*(\d+(?:\s*,\s*\-?\d+)*)\s*$/i
  66.     end
  67.   end
  68. end
  69. end

  70. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  71. #==============================================================================
  72. # ■ RPG::Skill
  73. #==============================================================================

  74. class RPG::Skill < RPG::UsableItem
  75.   #--------------------------------------------------------------------------
  76.   # ○ 連係スキルであるか
  77.   #--------------------------------------------------------------------------
  78.   def is_cooperation?
  79.     self.note.each_line { |line|
  80.       # 開始タグを探す
  81.       if line =~ KGC::CooperationSkill::Regexp::Skill::BEGIN_COOPERATE
  82.         return true
  83.       end
  84.     }
  85.     return false
  86.   end
  87. end

  88. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  89. #==============================================================================
  90. # ■ Game_Temp
  91. #==============================================================================

  92. class Game_Temp
  93.   #--------------------------------------------------------------------------
  94.   # ● 公開インスタンス変数
  95.   #--------------------------------------------------------------------------
  96.   attr_accessor :judging_cooperation_skill # 連係スキル判定中フラグ
  97.   #--------------------------------------------------------------------------
  98.   # ● オブジェクト初期化
  99.   #--------------------------------------------------------------------------
  100.   alias initialize_KGC_CooperationSkill initialize
  101.   def initialize
  102.     initialize_KGC_CooperationSkill

  103.     @judging_cooperation_skill = false
  104.   end
  105. end

  106. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  107. #==============================================================================
  108. # □ Game_CooperationSkill
  109. #------------------------------------------------------------------------------
  110. #   連係スキルの情報を扱うクラスです。
  111. #==============================================================================

  112. class Game_CooperationSkill
  113.   #--------------------------------------------------------------------------
  114.   # ○ 公開インスタンス変数
  115.   #--------------------------------------------------------------------------
  116.   attr_reader   :id                       # 発動スキル ID
  117.   attr_reader   :need_skills              # 必要スキル ID リスト
  118.   attr_reader   :params                   # 条件パラメータ
  119.   attr_reader   :params_over              # 条件パラメータ: ~以上
  120.   attr_reader   :need_arrays              # 必要属性?ステートリスト
  121.   attr_reader   :disuse_arrays            # 不要属性?ステートリスト
  122.   #--------------------------------------------------------------------------
  123.   # ○ オブジェクト初期化
  124.   #     skill_id : スキル ID
  125.   #     note     : メモ
  126.   #--------------------------------------------------------------------------
  127.   def initialize(skill_id, note)
  128.     @id            = skill_id
  129.     @need_skills   = []
  130.     @params        = {}
  131.     @params_over   = {}
  132.     @need_arrays   = {}
  133.     @disuse_arrays = {}
  134.     parse_note(note)
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ○ スキルを取得
  138.   #--------------------------------------------------------------------------
  139.   def skill
  140.     return $data_skills[@id]
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ○ メモ欄を解析
  144.   #     note : メモ
  145.   #--------------------------------------------------------------------------
  146.   def parse_note(note)
  147.     coop_flag = false
  148.     note.each_line { |line|
  149.       case line
  150.       when KGC::CooperationSkill::Regexp::Skill::BEGIN_COOPERATE
  151.         # 連係スキル定義開始
  152.         coop_flag = true
  153.       when KGC::CooperationSkill::Regexp::Skill::END_COOPERATE
  154.         # 連係スキル定義終了
  155.         coop_flag = false
  156.       end
  157.       next unless coop_flag

  158.       case line
  159.       when KGC::CooperationSkill::Regexp::Skill::NEED_SKILLS
  160.         # 必要スキル
  161.         parse_need_skills($1.scan(/\-?\d+/))
  162.       when KGC::CooperationSkill::Regexp::Skill::COOPERATE_PARAMS
  163.         # パラメータ
  164.         parse_params($1, $2.to_i, $3)
  165.       when KGC::CooperationSkill::Regexp::Skill::COOPERATE_ARRAYS
  166.         # 属性?ステート
  167.         parse_arrays($1, $2.scan(/\-?\d+/))
  168.       end
  169.     }
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ○ 必要スキルを解析
  173.   #     list  : スキル ID 一覧
  174.   #--------------------------------------------------------------------------
  175.   def parse_need_skills(list)
  176.     skills = []
  177.     list.each { |num|
  178.       skills << num.to_i
  179.     }
  180.     @need_skills << skills
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ○ 連係スキルの能力値修正を適用
  184.   #     param : 対象パラメータ
  185.   #     value : 修正値
  186.   #     cond  : 以上 or 以下
  187.   #--------------------------------------------------------------------------
  188.   def parse_params(param, value, cond)
  189.     KGC::CooperationSkill::PARAMS.each { |k, v|
  190.       next if param !~ /(?:#{v})/i

  191.       @params[k]      = value
  192.       @params_over[k] = (cond !~ /UNDER|以下/i)
  193.       break
  194.     }
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ○ 連係スキルの追加属性?ステートを適用
  198.   #     param : 対象パラメータ
  199.   #     list  : 属性?ステート一覧
  200.   #--------------------------------------------------------------------------
  201.   def parse_arrays(param, list)
  202.     KGC::CooperationSkill::ARRAYS.each { |k, v|
  203.       next if param !~ /(?:#{v})/i

  204.       if @need_arrays[k] == nil
  205.         @need_arrays[k]   = []
  206.         @disuse_arrays[k] = []
  207.       end
  208.       list.each { |num|
  209.         n = num.to_i
  210.         if n > 0
  211.           @need_arrays[k] |= [n]
  212.         else
  213.           @disuse_arrays[k] |= [n.abs]
  214.         end
  215.       }
  216.       break
  217.     }
  218.   end
  219. end

  220. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  221. $data_skills = load_data("Data/Skills.rvdata") if $data_skill == nil

  222. module KGC::CooperationSkill
  223.   # 連係スキルリストを変換
  224.   list = []
  225.   $data_skills.each { |skill|
  226.     next if skill == nil
  227.     next unless skill.is_cooperation?

  228.     list << Game_CooperationSkill.new(skill.id, skill.note)
  229.   }
  230.   SKILLS = list
  231. end

  232. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  233. #==============================================================================
  234. # ■ Game_Actor
  235. #==============================================================================

  236. class Game_Actor < Game_Battler
  237.   #--------------------------------------------------------------------------
  238.   # ● スキルの使用可能判定
  239.   #     skill : スキル
  240.   #--------------------------------------------------------------------------
  241.   def skill_can_use?(skill)
  242.     return super
  243.   end
  244. end

  245. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  246. #==============================================================================
  247. # □ Game_CooperationSkillUser
  248. #------------------------------------------------------------------------------
  249. #   連係スキル発動者の情報を扱うクラスです。
  250. #==============================================================================

  251. class Game_CooperationSkillUser
  252.   #--------------------------------------------------------------------------
  253.   # ○ 公開インスタンス変数
  254.   #--------------------------------------------------------------------------
  255.   attr_reader   :index                    # 発動者のインデックス
  256.   attr_reader   :skill_id                 # 発動者が使用したスキル ID
  257.   attr_reader   :target_battlers          # 攻撃対象
  258.   #--------------------------------------------------------------------------
  259.   # ○ オブジェクト初期化
  260.   #--------------------------------------------------------------------------
  261.   def initialize(battler)
  262.     if $imported["Counter"]
  263.       battler.action.made_targets = nil
  264.     end
  265.     @index = battler.index
  266.     @skill_id = battler.action.skill_id
  267.     @target_battlers = []
  268.     battler.action.make_targets.each { |t|
  269.       @target_battlers << t.index
  270.     }
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ○ 同値判定
  274.   #--------------------------------------------------------------------------
  275.   def equal?(obj)
  276.     return false unless obj.is_a?(Game_CooperationSkillUser)
  277.     return false if @index != obj.index
  278.     return false if @skill_id != obj.skill_id
  279.     return false if @target_battlers != obj.target_battlers

  280.     return true
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ○ 等値演算子
  284.   #--------------------------------------------------------------------------
  285.   def ==(obj)
  286.     return self.equal?(obj)
  287.   end
  288. end

  289. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  290. #==============================================================================
  291. # □ Game_CooperationBattler
  292. #------------------------------------------------------------------------------
  293. #   連係スキル発動時のダミーバトラークラスです。
  294. #==============================================================================

  295. class Game_CooperationBattler < Game_Battler
  296.   #--------------------------------------------------------------------------
  297.   # ● 公開インスタンス変数
  298.   #--------------------------------------------------------------------------
  299.   attr_accessor :battler_type             # :actor or :enemy
  300.   attr_accessor :exec_battlers            # 発動者リスト
  301.   attr_accessor :coop_skill               # 連係スキル情報
  302.   #--------------------------------------------------------------------------
  303.   # ● オブジェクト初期化
  304.   #--------------------------------------------------------------------------
  305.   def initialize
  306.     @battler_type  = :actor
  307.     @exec_battlers = []
  308.     @coop_skill    = nil
  309.     super
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● アクターか否かの判定
  313.   #--------------------------------------------------------------------------
  314.   def actor?
  315.     return (@battler_type == :actor)
  316.   end
  317.   #--------------------------------------------------------------------------
  318.   # ● インデックス取得
  319.   #--------------------------------------------------------------------------
  320.   def index
  321.     return 0
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● 表示名の取得
  325.   #--------------------------------------------------------------------------
  326.   def name
  327.     str = ""
  328.     members = (actor? ? $game_party : $game_troop).members
  329.     exec_battlers.each_with_index { |b, i|
  330.       str += members[b.index].name
  331.       if i < exec_battlers.size - 1
  332.         str += KGC::CooperationSkill::NAME_SEPARATOR
  333.       end
  334.     }
  335.     return str
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● レベルの取得
  339.   #--------------------------------------------------------------------------
  340.   def level
  341.     values = []
  342.     exec_battlers.each { |b| values << b.level }
  343.     return values.max
  344.   end
  345.   #--------------------------------------------------------------------------
  346.   # ○ 最大レベルの取得
  347.   #--------------------------------------------------------------------------
  348.   def level_max
  349.     return level
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # ○ 平均レベルの取得
  353.   #--------------------------------------------------------------------------
  354.   def level_avg
  355.     n = 0
  356.     exec_battlers.each { |b| n += b.level }
  357.     return (n / exec_battlers.size)
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ● MaxHP の取得
  361.   #--------------------------------------------------------------------------
  362.   def maxhp
  363.     values = []
  364.     exec_battlers.each { |b| values << b.maxhp }
  365.     return values.max
  366.   end
  367.   #--------------------------------------------------------------------------
  368.   # ● MaxMP の取得
  369.   #--------------------------------------------------------------------------
  370.   def maxmp
  371.     values = []
  372.     exec_battlers.each { |b| values << b.maxmp }
  373.     return values.max
  374.   end
  375.   #--------------------------------------------------------------------------
  376.   # ● HP の取得
  377.   #--------------------------------------------------------------------------
  378.   def hp
  379.     values = []
  380.     exec_battlers.each { |b| values << b.hp }
  381.     return values.min
  382.   end
  383.   #--------------------------------------------------------------------------
  384.   # ● MP の取得
  385.   #--------------------------------------------------------------------------
  386.   def mp
  387.     values = []
  388.     exec_battlers.each { |b| values << b.mp }
  389.     return values.min
  390.   end
  391.   #--------------------------------------------------------------------------
  392.   # ○ ドライブゲージ量取得
  393.   #--------------------------------------------------------------------------
  394.   def overdrive
  395.     values = []
  396.     exec_battlers.each { |b| values << b.overdrive }
  397.     return values.min
  398.   end
  399.   #--------------------------------------------------------------------------
  400.   # ● 攻撃力の取得
  401.   #--------------------------------------------------------------------------
  402.   def atk
  403.     values = []
  404.     exec_battlers.each { |b| values << b.atk }
  405.     return values.max
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ● 防御力の取得
  409.   #--------------------------------------------------------------------------
  410.   def def
  411.     values = []
  412.     exec_battlers.each { |b| values << b.def }
  413.     return values.max
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ● 精神力の取得
  417.   #--------------------------------------------------------------------------
  418.   def spi
  419.     values = []
  420.     exec_battlers.each { |b| values << b.spi }
  421.     return values.max
  422.   end
  423.   #--------------------------------------------------------------------------
  424.   # ● 敏捷性の取得
  425.   #--------------------------------------------------------------------------
  426.   def agi
  427.     values = []
  428.     exec_battlers.each { |b| values << b.agi }
  429.     return values.max
  430.   end
  431.   #--------------------------------------------------------------------------
  432.   # ● 命中率の取得
  433.   #--------------------------------------------------------------------------
  434.   def hit
  435.     values = []
  436.     exec_battlers.each { |b| values << b.hit }
  437.     return [values.max, 100].max
  438.   end
  439.   #--------------------------------------------------------------------------
  440.   # ● 回避率の取得
  441.   #--------------------------------------------------------------------------
  442.   def eva
  443.     return 0
  444.   end
  445.   #--------------------------------------------------------------------------
  446.   # ● クリティカル率の取得
  447.   #--------------------------------------------------------------------------
  448.   def cri
  449.     values = []
  450.     exec_battlers.each { |b| values << b.cri }
  451.     return values.max
  452.   end
  453.   #--------------------------------------------------------------------------
  454.   # ● MP の変更
  455.   #     mp : 新しい MP
  456.   #--------------------------------------------------------------------------
  457.   def mp=(mp)
  458.     # 加担者全員の MP を減らす
  459.     diff = self.mp - mp
  460.     exec_battlers.each { |b| b.mp -= diff }
  461.   end
  462.   #--------------------------------------------------------------------------
  463.   # ○ ドライブゲージの操作
  464.   #--------------------------------------------------------------------------
  465.   def overdrive=(value)
  466.     # 加担者全員のドライブゲージを減らす
  467.     diff = self.overdrive - overdrive
  468.     exec_battlers.each { |b| b.overdrive -= diff }
  469.   end
  470.   #--------------------------------------------------------------------------
  471.   # ● 全回復
  472.   #--------------------------------------------------------------------------
  473.   def recover_all
  474.     # 何もしない
  475.   end
  476.   #--------------------------------------------------------------------------
  477.   # ● 戦闘不能判定
  478.   #--------------------------------------------------------------------------
  479.   def dead?
  480.     exec_battlers.each { |b|
  481.       return true if b.dead?
  482.     }
  483.     return false
  484.   end
  485.   #--------------------------------------------------------------------------
  486.   # ● 存在判定
  487.   #--------------------------------------------------------------------------
  488.   def exist?
  489.     exec_battlers.each { |b|
  490.       return false unless b.exist?
  491.     }
  492.     return true
  493.   end
  494.   #--------------------------------------------------------------------------
  495.   # ● コマンド入力可能判定
  496.   #--------------------------------------------------------------------------
  497.   def inputable?
  498.     exec_battlers.each { |b|
  499.       return false unless b.inputtable?
  500.     }
  501.     return true
  502.   end
  503.   #--------------------------------------------------------------------------
  504.   # ● 行動可能判定
  505.   #--------------------------------------------------------------------------
  506.   def movable?
  507.     exec_battlers.each { |b|
  508.       return false unless b.movable?
  509.     }
  510.     return true
  511.   end
  512.   #--------------------------------------------------------------------------
  513.   # ● 沈黙状態判定
  514.   #--------------------------------------------------------------------------
  515.   def silent?
  516.     exec_battlers.each { |b|
  517.       return true if b.silent?
  518.     }
  519.     return false
  520.   end
  521.   #--------------------------------------------------------------------------
  522.   # ● 暴走状態判定
  523.   #--------------------------------------------------------------------------
  524.   def berserker?
  525.     return false
  526.   end
  527.   #--------------------------------------------------------------------------
  528.   # ● 混乱状態判定
  529.   #--------------------------------------------------------------------------
  530.   def confusion?
  531.     return false
  532.   end
  533.   #--------------------------------------------------------------------------
  534.   # ● 防御中判定
  535.   #--------------------------------------------------------------------------
  536.   def guarding?
  537.     return false
  538.   end
  539.   #--------------------------------------------------------------------------
  540.   # ● 通常攻撃の属性取得
  541.   #--------------------------------------------------------------------------
  542.   def element_set
  543.     result = []
  544.     exec_battlers.each { |b| result |= b.element_set }
  545.     return result
  546.   end
  547.   #--------------------------------------------------------------------------
  548.   # ● 通常攻撃のステート変化 (+) 取得
  549.   #--------------------------------------------------------------------------
  550.   def plus_state_set
  551.     result = []
  552.     exec_battlers.each { |b| result |= b.plus_state_set }
  553.     return result
  554.   end
  555.   #--------------------------------------------------------------------------
  556.   # ● 通常攻撃のステート変化 (-) 取得
  557.   #--------------------------------------------------------------------------
  558.   def minus_state_set
  559.     result = []
  560.     exec_battlers.each { |b| result |= b.minus_state_set }
  561.     return result
  562.   end
  563.   #--------------------------------------------------------------------------
  564.   # ● ステート [スリップダメージ] 判定
  565.   #--------------------------------------------------------------------------
  566.   def slip_damage?
  567.     return false
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ● ステート [命中率減少] 判定
  571.   #--------------------------------------------------------------------------
  572.   def reduce_hit_ratio?
  573.     return false
  574.   end
  575. end

  576. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  577. #==============================================================================
  578. # ■ Scene_Battle
  579. #==============================================================================

  580. class Scene_Battle < Scene_Base
  581.   #--------------------------------------------------------------------------
  582.   # ● 開始処理
  583.   #--------------------------------------------------------------------------
  584.   alias start_KGC_CooperationSkill start
  585.   def start
  586.     start_KGC_CooperationSkill

  587.     init_cooperation_skill
  588.   end
  589.   #--------------------------------------------------------------------------
  590.   # ○ 連係スキル用変数初期化
  591.   #--------------------------------------------------------------------------
  592.   def init_cooperation_skill
  593.     @cooperation_skill_judged = false
  594.     @cooperation_skill_exec   = false
  595.     @cooperation_skill_data   = nil
  596.     @cooperate_actors  = []
  597.     @cooperate_enemies = []
  598.   end
  599.   #--------------------------------------------------------------------------
  600.   # ● パーティコマンド選択の開始
  601.   #--------------------------------------------------------------------------
  602.   alias start_party_command_selection_KGC_CooperationSkill
  603.     start_party_command_selection
  604.   def start_party_command_selection
  605.     if $game_temp.in_battle
  606.       init_cooperation_skill
  607.     end

  608.     start_party_command_selection_KGC_CooperationSkill
  609.   end
  610.   #--------------------------------------------------------------------------
  611.   # ● 戦闘処理の実行開始
  612.   #--------------------------------------------------------------------------
  613.   alias start_main_KGC_CooperationSkill start_main
  614.   def start_main
  615.     start_main_KGC_CooperationSkill

  616.     init_cooperate_battler_list
  617.   end
  618.   #--------------------------------------------------------------------------
  619.   # ○ 判定用データ初期化
  620.   #--------------------------------------------------------------------------
  621.   def init_cooperate_battler_list
  622.     [:actor, :enemy].each { |i|
  623.       case i
  624.       when :actor
  625.         cooperate_battlers = @cooperate_actors
  626.         members = $game_party.members
  627.       when :enemy
  628.         cooperate_battlers = @cooperate_enemies
  629.         members = $game_troop.members
  630.       end
  631.       # 対象側バトラーを設定
  632.       cooperate_battlers.clear
  633.       unless KGC::CooperationSkill::EXECUTE_ORIGIN_SKILL
  634.         members.each { |battler|
  635.           next unless battler.action.skill?
  636.           cooperate_battlers << Game_CooperationSkillUser.new(battler)
  637.         }
  638.       end
  639.     }
  640.   end
  641.   #--------------------------------------------------------------------------
  642.   # ● 戦闘行動の実行
  643.   #--------------------------------------------------------------------------
  644.   alias execute_action_KGC_CooperationSkill execute_action
  645.   def execute_action
  646.     @cooperation_skill_judged = false

  647.     if KGC::CooperationSkill::EXECUTE_ORIGIN_SKILL
  648.       execute_action_KGC_CooperationSkill
  649.       judge_cooperation_skill(@active_battler)
  650.     else
  651.       judge_cooperation_skill(@active_battler)
  652.       unless @cooperation_skill_judged && @cooperation_skill_exec
  653.         execute_action_KGC_CooperationSkill
  654.       end
  655.     end

  656.     if @cooperation_skill_exec
  657.       if @cooperation_skill_judged
  658.         execute_cooperation_skill
  659.       else
  660.         finish_cooperation_skill
  661.       end
  662.     end
  663.   end
  664.   #--------------------------------------------------------------------------
  665.   # ○ 連係スキル第一発動判定
  666.   #     battler : 行動者
  667.   #--------------------------------------------------------------------------
  668.   def judge_cooperation_skill(battler)
  669.     return false if @cooperation_skill_judged
  670.     return false if @cooperation_skill_exec
  671.     @cooperation_skill_judged = true

  672.     target_unit = (battler.is_a?(Game_Actor) ? $game_troop : $game_party)
  673.     if battler.action.kind == 1
  674.       # 対象が残っていれば第二発動判定
  675.       unless target_unit.all_dead?
  676.         return judge_cooperation_skill_second(battler)
  677.       end
  678.     else
  679.       # 行動がスキル以外なら判定用配列から削除
  680.       if target_unit.is_a?(Game_Party)
  681.         remove_cooperate_battler(:enemy, battler)
  682.       elsif target_unit.is_a?(Game_Troop)
  683.         remove_cooperate_battler(:actor, battler)
  684.       end
  685.     end
  686.     return false
  687.   end
  688.   #--------------------------------------------------------------------------
  689.   # ○ 連係加担者削除
  690.   #     type    : :actor or :enemy
  691.   #     battler : 削除対象
  692.   #--------------------------------------------------------------------------
  693.   def remove_cooperate_battler(type, battler)
  694.     battlers = (type == :actor ? @cooperate_actors : @cooperate_enemies)
  695.     battlers.each_index { |i|
  696.       if battlers[i].index == battler.index
  697.         battlers[i] = nil
  698.       end
  699.     }
  700.     battlers.compact!
  701.   end
  702.   #--------------------------------------------------------------------------
  703.   # ○ 連係スキル第二発動判定
  704.   #     battler : 行動者
  705.   #--------------------------------------------------------------------------
  706.   def judge_cooperation_skill_second(battler)
  707.     # 判定用データ作成
  708.     @current_cooperate_user = Game_CooperationSkillUser.new(battler)
  709.     if battler.is_a?(Game_Actor)
  710.       remove_cooperate_battler(:actor, battler)
  711.       @cooperate_actors |= [@current_cooperate_user]
  712.     elsif battler.is_a?(Game_Enemy)
  713.       remove_cooperate_battler(:enemy, battler)
  714.       @cooperate_enemies |= [@current_cooperate_user]
  715.     end
  716.     # 連係スキル発動判定
  717.     KGC::CooperationSkill::SKILLS.each { |cs|
  718.       # アクター判定
  719.       if battler.is_a?(Game_Actor)
  720.         judge_cooperation_skill_third(:actor, cs)
  721.       # エネミー判定
  722.       elsif battler.is_a?(Game_Enemy)
  723.         judge_cooperation_skill_third(:enemy, cs)
  724.       end

  725.       break if @cooperation_skill_exec
  726.     }
  727.     return @cooperation_skill_exec
  728.   end
  729.   #--------------------------------------------------------------------------
  730.   # ○ 連係スキル第三発動判定
  731.   #     type    : :actor or :enemy
  732.   #     cs_data : Cooperation skill data
  733.   #--------------------------------------------------------------------------
  734.   def judge_cooperation_skill_third(type, cs_data)
  735.     if type == :enemy
  736.       # エネミーに発動させない場合は戻る
  737.       return unless KGC::CooperationSkill::PERMIT_ENEMY
  738.     end

  739.     @cooperation_skill_exec = false
  740.     case type
  741.     when :actor
  742.       cooperate_battlers = @cooperate_actors
  743.       members = $game_party.members
  744.     when :enemy
  745.       cooperate_battlers = @cooperate_enemies
  746.       members = $game_troop.members
  747.     end

  748.     @exec_battlers = create_cooperation_exec_battlers(type, cs_data,
  749.       cooperate_battlers, members)
  750.     # 行動者が加担していなければ戻る
  751.     return if @exec_battlers.empty?

  752.     # 同一ターゲットを指定していなければ戻る
  753.     return unless same_target_include?(cs_data, cooperate_battlers, members)

  754.     $game_temp.judging_cooperation_skill = true
  755.     prepare_cooperation_exec(type, cs_data, cooperate_battlers, members)
  756.     $game_temp.judging_cooperation_skill = false
  757.   end
  758.   #--------------------------------------------------------------------------
  759.   # ○ 連係スキル発動者リスト作成
  760.   #     type               : :actor or :enemy
  761.   #     cs_data            : Cooperation skill data
  762.   #     cooperate_battlers : 連係加担者リスト
  763.   #     members            : 連係加担側のメンバー全体
  764.   #--------------------------------------------------------------------------
  765.   def create_cooperation_exec_battlers(type, cs_data,
  766.       cooperate_battlers, members)
  767.     battlers = []
  768.     cs_data.need_skills.each { |ns|
  769.       battlers.clear
  770.       # 行動者加担判定
  771.       next unless ns.include?(@current_cooperate_user.skill_id)

  772.       # 全必要スキル充足判定
  773.       skills = ns.clone
  774.       ns.each { |skill_id|
  775.         user = cooperate_battlers.find { |cb|
  776.           skill_id == cb.skill_id && !battlers.include?(cb)
  777.         }
  778.         # 使用者がいなければ失敗判定
  779.         if user == nil
  780.           battlers.clear
  781.           skills = [0]
  782.           break
  783.         end
  784.         battlers << user
  785.         skills.delete(skill_id)
  786.       }
  787.       break if skills.empty?  # 判定用配列が空 ==> 必要スキル充足
  788.     }

  789.     unless cooperation_conditions_satisfy?(type, cs_data, battlers, members)
  790.       battlers = []
  791.     end

  792.     return battlers
  793.   end
  794.   #--------------------------------------------------------------------------
  795.   # ○ 使用条件充足判定
  796.   #     type               : :actor or :enemy
  797.   #     cs_data            : Cooperation skill data
  798.   #     candidate_battlers : 判定対象の連係加担者リスト
  799.   #     members            : 連係加担側のメンバー全体
  800.   #--------------------------------------------------------------------------
  801.   def cooperation_conditions_satisfy?(type, cs_data,
  802.       candidate_battlers, members)
  803.     return false if candidate_battlers.empty?
  804.     return true  if type == :enemy

  805.     # パラメータ算出
  806.     level_avg = 0
  807.     levels = []
  808.     candidate_battlers.each { |cb|
  809.       battler = members[cb.index]
  810.       level_avg += battler.level
  811.       levels << battler.level
  812.     }
  813.     level_avg /= members.size

  814.     comp = Proc.new { |a, b, over| over ? a >= b : a <= b }  # 判定用 Proc

  815.     cs_data.params.each { |k, v|
  816.       param = 0
  817.       case k
  818.       when :level_avg  # 平均レベル
  819.         param = level_avg
  820.       when :level_min  # 最低レベル
  821.         param = levels.min
  822.       when :level_max  # 最高レベル
  823.         param = levels.max
  824.       end
  825.       return false unless comp.call(param, v, cs_data.params_over[k])
  826.     }

  827.     return true
  828.   end
  829.   #--------------------------------------------------------------------------
  830.   # ○ 連係ターゲット一致判定
  831.   #     cs_data            : Cooperation skill data
  832.   #     cooperate_battlers : 連係加担者リスト
  833.   #     members            : 連係加担側のメンバー全体
  834.   #--------------------------------------------------------------------------
  835.   def same_target_include?(cs_data, cooperate_battlers, members)
  836.     return true unless KGC::CooperationSkill::SAME_TARGET_ONLY

  837.     # 同じターゲットを指定しているか判定
  838.     duplicate_battlers = (0..99).to_a
  839.     @exec_battlers.each { |eb|
  840.       duplicate_battlers &= eb.target_battlers
  841.     }
  842.     return (duplicate_battlers.size > 0)
  843.   end
  844.   #--------------------------------------------------------------------------
  845.   # ○ 連係発動準備
  846.   #     type               : :actor or :enemy
  847.   #     cs_data            : Cooperation skill data
  848.   #     cooperate_battlers : 連係加担者リスト
  849.   #     members            : 連係加担側のメンバー全体
  850.   #--------------------------------------------------------------------------
  851.   def prepare_cooperation_exec(type, cs_data, cooperate_battlers, members)
  852.     # 発動可否判定
  853.     @exec_battlers.each { |eb|
  854.       battler = members[eb.index]
  855.       unless battler.exist? && battler.skill_can_use?(cs_data.skill)
  856.         return
  857.       end
  858.     }

  859.     @cooperation_skill_exec = true
  860.     @cooperation_skill_data = cs_data
  861.     @cooperation_skill_user = type

  862.     # 発動者を行動順リストから削除
  863.     cooperate_battlers.each_with_index { |cb, i|
  864.       if @exec_battlers.include?(cb)
  865.         @action_battlers.delete(members[cb.index])
  866.         cooperate_battlers[i] = nil
  867.       end
  868.     }
  869.     cooperate_battlers.compact!
  870.   end
  871.   #--------------------------------------------------------------------------
  872.   # ○ 連係スキル発動
  873.   #--------------------------------------------------------------------------
  874.   def execute_cooperation_skill
  875.     # ダミーを登録
  876.     @action_battlers.unshift(create_cooperation_skill_battler)
  877.   end
  878.   #--------------------------------------------------------------------------
  879.   # ○ 連係発動者 (ダミーバトラー) 作成
  880.   #--------------------------------------------------------------------------
  881.   def create_cooperation_skill_battler
  882.     battler = Game_CooperationBattler.new
  883.     battler.battler_type = @cooperation_skill_user
  884.     battler.coop_skill   = @cooperation_skill_data
  885.     battler.action.set_skill(@cooperation_skill_data.id)

  886.     # ターゲット取得
  887.     members = (@cooperation_skill_user == :actor ?
  888.       $game_party : $game_troop).members
  889.     target = (0..99).to_a
  890.     @exec_battlers.each { |eb|
  891.       battler.exec_battlers << members[eb.index]
  892.       target &= eb.target_battlers
  893.     }
  894.     if target.empty?
  895.       # ターゲット不明なら最後の行動者のターゲットを採用
  896.       target = @current_cooperate_user.target_battlers
  897.     end
  898.     battler.action.target_index = target[rand(target.size)]

  899.     return battler
  900.   end
  901.   #--------------------------------------------------------------------------
  902.   # ○ 連係スキル終了
  903.   #--------------------------------------------------------------------------
  904.   def finish_cooperation_skill
  905.     @cooperation_skill_exec = false
  906.     @cooperation_skill_data = nil
  907.     @exec_battlers          = []
  908.   end
  909.   #--------------------------------------------------------------------------
  910.   # ○ 連係スキル加担判定
  911.   #     battler : 判定するバトラー
  912.   #--------------------------------------------------------------------------
  913.   def cooperation_exec?(battler)
  914.     return false unless @cooperation_skill_exec

  915.     if battler.is_a?(Game_Actor) || KGC::CooperationSkill::PERMIT_ENEMY
  916.       # 発動者に含まれているか判定
  917.       @exec_battlers.each_index { |i|
  918.         return true if @exec_battlers[i].index == battler.index
  919.       }
  920.     end
复制代码

Lv1.梦旅人

梦石
0
星屑
50
在线时间
30 小时
注册时间
2013-6-30
帖子
29
2
发表于 2013-7-8 15:00:12 | 只看该作者
谁有VA合击呀
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-23 07:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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