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

Project1

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

[已经过期] 如何做出合體技

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2012-10-4
帖子
193
跳转到指定楼层
1
发表于 2012-10-31 20:42:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 Mic_洛洛 于 2012-11-8 01:15 编辑

我在別的網站上有看到合體技的腳本,就是特定的兩個招式都使用後,會自動變成合體技
以下是腳本
RUBY 代码复制
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 連係スキル - KGC_CooperationSkill ◆ VX ◆
  3. #_/    ◇ Last update : 2009/08/07 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  複数のスキルを組み合わせ、別のスキルを発動させる機能です。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  7.  
  8. #==============================================================================
  9. # ★ カスタマイズ項目 - Customize BEGIN ★
  10. #==============================================================================
  11.  
  12. module KGC
  13. module CooperationSkill
  14.   # ◆ 連係発動時の名前の区切り文字
  15.   NAME_SEPARATOR = "、"
  16.  
  17.   # ◆ 連係元スキル発動
  18.   #  true  : 連係元となるスキルもすべて発動する。
  19.   #  false : 連係スキルのみ発動する。
  20.   #   ※ 併用するスクリプトによっては効果がない場合があります。
  21.   EXECUTE_ORIGIN_SKILL = false
  22.  
  23.   # ◆ ターゲットが同じ場合のみ連係を発動
  24.   #  true  : 元のスキルがすべて同じターゲット(または全体)の場合のみ発動。
  25.   #           ※ ターゲットがランダムのスキルとは相性が良くありません。
  26.   #  false : ターゲットが誰でもスキル条件さえ満たせば発動。
  27.   #          連係スキルのターゲットは、発動時の行動者のターゲット。
  28.   SAME_TARGET_ONLY = true
  29.  
  30.   # ◆ 敵連係スキル許可
  31.   #  true  : 敵も連係スキル判定を行う。
  32.   #  false : 敵は連係スキルを使用不可。
  33.   PERMIT_ENEMY = true
  34. end
  35. end
  36.  
  37. #==============================================================================
  38. # ☆ カスタマイズ項目終了 - Customize END ☆
  39. #==============================================================================
  40.  
  41. $imported = {} if $imported == nil
  42. $imported["CooperationSkill"] = true
  43.  
  44. module KGC
  45. module CooperationSkill
  46.   # 連係スキル用条件パラメータ
  47.   PARAMS = {
  48.     :level_avg => "LEVEL_AVG|平均レベル",
  49.     :level_min => "LEVEL_MIN|最[小低]レベル",
  50.     :level_max => "LEVEL_MAX|最[大高]レベル",
  51.   }
  52.  
  53.   # 連係スキル用属性・ステートリスト
  54.   ARRAYS = {
  55.     :attack_element => "ATTACK_ELEMENT|攻撃属性",
  56.     :state          => "STATE|ステート",
  57.   }
  58.  
  59.   module Regexp
  60.     module Skill
  61.       # 連係スキル開始
  62.       BEGIN_COOPERATE = /<(?:COOPERATION_SKILL|連[係繋携]スキル)>/i
  63.       # 連係スキル終了
  64.       END_COOPERATE   = /<\/(?:COOPERATION_SKILL|連[係繋携]スキル)>/i
  65.       # 必要スキルリスト
  66.       NEED_SKILLS = /^\s*(?:NEED_SKILLS?|必要スキル)\s*(\d+(?:\s*,\s*\d+)*)\s*/i
  67.  
  68.       REG_NAME = '[^:\+\-\d\s]+'
  69.       REG_OU   = 'OVER|UNDER|以上|以下'
  70.  
  71.       # 条件パラメータ
  72.       #  レベル 10 以上  など
  73.       COOPERATE_PARAMS = /^\s*(#{REG_NAME})\s*(\d+)\s*(#{REG_OU})?\s*$/i
  74.       # 属性・ステートリスト
  75.       #  ステート 1,-2,3  など
  76.       COOPERATE_ARRAYS = /^\s*(#{REG_NAME})\s*(\d+(?:\s*,\s*\-?\d+)*)\s*$/i
  77.     end
  78.   end
  79. end
  80. end
  81.  
  82. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  83.  
  84. #==============================================================================
  85. # ■ RPG::Skill
  86. #==============================================================================
  87.  
  88. class RPG::Skill < RPG::UsableItem
  89.   #--------------------------------------------------------------------------
  90.   # ○ 連係スキルであるか
  91.   #--------------------------------------------------------------------------
  92.   def is_cooperation?
  93.     self.note.each_line { |line|
  94.       # 開始タグを探す
  95.       if line =~ KGC::CooperationSkill::Regexp::Skill::BEGIN_COOPERATE
  96.         return true
  97.       end
  98.     }
  99.     return false
  100.   end
  101. end
  102.  
  103. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  104.  
  105. #==============================================================================
  106. # ■ Game_Temp
  107. #==============================================================================
  108.  
  109. class Game_Temp
  110.   #--------------------------------------------------------------------------
  111.   # ● 公開インスタンス変数
  112.   #--------------------------------------------------------------------------
  113.   attr_accessor :judging_cooperation_skill # 連係スキル判定中フラグ
  114.   #--------------------------------------------------------------------------
  115.   # ● オブジェクト初期化
  116.   #--------------------------------------------------------------------------
  117.   alias initialize_KGC_CooperationSkill initialize
  118.   def initialize
  119.     initialize_KGC_CooperationSkill
  120.  
  121.     @judging_cooperation_skill = false
  122.   end
  123. end
  124.  
  125. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  126.  
  127. #==============================================================================
  128. # □ Game_CooperationSkill
  129. #------------------------------------------------------------------------------
  130. #   連係スキルの情報を扱うクラスです。
  131. #==============================================================================
  132.  
  133. class Game_CooperationSkill
  134.   #--------------------------------------------------------------------------
  135.   # ○ 公開インスタンス変数
  136.   #--------------------------------------------------------------------------
  137.   attr_reader   :id                       # 発動スキル ID
  138.   attr_reader   :need_skills              # 必要スキル ID リスト
  139.   attr_reader   :params                   # 条件パラメータ
  140.   attr_reader   :params_over              # 条件パラメータ: ~以上
  141.   attr_reader   :need_arrays              # 必要属性・ステートリスト
  142.   attr_reader   :disuse_arrays            # 不要属性・ステートリスト
  143.   #--------------------------------------------------------------------------
  144.   # ○ オブジェクト初期化
  145.   #     skill_id : スキル ID
  146.   #     note     : メモ
  147.   #--------------------------------------------------------------------------
  148.   def initialize(skill_id, note)
  149.     @id            = skill_id
  150.     @need_skills   = []
  151.     @params        = {}
  152.     @params_over   = {}
  153.     @need_arrays   = {}
  154.     @disuse_arrays = {}
  155.     parse_note(note)
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ○ スキルを取得
  159.   #--------------------------------------------------------------------------
  160.   def skill
  161.     return $data_skills[@id]
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ○ メモ欄を解析
  165.   #     note : メモ
  166.   #--------------------------------------------------------------------------
  167.   def parse_note(note)
  168.     coop_flag = false
  169.     note.each_line { |line|
  170.       case line
  171.       when KGC::CooperationSkill::Regexp::Skill::BEGIN_COOPERATE
  172.         # 連係スキル定義開始
  173.         coop_flag = true
  174.       when KGC::CooperationSkill::Regexp::Skill::END_COOPERATE
  175.         # 連係スキル定義終了
  176.         coop_flag = false
  177.       end
  178.       next unless coop_flag
  179.  
  180.       case line
  181.       when KGC::CooperationSkill::Regexp::Skill::NEED_SKILLS
  182.         # 必要スキル
  183.         parse_need_skills($1.scan(/\-?\d+/))
  184.       when KGC::CooperationSkill::Regexp::Skill::COOPERATE_PARAMS
  185.         # パラメータ
  186.         parse_params($1, $2.to_i, $3)
  187.       when KGC::CooperationSkill::Regexp::Skill::COOPERATE_ARRAYS
  188.         # 属性・ステート
  189.         parse_arrays($1, $2.scan(/\-?\d+/))
  190.       end
  191.     }
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ○ 必要スキルを解析
  195.   #     list  : スキル ID 一覧
  196.   #--------------------------------------------------------------------------
  197.   def parse_need_skills(list)
  198.     skills = []
  199.     list.each { |num|
  200.       skills << num.to_i
  201.     }
  202.     @need_skills << skills
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ○ 連係スキルの能力値修正を適用
  206.   #     param : 対象パラメータ
  207.   #     value : 修正値
  208.   #     cond  : 以上 or 以下
  209.   #--------------------------------------------------------------------------
  210.   def parse_params(param, value, cond)
  211.     KGC::CooperationSkill::PARAMS.each { |k, v|
  212.       next if param !~ /(?:#{v})/i
  213.  
  214.       @params[k]      = value
  215.       @params_over[k] = (cond !~ /UNDER|以下/i)
  216.       break
  217.     }
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ○ 連係スキルの追加属性・ステートを適用
  221.   #     param : 対象パラメータ
  222.   #     list  : 属性・ステート一覧
  223.   #--------------------------------------------------------------------------
  224.   def parse_arrays(param, list)
  225.     KGC::CooperationSkill::ARRAYS.each { |k, v|
  226.       next if param !~ /(?:#{v})/i
  227.  
  228.       if @need_arrays[k] == nil
  229.         @need_arrays[k]   = []
  230.         @disuse_arrays[k] = []
  231.       end
  232.       list.each { |num|
  233.         n = num.to_i
  234.         if n > 0
  235.           @need_arrays[k] |= [n]
  236.         else
  237.           @disuse_arrays[k] |= [n.abs]
  238.         end
  239.       }
  240.       break
  241.     }
  242.   end
  243. end
  244.  
  245. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  246.  
  247. $data_skills = load_data("Data/Skills.rvdata") if $data_skill == nil
  248.  
  249. module KGC::CooperationSkill
  250.   # 連係スキルリストを変換
  251.   list = []
  252.   $data_skills.each { |skill|
  253.     next if skill == nil
  254.     next unless skill.is_cooperation?
  255.  
  256.     list << Game_CooperationSkill.new(skill.id, skill.note)
  257.   }
  258.   SKILLS = list
  259. end
  260.  
  261. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  262.  
  263. #==============================================================================
  264. # ■ Game_Actor
  265. #==============================================================================
  266.  
  267. class Game_Actor < Game_Battler
  268.   #--------------------------------------------------------------------------
  269.   # ● スキルの使用可能判定
  270.   #     skill : スキル
  271.   #--------------------------------------------------------------------------
  272.   def skill_can_use?(skill)
  273.     return super
  274.   end
  275. end
  276.  
  277. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  278.  
  279. #==============================================================================
  280. # □ Game_CooperationSkillUser
  281. #------------------------------------------------------------------------------
  282. #   連係スキル発動者の情報を扱うクラスです。
  283. #==============================================================================
  284.  
  285. class Game_CooperationSkillUser
  286.   #--------------------------------------------------------------------------
  287.   # ○ 公開インスタンス変数
  288.   #--------------------------------------------------------------------------
  289.   attr_reader   :index                    # 発動者のインデックス
  290.   attr_reader   :skill_id                 # 発動者が使用したスキル ID
  291.   attr_reader   :target_battlers          # 攻撃対象
  292.   #--------------------------------------------------------------------------
  293.   # ○ オブジェクト初期化
  294.   #--------------------------------------------------------------------------
  295.   def initialize(battler)
  296.     if $imported["Counter"]
  297.       battler.action.made_targets = nil
  298.     end
  299.     @index = battler.index
  300.     @skill_id = battler.action.skill_id
  301.     @target_battlers = []
  302.     battler.action.make_targets.each { |t|
  303.       @target_battlers << t.index
  304.     }
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ○ 同値判定
  308.   #--------------------------------------------------------------------------
  309.   def equal?(obj)
  310.     return false unless obj.is_a?(Game_CooperationSkillUser)
  311.     return false if @index != obj.index
  312.     return false if @skill_id != obj.skill_id
  313.     return false if @target_battlers != obj.target_battlers
  314.  
  315.     return true
  316.   end
  317.   #--------------------------------------------------------------------------
  318.   # ○ 等値演算子
  319.   #--------------------------------------------------------------------------
  320.   def ==(obj)
  321.     return self.equal?(obj)
  322.   end
  323. end
  324.  
  325. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  326.  
  327. #==============================================================================
  328. # □ Game_CooperationBattler
  329. #------------------------------------------------------------------------------
  330. #   連係スキル発動時のダミーバトラークラスです。
  331. #==============================================================================
  332.  
  333. class Game_CooperationBattler < Game_Battler
  334.   #--------------------------------------------------------------------------
  335.   # ● 公開インスタンス変数
  336.   #--------------------------------------------------------------------------
  337.   attr_accessor :battler_type             # :actor or :enemy
  338.   attr_accessor :exec_battlers            # 発動者リスト
  339.   attr_accessor :coop_skill               # 連係スキル情報
  340.   #--------------------------------------------------------------------------
  341.   # ● オブジェクト初期化
  342.   #--------------------------------------------------------------------------
  343.   def initialize
  344.     @battler_type  = :actor
  345.     @exec_battlers = []
  346.     @coop_skill    = nil
  347.     super
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ● アクターか否かの判定
  351.   #--------------------------------------------------------------------------
  352.   def actor?
  353.     return (@battler_type == :actor)
  354.   end
  355.   #--------------------------------------------------------------------------
  356.   # ● インデックス取得
  357.   #--------------------------------------------------------------------------
  358.   def index
  359.     return 0
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ● 表示名の取得
  363.   #--------------------------------------------------------------------------
  364.   def name
  365.     str = ""
  366.     members = (actor? ? $game_party : $game_troop).members
  367.     exec_battlers.each_with_index { |b, i|
  368.       str += members[b.index].name
  369.       if i < exec_battlers.size - 1
  370.         str += KGC::CooperationSkill::NAME_SEPARATOR
  371.       end
  372.     }
  373.     return str
  374.   end
  375.   #--------------------------------------------------------------------------
  376.   # ● レベルの取得
  377.   #--------------------------------------------------------------------------
  378.   def level
  379.     values = []
  380.     exec_battlers.each { |b| values << b.level }
  381.     return values.max
  382.   end
  383.   #--------------------------------------------------------------------------
  384.   # ○ 最大レベルの取得
  385.   #--------------------------------------------------------------------------
  386.   def level_max
  387.     return level
  388.   end
  389.   #--------------------------------------------------------------------------
  390.   # ○ 平均レベルの取得
  391.   #--------------------------------------------------------------------------
  392.   def level_avg
  393.     n = 0
  394.     exec_battlers.each { |b| n += b.level }
  395.     return (n / exec_battlers.size)
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ● MaxHP の取得
  399.   #--------------------------------------------------------------------------
  400.   def maxhp
  401.     values = []
  402.     exec_battlers.each { |b| values << b.maxhp }
  403.     return values.max
  404.   end
  405.   #--------------------------------------------------------------------------
  406.   # ● MaxMP の取得
  407.   #--------------------------------------------------------------------------
  408.   def maxmp
  409.     values = []
  410.     exec_battlers.each { |b| values << b.maxmp }
  411.     return values.max
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # ● HP の取得
  415.   #--------------------------------------------------------------------------
  416.   def hp
  417.     values = []
  418.     exec_battlers.each { |b| values << b.hp }
  419.     return values.min
  420.   end
  421.   #--------------------------------------------------------------------------
  422.   # ● MP の取得
  423.   #--------------------------------------------------------------------------
  424.   def mp
  425.     values = []
  426.     exec_battlers.each { |b| values << b.mp }
  427.     return values.min
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # ○ ドライブゲージ量取得
  431.   #--------------------------------------------------------------------------
  432.   def overdrive
  433.     values = []
  434.     exec_battlers.each { |b| values << b.overdrive }
  435.     return values.min
  436.   end
  437.   #--------------------------------------------------------------------------
  438.   # ● 攻撃力の取得
  439.   #--------------------------------------------------------------------------
  440.   def atk
  441.     values = []
  442.     exec_battlers.each { |b| values << b.atk }
  443.     return values.max
  444.   end
  445.   #--------------------------------------------------------------------------
  446.   # ● 防御力の取得
  447.   #--------------------------------------------------------------------------
  448.   def def
  449.     values = []
  450.     exec_battlers.each { |b| values << b.def }
  451.     return values.max
  452.   end
  453.   #--------------------------------------------------------------------------
  454.   # ● 精神力の取得
  455.   #--------------------------------------------------------------------------
  456.   def spi
  457.     values = []
  458.     exec_battlers.each { |b| values << b.spi }
  459.     return values.max
  460.   end
  461.   #--------------------------------------------------------------------------
  462.   # ● 敏捷性の取得
  463.   #--------------------------------------------------------------------------
  464.   def agi
  465.     values = []
  466.     exec_battlers.each { |b| values << b.agi }
  467.     return values.max
  468.   end
  469.   #--------------------------------------------------------------------------
  470.   # ● 命中率の取得
  471.   #--------------------------------------------------------------------------
  472.   def hit
  473.     values = []
  474.     exec_battlers.each { |b| values << b.hit }
  475.     return [values.max, 100].max
  476.   end
  477.   #--------------------------------------------------------------------------
  478.   # ● 回避率の取得
  479.   #--------------------------------------------------------------------------
  480.   def eva
  481.     return 0
  482.   end
  483.   #--------------------------------------------------------------------------
  484.   # ● クリティカル率の取得
  485.   #--------------------------------------------------------------------------
  486.   def cri
  487.     values = []
  488.     exec_battlers.each { |b| values << b.cri }
  489.     return values.max
  490.   end
  491.   #--------------------------------------------------------------------------
  492.   # ● MP の変更
  493.   #     mp : 新しい MP
  494.   #--------------------------------------------------------------------------
  495.   def mp=(mp)
  496.     # 加担者全員の MP を減らす
  497.     diff = self.mp - mp
  498.     exec_battlers.each { |b| b.mp -= diff }
  499.   end
  500.   #--------------------------------------------------------------------------
  501.   # ○ ドライブゲージの操作
  502.   #--------------------------------------------------------------------------
  503.   def overdrive=(value)
  504.     # 加担者全員のドライブゲージを減らす
  505.     diff = self.overdrive - overdrive
  506.     exec_battlers.each { |b| b.overdrive -= diff }
  507.   end
  508.   #--------------------------------------------------------------------------
  509.   # ● 全回復
  510.   #--------------------------------------------------------------------------
  511.   def recover_all
  512.     # 何もしない
  513.   end
  514.   #--------------------------------------------------------------------------
  515.   # ● 戦闘不能判定
  516.   #--------------------------------------------------------------------------
  517.   def dead?
  518.     exec_battlers.each { |b|
  519.       return true if b.dead?
  520.     }
  521.     return false
  522.   end
  523.   #--------------------------------------------------------------------------
  524.   # ● 存在判定
  525.   #--------------------------------------------------------------------------
  526.   def exist?
  527.     exec_battlers.each { |b|
  528.       return false unless b.exist?
  529.     }
  530.     return true
  531.   end
  532.   #--------------------------------------------------------------------------
  533.   # ● コマンド入力可能判定
  534.   #--------------------------------------------------------------------------
  535.   def inputable?
  536.     exec_battlers.each { |b|
  537.       return false unless b.inputtable?
  538.     }
  539.     return true
  540.   end
  541.   #--------------------------------------------------------------------------
  542.   # ● 行動可能判定
  543.   #--------------------------------------------------------------------------
  544.   def movable?
  545.     exec_battlers.each { |b|
  546.       return false unless b.movable?
  547.     }
  548.     return true
  549.   end
  550.   #--------------------------------------------------------------------------
  551.   # ● 沈黙状態判定
  552.   #--------------------------------------------------------------------------
  553.   def silent?
  554.     exec_battlers.each { |b|
  555.       return true if b.silent?
  556.     }
  557.     return false
  558.   end
  559.   #--------------------------------------------------------------------------
  560.   # ● 暴走状態判定
  561.   #--------------------------------------------------------------------------
  562.   def berserker?
  563.     return false
  564.   end
  565.   #--------------------------------------------------------------------------
  566.   # ● 混乱状態判定
  567.   #--------------------------------------------------------------------------
  568.   def confusion?
  569.     return false
  570.   end
  571.   #--------------------------------------------------------------------------
  572.   # ● 防御中判定
  573.   #--------------------------------------------------------------------------
  574.   def guarding?
  575.     return false
  576.   end
  577.   #--------------------------------------------------------------------------
  578.   # ● 通常攻撃の属性取得
  579.   #--------------------------------------------------------------------------
  580.   def element_set
  581.     result = []
  582.     exec_battlers.each { |b| result |= b.element_set }
  583.     return result
  584.   end
  585.   #--------------------------------------------------------------------------
  586.   # ● 通常攻撃のステート変化 (+) 取得
  587.   #--------------------------------------------------------------------------
  588.   def plus_state_set
  589.     result = []
  590.     exec_battlers.each { |b| result |= b.plus_state_set }
  591.     return result
  592.   end
  593.   #--------------------------------------------------------------------------
  594.   # ● 通常攻撃のステート変化 (-) 取得
  595.   #--------------------------------------------------------------------------
  596.   def minus_state_set
  597.     result = []
  598.     exec_battlers.each { |b| result |= b.minus_state_set }
  599.     return result
  600.   end
  601.   #--------------------------------------------------------------------------
  602.   # ● ステート [スリップダメージ] 判定
  603.   #--------------------------------------------------------------------------
  604.   def slip_damage?
  605.     return false
  606.   end
  607.   #--------------------------------------------------------------------------
  608.   # ● ステート [命中率減少] 判定
  609.   #--------------------------------------------------------------------------
  610.   def reduce_hit_ratio?
  611.     return false
  612.   end
  613. end
  614.  
  615. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  616.  
  617. #==============================================================================
  618. # ■ Scene_Battle
  619. #==============================================================================
  620.  
  621. class Scene_Battle < Scene_Base
  622.   #--------------------------------------------------------------------------
  623.   # ● 開始処理
  624.   #--------------------------------------------------------------------------
  625.   alias start_KGC_CooperationSkill start
  626.   def start
  627.     start_KGC_CooperationSkill
  628.  
  629.     init_cooperation_skill
  630.   end
  631.   #--------------------------------------------------------------------------
  632.   # ○ 連係スキル用変数初期化
  633.   #--------------------------------------------------------------------------
  634.   def init_cooperation_skill
  635.     @cooperation_skill_judged = false
  636.     @cooperation_skill_exec   = false
  637.     @cooperation_skill_data   = nil
  638.     @cooperate_actors  = []
  639.     @cooperate_enemies = []
  640.   end
  641.   #--------------------------------------------------------------------------
  642.   # ● パーティコマンド選択の開始
  643.   #--------------------------------------------------------------------------
  644.   alias start_party_command_selection_KGC_CooperationSkill
  645.     start_party_command_selection
  646.   def start_party_command_selection
  647.     if $game_temp.in_battle
  648.       init_cooperation_skill
  649.     end
  650.  
  651.     start_party_command_selection_KGC_CooperationSkill
  652.   end
  653.   #--------------------------------------------------------------------------
  654.   # ● 戦闘処理の実行開始
  655.   #--------------------------------------------------------------------------
  656.   alias start_main_KGC_CooperationSkill start_main
  657.   def start_main
  658.     start_main_KGC_CooperationSkill
  659.  
  660.     init_cooperate_battler_list
  661.   end
  662.   #--------------------------------------------------------------------------
  663.   # ○ 判定用データ初期化
  664.   #--------------------------------------------------------------------------
  665.   def init_cooperate_battler_list
  666.     [:actor, :enemy].each { |i|
  667.       case i
  668.       when :actor
  669.         cooperate_battlers = @cooperate_actors
  670.         members = $game_party.members
  671.       when :enemy
  672.         cooperate_battlers = @cooperate_enemies
  673.         members = $game_troop.members
  674.       end
  675.       # 対象側バトラーを設定
  676.       cooperate_battlers.clear
  677.       unless KGC::CooperationSkill::EXECUTE_ORIGIN_SKILL
  678.         members.each { |battler|
  679.           next unless battler.action.skill?
  680.           cooperate_battlers << Game_CooperationSkillUser.new(battler)
  681.         }
  682.       end
  683.     }
  684.   end
  685.   #--------------------------------------------------------------------------
  686.   # ● 戦闘行動の実行
  687.   #--------------------------------------------------------------------------
  688.   alias execute_action_KGC_CooperationSkill execute_action
  689.   def execute_action
  690.     @cooperation_skill_judged = false
  691.  
  692.     if KGC::CooperationSkill::EXECUTE_ORIGIN_SKILL
  693.       execute_action_KGC_CooperationSkill
  694.       judge_cooperation_skill(@active_battler)
  695.     else
  696.       judge_cooperation_skill(@active_battler)
  697.       unless @cooperation_skill_judged && @cooperation_skill_exec
  698.         execute_action_KGC_CooperationSkill
  699.       end
  700.     end
  701.  
  702.     if @cooperation_skill_exec
  703.       if @cooperation_skill_judged
  704.         execute_cooperation_skill
  705.       else
  706.         finish_cooperation_skill
  707.       end
  708.     end
  709.   end
  710.   #--------------------------------------------------------------------------
  711.   # ○ 連係スキル第一発動判定
  712.   #     battler : 行動者
  713.   #--------------------------------------------------------------------------
  714.   def judge_cooperation_skill(battler)
  715.     return false if @cooperation_skill_judged
  716.     return false if @cooperation_skill_exec
  717.     @cooperation_skill_judged = true
  718.  
  719.     target_unit = (battler.is_a?(Game_Actor) ? $game_troop : $game_party)
  720.     if battler.action.kind == 1
  721.       # 対象が残っていれば第二発動判定
  722.       unless target_unit.all_dead?
  723.         return judge_cooperation_skill_second(battler)
  724.       end
  725.     else
  726.       # 行動がスキル以外なら判定用配列から削除
  727.       if target_unit.is_a?(Game_Party)
  728.         remove_cooperate_battler(:enemy, battler)
  729.       elsif target_unit.is_a?(Game_Troop)
  730.         remove_cooperate_battler(:actor, battler)
  731.       end
  732.     end
  733.     return false
  734.   end
  735.   #--------------------------------------------------------------------------
  736.   # ○ 連係加担者削除
  737.   #     type    : :actor or :enemy
  738.   #     battler : 削除対象
  739.   #--------------------------------------------------------------------------
  740.   def remove_cooperate_battler(type, battler)
  741.     battlers = (type == :actor ? @cooperate_actors : @cooperate_enemies)
  742.     battlers.each_index { |i|
  743.       if battlers.index == battler.index
  744.         battlers = nil
  745.       end
  746.     }
  747.     battlers.compact!
  748.   end
  749.   #--------------------------------------------------------------------------
  750.   # ○ 連係スキル第二発動判定
  751.   #     battler : 行動者
  752.   #--------------------------------------------------------------------------
  753.   def judge_cooperation_skill_second(battler)
  754.     # 判定用データ作成
  755.     @current_cooperate_user = Game_CooperationSkillUser.new(battler)
  756.     if battler.is_a?(Game_Actor)
  757.       remove_cooperate_battler(:actor, battler)
  758.       @cooperate_actors |= [@current_cooperate_user]
  759.     elsif battler.is_a?(Game_Enemy)
  760.       remove_cooperate_battler(:enemy, battler)
  761.       @cooperate_enemies |= [@current_cooperate_user]
  762.     end
  763.     # 連係スキル発動判定
  764.     KGC::CooperationSkill::SKILLS.each { |cs|
  765.       # アクター判定
  766.       if battler.is_a?(Game_Actor)
  767.         judge_cooperation_skill_third(:actor, cs)
  768.       # エネミー判定
  769.       elsif battler.is_a?(Game_Enemy)
  770.         judge_cooperation_skill_third(:enemy, cs)
  771.       end
  772.  
  773.       break if @cooperation_skill_exec
  774.     }
  775.     return @cooperation_skill_exec
  776.   end
  777.   #--------------------------------------------------------------------------
  778.   # ○ 連係スキル第三発動判定
  779.   #     type    : :actor or :enemy
  780.   #     cs_data : Cooperation skill data
  781.   #--------------------------------------------------------------------------
  782.   def judge_cooperation_skill_third(type, cs_data)
  783.     if type == :enemy
  784.       # エネミーに発動させない場合は戻る
  785.       return unless KGC::CooperationSkill::PERMIT_ENEMY
  786.     end
  787.  
  788.     @cooperation_skill_exec = false
  789.     case type
  790.     when :actor
  791.       cooperate_battlers = @cooperate_actors
  792.       members = $game_party.members
  793.     when :enemy
  794.       cooperate_battlers = @cooperate_enemies
  795.       members = $game_troop.members
  796.     end
  797.  
  798.     @exec_battlers = create_cooperation_exec_battlers(type, cs_data,
  799.       cooperate_battlers, members)
  800.     # 行動者が加担していなければ戻る
  801.     return if @exec_battlers.empty?
  802.  
  803.     # 同一ターゲットを指定していなければ戻る
  804.     return unless same_target_include?(cs_data, cooperate_battlers, members)
  805.  
  806.     $game_temp.judging_cooperation_skill = true
  807.     prepare_cooperation_exec(type, cs_data, cooperate_battlers, members)
  808.     $game_temp.judging_cooperation_skill = false
  809.   end
  810.   #--------------------------------------------------------------------------
  811.   # ○ 連係スキル発動者リスト作成
  812.   #     type               : :actor or :enemy
  813.   #     cs_data            : Cooperation skill data
  814.   #     cooperate_battlers : 連係加担者リスト
  815.   #     members            : 連係加担側のメンバー全体
  816.   #--------------------------------------------------------------------------
  817.   def create_cooperation_exec_battlers(type, cs_data,
  818.       cooperate_battlers, members)
  819.     battlers = []
  820.     cs_data.need_skills.each { |ns|
  821.       battlers.clear
  822.       # 行動者加担判定
  823.       next unless ns.include?(@current_cooperate_user.skill_id)
  824.  
  825.       # 全必要スキル充足判定
  826.       skills = ns.clone
  827.       ns.each { |skill_id|
  828.         user = cooperate_battlers.find { |cb|
  829.           skill_id == cb.skill_id && !battlers.include?(cb)
  830.         }
  831.         # 使用者がいなければ失敗判定
  832.         if user == nil
  833.           battlers.clear
  834.           skills = [0]
  835.           break
  836.         end
  837.         battlers << user
  838.         skills.delete(skill_id)
  839.       }
  840.       break if skills.empty?  # 判定用配列が空 ==> 必要スキル充足
  841.     }
  842.  
  843.     unless cooperation_conditions_satisfy?(type, cs_data, battlers, members)
  844.       battlers = []
  845.     end
  846.  
  847.     return battlers
  848.   end
  849.   #--------------------------------------------------------------------------
  850.   # ○ 使用条件充足判定
  851.   #     type               : :actor or :enemy
  852.   #     cs_data            : Cooperation skill data
  853.   #     candidate_battlers : 判定対象の連係加担者リスト
  854.   #     members            : 連係加担側のメンバー全体
  855.   #--------------------------------------------------------------------------
  856.   def cooperation_conditions_satisfy?(type, cs_data,
  857.       candidate_battlers, members)
  858.     return false if candidate_battlers.empty?
  859.     return true  if type == :enemy
  860.  
  861.     # パラメータ算出
  862.     level_avg = 0
  863.     levels = []
  864.     candidate_battlers.each { |cb|
  865.       battler = members[cb.index]
  866.       level_avg += battler.level
  867.       levels << battler.level
  868.     }
  869.     level_avg /= members.size
  870.  
  871.     comp = Proc.new { |a, b, over| over ? a >= b : a <= b }  # 判定用 Proc
  872.  
  873.     cs_data.params.each { |k, v|
  874.       param = 0
  875.       case k
  876.       when :level_avg  # 平均レベル
  877.         param = level_avg
  878.       when :level_min  # 最低レベル
  879.         param = levels.min
  880.       when :level_max  # 最高レベル
  881.         param = levels.max
  882.       end
  883.       return false unless comp.call(param, v, cs_data.params_over[k])
  884.     }
  885.  
  886.     return true
  887.   end
  888.   #--------------------------------------------------------------------------
  889.   # ○ 連係ターゲット一致判定
  890.   #     cs_data            : Cooperation skill data
  891.   #     cooperate_battlers : 連係加担者リスト
  892.   #     members            : 連係加担側のメンバー全体
  893.   #--------------------------------------------------------------------------
  894.   def same_target_include?(cs_data, cooperate_battlers, members)
  895.     return true unless KGC::CooperationSkill::SAME_TARGET_ONLY
  896.  
  897.     # 同じターゲットを指定しているか判定
  898.     duplicate_battlers = (0..99).to_a
  899.     @exec_battlers.each { |eb|
  900.       duplicate_battlers &= eb.target_battlers
  901.     }
  902.     return (duplicate_battlers.size > 0)
  903.   end
  904.   #--------------------------------------------------------------------------
  905.   # ○ 連係発動準備
  906.   #     type               : :actor or :enemy
  907.   #     cs_data            : Cooperation skill data
  908.   #     cooperate_battlers : 連係加担者リスト
  909.   #     members            : 連係加担側のメンバー全体
  910.   #--------------------------------------------------------------------------
  911.   def prepare_cooperation_exec(type, cs_data, cooperate_battlers, members)
  912.     # 発動可否判定
  913.     @exec_battlers.each { |eb|
  914.       battler = members[eb.index]
  915.       unless battler.exist? && battler.skill_can_use?(cs_data.skill)
  916.         return
  917.       end
  918.     }
  919.  
  920.     @cooperation_skill_exec = true
  921.     @cooperation_skill_data = cs_data
  922.     @cooperation_skill_user = type
  923.  
  924.     # 発動者を行動順リストから削除
  925.     cooperate_battlers.each_with_index { |cb, i|
  926.       if @exec_battlers.include?(cb)
  927.         @action_battlers.delete(members[cb.index])
  928.         cooperate_battlers = nil
  929.       end
  930.     }
  931.     cooperate_battlers.compact!
  932.   end
  933.   #--------------------------------------------------------------------------
  934.   # ○ 連係スキル発動
  935.   #--------------------------------------------------------------------------
  936.   def execute_cooperation_skill
  937.     # ダミーを登録
  938.     @action_battlers.unshift(create_cooperation_skill_battler)
  939.   end
  940.   #--------------------------------------------------------------------------
  941.   # ○ 連係発動者 (ダミーバトラー) 作成
  942.   #--------------------------------------------------------------------------
  943.   def create_cooperation_skill_battler
  944.     battler = Game_CooperationBattler.new
  945.     battler.battler_type = @cooperation_skill_user
  946.     battler.coop_skill   = @cooperation_skill_data
  947.     battler.action.set_skill(@cooperation_skill_data.id)
  948.  
  949.     # ターゲット取得
  950.     members = (@cooperation_skill_user == :actor ?
  951.       $game_party : $game_troop).members
  952.     target = (0..99).to_a
  953.     @exec_battlers.each { |eb|
  954.       battler.exec_battlers << members[eb.index]
  955.       target &= eb.target_battlers
  956.     }
  957.     if target.empty?
  958.       # ターゲット不明なら最後の行動者のターゲットを採用
  959.       target = @current_cooperate_user.target_battlers
  960.     end
  961.     battler.action.target_index = target[rand(target.size)]
  962.  
  963.     return battler
  964.   end
  965.   #--------------------------------------------------------------------------
  966.   # ○ 連係スキル終了
  967.   #--------------------------------------------------------------------------
  968.   def finish_cooperation_skill
  969.     @cooperation_skill_exec = false
  970.     @cooperation_skill_data = nil
  971.     @exec_battlers          = []
  972.   end
  973.   #--------------------------------------------------------------------------
  974.   # ○ 連係スキル加担判定
  975.   #     battler : 判定するバトラー
  976.   #--------------------------------------------------------------------------
  977.   def cooperation_exec?(battler)
  978.     return false unless @cooperation_skill_exec
  979.  
  980.     if battler.is_a?(Game_Actor) || KGC::CooperationSkill::PERMIT_ENEMY
  981.       # 発動者に含まれているか判定
  982.       @exec_battlers.each_index { |i|
  983.         return true if @exec_battlers.index == battler.index
  984.       }
  985.     end
  986.     return false
  987.   end
  988. end

但這是VX用的,我用在VA上,結果才進入遊戲就冒出找不到Data/Skills.rvdata的錯誤訊息(我明明就有這個檔案啊!)
所以麻煩各位:
1.請問要怎麼修改才能用在VA上?

2.合體技的搭配技能從哪裡才能改?

3.這腳本能使出複數的合體技嗎?

以上,謝謝

点评

请LZ使用代码框添加脚本代码,方便大家阅读与复制脚本的说。(^^本次已代你编辑了~  发表于 2012-11-8 01:19

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
帖子
799
2
发表于 2012-10-31 22:46:37 | 只看该作者
VX跟VA的脚本不见得可以通用。

点评

[url=home.php?mod=space&username=lirn]@lirn[/url]  发表于 2012-11-1 06:48
所以才想請教該怎麼改才能用在VA上?  发表于 2012-11-1 06:47
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
52
在线时间
704 小时
注册时间
2011-12-27
帖子
941
3
发表于 2012-11-1 07:33:33 手机端发表。 | 只看该作者
VX ace用rvdata好像要問那群大大...
曾有神觸發現可以混合使用。

点评

[url=home.php?mod=space&username=zeldafd]@zeldafd[/url]請問那個帖子在哪裡?  发表于 2012-11-1 22:54
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2012-10-4
帖子
193
4
 楼主| 发表于 2012-11-2 06:59:27 | 只看该作者
@zeldafd
我找過rvdata的帖子
不過沒看到提到Skills.rvdata的帖子
如果大大知道在哪,可以告訴我嗎?
謝謝
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
56
在线时间
342 小时
注册时间
2011-10-29
帖子
368
5
发表于 2012-11-7 17:28:52 | 只看该作者
有没有这个脚本的范例?

点评

[url=home.php?mod=space&username=创造达人]@创造达人[/url] 我不曉得你要的範例是什麼,不過可以到原提供網站上,那裡有貼圖http://ytomy.sakura.ne.jp/tkool/rpgtech/php/tech.php?tool=VX&cat=tech_vx/skill&tec   发表于 2012-11-7 18:13
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-8 01:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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