Project1

标题: 关于KGC被动脚本与状态学习技能脚本的联动 [打印本页]

作者: linyifei    时间: 2024-7-30 03:54
标题: 关于KGC被动脚本与状态学习技能脚本的联动
Project114.zip (254.46 KB, 下载次数: 2)

我试图用KGC脚本达成嘲讽效果,即通过A技能获得α状态,再由α状态学习B技能,B技能备注栏中填写所需属性
然而在实际测试中我发现,B技能备注栏的属性生成并不是即时的,在习得B技能后,被动脚本并没有生效,玩家必须使用该角色再次释放任意技能才能生效。
所以我想问问大佬们脚本应该如何修改,我是真看不懂该改哪里……

RUBY 代码复制
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ パッシブスキル - KGC_PassiveSkill ◆ VX ◆
  3. #_/    ◇ Last update : 2008/11/16 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  習得するだけで能力値上昇効果を発揮するスキルを作成します。
  6. #_/============================================================================
  7. #_/ 【基本機能】≪200x/XP 機能再現≫ より下に導入してください。
  8. #_/ 【装備】≪装備品オプション追加≫ より下に導入してください。
  9. #_/ 【装備】≪装備拡張≫ より下に導入してください。
  10. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  11.  
  12. $imported = {} if $imported == nil
  13. $imported["PassiveSkill"] = true
  14.  
  15. module KGC
  16. module PassiveSkill
  17.   # パッシブスキル用パラメータリスト
  18.   PARAMS = {
  19.     :maxhp => "MAXHP|最大HP",
  20.     :maxmp => "MAXMP|最大MP",
  21.     :atk   => "ATK|攻撃力",
  22.     :def   => "DEF|防御力",
  23.     :spi   => "SPI|精神力",
  24.     :agi   => "AGI|敏捷性",
  25.     :hit   => "HIT|命中率",
  26.     :eva   => "EVA|回避率",
  27.     :cri   => "CRI|クリティカル率",
  28.     :odds  => "ODDS|狙われやすさ",
  29.   }
  30.  
  31.   # パッシブスキル用属性・ステートリスト
  32.   ARRAYS = {
  33.     :attack_element => "ATTACK_ELEMENT|攻撃属性",
  34.     :plus_state     => "PLUS_STATE|付加ステート",
  35.     :invalid_state  => "INVALID_STATE|無効化ステート",
  36.     :auto_state     => "AUTO_STATE|オートステート",
  37.   }
  38.  
  39.   # パッシブスキル用耐性リスト
  40.   RESISTANCES = {
  41.     # ≪装備品オプション追加≫
  42.     :element => "ELEMENT_RESISTANCE|属性耐性",
  43.     :state   => "STATE_RESISTANCE|ステート耐性",
  44.   }
  45.  
  46.   # パッシブスキル用特殊効果リスト
  47.   EFFECTS = {
  48.     # デフォ
  49.     :two_swords_style => "TWO_SWORDS_STYLE|二刀流",
  50.     :auto_battle      => "AUTO_BATTLE|自動戦闘",
  51.     :super_guard      => "SUPER_GUARD|強力防御",
  52.     :pharmacology     => "PHARMACOLOGY|薬の知識",
  53.     :fast_attack      => "FAST_ATTACK|ターン内先制",
  54.     :dual_attack      => "DUAL_ATTACK|連続攻撃",
  55.     :critical_bonus   => "CRITICAL_BONUS|クリティカル頻発",
  56.     :prevent_critical => "PREVENT_CRITICAL|クリティカル防止",
  57.     :half_mp_cost     => "HALF_MP_COST|消費MP半分",
  58.     :double_exp_gain  => "DOUBLE_EXP_GAIN|取得経験値[22]倍",
  59.     # ≪200x/XP 機能再現≫
  60.     :whole_attack => "WHOLE_ATTACK|全体攻撃",
  61.     :ignore_eva   => "IGNORE_EVA|回避無視",
  62.     # ≪装備品オプション追加≫
  63.     :multi_attack_count => '(\d+)\s*(?:TIMES_ATTACK|回攻撃)',
  64.   }
  65.  
  66.   # 正規表現
  67.   module Regexp
  68.     # スキル
  69.     module Skill
  70.       # パッシブスキル開始
  71.       BEGIN_PASSIVE = /<(?:PASSIVE_SKILL|パッシブスキル)>/i
  72.       # パッシブスキル終了
  73.       END_PASSIVE = /<\/(?:PASSIVE_SKILL|パッシブスキル)>/i
  74.  
  75.       # パラメータ修正
  76.       #  MAXHP +20  など
  77.       PASSIVE_PARAMS = /^\s*([^:\+\-\d\s]+)\s*([\+\-]\d+)([%%])?\s*$/
  78.       # 属性・ステートリスト
  79.       #  攻撃属性 1,2,3  など
  80.       PASSIVE_ARRAYS = /^\s*([^:\+\-\d\s]+)\s*(\d+(?:\s*,\s*\d+)*)\s*$/
  81.       # 耐性
  82.       PASSIVE_RESISTANCES = /^\s*([^:\+\-\d\s]+)\s(\d+):(\-?\d+)[%%]?\s*$/
  83.       # 特殊効果
  84.       PASSIVE_EFFECTS = /^\s*([^:\+\-\d\s]+)/
  85.     end
  86.   end
  87. end
  88. end
  89.  
  90. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  91.  
  92. #==============================================================================
  93. # □ KGC::Commands
  94. #==============================================================================
  95.  
  96. module KGC
  97. module Commands
  98.   module_function
  99.   #--------------------------------------------------------------------------
  100.   # ○ パッシブスキルの修正値を再設定
  101.   #--------------------------------------------------------------------------
  102.   def restore_passive_rev
  103.     (1...$data_actors.size).each { |i|
  104.       actor = $game_actors[i]
  105.       actor.restore_passive_rev
  106.     }
  107.   end
  108. end
  109. end
  110.  
  111. class Game_Interpreter
  112.   include KGC::Commands
  113. end
  114.  
  115. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  116.  
  117. #==============================================================================
  118. # ■ RPG::Skill
  119. #==============================================================================
  120.  
  121. class RPG::Skill < RPG::UsableItem
  122.   #--------------------------------------------------------------------------
  123.   # ○ パッシブスキルのキャッシュを生成
  124.   #--------------------------------------------------------------------------
  125.   def create_passive_skill_cache
  126.     @__passive = false
  127.     @__passive_params = {}
  128.     @__passive_params_rate = {}
  129.     @__passive_arrays = {}
  130.     @__passive_resistances = {}
  131.     @__passive_effects = { :multi_attack_count => 1 }
  132.  
  133.     passive_flag = false
  134.     self.note.each_line { |line|
  135.       case line
  136.       when KGC::PassiveSkill::Regexp::Skill::BEGIN_PASSIVE
  137.         # パッシブスキル定義開始
  138.         passive_flag = true
  139.         @__passive = true
  140.       when KGC::PassiveSkill::Regexp::Skill::END_PASSIVE
  141.         # パッシブスキル定義終了
  142.         passive_flag = false
  143.       when KGC::PassiveSkill::Regexp::Skill::PASSIVE_PARAMS
  144.         # 能力値修正
  145.         if passive_flag
  146.           apply_passive_params($1, $2.to_i, $3 != nil)
  147.         end
  148.       when KGC::PassiveSkill::Regexp::Skill::PASSIVE_ARRAYS
  149.         # 属性・ステート
  150.         if passive_flag
  151.           apply_passive_arrays($1, $2.scan(/\d+/))
  152.         end
  153.       when KGC::PassiveSkill::Regexp::Skill::PASSIVE_RESISTANCES
  154.         # 耐性
  155.         if passive_flag
  156.           apply_passive_resistances($1, $2.to_i, $3.to_i)
  157.         end
  158.       else
  159.         # 特殊効果
  160.         if passive_flag
  161.           apply_passive_effects(line)
  162.         end
  163.       end
  164.     }
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ○ パッシブスキルの能力値修正を適用
  168.   #     param : 対象パラメータ
  169.   #     value : 修正値
  170.   #     rate  : true なら % 指定
  171.   #--------------------------------------------------------------------------
  172.   def apply_passive_params(param, value, rate)
  173.     KGC::PassiveSkill::PARAMS.each { |k, v|
  174.       if param =~ /(?:#{v})/i
  175.         if rate
  176.           @__passive_params_rate[k] = 0 if @__passive_params_rate[k] == nil
  177.           @__passive_params_rate[k] += value
  178.         else
  179.           @__passive_params[k] = 0 if @__passive_params[k] == nil
  180.           @__passive_params[k] += value
  181.         end
  182.         break
  183.       end
  184.     }
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ○ パッシブスキルの追加属性・ステートを適用
  188.   #     param : 対象パラメータ
  189.   #     list  : 属性・ステート一覧
  190.   #--------------------------------------------------------------------------
  191.   def apply_passive_arrays(param, list)
  192.     KGC::PassiveSkill::ARRAYS.each { |k, v|
  193.       if param =~ /(?:#{v})/i
  194.         values = []
  195.         list.each { |num| values << num.to_i }
  196.         @__passive_arrays[k] = [] if @__passive_arrays[k] == nil
  197.         @__passive_arrays[k] |= values
  198.         break
  199.       end
  200.     }
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ○ パッシブスキルの耐性を適用
  204.   #     param : 対象パラメータ
  205.   #     id    : 属性・ステート ID
  206.   #     rate  : 変動率
  207.   #--------------------------------------------------------------------------
  208.   def apply_passive_resistances(param, id, rate)
  209.     KGC::PassiveSkill::RESISTANCES.each { |k, v|
  210.       if param =~ /(?:#{v})/i
  211.         if @__passive_resistances[k] == nil
  212.           @__passive_resistances[k] = []
  213.         end
  214.         n = @__passive_resistances[k][id]
  215.         n = 100 if n == nil
  216.         @__passive_resistances[k][id] = n + rate - 100
  217.         break
  218.       end
  219.     }
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # ○ パッシブスキルの特殊効果を適用
  223.   #     effect : 対象効果
  224.   #--------------------------------------------------------------------------
  225.   def apply_passive_effects(effect)
  226.     KGC::PassiveSkill::EFFECTS.each { |k, v|
  227.       if effect =~ /^\s*(#{v})/i
  228.         case k
  229.         when :multi_attack_count
  230.           # 攻撃回数
  231.           $1 =~ /#{v}/i
  232.           @__passive_effects[k] = [ $1.to_i, @__passive_effects[k] ].max
  233.         else
  234.           @__passive_effects[k] = true
  235.         end
  236.         break
  237.       end
  238.     }
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ○ パッシブスキルであるか
  242.   #--------------------------------------------------------------------------
  243.   def passive
  244.     create_passive_skill_cache if @__passive == nil
  245.     return @__passive
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # ○ パッシブスキルの能力値修正 (即値)
  249.   #--------------------------------------------------------------------------
  250.   def passive_params
  251.     create_passive_skill_cache if @__passive_params == nil
  252.     return @__passive_params
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ○ パッシブスキルの能力値修正 (割合)
  256.   #--------------------------------------------------------------------------
  257.   def passive_params_rate
  258.     create_passive_skill_cache if @__passive_params_rate == nil
  259.     return @__passive_params_rate
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ○ パッシブスキルの属性・ステートリスト
  263.   #--------------------------------------------------------------------------
  264.   def passive_arrays
  265.     create_passive_skill_cache if @__passive_arrays == nil
  266.     return @__passive_arrays
  267.   end
  268.   #--------------------------------------------------------------------------
  269.   # ○ パッシブスキルの耐性リスト
  270.   #--------------------------------------------------------------------------
  271.   def passive_resistances
  272.     create_passive_skill_cache if @__passive_resistances == nil
  273.     return @__passive_resistances
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ○ パッシブスキルの特殊効果リスト
  277.   #--------------------------------------------------------------------------
  278.   def passive_effects
  279.     create_passive_skill_cache if @__passive_effects == nil
  280.     return @__passive_effects
  281.   end
  282. end
  283.  
  284. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  285.  
  286. #==============================================================================
  287. # ■ Game_Actor
  288. #==============================================================================
  289.  
  290. class Game_Actor < Game_Battler
  291.   #--------------------------------------------------------------------------
  292.   # ○ クラス変数
  293.   #--------------------------------------------------------------------------
  294.   @@passive_equip_test = false  # パッシブスキル用装備テストフラグ
  295.   #--------------------------------------------------------------------------
  296.   # ● セットアップ
  297.   #     actor_id : アクター ID
  298.   #--------------------------------------------------------------------------
  299.   alias setup_KGC_PassiveSkill setup
  300.   def setup(actor_id)
  301.     reset_passive_rev
  302.  
  303.     setup_KGC_PassiveSkill(actor_id)
  304.  
  305.     restore_passive_rev
  306.   end
  307.   #--------------------------------------------------------------------------
  308.   # ○ パッシブスキルの修正値を初期化
  309.   #--------------------------------------------------------------------------
  310.   def reset_passive_rev
  311.     @passive_params = {}
  312.     @passive_params_rate = {}
  313.     @passive_arrays = {}
  314.     @passive_resistances = {}
  315.     @passive_effects = {}
  316.     KGC::PassiveSkill::PARAMS.each_key { |k|
  317.       @passive_params[k] = 0
  318.       @passive_params_rate[k] = 100
  319.     }
  320.     KGC::PassiveSkill::ARRAYS.each_key { |k| @passive_arrays[k] = [] }
  321.     KGC::PassiveSkill::RESISTANCES.each_key { |k| @passive_resistances[k] = [] }
  322.     KGC::PassiveSkill::EFFECTS.each_key { |k| @passive_effects[k] = false }
  323.     @passive_effects[:multi_attack_count] = 1
  324.   end
  325.   #--------------------------------------------------------------------------
  326.   # ○ パッシブスキルの修正値を再設定
  327.   #--------------------------------------------------------------------------
  328.   def restore_passive_rev
  329.     return if @__passive_rev_restoring
  330.  
  331.     # 修正前の値を保持
  332.     last_effects = @passive_effects.clone if @passive_effects != nil
  333.  
  334.     reset_passive_rev
  335.  
  336.     # ≪スキルCP制≫ の併用を考慮し、戦闘中フラグを一時的にオン
  337.     last_in_battle = $game_temp.in_battle
  338.     $game_temp.in_battle = true
  339.     # 修正値を取得
  340.     self.skills.each { |skill|
  341.       next unless skill.passive
  342.  
  343.       skill.passive_params.each { |k, v| @passive_params[k] += v }
  344.       skill.passive_params_rate.each { |k, v| @passive_params_rate[k] += v }
  345.       skill.passive_arrays.each { |k, v| @passive_arrays[k] |= v }
  346.       skill.passive_resistances.each { |k, v|
  347.         v.each_with_index { |n, i|
  348.           next if n == nil
  349.           @passive_resistances[k][i] = 100 if @passive_resistances[k][i] == nil
  350.           @passive_resistances[k][i] += n - 100
  351.         }
  352.       }
  353.       skill.passive_effects.each { |k, v|
  354.         case k
  355.         when :multi_attack_count
  356.           @passive_effects[k] = [ v, @passive_effects[k] ].max
  357.         else
  358.           @passive_effects[k] |= v
  359.         end
  360.       }
  361.     }
  362.     $game_temp.in_battle = last_in_battle
  363.  
  364.     @__passive_rev_restoring = true
  365.     # HP/MP を修正
  366.     self.hp = self.hp
  367.     self.mp = self.mp
  368.  
  369.     # 二刀流違反を修正
  370.     if !two_swords_style_KGC_PassiveSkill &&
  371.         last_effects[:two_swords_style] != nil &&
  372.         last_effects[:two_swords_style] != two_swords_style
  373.       @__one_time_two_swords_style = last_effects[:two_swords_style]
  374.       change_equip(1, nil, @@passive_equip_test)
  375.       @__one_time_two_swords_style = nil
  376.     end
  377.     @__passive_rev_restoring = nil
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ○ パッシブスキルによるパラメータ修正値 (即値)
  381.   #--------------------------------------------------------------------------
  382.   def passive_params
  383.     restore_passive_rev if @passive_params == nil
  384.     return @passive_params
  385.   end
  386.   #--------------------------------------------------------------------------
  387.   # ○ パッシブスキルによるパラメータ修正値 (割合)
  388.   #--------------------------------------------------------------------------
  389.   def passive_params_rate
  390.     restore_passive_rev if @passive_params_rate == nil
  391.     return @passive_params_rate
  392.   end
  393.   #--------------------------------------------------------------------------
  394.   # ○ パッシブスキルによる追加属性・ステート
  395.   #--------------------------------------------------------------------------
  396.   def passive_arrays
  397.     restore_passive_rev if @passive_arrays == nil
  398.     return @passive_arrays
  399.   end
  400.   #--------------------------------------------------------------------------
  401.   # ○ パッシブスキルによる耐性
  402.   #--------------------------------------------------------------------------
  403.   def passive_resistances
  404.     restore_passive_rev if @passive_resistances == nil
  405.     return @passive_resistances
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ○ パッシブスキルによる特殊効果
  409.   #--------------------------------------------------------------------------
  410.   def passive_effects
  411.     restore_passive_rev if @passive_effects == nil
  412.     return @passive_effects
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ● 装備の変更 (オブジェクトで指定)
  416.   #     equip_type : 装備部位 (0..4)
  417.   #     item       : 武器 or 防具 (nil なら装備解除)
  418.   #     test       : テストフラグ (戦闘テスト、または装備画面での一時装備)
  419.   #--------------------------------------------------------------------------
  420.   alias change_equip_KGC_PassiveSkill change_equip
  421.   def change_equip(equip_type, item, test = false)
  422.     @@passive_equip_test = test
  423.  
  424.     change_equip_KGC_PassiveSkill(equip_type, item, test)
  425.  
  426.     restore_passive_rev
  427.     @@passive_equip_test = false
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # ● 装備の破棄
  431.   #     item : 破棄する武器 or 防具
  432.   #    武器/防具の増減で「装備品も含める」のとき使用する。
  433.   #--------------------------------------------------------------------------
  434.   alias discard_equip_KGC_PassiveSkill discard_equip
  435.   def discard_equip(item)
  436.     discard_equip_KGC_PassiveSkill(item)
  437.  
  438.     restore_passive_rev
  439.   end
  440.  
  441.   if $imported["AddEquipmentOptions"]
  442.   #--------------------------------------------------------------------------
  443.   # ○ 属性耐性の取得
  444.   #     element_id : 属性 ID
  445.   #--------------------------------------------------------------------------
  446.   alias element_resistance_KGC_PassiveSkill element_resistance
  447.   def element_resistance(element_id)
  448.     n = element_resistance_KGC_PassiveSkill(element_id)
  449.     rate = passive_resistances[:element][element_id]
  450.     n += (rate == nil ? 100 : rate) - 100
  451.     return n
  452.   end
  453.   #--------------------------------------------------------------------------
  454.   # ○ ステート耐性の取得
  455.   #     state_id : ステート ID
  456.   #--------------------------------------------------------------------------
  457.   alias state_resistance_KGC_PassiveSkill state_resistance
  458.   def state_resistance(state_id)
  459.     n = state_resistance_KGC_PassiveSkill(state_id)
  460.     rate = passive_resistances[:state][state_id]
  461.     n += (rate == nil ? 100 : rate) - 100
  462.     return [n, 0].max
  463.   end
  464.   end  # <-- if $imported["AddEquipmentOptions"]
  465.  
  466.   #--------------------------------------------------------------------------
  467.   # ● ステート無効化判定
  468.   #     state_id : ステート ID
  469.   #--------------------------------------------------------------------------
  470.   alias state_resist_KGC_PassiveSkill? state_resist?
  471.   def state_resist?(state_id)
  472.     return true if passive_arrays[:invalid_state].include?(state_id)
  473.  
  474.     return state_resist_KGC_PassiveSkill?(state_id)
  475.   end
  476.   #--------------------------------------------------------------------------
  477.   # ● 通常攻撃の属性取得
  478.   #--------------------------------------------------------------------------
  479.   alias element_set_KGC_PassiveSkill element_set
  480.   def element_set
  481.     return (element_set_KGC_PassiveSkill | passive_arrays[:attack_element])
  482.   end
  483.   #--------------------------------------------------------------------------
  484.   # ● 通常攻撃の追加効果 (ステート変化) 取得
  485.   #--------------------------------------------------------------------------
  486.   alias plus_state_set_KGC_PassiveSkill plus_state_set
  487.   def plus_state_set
  488.     return (plus_state_set_KGC_PassiveSkill | passive_arrays[:plus_state])
  489.   end
  490.   #--------------------------------------------------------------------------
  491.   # ● 基本 MaxHP の取得
  492.   #--------------------------------------------------------------------------
  493.   alias base_maxhp_KGC_PassiveSkill base_maxhp
  494.   def base_maxhp
  495.     n = base_maxhp_KGC_PassiveSkill + passive_params[:maxhp]
  496.     n = n * passive_params_rate[:maxhp] / 100
  497.     return n
  498.   end
  499.   #--------------------------------------------------------------------------
  500.   # ● 基本 MaxMP の取得
  501.   #--------------------------------------------------------------------------
  502.   alias base_maxmp_KGC_PassiveSkill base_maxmp
  503.   def base_maxmp
  504.     n = base_maxmp_KGC_PassiveSkill + passive_params[:maxmp]
  505.     n = n * passive_params_rate[:maxmp] / 100
  506.     return n
  507.   end
  508.   #--------------------------------------------------------------------------
  509.   # ● 基本攻撃力の取得
  510.   #--------------------------------------------------------------------------
  511.   alias base_atk_KGC_PassiveSkill base_atk
  512.   def base_atk
  513.     n = base_atk_KGC_PassiveSkill + passive_params[:atk]
  514.     n = n * passive_params_rate[:atk] / 100
  515.     return n
  516.   end
  517.   #--------------------------------------------------------------------------
  518.   # ● 基本防御力の取得
  519.   #--------------------------------------------------------------------------
  520.   alias base_def_KGC_PassiveSkill base_def
  521.   def base_def
  522.     n = base_def_KGC_PassiveSkill + passive_params[:def]
  523.     n = n * passive_params_rate[:def] / 100
  524.     return n
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ● 基本精神力の取得
  528.   #--------------------------------------------------------------------------
  529.   alias base_spi_KGC_PassiveSkill base_spi
  530.   def base_spi
  531.     n = base_spi_KGC_PassiveSkill + passive_params[:spi]
  532.     n = n * passive_params_rate[:spi] / 100
  533.     return n
  534.   end
  535.   #--------------------------------------------------------------------------
  536.   # ● 基本敏捷性の取得
  537.   #--------------------------------------------------------------------------
  538.   alias base_agi_KGC_PassiveSkill base_agi
  539.   def base_agi
  540.     n = base_agi_KGC_PassiveSkill + passive_params[:agi]
  541.     n = n * passive_params_rate[:agi] / 100
  542.     return n
  543.   end
  544.   #--------------------------------------------------------------------------
  545.   # ● 命中率の取得
  546.   #--------------------------------------------------------------------------
  547.   alias hit_KGC_PassiveSkill hit
  548.   def hit
  549.     n = hit_KGC_PassiveSkill + passive_params[:hit]
  550.     n = n * passive_params_rate[:hit] / 100
  551.     return n
  552.   end
  553.   #--------------------------------------------------------------------------
  554.   # ● 回避率の取得
  555.   #--------------------------------------------------------------------------
  556.   alias eva_KGC_PassiveSkill eva
  557.   def eva
  558.     n = eva_KGC_PassiveSkill + passive_params[:eva]
  559.     n = n * passive_params_rate[:eva] / 100
  560.     return n
  561.   end
  562.   #--------------------------------------------------------------------------
  563.   # ● クリティカル率の取得
  564.   #--------------------------------------------------------------------------
  565.   alias cri_KGC_PassiveSkill cri
  566.   def cri
  567.     n = cri_KGC_PassiveSkill + passive_params[:cri]
  568.     n = n * passive_params_rate[:cri] / 100
  569.     n += 4 if passive_effects[:critical_bonus]
  570.     return n
  571.   end
  572.   #--------------------------------------------------------------------------
  573.   # ● 狙われやすさの取得
  574.   #--------------------------------------------------------------------------
  575.   alias odds_KGC_PassiveSkill odds
  576.   def odds
  577.     n = odds_KGC_PassiveSkill + passive_params[:odds]
  578.     n = n * passive_params_rate[:odds] / 100
  579.     return n
  580.   end
  581.   #--------------------------------------------------------------------------
  582.   # ● オプション [二刀流] の取得
  583.   #--------------------------------------------------------------------------
  584.   alias two_swords_style_KGC_PassiveSkill two_swords_style
  585.   def two_swords_style
  586.     return @__one_time_two_swords_style if @__one_time_two_swords_style != nil
  587.  
  588.     return (two_swords_style_KGC_PassiveSkill ||
  589.       passive_effects[:two_swords_style])
  590.   end
  591.   #--------------------------------------------------------------------------
  592.   # ● オプション [自動戦闘] の取得
  593.   #--------------------------------------------------------------------------
  594.   alias auto_battle_KGC_PassiveSkill auto_battle
  595.   def auto_battle
  596.     return (auto_battle_KGC_PassiveSkill || passive_effects[:auto_battle])
  597.   end
  598.   #--------------------------------------------------------------------------
  599.   # ● オプション [強力防御] の取得
  600.   #--------------------------------------------------------------------------
  601.   alias super_guard_KGC_PassiveSkill super_guard
  602.   def super_guard
  603.     return (super_guard_KGC_PassiveSkill || passive_effects[:super_guard])
  604.   end
  605.   #--------------------------------------------------------------------------
  606.   # ● オプション [薬の知識] の取得
  607.   #--------------------------------------------------------------------------
  608.   alias pharmacology_KGC_PassiveSkill pharmacology
  609.   def pharmacology
  610.     return (pharmacology_KGC_PassiveSkill || passive_effects[:pharmacology])
  611.   end
  612.   #--------------------------------------------------------------------------
  613.   # ● 武器オプション [ターン内先制] の取得
  614.   #--------------------------------------------------------------------------
  615.   alias fast_attack_KGC_PassiveSkill fast_attack
  616.   def fast_attack
  617.     return (fast_attack_KGC_PassiveSkill || passive_effects[:fast_attack])
  618.   end
  619.   #--------------------------------------------------------------------------
  620.   # ● 武器オプション [連続攻撃] の取得
  621.   #--------------------------------------------------------------------------
  622.   alias dual_attack_KGC_PassiveSkill dual_attack
  623.   def dual_attack
  624.     if $imported["AddEquipmentOptions"]
  625.       # 2回攻撃以上なら無視
  626.       return false if passive_effects[:multi_attack_count] >= 2
  627.     end
  628.  
  629.     return (dual_attack_KGC_PassiveSkill || passive_effects[:dual_attack])
  630.   end
  631.   #--------------------------------------------------------------------------
  632.   # ● 防具オプション [クリティカル防止] の取得
  633.   #--------------------------------------------------------------------------
  634.   alias prevent_critical_KGC_PassiveSkill prevent_critical
  635.   def prevent_critical
  636.     return (prevent_critical_KGC_PassiveSkill ||
  637.       passive_effects[:prevent_critical])
  638.   end
  639.   #--------------------------------------------------------------------------
  640.   # ● 防具オプション [消費 MP 半分] の取得
  641.   #--------------------------------------------------------------------------
  642.   alias half_mp_cost_KGC_KGC_PassiveSkill half_mp_cost
  643.   def half_mp_cost
  644.     return (half_mp_cost_KGC_KGC_PassiveSkill ||
  645.       passive_effects[:half_mp_cost])
  646.   end
  647.   #--------------------------------------------------------------------------
  648.   # ● 防具オプション [取得経験値 2 倍] の取得
  649.   #--------------------------------------------------------------------------
  650.   alias double_exp_gain_KGC_PassiveSkill double_exp_gain
  651.   def double_exp_gain
  652.     return (double_exp_gain_KGC_PassiveSkill ||
  653.       passive_effects[:double_exp_gain])
  654.   end
  655.   #--------------------------------------------------------------------------
  656.   # ● スキルを覚える
  657.   #     skill_id : スキル ID
  658.   #--------------------------------------------------------------------------
  659.   alias learn_skill_KGC_PassiveSkill learn_skill
  660.   def learn_skill(skill_id)
  661.     learn_skill_KGC_PassiveSkill(skill_id)
  662.  
  663.     restore_passive_rev
  664.   end
  665.   #--------------------------------------------------------------------------
  666.   # ● スキルを忘れる
  667.   #     skill_id : スキル ID
  668.   #--------------------------------------------------------------------------
  669.   alias forget_skill_KGC_PassiveSkill forget_skill
  670.   def forget_skill(skill_id)
  671.     forget_skill_KGC_PassiveSkill(skill_id)
  672.  
  673.     restore_passive_rev
  674.   end
  675.  
  676. if $imported["ReproduceFunctions"]
  677.  
  678.   #--------------------------------------------------------------------------
  679.   # ○ オートステートの配列を取得
  680.   #     id_only : ID のみを取得
  681.   #--------------------------------------------------------------------------
  682.   alias auto_states_KGC_PassiveSkill auto_states
  683.   def auto_states(id_only = false)
  684.     result = auto_states_KGC_PassiveSkill(id_only)
  685.  
  686.     passive_arrays[:auto_state].each { |i|
  687.       result << (id_only ? i : $data_states[i])
  688.     }
  689.     result.uniq!
  690.     return result
  691.   end
  692.   #--------------------------------------------------------------------------
  693.   # ○ 装備オプション [全体攻撃] の取得
  694.   #--------------------------------------------------------------------------
  695.   alias whole_attack_KGC_PassiveSkill whole_attack
  696.   def whole_attack
  697.     return (whole_attack_KGC_PassiveSkill || passive_effects[:whole_attack])
  698.   end
  699.   #--------------------------------------------------------------------------
  700.   # ○ 装備オプション [回避無視] の取得
  701.   #--------------------------------------------------------------------------
  702.   alias ignore_eva_KGC_PassiveSkill ignore_eva
  703.   def ignore_eva
  704.     return (ignore_eva_KGC_PassiveSkill || passive_effects[:ignore_eva])
  705.   end
  706.  
  707. end  # <-- if $imported["ReproduceFunctions"]
  708.  
  709. if $imported["AddEquipmentOptions"]
  710.  
  711.   #--------------------------------------------------------------------------
  712.   # ○ 攻撃回数の取得
  713.   #--------------------------------------------------------------------------
  714.   alias multi_attack_count_KGC_PassiveSkill multi_attack_count
  715.   def multi_attack_count
  716.     n = multi_attack_count_KGC_PassiveSkill
  717.     return [ n, passive_effects[:multi_attack_count] ].max
  718.   end
  719.  
  720. end  # <-- if $imported["AddEquipmentOptions"]
  721.  
  722. end  # <-- class
  723.  
  724. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  725.  
  726. #==============================================================================
  727. # ■ Window_EquipItem
  728. #==============================================================================
  729.  
  730. class Window_EquipItem < Window_Item
  731.   #--------------------------------------------------------------------------
  732.   # ● オブジェクト初期化
  733.   #     x          : ウィンドウの X 座標
  734.   #     y          : ウィンドウの Y 座標
  735.   #     width      : ウィンドウの幅
  736.   #     height     : ウィンドウの高さ
  737.   #     actor      : アクター
  738.   #     equip_type : 装備部位 (0~4)
  739.   #--------------------------------------------------------------------------
  740.   alias initialize_KGC_PassiveSkill initialize unless $@
  741.   def initialize(x, y, width, height, actor, equip_type)
  742.     @original_equip_type = equip_type
  743.  
  744.     initialize_KGC_PassiveSkill(x, y, width, height, actor, equip_type)
  745.   end
  746.   #--------------------------------------------------------------------------
  747.   # ● リフレッシュ
  748.   #--------------------------------------------------------------------------
  749.   alias refresh_KGC_PassiveSkill refresh unless $@
  750.   def refresh
  751.     if @original_equip_type == 1
  752.       @equip_type = (@actor.two_swords_style ? 0 : 1)
  753.     end
  754.  
  755.     refresh_KGC_PassiveSkill
  756.   end
  757. end
  758.  
  759. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  760.  
  761. #==============================================================================
  762. # ■ Scene_File
  763. #==============================================================================
  764.  
  765. class Scene_File < Scene_Base
  766.   #--------------------------------------------------------------------------
  767.   # ● セーブデータの読み込み
  768.   #     file : 読み込み用ファイルオブジェクト (オープン済み)
  769.   #--------------------------------------------------------------------------
  770.   alias read_save_data_KGC_PassiveSkill read_save_data
  771.   def read_save_data(file)
  772.     read_save_data_KGC_PassiveSkill(file)
  773.  
  774.     KGC::Commands.restore_passive_rev
  775.     Graphics.frame_reset
  776.   end
  777. end

RUBY 代码复制
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/ ◆ Learn Skill by State - KGC_StateLearnSkill ◆ VX ◆
  3. #_/ ◇  Last Update: 03/21/2009
  4. #_/ ◆ Written by TOMY     
  5. #_/ ◆ Translation by Mr. Anonymous                  
  6. #_/ ◆ KGC Site:                                                   
  7. #_/ ◆  http://ytomy.sakura.ne.jp/                                   
  8. #_/ ◆ Translator's Blog:                                             
  9. #_/ ◆  http://mraprojects.wordpress.com     
  10. #_/----------------------------------------------------------------------------
  11. #_/  This script allows the user to create states which enable skills only when
  12. #_/ a battler has that state applied to it.
  13. #_/============================================================================
  14. #_/                         ◆ Instructions For Usage ◆
  15. #_/  To make use of this function, you must insert the tag into the "Note" box
  16. #_/ located in the states section of the database.
  17. #_/ For example, you want to create a state called "Endow Fire" that enables
  18. #_/ the afflicted battler to use the skill "Fire" while affected by that state.
  19. #_/ You'd then insert <LEARN_SKILL 59> or <learn_skill 59> in that state's note
  20. #_/ box. The number 59, of course, being the number of the default Fire skill.
  21. #_/============================================================================
  22. #_/ Install: Insert below KGC_PassiveSkill, if applicable.
  23. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  24.  
  25. $imported = {} if $imported == nil
  26. $imported["StateLearnSkill"] = true
  27.  
  28. module KGC
  29.   module StateLearnSkill
  30.     # Regular expressions module
  31.     module Regexp
  32.       # State module
  33.       module State
  34.         # State Learn Skill tag string
  35.         LEARN_SKILL = /<(?:LEARN_SKILL|learn_skill)\s*(\d+(?:\s*,\s*\d+)*)>/i
  36.       end
  37.     end
  38.   end
  39. end
  40.  
  41. #--------------------------------------------------------------------------
  42.  
  43. #==============================================================================
  44. # ■ RPG::State
  45. #==============================================================================
  46.  
  47. class RPG::State
  48.   #--------------------------------------------------------------------------
  49.   # ○ Generate State Learn Skill Cache
  50.   #--------------------------------------------------------------------------
  51.   def create_state_learn_skill_cache
  52.     @__learn_skills = []
  53.  
  54.     self.note.each_line { |line|
  55.       case line
  56.       # When tag is located in notes list
  57.       when KGC::StateLearnSkill::Regexp::State::LEARN_SKILL  
  58.         $1.scan(/\d+/).each { |num|
  59.           skill_id = num.to_i
  60.           # Add skills to battler's list if the skill exists
  61.           @__learn_skills << skill_id if $data_skills[skill_id] != nil
  62.         }
  63.       end
  64.     }
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ○ Learn Skills
  68.   #--------------------------------------------------------------------------
  69.   def learn_skills
  70.     create_state_learn_skill_cache if @__learn_skills == nil
  71.     return @__learn_skills
  72.   end
  73. end
  74.  
  75. #--------------------------------------------------------------------------
  76.  
  77. #==============================================================================
  78. # ■ Game_Actor
  79. #==============================================================================
  80.  
  81. class Game_Actor < Game_Battler
  82.   #--------------------------------------------------------------------------
  83.   # ● Create skill object array
  84.   #--------------------------------------------------------------------------
  85.   alias skills_KGC_StateLearnSkill skills
  86.   def skills
  87.     result = skills_KGC_StateLearnSkill
  88.  
  89.     return (result | state_learn_skills).sort_by { |v| v.id }
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ○ Learn additional skills by state
  93.   #--------------------------------------------------------------------------
  94.   def state_learn_skills
  95.     result = []
  96.     self.states.each { |state|
  97.       state.learn_skills.each { |i|
  98.         skill = $data_skills[i]
  99.         result |= [skill] if skill != nil
  100.       }
  101.     }
  102.  
  103.     # If KGC_PassiveSkill exists, return passive skills effect
  104.     if $imported["PassiveSkill"] && @__last_state_learn_skills != result
  105.       @__last_state_learn_skills = result
  106.       restore_passive_rev
  107.     end
  108.  
  109.     return result
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● Determine if skill is usable
  113.   #     skill : Skill
  114.   #--------------------------------------------------------------------------
  115.   def skill_can_use?(skill)
  116.     return super
  117.   end
  118. end

作者: srwjrevenger    时间: 2024-7-31 12:04
本帖最后由 srwjrevenger 于 2024-8-2 11:02 编辑
  1. class Game_Battler
  2. alias sjr_add_state add_state
  3. def add_state(state_id)
  4. sjr_add_state(state_id)
  5. skills if self.is_a?(Game_Actor)
  6. end
  7. #
  8. alias sjr_remove_state remove_state
  9. def remove_state(state_id)
  10. sjr_remove_state(state_id)   
  11. skills if self.is_a?(Game_Actor)
  12. end
  13. end #
复制代码



作者: linyifei    时间: 2024-8-1 12:15
srwjrevenger 发表于 2024-7-31 12:04

谢谢,好像是成功了,原理是刷新了技能吗?
作者: srwjrevenger    时间: 2024-8-2 11:00
本帖最后由 srwjrevenger 于 2024-8-2 11:01 编辑
linyifei 发表于 2024-8-1 12:15
谢谢,好像是成功了,原理是刷新了技能吗?

这个脚本能力的附加一般是在 开始游戏 装备变更 技能习得遗忘 读档 调用skills 时才重新计算的
所以战斗中要看一下技能后刷新数据,
而且部分场景的画面刷新是不及时的,
不建议在非战斗时 使用状态习得被动能力的技能 ,各种问题... ...

对了,那句 restore_passive_rev 是多余的,可以去掉







欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1