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

Project1

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

[已经过期] 一个日站脚本(怒气系统)的使用方法

[复制链接]

Lv2.观梦者

梦石
0
星屑
719
在线时间
684 小时
注册时间
2009-5-29
帖子
461
跳转到指定楼层
1
发表于 2010-10-1 15:37:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
看了一个日站脚本,但是不太看得懂,也摸索了好几天,还是发现几个问题不明白:
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ オーバードライブ - KGC_OverDrive ◆ VX ◆
  3. #_/    ◇ Last update : 2009/11/01 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  専用のゲージを消費して使用するスキルを作成します。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. #==============================================================================
  8. # ★ カスタマイズ項目 - Customize BEGIN ★
  9. #==============================================================================

  10. module KGC
  11. module OverDrive
  12.   # ◆ ドライブゲージ最大値
  13.   #  普通はこのままでOK。微調整したい場合に変更。
  14.   GAUGE_MAX = 1000
  15.   # ◆ ドライブゲージ増加量
  16.   #  高いほどゲージが溜まりやすい。
  17.   #  マイナス値を指定すると減少。
  18.   #  「被ダメージ」は、受けたダメージの最大 HP に対する割合で増加量を算出。
  19.   #  (500 だと、最大 HP 相当のダメージで 500 溜まる)
  20.   GAIN_RATE = [
  21.      80,  # 攻撃
  22.     500,  # 被ダメージ
  23.     200,  # 勝利
  24.     100,  # 逃走
  25.     160,  # 孤独
  26.      40,  # 行動
  27.     160,  # 瀕死
  28.      50,  # 防御
  29.   ]  # ← この ] は消さないこと!

  30.   # ◆ ゲージの初期本数
  31.   DEFAULT_GAUGE_NUMBER = 1

  32.   # ◆ デフォルトドライブタイプ
  33.   #   0..攻撃  1..被ダメージ  2..勝利  3..逃走  4..孤独  5..行動
  34.   #   6..瀕死  7..防御
  35.   DEFAULT_ACTOR_DRIVE_TYPE = [0, 1, 6]        # アクター
  36.   DEFAULT_ENEMY_DRIVE_TYPE = [0, 1, 4, 5, 6]  # 敵

  37.   # ◆ ドライブゲージの色
  38.   #  数値  : \C[n] と同じ色。
  39.   #  Color : 指定した色。 ( Color.new(255, 128, 128) など )
  40.   GAUGE_NORMAL_START_COLOR = 14  # 通常時開始色
  41.   GAUGE_NORMAL_END_COLOR   =  6  # 通常時終了色
  42.   GAUGE_MAX_START_COLOR    = 10  # 最大時開始色
  43.   GAUGE_MAX_END_COLOR      =  2  # 最大時終了色

  44.   # ◆ ドライブゲージに汎用ゲージを使用する
  45.   #  ≪汎用ゲージ描画≫ 導入時のみ有効。
  46.   ENABLE_GENERIC_GAUGE = true
  47.   # ◆ ドライブゲージ設定
  48.   #  画像は "Graphics/System" から読み込む。
  49.   GAUGE_IMAGE     = "GaugeOD"     # 通常時画像
  50.   GAUGE_MAX_IMAGE = "GaugeODMax"  # 最大時画像
  51.   GAUGE_OFFSET    = [-23, -2]     # 位置補正 [x, y]
  52.   GAUGE_LENGTH    = -4            # 長さ補正
  53.   GAUGE_SLOPE     = 30            # 傾き (-89 ~ 89)

  54.   # ◆ ドライブゲージの Y 座標補正値
  55.   #  汎用ゲージ未使用の場合に使用。
  56.   #  -8 にすると、HP/MP ゲージと同じ位置になります。
  57.   GAUGE_OFFSET_Y = -8
  58.   # ◆ ゲージ蓄積量の数値表記
  59.   #   0 .. なし  ※ゲージが 2 本以上の場合は非推奨
  60.   #   1 .. 即値 (蓄積量そのまま)
  61.   #   2 .. 割合 --> x%
  62.   #   3 .. 割合 (詳細1) --> x.x%
  63.   #   4 .. 割合 (詳細2) --> x.xx%
  64.   #   5 .. 蓄積済み本数
  65.   GAUGE_VALUE_STYLE = 2
  66.   # ◆ ゲージ蓄積量のフォントサイズ
  67.   #  大きくしすぎると名前に被ります。
  68.   GAUGE_VALUE_FONT_SIZE = 14

  69.   # ◆ 死亡(HP 0)時にドライブゲージを 0 にする
  70.   EMPTY_ON_DEAD = true

  71.   # ◆ ドライブゲージを表示しないアクター
  72.   #  ゲージを隠すアクターのIDを配列に格納。
  73.   HIDE_GAUGE_ACTOR = []
  74.   # ◆ 非戦闘時はドライブゲージを隠す
  75.   HIDE_GAUGE_NOT_IN_BATTLE = false
  76.   # ◆ オーバードライブスキル未修得ならゲージを隠す
  77.   HIDE_GAUGE_NO_OD_SKILLS  = true
  78.   # ◆ ゲージを隠している場合はゲージを増加させない
  79.   NOT_GAIN_GAUGE_HIDING    = true

  80.   # ◆ ゲージ不足のときはオーバードライブスキルを隠す
  81.   HIDE_SKILL_LACK_OF_GAUGE = false

  82.   # ◆ ドライブゲージ名
  83.   GAUGE_NAME = "ドライブゲージ"
  84.   # ◆ ドライブゲージ変動アイテム使用時のメッセージ
  85.   OD_GAIN_MESSAGE = {
  86.     :drain_a   => "%sは%sを奪われた!",  # 吸収: アクター
  87.     :drain_e   => "%sの%sを奪った!",    # 吸収: 敵
  88.     :loss_a    => "%sの%sが減った!",    # 減少: アクター
  89.     :loss_e    => "%sの%sが減った!",    # 減少: 敵
  90.     :recover_a => "%sの%sが増えた!",    # 増加: アクター
  91.     :recover_e => "%sの%sが増えた!",    # 増加: 敵
  92.   }
  93. end
  94. end

  95. #==============================================================================
  96. # ☆ カスタマイズ項目終了 - Customize END ☆
  97. #==============================================================================

  98. $imported = {} if $imported == nil
  99. $imported["OverDrive"] = true

  100. module KGC::OverDrive
  101.   # ドライブタイプ
  102.   module Type
  103.     ATTACK  = 0  # 攻撃
  104.     DAMAGE  = 1  # 被ダメージ
  105.     VICTORY = 2  # 勝利
  106.     ESCAPE  = 3  # 逃走
  107.     ALONE   = 4  # 孤独
  108.     ACTION  = 5  # 行動
  109.     FATAL   = 6  # 瀕死
  110.     GUARD   = 7  # 防御
  111.   end

  112.   # 蓄積量表記
  113.   module ValueStyle
  114.     NONE         = 0  # なし
  115.     IMMEDIATE    = 1  # 即値
  116.     RATE         = 2  # 割合
  117.     RATE_DETAIL1 = 3  # 割合 (詳細1)
  118.     RATE_DETAIL2 = 4  # 割合 (詳細2)
  119.     NUMBER       = 5  # 蓄積済み本数
  120.   end

  121.   module Regexp
  122.     module UsableItem
  123.       # ドライブゲージ増加
  124.       OD_GAIN = /<(?:OD_GAIN|(?:OD|ドライブ)ゲージ増加)\s*([\+\-]?\d+)>/i
  125.     end

  126.     module Skill
  127.       # オーバードライブ
  128.       OVER_DRIVE = /<(?:OVER_DRIVE|オーバードライブ)\s*(\d+)?(\+)?>/i
  129.       # ゲージ増加率
  130.       OD_GAIN_RATE =
  131.         /<(?:OD_GAIN_RATE|(?:OD|ドライブ)ゲージ増加率)\s*(\d+)[%%]?>/i
  132.     end
  133.   end
  134. end

  135. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  136. #==============================================================================
  137. # □ KGC::Commands
  138. #==============================================================================

  139. module KGC
  140. module Commands
  141.   module_function
  142.   #--------------------------------------------------------------------------
  143.   # ○ アクターのドライブゲージの増減
  144.   #     actor_id : アクター ID (-1 : パーティ全体)
  145.   #     value    : 増加量 (マイナスも可)
  146.   #--------------------------------------------------------------------------
  147.   def gain_actor_od_gauge(actor_id, value)
  148.     if actor_id == -1
  149.       # 生存メンバー全員のゲージを操作
  150.       $game_party.existing_members.each { |actor|
  151.         next unless actor.can_gain_overdrive?
  152.         actor.overdrive += value
  153.       }
  154.     else
  155.       actor = $game_actors[actor_id]
  156.       actor.overdrive += value if actor != nil && actor.exist?
  157.     end
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ○ エネミーのドライブゲージの増減
  161.   #     enemy_index : エネミー index (-1 : 全体)
  162.   #     value       : 増加量 (マイナスも可)
  163.   #--------------------------------------------------------------------------
  164.   def gain_enemy_od_gauge(enemy_index, value)
  165.     if enemy_index == -1
  166.       # 生存エネミー全員のゲージを操作
  167.       $game_troop.existing_members.each { |enemy|
  168.         enemy.overdrive += value
  169.       }
  170.     else
  171.       enemy = $game_troop.members[enemy_index]
  172.       enemy.overdrive += value if enemy != nil && enemy.exist?
  173.     end
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ○ アクターのドライブゲージの取得
  177.   #     actor_id    : アクター ID
  178.   #     variable_id : 戻り値を格納する変数 ID
  179.   #--------------------------------------------------------------------------
  180.   def get_actor_od_gauge(actor_id, variable_id = 0)
  181.     actor = $game_actors[actor_id]
  182.     n = (actor != nil ? actor.overdrive : 0)
  183.     if variable_id > 0
  184.       $game_variables[variable_id] = n
  185.     end
  186.     return n
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ○ エネミーのドライブゲージの取得
  190.   #     enemy_index : エネミー index
  191.   #     variable_id : 戻り値を格納する変数 ID
  192.   #--------------------------------------------------------------------------
  193.   def get_enemy_od_gauge(enemy_index, variable_id = 0)
  194.     enemy = $game_troop.members[enemy_index]
  195.     n = (enemy != nil ? enemy.overdrive : 0)
  196.     if variable_id > 0
  197.       $game_variables[variable_id] = n
  198.     end
  199.     return n
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ○ アクターのドライブゲージの本数を設定
  203.   #     actor_id : アクター ID (-1 : パーティ全体)
  204.   #     number   : ゲージ本数
  205.   #--------------------------------------------------------------------------
  206.   def set_actor_od_gauge_number(actor_id, number)
  207.     if actor_id == -1
  208.       # メンバー全員の本数を設定
  209.       $game_party.members.each { |actor|
  210.         actor.drive_gauge_number = number
  211.       }
  212.     else
  213.       actor = $game_actors[actor_id]
  214.       actor.drive_gauge_number = number if actor != nil
  215.     end
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ○ エネミーのドライブゲージの本数を設定
  219.   #     enemy_index : エネミー index (-1 : 全体)
  220.   #     number   : ゲージ本数
  221.   #--------------------------------------------------------------------------
  222.   def set_enemy_od_gauge_number(enemy_index, number)
  223.     if enemy_index == -1
  224.       # 生存エネミー全員の本数を設定
  225.       $game_troop.members.each { |enemy|
  226.         enemy.drive_gauge_number = number
  227.       }
  228.     else
  229.       enemy = $game_troop.members[enemy_index]
  230.       enemy.drive_gauge_number = number if enemy != nil
  231.     end
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ○ アクターのドライブゲージが最大か判定
  235.   #     actor_id : アクター ID
  236.   #--------------------------------------------------------------------------
  237.   def actor_od_gauge_max?(actor_id)
  238.     actor = $game_actors[actor_id]
  239.     return false if actor == nil
  240.     return actor.overdrive == actor.max_overdrive
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ○ エネミーのドライブゲージが最大か判定
  244.   #     enemy_index : エネミー index
  245.   #--------------------------------------------------------------------------
  246.   def enemy_od_gauge_max?(enemy_index)
  247.     enemy = $game_troop.members[enemy_index]
  248.     return false if enemy == nil
  249.     return enemy.overdrive == enemy.max_overdrive
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ○ アクターのドライブタイプの変更
  253.   #     actor_id : アクター ID (-1 : パーティ全体)
  254.   #     types    : ドライブタイプの配列 (省略時 : 初期化)
  255.   #--------------------------------------------------------------------------
  256.   def set_actor_drive_type(actor_id, types = nil)
  257.     if actor_id == -1
  258.       # メンバー全員のドライブタイプを変更
  259.       $game_party.members.each { |actor|
  260.         actor.drive_type = types
  261.       }
  262.     else
  263.       actor = $game_actors[actor_id]
  264.       actor.drive_type = types if actor != nil
  265.     end
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ○ エネミーのドライブタイプの変更
  269.   #     enemy_index : エネミー index (-1 : 全体)
  270.   #     types       : ドライブタイプの配列 (省略時 : 初期化)
  271.   #--------------------------------------------------------------------------
  272.   def set_enemy_drive_type(enemy_index, types = nil)
  273.     if enemy_index == -1
  274.       # エネミー全員のドライブタイプを変更
  275.       $game_troop.members.each { |enemy|
  276.         enemy.drive_type = types
  277.       }
  278.     else
  279.       enemy = $game_troop.members[enemy_index]
  280.       enemy.drive_type = types if enemy != nil
  281.     end
  282.   end
  283. end
  284. end

  285. class Game_Interpreter
  286.   include KGC::Commands
  287. end

  288. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  289. #==============================================================================
  290. # ■ RPG::UsableItem
  291. #==============================================================================

  292. class RPG::UsableItem < RPG::BaseItem
  293.   #--------------------------------------------------------------------------
  294.   # ○ オーバードライブのキャッシュ生成
  295.   #--------------------------------------------------------------------------
  296.   def create_overdrive_cache
  297.     @__od_gain = 0

  298.     self.note.each_line { |line|
  299.       case line
  300.       when KGC::OverDrive::Regexp::UsableItem::OD_GAIN
  301.         # ドライブゲージ増加
  302.         @__od_gain = $1.to_i
  303.       end
  304.     }
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ○ ドライブゲージ増加量
  308.   #--------------------------------------------------------------------------
  309.   def od_gain
  310.     create_overdrive_cache if @__od_gain == nil
  311.     return @__od_gain
  312.   end
  313.   #--------------------------------------------------------------------------
  314.   # ○ ドライブスキルであるか
  315.   #--------------------------------------------------------------------------
  316.   def overdrive
  317.     return false
  318.   end
  319.   alias overdrive? overdrive
  320. end

  321. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  322. #==============================================================================
  323. # ■ RPG::Skill
  324. #==============================================================================

  325. class RPG::Skill < RPG::UsableItem
  326.   #--------------------------------------------------------------------------
  327.   # ○ オーバードライブのキャッシュ生成
  328.   #--------------------------------------------------------------------------
  329.   def create_overdrive_cache
  330.     super

  331.     @__is_overdrive   = false
  332.     @__od_cost        = KGC::OverDrive::GAUGE_MAX
  333.     @__od_consume_all = false
  334.     @__od_gain_rate   = 100

  335.     self.note.each_line { |line|
  336.       case line
  337.       when KGC::OverDrive::Regexp::Skill::OVER_DRIVE
  338.         # オーバードライブ
  339.         @__is_overdrive   = true
  340.         @__od_cost        = $1.to_i if $1 != nil
  341.         @__od_consume_all = ($2 != nil)
  342.       when KGC::OverDrive::Regexp::Skill::OD_GAIN_RATE
  343.         # ゲージ増加率
  344.         @__od_gain_rate = $1.to_i
  345.       end
  346.     }

  347.     # ドライブスキルでなければ、ゲージ消費量 0
  348.     unless @__is_overdrive
  349.       @__od_cost = 0
  350.     end
  351.   end
  352.   #--------------------------------------------------------------------------
  353.   # ○ ドライブスキルであるか
  354.   #--------------------------------------------------------------------------
  355.   def overdrive
  356.     create_overdrive_cache if @__is_overdrive == nil
  357.     return @__is_overdrive
  358.   end
  359.   alias overdrive? overdrive
  360.   #--------------------------------------------------------------------------
  361.   # ○ ドライブゲージ消費量
  362.   #--------------------------------------------------------------------------
  363.   def od_cost
  364.     create_overdrive_cache if @__od_cost == nil
  365.     return @__od_cost
  366.   end
  367.   #--------------------------------------------------------------------------
  368.   # ○ ドライブゲージ全消費か
  369.   #--------------------------------------------------------------------------
  370.   def od_consume_all
  371.     create_overdrive_cache if @__od_consume_all == nil
  372.     return @__od_consume_all
  373.   end
  374.   alias od_consume_all? od_consume_all
  375.   #--------------------------------------------------------------------------
  376.   # ○ ドライブゲージ増加率
  377.   #--------------------------------------------------------------------------
  378.   def od_gain_rate
  379.     create_overdrive_cache if @__od_gain_rate == nil
  380.     return @__od_gain_rate
  381.   end
  382. end

  383. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  384. #==============================================================================
  385. # ■ Vocab
  386. #==============================================================================

  387. module Vocab
  388.   # ドライブゲージ名
  389.   def self.overdrive
  390.     return KGC::OverDrive::GAUGE_NAME
  391.   end

  392.   # アクター側メッセージ
  393.   ActorODDrain    = KGC::OverDrive::OD_GAIN_MESSAGE[:drain_a]
  394.   ActorODLoss     = KGC::OverDrive::OD_GAIN_MESSAGE[:loss_a]
  395.   ActorODRecovery = KGC::OverDrive::OD_GAIN_MESSAGE[:recover_a]

  396.   # 敵側メッセージ
  397.   EnemyODDrain    = KGC::OverDrive::OD_GAIN_MESSAGE[:drain_e]
  398.   EnemyODLoss     = KGC::OverDrive::OD_GAIN_MESSAGE[:loss_e]
  399.   EnemyODRecovery = KGC::OverDrive::OD_GAIN_MESSAGE[:recover_e]
  400. end

  401. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  402. #==============================================================================
  403. # ■ Game_Battler
  404. #==============================================================================

  405. class Game_Battler
  406.   #--------------------------------------------------------------------------
  407.   # ● 公開インスタンス変数
  408.   #--------------------------------------------------------------------------
  409.   attr_writer   :drive_type               # ドライブタイプ
  410.   attr_reader   :od_damage                # 行動結果: ドライブダメージ
  411.   #--------------------------------------------------------------------------
  412.   # ● 行動効果の保持用変数をクリア
  413.   #--------------------------------------------------------------------------
  414.   alias clear_action_results_KGC_OverDrive clear_action_results
  415.   def clear_action_results
  416.     clear_action_results_KGC_OverDrive

  417.     @od_damage = 0
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ○ ドライブゲージ量取得
  421.   #--------------------------------------------------------------------------
  422.   def overdrive
  423.     @overdrive = 0 if @overdrive == nil
  424.     return @overdrive
  425.   end
  426.   #--------------------------------------------------------------------------
  427.   # ○ ドライブゲージの操作
  428.   #--------------------------------------------------------------------------
  429.   def overdrive=(value)
  430.     @overdrive = [[value, max_overdrive].min, 0].max
  431.   end
  432.   #--------------------------------------------------------------------------
  433.   # ○ ドライブゲージ最大量取得
  434.   #--------------------------------------------------------------------------
  435.   def max_overdrive
  436.     return KGC::OverDrive::GAUGE_MAX * drive_gauge_number
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # ○ ゲージ Max 判定
  440.   #--------------------------------------------------------------------------
  441.   def overdrive_max?
  442.     return (overdrive == max_overdrive)
  443.   end
  444.   #--------------------------------------------------------------------------
  445.   # ○ ドライブゲージ本数取得
  446.   #--------------------------------------------------------------------------
  447.   def drive_gauge_number
  448.     if @drive_gauge_number == nil
  449.       @drive_gauge_number = KGC::OverDrive::DEFAULT_GAUGE_NUMBER
  450.     end
  451.     return @drive_gauge_number
  452.   end
  453.   #--------------------------------------------------------------------------
  454.   # ○ ドライブゲージ本数の操作
  455.   #--------------------------------------------------------------------------
  456.   def drive_gauge_number=(value)
  457.     @drive_gauge_number = [value, 1].max
  458.   end
  459.   #--------------------------------------------------------------------------
  460.   # ○ ドライブタイプの取得
  461.   #--------------------------------------------------------------------------
  462.   def drive_type
  463.     return []
  464.   end
  465.   #--------------------------------------------------------------------------
  466.   # ○ ドライブスキル習得済み判定
  467.   #--------------------------------------------------------------------------
  468.   def overdrive_skill_learned?
  469.     return true
  470.   end
  471.   #--------------------------------------------------------------------------
  472.   # ○ ゲージ表示判定
  473.   #--------------------------------------------------------------------------
  474.   def od_gauge_visible?
  475.     return false
  476.   end
  477.   #--------------------------------------------------------------------------
  478.   # ○ ゲージ増加可否判定
  479.   #--------------------------------------------------------------------------
  480.   def can_gain_overdrive?
  481.     return true
  482.   end
  483.   #--------------------------------------------------------------------------
  484.   # ○ 攻撃時増加判定
  485.   #--------------------------------------------------------------------------
  486.   def drive_attack?
  487.     return drive_type.include?(KGC::OverDrive::Type::ATTACK)
  488.   end
  489.   #--------------------------------------------------------------------------
  490.   # ○ 被ダメージ時増加判定
  491.   #--------------------------------------------------------------------------
  492.   def drive_damage?
  493.     return drive_type.include?(KGC::OverDrive::Type::DAMAGE)
  494.   end
  495.   #--------------------------------------------------------------------------
  496.   # ○ 勝利時増加判定
  497.   #--------------------------------------------------------------------------
  498.   def drive_victory?
  499.     return drive_type.include?(KGC::OverDrive::Type::VICTORY)
  500.   end
  501.   #--------------------------------------------------------------------------
  502.   # ○ 逃走時増加判定
  503.   #--------------------------------------------------------------------------
  504.   def drive_escape?
  505.     return drive_type.include?(KGC::OverDrive::Type::ESCAPE)
  506.   end
  507.   #--------------------------------------------------------------------------
  508.   # ○ 孤独時増加判定
  509.   #--------------------------------------------------------------------------
  510.   def drive_alone?
  511.     return drive_type.include?(KGC::OverDrive::Type::ALONE)
  512.   end
  513.   #--------------------------------------------------------------------------
  514.   # ○ 行動時増加判定
  515.   #--------------------------------------------------------------------------
  516.   def drive_action?
  517.     return drive_type.include?(KGC::OverDrive::Type::ACTION)
  518.   end
  519.   #--------------------------------------------------------------------------
  520.   # ○ 瀕死時増加判定
  521.   #--------------------------------------------------------------------------
  522.   def drive_fatal?
  523.     return drive_type.include?(KGC::OverDrive::Type::FATAL)
  524.   end
  525.   #--------------------------------------------------------------------------
  526.   # ○ 防御時増加判定
  527.   #--------------------------------------------------------------------------
  528.   def drive_guard?
  529.     return drive_type.include?(KGC::OverDrive::Type::GUARD)
  530.   end
  531.   #--------------------------------------------------------------------------
  532.   # ● ステートの付加
  533.   #     state_id : ステート ID
  534.   #--------------------------------------------------------------------------
  535.   alias add_state_KGC_OverDrive add_state
  536.   def add_state(state_id)
  537.     add_state_KGC_OverDrive(state_id)

  538.     reset_overdrive_on_dead if dead?
  539.   end
  540.   #--------------------------------------------------------------------------
  541.   # ○ スキルの消費ドライブゲージ計算
  542.   #     skill : スキル
  543.   #--------------------------------------------------------------------------
  544.   def calc_od_cost(skill)
  545.     return 0 unless skill.is_a?(RPG::Skill)

  546.     return skill.od_cost
  547.   end
  548.   #--------------------------------------------------------------------------
  549.   # ● スキルの使用可能判定
  550.   #     skill : スキル
  551.   #--------------------------------------------------------------------------
  552.   alias skill_can_use_KGC_OverDrive? skill_can_use?
  553.   def skill_can_use?(skill)
  554.     return false unless skill_can_use_KGC_OverDrive?(skill)

  555.     return false if calc_od_cost(skill) > overdrive
  556.     return true
  557.   end
  558.   #--------------------------------------------------------------------------
  559.   # ● スキルまたはアイテムによるダメージ計算
  560.   #     user : スキルまたはアイテムの使用者
  561.   #     obj  : スキルまたはアイテム
  562.   #    結果は @hp_damage または @mp_damage に代入する。
  563.   #--------------------------------------------------------------------------
  564.   alias make_obj_damage_value_KGC_OverDrive make_obj_damage_value
  565.   def make_obj_damage_value(user, obj)
  566.     make_obj_damage_value_KGC_OverDrive(user, obj)

  567.     apply_od_consume_all_for_damage(user, obj)
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ○ ゲージ全消費時の効果の適用
  571.   #     user : スキルまたはアイテムの使用者
  572.   #     obj  : スキルまたはアイテム
  573.   #    結果は @hp_damage または @mp_damage に代入する。
  574.   #--------------------------------------------------------------------------
  575.   def apply_od_consume_all_for_damage(user, obj)
  576.     return unless obj.is_a?(RPG::Skill)
  577.     return unless obj.overdrive? && obj.od_consume_all?

  578.     # 余剰消費量に応じて強化 (例: 最低消費量 1000 でゲージが 1200 なら 1.2 倍)
  579.     rate = [user.overdrive * 1000 / obj.od_cost, 1000].max
  580.     @hp_damage = @hp_damage * rate / 1000
  581.     @mp_damage = @mp_damage * rate / 1000
  582.   end
  583.   #--------------------------------------------------------------------------
  584.   # ● ダメージの反映
  585.   #     user : スキルかアイテムの使用者
  586.   #    呼び出し前に @hp_damage、@mp_damage、@absorbed が設定されていること。
  587.   #--------------------------------------------------------------------------
  588.   alias execute_damage_KGC_OverDrive execute_damage
  589.   def execute_damage(user)
  590.     execute_damage_KGC_OverDrive(user)

  591.     increase_overdrive(user)
  592.     increase_overdrive_by_item(user)
  593.   end
  594.   #--------------------------------------------------------------------------
  595.   # ○ 死亡時ドライブゲージ初期化処理
  596.   #--------------------------------------------------------------------------
  597.   def reset_overdrive_on_dead
  598.     return unless KGC::OverDrive::EMPTY_ON_DEAD

  599.     self.overdrive = 0
  600.   end
  601.   #--------------------------------------------------------------------------
  602.   # ○ ドライブゲージ増加処理
  603.   #     attacker : 攻撃者
  604.   #--------------------------------------------------------------------------
  605.   def increase_overdrive(attacker = nil)
  606.     return unless attacker.is_a?(Game_Battler)  # 攻撃者がバトラーでない
  607.     return unless actor? ^ attacker.actor?      # 攻撃側と防御側が同じ
  608.     return if hp_damage == 0 && mp_damage == 0  # ダメージなし

  609.     increase_attacker_overdrive(attacker)
  610.     increase_defender_overdrive(attacker)
  611.     reset_overdrive_on_dead if dead?
  612.   end
  613.   #--------------------------------------------------------------------------
  614.   # ○ 攻撃側のドライブゲージ増加処理
  615.   #     attacker : 攻撃者
  616.   #--------------------------------------------------------------------------
  617.   def increase_attacker_overdrive(attacker)
  618.     return unless can_gain_overdrive?
  619.     return unless attacker.drive_attack?  # ドライブタイプ「攻撃」なし

  620.     od_gain = KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::ATTACK]
  621.     if attacker.action.kind == 1
  622.       rate = attacker.action.skill.od_gain_rate  # スキルの倍率を適用
  623.       od_gain = od_gain * rate / 100
  624.       if rate > 0
  625.         od_gain = [od_gain, 1].max
  626.       elsif rate < 0
  627.         od_gain = [od_gain, -1].min
  628.       end
  629.     end
  630.     attacker.overdrive += od_gain
  631.   end
  632.   #--------------------------------------------------------------------------
  633.   # ○ 防御側のドライブゲージ増加処理
  634.   #     attacker : 攻撃者
  635.   #--------------------------------------------------------------------------
  636.   def increase_defender_overdrive(attacker)
  637.     return unless can_gain_overdrive?
  638.     return unless self.drive_damage?  # ドライブタイプ「ダメージ」なし

  639.     rate = KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::DAMAGE]
  640.     od_gain = 0
  641.     od_gain += hp_damage * rate / maxhp if hp_damage > 0
  642.     od_gain += mp_damage * rate / maxmp if mp_damage > 0 && maxmp > 0
  643.     if rate > 0
  644.       od_gain = [od_gain, 1].max
  645.     elsif rate < 0
  646.       od_gain = [od_gain, -1].min
  647.     end
  648.     self.overdrive += od_gain
  649.   end
  650.   #--------------------------------------------------------------------------
  651.   # ○ アイテムによるドライブゲージ増加処理
  652.   #     user : 使用者
  653.   #--------------------------------------------------------------------------
  654.   def increase_overdrive_by_item(user = nil)
  655.     return unless user.is_a?(Game_Battler)
  656.     return unless can_gain_overdrive?

  657.     if user.action.skill?
  658.       obj = user.action.skill
  659.     elsif user.action.item?
  660.       obj = user.action.item
  661.     else
  662.       return
  663.     end
  664.     @od_damage = -obj.od_gain
  665.     self.overdrive -= @od_damage
  666.   end
  667.   #--------------------------------------------------------------------------
  668.   # ● スキルの効果適用
  669.   #     user  : スキルの使用者
  670.   #     skill : スキル
  671.   #--------------------------------------------------------------------------
  672.   alias skill_effect_KGC_OverDrive skill_effect
  673.   def skill_effect(user, skill)
  674.     skill_effect_KGC_OverDrive(user, skill)

  675.     # アイテムでスキルを発動した場合はゲージ消費判定を無視
  676.     if $imported["ReproduceFunctions"] && $game_temp.exec_skill_on_item
  677.       return
  678.     end
  679.   end
  680. end

  681. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  682. #==============================================================================
  683. # ■ Game_Actor
  684. #==============================================================================

  685. class Game_Actor < Game_Battler
  686.   #--------------------------------------------------------------------------
  687.   # ● セットアップ
  688.   #     actor_id : アクター ID
  689.   #--------------------------------------------------------------------------
  690.   alias setup_KGC_OverDrive setup
  691.   def setup(actor_id)
  692.     setup_KGC_OverDrive(actor_id)

  693.     @overdrive  = 0
  694.     @drive_type = nil
  695.   end
  696.   #--------------------------------------------------------------------------
  697.   # ○ ドライブタイプの取得
  698.   #--------------------------------------------------------------------------
  699.   def drive_type
  700.     unless @drive_type.is_a?(Array)
  701.       return KGC::OverDrive::DEFAULT_ACTOR_DRIVE_TYPE
  702.     end
  703.     return @drive_type
  704.   end
  705.   #--------------------------------------------------------------------------
  706.   # ○ ドライブスキル習得済み判定
  707.   #--------------------------------------------------------------------------
  708.   def overdrive_skill_learned?
  709.     result = false
  710.     # 一時的に戦闘中フラグを解除
  711.     last_in_battle = $game_temp.in_battle
  712.     $game_temp.in_battle = false

  713.     self.skills.each { |skill|
  714.       if skill.overdrive?
  715.         result = true
  716.         break
  717.       end
  718.     }
  719.     $game_temp.in_battle = last_in_battle
  720.     return result
  721.   end
  722.   #--------------------------------------------------------------------------
  723.   # ○ ゲージ増加可否判定
  724.   #--------------------------------------------------------------------------
  725.   def can_gain_overdrive?
  726.     if KGC::OverDrive::NOT_GAIN_GAUGE_HIDING
  727.       # 非表示
  728.       return false unless od_gauge_visible_l?
  729.     end
  730.     if KGC::OverDrive::HIDE_GAUGE_NO_OD_SKILLS
  731.       # 未修得
  732.       return false unless overdrive_skill_learned?
  733.     end

  734.     return true
  735.   end
  736.   #--------------------------------------------------------------------------
  737.   # ○ ゲージ表示判定
  738.   #--------------------------------------------------------------------------
  739.   def od_gauge_visible?
  740.     return false unless od_gauge_visible_l?
  741.     return false unless can_gain_overdrive?

  742.     return true
  743.   end
  744.   #--------------------------------------------------------------------------
  745.   # ○ ゲージ表示判定 (簡易版)
  746.   #--------------------------------------------------------------------------
  747.   def od_gauge_visible_l?
  748.     # 戦闘中非表示
  749.     if KGC::OverDrive::HIDE_GAUGE_NOT_IN_BATTLE && !$game_temp.in_battle
  750.       return false
  751.     end
  752.     # 非表示
  753.     return false if KGC::OverDrive::HIDE_GAUGE_ACTOR.include?(self.id)

  754.     return true
  755.   end
  756. end

  757. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  758. #==============================================================================
  759. # ■ Game_Enemy
  760. #==============================================================================

  761. class Game_Enemy < Game_Battler
  762.   #--------------------------------------------------------------------------
  763.   # ● オブジェクト初期化
  764.   #     index    : 敵グループ内インデックス
  765.   #     enemy_id : 敵キャラ ID
  766.   #--------------------------------------------------------------------------
  767.   alias initialize_KGC_OverDrive initialize
  768.   def initialize(index, enemy_id)
  769.     initialize_KGC_OverDrive(index, enemy_id)

  770.     @overdrive  = 0
  771.     @drive_type = nil
  772.   end
  773.   #--------------------------------------------------------------------------
  774.   # ○ ドライブタイプの取得
  775.   #--------------------------------------------------------------------------
  776.   def drive_type
  777.     unless @drive_type.is_a?(Array)
  778.       return KGC::OverDrive::DEFAULT_ENEMY_DRIVE_TYPE
  779.     end
  780.     return @drive_type
  781.   end
  782. end

  783. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  784. #==============================================================================
  785. # ■ Window_Base
  786. #==============================================================================

  787. class Window_Base < Window
  788.   #--------------------------------------------------------------------------
  789.   # ○ ドライブゲージの通常時の色 1 の取得
  790.   #--------------------------------------------------------------------------
  791.   def od_gauge_normal_color1
  792.     color = KGC::OverDrive::GAUGE_NORMAL_START_COLOR
  793.     return (color.is_a?(Integer) ? text_color(color) : color)
  794.   end
  795.   #--------------------------------------------------------------------------
  796.   # ○ ドライブゲージの通常時の色 2 の取得
  797.   #--------------------------------------------------------------------------
  798.   def od_gauge_normal_color2
  799.     color = KGC::OverDrive::GAUGE_NORMAL_END_COLOR
  800.     return (color.is_a?(Integer) ? text_color(color) : color)
  801.   end
  802.   #--------------------------------------------------------------------------
  803.   # ○ ドライブゲージの最大時の色 1 の取得
  804.   #--------------------------------------------------------------------------
  805.   def od_gauge_max_color1
  806.     color = KGC::OverDrive::GAUGE_MAX_START_COLOR
  807.     return (color.is_a?(Integer) ? text_color(color) : color)
  808.   end
  809.   #--------------------------------------------------------------------------
  810.   # ○ ドライブゲージの最大時の色 2 の取得
  811.   #--------------------------------------------------------------------------
  812.   def od_gauge_max_color2
  813.     color = KGC::OverDrive::GAUGE_MAX_END_COLOR
  814.     return (color.is_a?(Integer) ? text_color(color) : color)
  815.   end
  816.   #--------------------------------------------------------------------------
  817.   # ● 名前の描画
  818.   #     actor : アクター
  819.   #     x     : 描画先 X 座標
  820.   #     y     : 描画先 Y 座標
  821.   #--------------------------------------------------------------------------
  822.   alias draw_actor_name_KGC_OverDrive draw_actor_name
  823.   def draw_actor_name(actor, x, y)
  824.     draw_actor_od_gauge(actor, x, y, 108)

  825.     draw_actor_name_KGC_OverDrive(actor, x, y)
  826.   end
  827.   #--------------------------------------------------------------------------
  828.   # ○ ドライブゲージの描画
  829.   #     actor : アクター
  830.   #     x     : 描画先 X 座標
  831.   #     y     : 描画先 Y 座標
  832.   #     width : 幅
  833.   #--------------------------------------------------------------------------
  834.   def draw_actor_od_gauge(actor, x, y, width = 120)
  835.     return unless actor.od_gauge_visible?

  836.     n = actor.overdrive % KGC::OverDrive::GAUGE_MAX
  837.     n = KGC::OverDrive::GAUGE_MAX if actor.overdrive_max?

  838.     if KGC::OverDrive::ENABLE_GENERIC_GAUGE && $imported["GenericGauge"]
  839.       # 汎用ゲージ
  840.       file = (actor.overdrive_max? ?
  841.         KGC::OverDrive::GAUGE_MAX_IMAGE : KGC::OverDrive::GAUGE_IMAGE)
  842.       draw_gauge(file,
  843.         x, y, width, n, KGC::OverDrive::GAUGE_MAX,
  844.         KGC::OverDrive::GAUGE_OFFSET,
  845.         KGC::OverDrive::GAUGE_LENGTH,
  846.         KGC::OverDrive::GAUGE_SLOPE)
  847.     else
  848.       # デフォルトゲージ
  849.       gw = width * n / KGC::OverDrive::GAUGE_MAX
  850.       gc1 = (gw == width ? od_gauge_max_color1 : od_gauge_normal_color1)
  851.       gc2 = (gw == width ? od_gauge_max_color2 : od_gauge_normal_color2)
  852.       self.contents.fill_rect(x, y + WLH + KGC::OverDrive::GAUGE_OFFSET_Y,
  853.         width, 6, gauge_back_color)
  854.       self.contents.gradient_fill_rect(
  855.         x, y + WLH + KGC::OverDrive::GAUGE_OFFSET_Y, gw, 6, gc1, gc2)
  856.     end

  857.     draw_actor_od_gauge_value(actor, x, y, width)
  858.   end
  859.   #--------------------------------------------------------------------------
  860.   # ○ ドライブゲージ蓄積量の描画
  861.   #     actor : アクター
  862.   #     x     : 描画先 X 座標
  863.   #     y     : 描画先 Y 座標
  864.   #     width : 幅
  865.   #--------------------------------------------------------------------------
  866.   def draw_actor_od_gauge_value(actor, x, y, width = 120)
  867.     text = ""
  868.     value = actor.overdrive * 100.0 / KGC::OverDrive::GAUGE_MAX
  869.     case KGC::OverDrive::GAUGE_VALUE_STYLE
  870.     when KGC::OverDrive::ValueStyle::IMMEDIATE
  871.       text = actor.overdrive.to_s
  872.     when KGC::OverDrive::ValueStyle::RATE
  873.       text = sprintf("%d%%", actor.overdrive * 100 / KGC::OverDrive::GAUGE_MAX)
  874.     when KGC::OverDrive::ValueStyle::RATE_DETAIL1
  875.       text = sprintf("%0.1f%%", value)
  876.     when KGC::OverDrive::ValueStyle::RATE_DETAIL2
  877.       text = sprintf("%0.2f%%", value)
  878.     when KGC::OverDrive::ValueStyle::NUMBER
  879.       text = "#{actor.overdrive / KGC::OverDrive::GAUGE_MAX}"
  880.     else
  881.       return
  882.     end

  883.     last_font_size = self.contents.font.size
  884.     new_font_size  = KGC::OverDrive::GAUGE_VALUE_FONT_SIZE
  885.     self.contents.font.size = new_font_size
  886.     self.contents.draw_text(
  887.       x, y + WLH + KGC::OverDrive::GAUGE_OFFSET_Y - new_font_size / 2,
  888.       width, new_font_size, text, 2)
  889.     self.contents.font.size = last_font_size
  890.   end
  891. end

  892. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  893. #==============================================================================
  894. # ■ Window_Skill
  895. #==============================================================================

  896. if KGC::OverDrive::HIDE_SKILL_LACK_OF_GAUGE

  897. class Window_Skill < Window_Selectable
  898.   #--------------------------------------------------------------------------
  899.   # ○ スキルをリストに含めるかどうか
  900.   #     skill : スキル
  901.   #--------------------------------------------------------------------------
  902.   unless $@
  903.     alias include_KGC_OverDrive? include? if method_defined?(:include?)
  904.   end
  905.   def include?(skill)
  906.     return false if skill == nil

  907.     if defined?(include_KGC_OverDrive?)
  908.       return false unless include_KGC_OverDrive?(skill)
  909.     end

  910.     if skill.overdrive?
  911.       return (@actor.calc_od_cost(skill) <= @actor.overdrive)
  912.     else
  913.       return true
  914.     end
  915.   end

  916. if method_defined?(:include_KGC_OverDrive?)
  917.   #--------------------------------------------------------------------------
  918.   # ● リフレッシュ
  919.   #--------------------------------------------------------------------------
  920.   def refresh
  921.     @data = []
  922.     for skill in @actor.skills
  923.       next unless include?(skill)
  924.       @data.push(skill)
  925.       if skill.id == @actor.last_skill_id
  926.         self.index = @data.size - 1
  927.       end
  928.     end
  929.     @item_max = @data.size
  930.     create_contents
  931.     for i in 0...@item_max
  932.       draw_item(i)
  933.     end
  934.   end
  935. end

  936. end  # <-- class
  937. end  # <-- if KGC::OverDrive::HIDE_SKILL_LACK_OF_GAUGE

  938. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  939. #==============================================================================
  940. # ■ Scene_Skill
  941. #==============================================================================

  942. class Scene_Skill < Scene_Base
  943.   #--------------------------------------------------------------------------
  944.   # ● スキルの使用 (味方対象以外の使用効果を適用)
  945.   #--------------------------------------------------------------------------
  946.   alias use_skill_nontarget_KGC_OverDrive use_skill_nontarget
  947.   def use_skill_nontarget
  948.     consume_od_gauge

  949.     use_skill_nontarget_KGC_OverDrive
  950.   end
  951.   #--------------------------------------------------------------------------
  952.   # ○ スキル使用時のドライブゲージ消費
  953.   #--------------------------------------------------------------------------
  954.   def consume_od_gauge
  955.     if @skill.od_consume_all?
  956.       @actor.overdrive = 0
  957.     else
  958.       @actor.overdrive -= @actor.calc_od_cost(@skill)
  959.     end
  960.   end
  961. end

  962. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  963. #==============================================================================
  964. # ■ Scene_Battle
  965. #==============================================================================

  966. class Scene_Battle < Scene_Base
  967.   #--------------------------------------------------------------------------
  968.   # ● 戦闘終了
  969.   #     result : 結果 (0:勝利 1:逃走 2:敗北)
  970.   #--------------------------------------------------------------------------
  971.   alias battle_end_KGC_OverDrive battle_end
  972.   def battle_end(result)
  973.     increase_overdrive_on_battle_end(result)

  974.     battle_end_KGC_OverDrive(result)
  975.   end
  976.   #--------------------------------------------------------------------------
  977.   # ○ 戦闘終了時のドライブゲージ増加処理
  978.   #     result : 結果 (0:勝利 1:逃走 2:敗北)
  979.   #--------------------------------------------------------------------------
  980.   def increase_overdrive_on_battle_end(result)
  981.     case result
  982.     when 0  # 勝利
  983.       od_gain = KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::VICTORY]
  984.       $game_party.existing_members.each { |actor|
  985.         actor.overdrive += od_gain if actor.drive_victory?
  986.       }
  987.     when 1  # 逃走
  988.       od_gain = KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::ESCAPE]
  989.       $game_party.existing_members.each { |actor|
  990.         actor.overdrive += od_gain if actor.drive_escape?
  991.       }
  992.     end
  993.   end
  994.   #--------------------------------------------------------------------------
  995.   # ● 戦闘行動の実行
  996.   #--------------------------------------------------------------------------
  997.   alias execute_action_KGC_OverDrive execute_action
  998.   def execute_action
  999.     increase_overdrive_on_action

  1000.     execute_action_KGC_OverDrive
  1001.   end
  1002.   #--------------------------------------------------------------------------
  1003.   # ○ 行動時のドライブゲージ増加処理
  1004.   #--------------------------------------------------------------------------
  1005.   def increase_overdrive_on_action
  1006.     battler = @active_battler
  1007.     od_gain = 0
  1008.     unit = (battler.actor? ? $game_party : $game_troop)

  1009.     # 孤独戦闘
  1010.     if battler.drive_alone? && unit.existing_members.size == 1
  1011.       od_gain += KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::ALONE]
  1012.     end
  1013.     # 行動
  1014.     if battler.drive_action?
  1015.       od_gain += KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::ACTION]
  1016.     end
  1017.     # 瀕死
  1018.     if battler.drive_fatal? && battler.hp < battler.maxhp / 4
  1019.       od_gain += KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::FATAL]
  1020.     end
  1021.     # 防御
  1022.     if battler.drive_guard? && battler.action.kind == 0 &&
  1023.         battler.action.basic == 1
  1024.       od_gain += KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::GUARD]
  1025.     end
  1026.     battler.overdrive += od_gain
  1027.   end
  1028.   #--------------------------------------------------------------------------
  1029.   # ● 戦闘行動の実行 : スキル
  1030.   #--------------------------------------------------------------------------
  1031.   alias execute_action_skill_KGC_OverDrive execute_action_skill
  1032.   def execute_action_skill
  1033.     execute_action_skill_KGC_OverDrive

  1034.     consume_od_gauge
  1035.   end
  1036.   #--------------------------------------------------------------------------
  1037.   # ○ スキル使用時のドライブゲージ消費
  1038.   #--------------------------------------------------------------------------
  1039.   def consume_od_gauge
  1040.     return unless @active_battler.action.skill?

  1041.     skill = @active_battler.action.skill
  1042.     if skill.od_consume_all?
  1043.       @active_battler.overdrive = 0
  1044.     else
  1045.       @active_battler.overdrive -= @active_battler.calc_od_cost(skill)
  1046.     end
  1047.   end
  1048.   #--------------------------------------------------------------------------
  1049.   # ● ダメージの表示
  1050.   #     target : 対象者
  1051.   #     obj    : スキルまたはアイテム
  1052.   #--------------------------------------------------------------------------
  1053.   alias display_damage_KGC_OverDrive display_damage
  1054.   def display_damage(target, obj = nil)
  1055.     display_damage_KGC_OverDrive(target, obj)

  1056.     return if target.missed || target.evaded
  1057.     display_od_damage(target, obj)
  1058.   end
  1059.   #--------------------------------------------------------------------------
  1060.   # ○ ドライブダメージ表示
  1061.   #     target : 対象者
  1062.   #     obj    : スキルまたはアイテム
  1063.   #--------------------------------------------------------------------------
  1064.   def display_od_damage(target, obj = nil)
  1065.     return if target.dead?
  1066.     return if target.od_damage == 0
  1067.     if target.absorbed                      # 吸収
  1068.       fmt = target.actor? ? Vocab::ActorODDrain : Vocab::EnemyODDrain
  1069.       text = sprintf(fmt, target.name, Vocab::overdrive)
  1070.     elsif target.od_damage > 0              # ダメージ
  1071.       fmt = target.actor? ? Vocab::ActorODLoss : Vocab::EnemyODLoss
  1072.       text = sprintf(fmt, target.name, Vocab::overdrive)
  1073.     else                                    # 回復
  1074.       fmt = target.actor? ? Vocab::ActorODRecovery : Vocab::EnemyODRecovery
  1075.       text = sprintf(fmt, target.name, Vocab::overdrive)
  1076.       Sound.play_recovery
  1077.     end
  1078.     @message_window.add_instant_text(text)
  1079.     wait(30)
  1080.   end
  1081. end
复制代码
问题如下:
1.能不能设置敌方不使用这个系统?
2.需要设置这么一个伤害技能(假定攻击获得的怒气是10),消耗X点MP产生20点怒气,应该怎么设置,使得使用这个技能之后获得的怒气是20而不是30?
3.需要设置这么一个伤害技能(假定攻击获得的怒气是10),消耗20点怒气,应该怎么设置,使得使用这个技能之后怒气消耗是20而不是10?
请各位赐教~

点评

给了你一个汉化版的,这次应该看得懂了吧  发表于 2010-10-21 10:01

Lv1.梦旅人

梦石
0
星屑
50
在线时间
115 小时
注册时间
2010-5-3
帖子
346
2
发表于 2010-10-21 10:00:42 | 只看该作者
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ オーバードライブ - KGC_OverDrive ◆ VX ◆
  3. #_/    ◇ Last update : 2009/11/01 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  作成使用特殊气槽的技能(超必杀)
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. #==============================================================================
  8. # ★  Customize项目 - Customize BEGIN ★
  9. #==============================================================================
  10. =begin
  11. 特技的「备注 」栏加入 <オーバードライブ n> 。
  12. n是特殊气槽的消费量。(请输入半角文字)
  13. 写上了省略消费量的 <オーバードライブ>的话、消费1整格  (1000)。

  14. 一个技能不能使用气槽的1整格 (1000) 以上。
  15. (<オーバードライブ n> 的话、气槽在n以上的话可以)
  16. <オーバードライブ n>可以使用 <over_drive n> 代替使用。
  17. 数值之后加上 + 的话、会消费掉所有的气槽。
  18. (如果消费量没满就不能用)
  19. 这时,气槽量越多威力就越大
  20. =end
  21. module KGC
  22. module OverDrive
  23.   # ◆ 特殊气槽的最大值
  24.   #  一般1000便可以了,可以自己微调。
  25.   GAUGE_MAX = 1000
  26.   # ◆ 特殊气槽的增加量
  27.   #  若增加量高,则容易储满。
  28.   #  如果指定负数,则代表特殊气槽减少
  29.   #  「受到伤害」是、减少的HP乘上一定比例计算出来的增加量
  30.   #  (500的话、等于HP减少了500,气槽增加值也为500)
  31. #修改------------------------------------------------
  32. GAIN_RATE = [
  33.      10,  # 攻击
  34.     150,  # 受到伤害
  35.      20,  # 胜利
  36.      10,  # 逃走
  37.     100,  # 单独战斗
  38.      10,  # 行动
  39.     120,  # 濒死
  40.      15,  # 防御
  41.   ]  # ← 这个 ] 不可以删掉!
  42. =begin
  43.     GAIN_RATE = [
  44.      80,  # 攻击
  45.     500,  # 受到伤害
  46.     200,  # 胜利
  47.     100,  # 逃走
  48.     160,  # 单独战斗
  49.      40,  # 行动
  50.     160,  # 濒死
  51.      50,  # 防御
  52.   ]  # ← 这个 ] 不可以删掉!
  53. =end
  54. #修改------------------------------------------------
  55.   # ◆ 气槽的初始量
  56.   DEFAULT_GAUGE_NUMBER = 1

  57.   # ◆ 默认会增加气槽的类型
  58.   #   0..攻击  1..受到伤害  2..胜利  3..逃走  4..单独战斗  5..行动
  59.   #   6..濒死  7..防御
  60. #修改------------------------------------------------
  61.   DEFAULT_ACTOR_DRIVE_TYPE = [0, 1, 6]        # 角色DEFAULT_ACTOR_DRIVE_TYPE = [0, 1, 6]        # 角色
  62.   DEFAULT_ENEMY_DRIVE_TYPE = [0, 1, 4, 5, 6]  # 敌人DEFAULT_ENEMY_DRIVE_TYPE = [0, 1, 4, 5, 6]  # 敌人
  63. #修改------------------------------------------------
  64.   # ◆ 气槽中的能量颜色
  65.   #  数值  : 和 \C[n] 颜色一样。
  66.   #  Color : 指定颜色。 ( Color.new(255, 128, 128) 等 )
  67.   GAUGE_NORMAL_START_COLOR = 14  # 一般开始时的颜色
  68.   GAUGE_NORMAL_END_COLOR   =  6  # 一般结束时的颜色
  69.   GAUGE_MAX_START_COLOR    = 10  # 最大时的颜色
  70.   GAUGE_MAX_END_COLOR      =  2  # 最大结束时的颜色

  71.   # ◆ 特殊气槽设计为和一般气槽相同
  72.   #  只在导入≪一般气槽能量表现≫时有效
  73.   ENABLE_GENERIC_GAUGE = true
  74.   # ◆ 气槽中的能量设定
  75.   #  图片从 "Graphics/System" 中读取
  76.   GAUGE_IMAGE     = "GaugeOD"     # 一般时的图片
  77.   GAUGE_MAX_IMAGE = "GaugeODMax"  # 最大时的图片
  78.   GAUGE_OFFSET    = [-23, -2]     # 位置修正 [x, y]
  79.   GAUGE_LENGTH    = -4            # 长度修正
  80.   GAUGE_SLOPE     = 30            # 倾斜度 (-89 ~ 89)

  81.   # ◆ 气槽能量的Y坐标修正值
  82.   #  未使用一般气槽时,才有效
  83.   #  如果是 -8、HP/MP 和气槽在同一位置。
  84.   GAUGE_OFFSET_Y = -8
  85.   # ◆ 能量的数值表示
  86.   #   0 .. 不表示  ※如果有两个能量珠以上时,不推荐这种
  87.   #   1 .. 直接表示 (储存多少直接数字表示)
  88.   #   2 .. 百分比 --> x%
  89.   #   3 .. 百分比 (小数点后一位) --> x.x%
  90.   #   4 .. 百分比 (小数点后两位) --> x.xx%
  91.   #   5 .. 按能量珠表示
  92.   GAUGE_VALUE_STYLE = 2
  93.   # ◆ 能量储存值的表示文字的字体大小
  94.   #  太大的话字体会模糊
  95.   GAUGE_VALUE_FONT_SIZE = 14

  96.   # ◆ 死亡(HP 0)时气槽能量归0
  97.   EMPTY_ON_DEAD = true

  98.   # ◆ 不显示气槽的角色
  99.   # 通过输入角色ID归类为不显示气槽
  100.   HIDE_GAUGE_ACTOR = []
  101.   # ◆ 非战斗时不显示气槽
  102.   HIDE_GAUGE_NOT_IN_BATTLE = false
  103.   # ◆ 没有学习到超必杀技能时,不显示气槽
  104.   HIDE_GAUGE_NO_OD_SKILLS  = true
  105.   # ◆ 不显示气槽的场合,不能增加能量
  106.   NOT_GAIN_GAUGE_HIDING    = true

  107.   # ◆ 能量不足时不显示超必杀技能
  108.   HIDE_SKILL_LACK_OF_GAUGE = false

  109.   # ◆ 气槽能量的名字
  110.   GAUGE_NAME = "气槽能量"
  111.   # ◆ 使用影响气槽能量的道具时,显示的信息
  112.   OD_GAIN_MESSAGE = {
  113.     :drain_a   => "%s夺取了%s的能量!",  # 吸收: 角色
  114.     :drain_e   => "%s的%s能量被夺取了!",    # 吸收: 敌人
  115.     :loss_a    => "%s减少了%s的能量!",    # 减少: 角色
  116.     :loss_e    => "%s减少了%s的能量!",    # 减少: 敌人
  117.     :recover_a => "%s增加了%s的能量!",    # 增加: 角色
  118.     :recover_e => "%s增加了%s的能量!",    # 增加: 敌人
  119.   }
  120. end
  121. end

  122. #==============================================================================
  123. # ☆  Customize项目结束 - Customize END ☆
  124. #==============================================================================

  125. $imported = {} if $imported == nil
  126. $imported["OverDrive"] = true

  127. module KGC::OverDrive
  128.   # ドライブタイプ
  129.   module Type
  130.     ATTACK  = 0  # 攻击
  131.     DAMAGE  = 1  # 受到伤害
  132.     VICTORY = 2  # 胜利
  133.     ESCAPE  = 3  # 逃走
  134.     ALONE   = 4  # 单独战斗
  135.     ACTION  = 5  # 行动
  136.     FATAL   = 6  # 濒死
  137.     GUARD   = 7  # 防御
  138.   end

  139.   # 储存量表示
  140.   module ValueStyle
  141.     NONE         = 0  # 不显示
  142.     IMMEDIATE    = 1  # 直接表示
  143.     RATE         = 2  # 百分比
  144.     RATE_DETAIL1 = 3  # 百分比 (小数点后一位)
  145.     RATE_DETAIL2 = 4  # 百分比 (小数点后两位)
  146.     NUMBER       = 5  # 按能量珠表示
  147.   end

  148.   module Regexp
  149.     module UsableItem
  150.       # 气槽能量增加
  151.       OD_GAIN = /<(?:OD_GAIN|(?:OD|ドライブ)ゲージ増加)\s*([\+\-]?\d+)>/i
  152.     end

  153.     module Skill
  154.       # 超必杀技能
  155.       OVER_DRIVE = /<(?:OVER_DRIVE|オーバードライブ)\s*(\d+)?(\+)?>/i
  156.       # 能量的增加量
  157.       OD_GAIN_RATE =
  158.         /<(?:OD_GAIN_RATE|(?:OD|ドライブ)ゲージ増加率)\s*(\d+)[%%]?>/i
  159.     end
  160.   end
  161. end

  162. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  163. #==============================================================================
  164. # □ KGC::Commands
  165. #==============================================================================

  166. module KGC
  167. module Commands
  168.   module_function
  169.   #--------------------------------------------------------------------------
  170.   # ○ 角色的气槽能量的增减
  171.   #     actor_id : 角色 ID (-1 : 表示全体)
  172.   #     value    : 增加量 (可以是负数)
  173.   #--------------------------------------------------------------------------
  174.   def gain_actor_od_gauge(actor_id, value)
  175.     if actor_id == -1
  176.       # 操作生存中的我方角色全员的气槽能量
  177.       $game_party.existing_members.each { |actor|
  178.         next unless actor.can_gain_overdrive?
  179.         actor.overdrive += value
  180.       }
  181.     else
  182.       actor = $game_actors[actor_id]
  183.       actor.overdrive += value if actor != nil && actor.exist?
  184.     end
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ○ 敌人的气槽能量的增减
  188.   #     enemy_index : 敌人 index (-1 : 表示全体)
  189.   #     value       : 增加量 (可以是负数)
  190.   #--------------------------------------------------------------------------
  191.   def gain_enemy_od_gauge(enemy_index, value)
  192.     if enemy_index == -1
  193.       # 操作生存中的敌方角色全员的气槽能量
  194.       $game_troop.existing_members.each { |enemy|
  195.         enemy.overdrive += value
  196.       }
  197.     else
  198.       enemy = $game_troop.members[enemy_index]
  199.       enemy.overdrive += value if enemy != nil && enemy.exist?
  200.     end
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ○ 角色的气槽能量的获得
  204.   #     actor_id    : 角色 ID
  205.   #     variable_id : 可以容纳的返回值的变量数 ID
  206.   #--------------------------------------------------------------------------
  207.   def get_actor_od_gauge(actor_id, variable_id = 0)
  208.     actor = $game_actors[actor_id]
  209.     n = (actor != nil ? actor.overdrive : 0)
  210.     if variable_id > 0
  211.       $game_variables[variable_id] = n
  212.     end
  213.     return n
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ○ 敌方的气槽能量的获得
  217.   #     enemy_index : 敌人 index
  218.   #     variable_id : 可以容纳的返回值的变量数 ID
  219.   #--------------------------------------------------------------------------
  220.   def get_enemy_od_gauge(enemy_index, variable_id = 0)
  221.     enemy = $game_troop.members[enemy_index]
  222.     n = (enemy != nil ? enemy.overdrive : 0)
  223.     if variable_id > 0
  224.       $game_variables[variable_id] = n
  225.     end
  226.     return n
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # ○ 角色的气槽能量的能量珠数
  230.   #     actor_id : 角色 ID (-1 : 表示全体)
  231.   #     number   : 能量珠数
  232.   #--------------------------------------------------------------------------
  233.   def set_actor_od_gauge_number(actor_id, number)
  234.     if actor_id == -1
  235.       # 设定我方角色全体的能量珠数
  236.       $game_party.members.each { |actor|
  237.         actor.drive_gauge_number = number
  238.       }
  239.     else
  240.       actor = $game_actors[actor_id]
  241.       actor.drive_gauge_number = number if actor != nil
  242.     end
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ○ 敌方的气槽能量的能量珠数
  246.   #     enemy_index : 敌方 index (-1 : 表示全体)
  247.   #     number   : 能量猪数
  248.   #--------------------------------------------------------------------------
  249.   def set_enemy_od_gauge_number(enemy_index, number)
  250.     if enemy_index == -1
  251.       # 设定生存中的敌方全体的能量珠数
  252.       $game_troop.members.each { |enemy|
  253.         enemy.drive_gauge_number = number
  254.       }
  255.     else
  256.       enemy = $game_troop.members[enemy_index]
  257.       enemy.drive_gauge_number = number if enemy != nil
  258.     end
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ○ 角色的气槽能量变为最大时的设置
  262.   #     actor_id : 角色 ID
  263.   #--------------------------------------------------------------------------
  264.   def actor_od_gauge_max?(actor_id)
  265.     actor = $game_actors[actor_id]
  266.     return false if actor == nil
  267.     return actor.overdrive == actor.max_overdrive
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ○ 敌方的气槽能量变为最大时的设置
  271.   #     enemy_index : 敌方 index
  272.   #--------------------------------------------------------------------------
  273.   def enemy_od_gauge_max?(enemy_index)
  274.     enemy = $game_troop.members[enemy_index]
  275.     return false if enemy == nil
  276.     return enemy.overdrive == enemy.max_overdrive
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ○ 改变角色的能量槽类型
  280.   #     actor_id : 角色 ID (-1 : 表示全体)
  281.   #     types    : 能量槽的类型列表 (省略时 : 初始化)
  282.   #--------------------------------------------------------------------------
  283.   def set_actor_drive_type(actor_id, types = nil)
  284.     if actor_id == -1
  285.       # 改变角色全体的能量槽类型
  286.       $game_party.members.each { |actor|
  287.         actor.drive_type = types
  288.       }
  289.     else
  290.       actor = $game_actors[actor_id]
  291.       actor.drive_type = types if actor != nil
  292.     end
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ○ 改变敌方的能量槽类型
  296.   #     enemy_index : 敌方 index (-1 : 表示全体)
  297.   #     types       : 能量槽的类型列表 (省略时 : 初始化)
  298.   #--------------------------------------------------------------------------
  299.   def set_enemy_drive_type(enemy_index, types = nil)
  300.     if enemy_index == -1
  301.       # 改变敌方全体的能量槽类型
  302.       $game_troop.members.each { |enemy|
  303.         enemy.drive_type = types
  304.       }
  305.     else
  306.       enemy = $game_troop.members[enemy_index]
  307.       enemy.drive_type = types if enemy != nil
  308.     end
  309.   end
  310. end
  311. end

  312. class Game_Interpreter
  313.   include KGC::Commands
  314. end

  315. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  316. #==============================================================================
  317. # ■ RPG::UsableItem
  318. #==============================================================================

  319. class RPG::UsableItem < RPG::BaseItem
  320.   #--------------------------------------------------------------------------
  321.   # ○ 超必杀技能的生成
  322.   #--------------------------------------------------------------------------
  323.   def create_overdrive_cache
  324.     @__od_gain = 0

  325.     self.note.each_line { |line|
  326.       case line
  327.       when KGC::OverDrive::Regexp::UsableItem::OD_GAIN
  328.         # 增加气槽能量
  329.         @__od_gain = $1.to_i
  330.       end
  331.     }
  332.   end
  333.   #--------------------------------------------------------------------------
  334.   # ○ 气槽能量的增加量
  335.   #--------------------------------------------------------------------------
  336.   def od_gain
  337.     create_overdrive_cache if @__od_gain == nil
  338.     return @__od_gain
  339.   end
  340.   #--------------------------------------------------------------------------
  341.   # ○ 如果有超必杀技能的话
  342.   #--------------------------------------------------------------------------
  343.   def overdrive
  344.     return false
  345.   end
  346.   alias overdrive? overdrive
  347. end

  348. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  349. #==============================================================================
  350. # ■ RPG::Skill
  351. #==============================================================================

  352. class RPG::Skill < RPG::UsableItem
  353.   #--------------------------------------------------------------------------
  354.   # ○ 生成超必杀技能的内存
  355.   #--------------------------------------------------------------------------
  356.   def create_overdrive_cache
  357.     super

  358.     @__is_overdrive   = false
  359.     @__od_cost        = KGC::OverDrive::GAUGE_MAX
  360.     @__od_consume_all = false
  361.     @__od_gain_rate   = 100

  362.     self.note.each_line { |line|
  363.       case line
  364.       when KGC::OverDrive::Regexp::Skill::OVER_DRIVE
  365.         # オーバードライブ
  366.         @__is_overdrive   = true
  367.         @__od_cost        = $1.to_i if $1 != nil
  368.         @__od_consume_all = ($2 != nil)
  369.       when KGC::OverDrive::Regexp::Skill::OD_GAIN_RATE
  370.         # 能量增加率
  371.         @__od_gain_rate = $1.to_i
  372.       end
  373.     }

  374.     # 如果没有超必杀技能,则能量槽能量为0
  375.     unless @__is_overdrive
  376.       @__od_cost = 0
  377.     end
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ○ 如果有超必杀技能
  381.   #--------------------------------------------------------------------------
  382.   def overdrive
  383.     create_overdrive_cache if @__is_overdrive == nil
  384.     return @__is_overdrive
  385.   end
  386.   alias overdrive? overdrive
  387.   #--------------------------------------------------------------------------
  388.   # ○ 气槽能量的消耗值
  389.   #--------------------------------------------------------------------------
  390.   def od_cost
  391.     create_overdrive_cache if @__od_cost == nil
  392.     return @__od_cost
  393.   end
  394.   #--------------------------------------------------------------------------
  395.   # ○ 气槽能量全部消耗掉
  396.   #--------------------------------------------------------------------------
  397.   def od_consume_all
  398.     create_overdrive_cache if @__od_consume_all == nil
  399.     return @__od_consume_all
  400.   end
  401.   alias od_consume_all? od_consume_all
  402.   #--------------------------------------------------------------------------
  403.   # ○ 气槽能量的增加率
  404.   #--------------------------------------------------------------------------
  405.   def od_gain_rate
  406.     create_overdrive_cache if @__od_gain_rate == nil
  407.     return @__od_gain_rate
  408.   end
  409. end

  410. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  411. #==============================================================================
  412. # ■ Vocab
  413. #==============================================================================

  414. module Vocab
  415.   # 气槽能量名
  416.   def self.overdrive
  417.     return KGC::OverDrive::GAUGE_NAME
  418.   end

  419.   # 角色这边的显示信息
  420.   ActorODDrain    = KGC::OverDrive::OD_GAIN_MESSAGE[:drain_a]
  421.   ActorODLoss     = KGC::OverDrive::OD_GAIN_MESSAGE[:loss_a]
  422.   ActorODRecovery = KGC::OverDrive::OD_GAIN_MESSAGE[:recover_a]

  423.   # 敌人那边的显示信息
  424.   EnemyODDrain    = KGC::OverDrive::OD_GAIN_MESSAGE[:drain_e]
  425.   EnemyODLoss     = KGC::OverDrive::OD_GAIN_MESSAGE[:loss_e]
  426.   EnemyODRecovery = KGC::OverDrive::OD_GAIN_MESSAGE[:recover_e]
  427. end

  428. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  429. #==============================================================================
  430. # ■ Game_Battler
  431. #==============================================================================

  432. class Game_Battler
  433.   #--------------------------------------------------------------------------
  434.   # ● 公开的公有变量
  435.   #--------------------------------------------------------------------------
  436.   attr_writer   :drive_type               # 气槽类型
  437.   attr_reader   :od_damage                # 行动结果: 气槽伤害
  438.   #--------------------------------------------------------------------------
  439.   # ● 清除保存行动效果的变量
  440.   #--------------------------------------------------------------------------
  441.   alias clear_action_results_KGC_OverDrive clear_action_results
  442.   def clear_action_results
  443.     clear_action_results_KGC_OverDrive

  444.     @od_damage = 0
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ○ 获得气槽能量
  448.   #--------------------------------------------------------------------------
  449.   def overdrive
  450.     @overdrive = 0 if @overdrive == nil
  451.     return @overdrive
  452.   end
  453.   #--------------------------------------------------------------------------
  454.   # ○ 操作气槽能量
  455.   #--------------------------------------------------------------------------
  456.   def overdrive=(value)
  457.     @overdrive = [[value, max_overdrive].min, 0].max
  458.   end
  459.   #--------------------------------------------------------------------------
  460.   # ○ 获得气槽能量的最大值
  461.   #--------------------------------------------------------------------------
  462.   def max_overdrive
  463.     return KGC::OverDrive::GAUGE_MAX * drive_gauge_number
  464.   end
  465.   #--------------------------------------------------------------------------
  466.   # ○ 能量为MAX时的判定
  467.   #--------------------------------------------------------------------------
  468.   def overdrive_max?
  469.     return (overdrive == max_overdrive)
  470.   end
  471.   #--------------------------------------------------------------------------
  472.   # ○ 能量珠数的取得
  473.   #--------------------------------------------------------------------------
  474.   def drive_gauge_number
  475.     if @drive_gauge_number == nil
  476.       @drive_gauge_number = KGC::OverDrive::DEFAULT_GAUGE_NUMBER
  477.     end
  478.     return @drive_gauge_number
  479.   end
  480.   #--------------------------------------------------------------------------
  481.   # ○ 操作能量珠数
  482.   #--------------------------------------------------------------------------
  483.   def drive_gauge_number=(value)
  484.     @drive_gauge_number = [value, 1].max
  485.   end
  486.   #--------------------------------------------------------------------------
  487.   # ○ 气槽类型的取得
  488.   #--------------------------------------------------------------------------
  489.   def drive_type
  490.     return []
  491.   end
  492.   #--------------------------------------------------------------------------
  493.   # ○ 超必杀是否学习到的判断
  494.   #--------------------------------------------------------------------------
  495.   def overdrive_skill_learned?
  496.     return true
  497.   end
  498.   #--------------------------------------------------------------------------
  499.   # ○ 气槽是否表示的判断
  500.   #--------------------------------------------------------------------------
  501.   def od_gauge_visible?
  502.     return false
  503.   end
  504.   #--------------------------------------------------------------------------
  505.   # ○ 能量可否增加的判断
  506.   #--------------------------------------------------------------------------
  507.   def can_gain_overdrive?
  508.     return true
  509.   end
  510.   #--------------------------------------------------------------------------
  511.   # ○ 攻撃時増加判定
  512.   #--------------------------------------------------------------------------
  513.   def drive_attack?
  514.     return drive_type.include?(KGC::OverDrive::Type::ATTACK)
  515.   end
  516.   #--------------------------------------------------------------------------
  517.   # ○ 受到伤害时的增加判断
  518.   #--------------------------------------------------------------------------
  519.   def drive_damage?
  520.     return drive_type.include?(KGC::OverDrive::Type::DAMAGE)
  521.   end
  522.   #--------------------------------------------------------------------------
  523.   # ○ 胜利时的增加判断
  524.   #--------------------------------------------------------------------------
  525.   def drive_victory?
  526.     return drive_type.include?(KGC::OverDrive::Type::VICTORY)
  527.   end
  528.   #--------------------------------------------------------------------------
  529.   # ○ 逃走时的增加判断
  530.   #--------------------------------------------------------------------------
  531.   def drive_escape?
  532.     return drive_type.include?(KGC::OverDrive::Type::ESCAPE)
  533.   end
  534.   #--------------------------------------------------------------------------
  535.   # ○ 单独战斗时的增加判断
  536.   #--------------------------------------------------------------------------
  537.   def drive_alone?
  538.     return drive_type.include?(KGC::OverDrive::Type::ALONE)
  539.   end
  540.   #--------------------------------------------------------------------------
  541.   # ○ 行动时的增加判断
  542.   #--------------------------------------------------------------------------
  543.   def drive_action?
  544.     return drive_type.include?(KGC::OverDrive::Type::ACTION)
  545.   end
  546.   #--------------------------------------------------------------------------
  547.   # ○ 濒死的增加判断
  548.   #--------------------------------------------------------------------------
  549.   def drive_fatal?
  550.     return drive_type.include?(KGC::OverDrive::Type::FATAL)
  551.   end
  552.   #--------------------------------------------------------------------------
  553.   # ○ 防御时的增加判断
  554.   #--------------------------------------------------------------------------
  555.   def drive_guard?
  556.     return drive_type.include?(KGC::OverDrive::Type::GUARD)
  557.   end
  558.   #--------------------------------------------------------------------------
  559.   # ● 状态附加
  560.   #     state_id : 状态 ID
  561.   #--------------------------------------------------------------------------
  562.   alias add_state_KGC_OverDrive add_state
  563.   def add_state(state_id)
  564.     add_state_KGC_OverDrive(state_id)

  565.     reset_overdrive_on_dead if dead?
  566.   end
  567.   #--------------------------------------------------------------------------
  568.   # ○ 计算技能消耗的能量
  569.   #     skill : 技能
  570.   #--------------------------------------------------------------------------
  571.   def calc_od_cost(skill)
  572.     return 0 unless skill.is_a?(RPG::Skill)

  573.     return skill.od_cost
  574.   end
  575.   #--------------------------------------------------------------------------
  576.   # ● 技能是否可以使用的判断
  577.   #     skill : 技能
  578.   #--------------------------------------------------------------------------
  579.   alias skill_can_use_KGC_OverDrive? skill_can_use?
  580.   def skill_can_use?(skill)
  581.     return false unless skill_can_use_KGC_OverDrive?(skill)

  582.     return false if calc_od_cost(skill) > overdrive
  583.     return true
  584.   end
  585.   #--------------------------------------------------------------------------
  586.   # ● 基于技能或物品的伤害判定
  587.   #     user : 技能或物品的使用者
  588.   #     obj  : 技能或物品
  589.   #    结果将代入 @hp_damage 或 @mp_damage 。
  590.   #--------------------------------------------------------------------------
  591.   alias make_obj_damage_value_KGC_OverDrive make_obj_damage_value
  592.   def make_obj_damage_value(user, obj)
  593.     make_obj_damage_value_KGC_OverDrive(user, obj)

  594.     apply_od_consume_all_for_damage(user, obj)
  595.   end
  596.   #--------------------------------------------------------------------------
  597.   # ○ 适用于气槽能量全消耗时
  598.   #     user : 技能或物品的使用者
  599.   #     obj  : 技能或物品
  600.   #    结果将代入 @hp_damage 或 @mp_damage 。
  601.   #--------------------------------------------------------------------------
  602.   def apply_od_consume_all_for_damage(user, obj)
  603.     return unless obj.is_a?(RPG::Skill)
  604.     return unless obj.overdrive? && obj.od_consume_all?

  605.     # 剩余能量消耗的强化 (例: 最低消耗量为 1000 时消耗 1200 的话效果是 1.2 倍)
  606.     rate = [user.overdrive * 1000 / obj.od_cost, 1000].max
  607.     @hp_damage = @hp_damage * rate / 1000
  608.     @mp_damage = @mp_damage * rate / 1000
  609.   end
  610.   #--------------------------------------------------------------------------
  611.   # ● 受到伤害时的反映
  612.   #     user : 技能或物品的使用者
  613.   #    若要使用此部分,请先设置 @hp_damage、@mp_damage、@absorbed 。
  614.   #--------------------------------------------------------------------------
  615.   alias execute_damage_KGC_OverDrive execute_damage
  616.   def execute_damage(user)
  617.     execute_damage_KGC_OverDrive(user)

  618.     increase_overdrive(user)
  619.     increase_overdrive_by_item(user)
  620.   end
  621.   #--------------------------------------------------------------------------
  622.   # ○ 死亡时气槽能量的初始化
  623.   #--------------------------------------------------------------------------
  624.   def reset_overdrive_on_dead
  625.     return unless KGC::OverDrive::EMPTY_ON_DEAD

  626.     self.overdrive = 0
  627.   end
  628.   #--------------------------------------------------------------------------
  629.   # ○ 气槽能量的增加处理
  630.   #     attacker : 攻击者
  631.   #--------------------------------------------------------------------------
  632.   def increase_overdrive(attacker = nil)
  633.     return unless attacker.is_a?(Game_Battler)  # 攻击者非战场单位
  634.     return unless actor? ^ attacker.actor?      # 攻击者和防御者在同一阵型
  635.     return if hp_damage == 0 && mp_damage == 0  # 不受到伤害

  636.     increase_attacker_overdrive(attacker)
  637.     increase_defender_overdrive(attacker)
  638.     reset_overdrive_on_dead if dead?
  639.   end
  640.   #--------------------------------------------------------------------------
  641.   # ○ 攻击方的气槽能量处理
  642.   #     attacker : 攻击者
  643.   #--------------------------------------------------------------------------
  644.   def increase_attacker_overdrive(attacker)
  645.     return unless can_gain_overdrive?
  646.     return unless attacker.drive_attack?  # ドライブタイプ「攻撃」なし

  647.     od_gain = KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::ATTACK]
  648.     if attacker.action.kind == 1
  649.       rate = attacker.action.skill.od_gain_rate  # スキルの倍率を適用
  650.       od_gain = od_gain * rate / 100
  651.       if rate > 0
  652.         od_gain = [od_gain, 1].max
  653.       elsif rate < 0
  654.         od_gain = [od_gain, -1].min
  655.       end
  656.     end
  657.     attacker.overdrive += od_gain
  658.   end
  659.   #--------------------------------------------------------------------------
  660.   # ○ 防御方的气槽能量处理
  661.   #     attacker : 攻击者
  662.   #--------------------------------------------------------------------------
  663.   def increase_defender_overdrive(attacker)
  664.     return unless can_gain_overdrive?
  665.     return unless self.drive_damage?  # 气槽类型不受到伤害

  666.     rate = KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::DAMAGE]
  667.     od_gain = 0
  668.     od_gain += hp_damage * rate / maxhp if hp_damage > 0
  669.     od_gain += mp_damage * rate / maxmp if mp_damage > 0 && maxmp > 0
  670.     if rate > 0
  671.       od_gain = [od_gain, 1].max
  672.     elsif rate < 0
  673.       od_gain = [od_gain, -1].min
  674.     end
  675.     self.overdrive += od_gain
  676.   end
  677.   #--------------------------------------------------------------------------
  678.   # ○ 使用物品增加气槽时的处理
  679.   #     user : 使用者
  680.   #--------------------------------------------------------------------------
  681.   def increase_overdrive_by_item(user = nil)
  682.     return unless user.is_a?(Game_Battler)
  683.     return unless can_gain_overdrive?

  684.     if user.action.skill?
  685.       obj = user.action.skill
  686.     elsif user.action.item?
  687.       obj = user.action.item
  688.     else
  689.       return
  690.     end
  691.     @od_damage = -obj.od_gain
  692.     self.overdrive -= @od_damage
  693.   end
  694.   #--------------------------------------------------------------------------
  695.   # ● 适用于技能效果
  696.   #     user  : 技能的使用者
  697.   #     skill : 技能
  698.   #--------------------------------------------------------------------------
  699.   alias skill_effect_KGC_OverDrive skill_effect
  700.   def skill_effect(user, skill)
  701.     skill_effect_KGC_OverDrive(user, skill)

  702.     # 无视物品或技能对气槽能量的影响
  703.     if $imported["ReproduceFunctions"] && $game_temp.exec_skill_on_item
  704.       return
  705.     end
  706.   end
  707. end

  708. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  709. #==============================================================================
  710. # ■ Game_Actor
  711. #==============================================================================

  712. class Game_Actor < Game_Battler
  713.   #--------------------------------------------------------------------------
  714.   # ● 设置
  715.   #     actor_id : 角色 ID
  716.   #--------------------------------------------------------------------------
  717.   alias setup_KGC_OverDrive setup
  718.   def setup(actor_id)
  719.     setup_KGC_OverDrive(actor_id)

  720.     @overdrive  = 0
  721.     @drive_type = nil
  722.   end
  723.   #--------------------------------------------------------------------------
  724.   # ○ 气槽类型的获得
  725.   #--------------------------------------------------------------------------
  726.   def drive_type
  727.     unless @drive_type.is_a?(Array)
  728.       return KGC::OverDrive::DEFAULT_ACTOR_DRIVE_TYPE
  729.     end
  730.     return @drive_type
  731.   end
  732.   #--------------------------------------------------------------------------
  733.   # ○ 判断是否学习到超必杀技能
  734.   #--------------------------------------------------------------------------
  735.   def overdrive_skill_learned?
  736.     result = false
  737.     # 解除一时的战斗FLAG
  738.     last_in_battle = $game_temp.in_battle
  739.     $game_temp.in_battle = false

  740.     self.skills.each { |skill|
  741.       if skill.overdrive?
  742.         result = true
  743.         break
  744.       end
  745.     }
  746.     $game_temp.in_battle = last_in_battle
  747.     return result
  748.   end
  749.   #--------------------------------------------------------------------------
  750.   # ○ 判断是否可以增加气槽能量
  751.   #--------------------------------------------------------------------------
  752.   def can_gain_overdrive?
  753.     if KGC::OverDrive::NOT_GAIN_GAUGE_HIDING
  754.       # 不表示
  755.       return false unless od_gauge_visible_l?
  756.     end
  757.     if KGC::OverDrive::HIDE_GAUGE_NO_OD_SKILLS
  758.       # 没有学到超必杀
  759.       return false unless overdrive_skill_learned?
  760.     end

  761.     return true
  762.   end
  763.   #--------------------------------------------------------------------------
  764.   # ○ 气槽能量的表示判断
  765.   #--------------------------------------------------------------------------
  766.   def od_gauge_visible?
  767.     return false unless od_gauge_visible_l?
  768.     return false unless can_gain_overdrive?

  769.     return true
  770.   end
  771.   #--------------------------------------------------------------------------
  772.   # ○ 气槽能量的表示判断 (简易版)
  773.   #--------------------------------------------------------------------------
  774.   def od_gauge_visible_l?
  775.     # 战斗中不表示
  776.     if KGC::OverDrive::HIDE_GAUGE_NOT_IN_BATTLE && !$game_temp.in_battle
  777.       return false
  778.     end
  779.     # 完全不表示
  780.     return false if KGC::OverDrive::HIDE_GAUGE_ACTOR.include?(self.id)

  781.     return true
  782.   end
  783. end

  784. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  785. #==============================================================================
  786. # ■ Game_Enemy
  787. #==============================================================================

  788. class Game_Enemy < Game_Battler
  789.   #--------------------------------------------------------------------------
  790.   # ● 对象初始化
  791.   #     index    : 敌方团体的编号
  792.   #     enemy_id : 敌方编号 ID
  793.   #--------------------------------------------------------------------------
  794.   alias initialize_KGC_OverDrive initialize
  795.   def initialize(index, enemy_id)
  796.     initialize_KGC_OverDrive(index, enemy_id)

  797.     @overdrive  = 0
  798.     @drive_type = nil
  799.   end
  800.   #--------------------------------------------------------------------------
  801.   # ○ 气槽类型的取得
  802.   #--------------------------------------------------------------------------
  803.   def drive_type
  804.     unless @drive_type.is_a?(Array)
  805.       return KGC::OverDrive::DEFAULT_ENEMY_DRIVE_TYPE
  806.     end
  807.     return @drive_type
  808.   end
  809. end

  810. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  811. #==============================================================================
  812. # ■ Window_Base
  813. #==============================================================================

  814. class Window_Base < Window
  815.   #--------------------------------------------------------------------------
  816.   # ○ 气槽能量的一般颜色 1 的获得
  817.   #--------------------------------------------------------------------------
  818.   def od_gauge_normal_color1
  819.     color = KGC::OverDrive::GAUGE_NORMAL_START_COLOR
  820.     return (color.is_a?(Integer) ? text_color(color) : color)
  821.   end
  822.   #--------------------------------------------------------------------------
  823.   # ○ 气槽能量的一般颜色 2 的获得
  824.   #--------------------------------------------------------------------------
  825.   def od_gauge_normal_color2
  826.     color = KGC::OverDrive::GAUGE_NORMAL_END_COLOR
  827.     return (color.is_a?(Integer) ? text_color(color) : color)
  828.   end
  829.   #--------------------------------------------------------------------------
  830.   # ○ 气槽能量的最大颜色 1 的获得
  831.   #--------------------------------------------------------------------------
  832.   def od_gauge_max_color1
  833.     color = KGC::OverDrive::GAUGE_MAX_START_COLOR
  834.     return (color.is_a?(Integer) ? text_color(color) : color)
  835.   end
  836.   #--------------------------------------------------------------------------
  837.   # ○ 气槽能量的最大颜色 2 的获得
  838.   #--------------------------------------------------------------------------
  839.   def od_gauge_max_color2
  840.     color = KGC::OverDrive::GAUGE_MAX_END_COLOR
  841.     return (color.is_a?(Integer) ? text_color(color) : color)
  842.   end
  843.   #--------------------------------------------------------------------------
  844.   # ● 名字的表示
  845.   #     actor : 角色
  846.   #     x     : X坐标
  847.   #     y     : Y坐标
  848.   #--------------------------------------------------------------------------
  849.   alias draw_actor_name_KGC_OverDrive draw_actor_name
  850.   def draw_actor_name(actor, x, y)
  851.     draw_actor_od_gauge(actor, x, y, 108)

  852.     draw_actor_name_KGC_OverDrive(actor, x, y)
  853.   end
  854.   #--------------------------------------------------------------------------
  855.   # ○ 气槽能量的表示
  856.   #     actor : 角色
  857.   #     x     : X坐标
  858.   #     y     : Y坐标
  859.   #     width : 宽度
  860.   #--------------------------------------------------------------------------
  861.   def draw_actor_od_gauge(actor, x, y, width = 120)
  862.     return unless actor.od_gauge_visible?

  863.     n = actor.overdrive % KGC::OverDrive::GAUGE_MAX
  864.     n = KGC::OverDrive::GAUGE_MAX if actor.overdrive_max?

  865.     if KGC::OverDrive::ENABLE_GENERIC_GAUGE && $imported["GenericGauge"]
  866.       # 汎用ゲージ
  867.       file = (actor.overdrive_max? ?
  868.         KGC::OverDrive::GAUGE_MAX_IMAGE : KGC::OverDrive::GAUGE_IMAGE)
  869.       draw_gauge(file,
  870.         x, y, width, n, KGC::OverDrive::GAUGE_MAX,
  871.         KGC::OverDrive::GAUGE_OFFSET,
  872.         KGC::OverDrive::GAUGE_LENGTH,
  873.         KGC::OverDrive::GAUGE_SLOPE)
  874.     else
  875.       # デフォルトゲージ
  876.       gw = width * n / KGC::OverDrive::GAUGE_MAX
  877.       gc1 = (gw == width ? od_gauge_max_color1 : od_gauge_normal_color1)
  878.       gc2 = (gw == width ? od_gauge_max_color2 : od_gauge_normal_color2)
  879.       self.contents.fill_rect(x, y + WLH + KGC::OverDrive::GAUGE_OFFSET_Y,
  880.         width, 6, gauge_back_color)
  881.       self.contents.gradient_fill_rect(
  882.         x, y + WLH + KGC::OverDrive::GAUGE_OFFSET_Y, gw, 6, gc1, gc2)
  883.     end

  884.     draw_actor_od_gauge_value(actor, x, y, width)
  885.   end
  886.   #--------------------------------------------------------------------------
  887.   # ○ 气槽能量的储存量的表示
  888.   #     actor : 角色
  889.   #     x     : X坐标
  890.   #     y     : Y坐标
  891.   #     width : 宽度
  892.   #--------------------------------------------------------------------------
  893.   def draw_actor_od_gauge_value(actor, x, y, width = 120)
  894.     text = ""
  895.     value = actor.overdrive * 100.0 / KGC::OverDrive::GAUGE_MAX
  896.     case KGC::OverDrive::GAUGE_VALUE_STYLE
  897.     when KGC::OverDrive::ValueStyle::IMMEDIATE
  898.       text = actor.overdrive.to_s
  899.     when KGC::OverDrive::ValueStyle::RATE
  900.       text = sprintf("%d%%", actor.overdrive * 100 / KGC::OverDrive::GAUGE_MAX)
  901.     when KGC::OverDrive::ValueStyle::RATE_DETAIL1
  902.       text = sprintf("%0.1f%%", value)
  903.     when KGC::OverDrive::ValueStyle::RATE_DETAIL2
  904.       text = sprintf("%0.2f%%", value)
  905.     when KGC::OverDrive::ValueStyle::NUMBER
  906.       text = "#{actor.overdrive / KGC::OverDrive::GAUGE_MAX}"
  907.     else
  908.       return
  909.     end

  910.     last_font_size = self.contents.font.size
  911.     new_font_size  = KGC::OverDrive::GAUGE_VALUE_FONT_SIZE
  912.     self.contents.font.size = new_font_size
  913.     self.contents.draw_text(
  914.       x, y + WLH + KGC::OverDrive::GAUGE_OFFSET_Y - new_font_size / 2,
  915.       width, new_font_size, text, 2)
  916.     self.contents.font.size = last_font_size
  917.   end
  918. end

  919. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  920. #==============================================================================
  921. # ■ Window_Skill
  922. #==============================================================================

  923. if KGC::OverDrive::HIDE_SKILL_LACK_OF_GAUGE

  924. class Window_Skill < Window_Selectable
  925.   #--------------------------------------------------------------------------
  926.   # ○ 如果含有技能的列表?
  927.   #     skill : 技能
  928.   #--------------------------------------------------------------------------
  929.   unless $@
  930.     alias include_KGC_OverDrive? include? if method_defined?(:include?)
  931.   end
  932.   def include?(skill)
  933.     return false if skill == nil

  934.     if defined?(include_KGC_OverDrive?)
  935.       return false unless include_KGC_OverDrive?(skill)
  936.     end

  937.     if skill.overdrive?
  938.       return (@actor.calc_od_cost(skill) <= @actor.overdrive)
  939.     else
  940.       return true
  941.     end
  942.   end

  943. if method_defined?(:include_KGC_OverDrive?)
  944.   #--------------------------------------------------------------------------
  945.   # ● 刷新
  946.   #--------------------------------------------------------------------------
  947.   def refresh
  948.     @data = []
  949.     for skill in @actor.skills
  950.       next unless include?(skill)
  951.       @data.push(skill)
  952.       if skill.id == @actor.last_skill_id
  953.         self.index = @data.size - 1
  954.       end
  955.     end
  956.     @item_max = @data.size
  957.     create_contents
  958.     for i in 0...@item_max
  959.       draw_item(i)
  960.     end
  961.   end
  962. end

  963. end  # <-- class
  964. end  # <-- if KGC::OverDrive::HIDE_SKILL_LACK_OF_GAUGE

  965. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  966. #==============================================================================
  967. # ■ Scene_Skill
  968. #==============================================================================

  969. class Scene_Skill < Scene_Base
  970.   #--------------------------------------------------------------------------
  971.   # ● 使用技能 (使用效果适用于非我方人物)
  972.   #--------------------------------------------------------------------------
  973.   alias use_skill_nontarget_KGC_OverDrive use_skill_nontarget
  974.   def use_skill_nontarget
  975.     consume_od_gauge

  976.     use_skill_nontarget_KGC_OverDrive
  977.   end
  978.   #--------------------------------------------------------------------------
  979.   # ○ 使用技能时气槽能量的消耗
  980.   #--------------------------------------------------------------------------
  981.   def consume_od_gauge
  982.     if @skill.od_consume_all?
  983.       @actor.overdrive = 0
  984.     else
  985.       @actor.overdrive -= @actor.calc_od_cost(@skill)
  986.     end
  987.   end
  988. end

  989. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  990. #==============================================================================
  991. # ■ Scene_Battle
  992. #==============================================================================

  993. class Scene_Battle < Scene_Base
  994.   #--------------------------------------------------------------------------
  995.   # ● 战斗结束
  996.   #     result : 结果 (0:胜利 1:逃走 2:失败)
  997.   #--------------------------------------------------------------------------
  998.   alias battle_end_KGC_OverDrive battle_end
  999.   def battle_end(result)
  1000.     increase_overdrive_on_battle_end(result)

  1001.     battle_end_KGC_OverDrive(result)
  1002.   end
  1003.   #--------------------------------------------------------------------------
  1004.   # ○ 战斗结束时气槽能量的增加处理
  1005.   #     result : 结果 (0:胜利 1:逃走 2:失败)
  1006.   #--------------------------------------------------------------------------
  1007.   def increase_overdrive_on_battle_end(result)
  1008.     case result
  1009.     when 0  # 胜利
  1010.       od_gain = KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::VICTORY]
  1011.       $game_party.existing_members.each { |actor|
  1012.         actor.overdrive += od_gain if actor.drive_victory?
  1013.       }
  1014.     when 1  # 逃走
  1015.       od_gain = KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::ESCAPE]
  1016.       $game_party.existing_members.each { |actor|
  1017.         actor.overdrive += od_gain if actor.drive_escape?
  1018.       }
  1019.     end
  1020.   end
  1021.   #--------------------------------------------------------------------------
  1022.   # ● 战斗行动的实行
  1023.   #--------------------------------------------------------------------------
  1024.   alias execute_action_KGC_OverDrive execute_action
  1025.   def execute_action
  1026.     increase_overdrive_on_action

  1027.     execute_action_KGC_OverDrive
  1028.   end
  1029.   #--------------------------------------------------------------------------
  1030.   # ○ 行动时的气槽能量的增加处理
  1031.   #--------------------------------------------------------------------------
  1032.   def increase_overdrive_on_action
  1033.     battler = @active_battler
  1034.     od_gain = 0
  1035.     unit = (battler.actor? ? $game_party : $game_troop)

  1036.     # 单独战斗
  1037.     if battler.drive_alone? && unit.existing_members.size == 1
  1038.       od_gain += KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::ALONE]
  1039.     end
  1040.     # 行动
  1041.     if battler.drive_action?
  1042.       od_gain += KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::ACTION]
  1043.     end
  1044.     # 濒死
  1045.     if battler.drive_fatal? && battler.hp < battler.maxhp / 4
  1046.       od_gain += KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::FATAL]
  1047.     end
  1048.     # 防御
  1049.     if battler.drive_guard? && battler.action.kind == 0 &&
  1050.         battler.action.basic == 1
  1051.       od_gain += KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::GUARD]
  1052.     end
  1053.     battler.overdrive += od_gain
  1054.   end
  1055.   #--------------------------------------------------------------------------
  1056.   # ● 战斗行动的实行:技能
  1057.   #--------------------------------------------------------------------------
  1058.   alias execute_action_skill_KGC_OverDrive execute_action_skill
  1059.   def execute_action_skill
  1060.     execute_action_skill_KGC_OverDrive

  1061.     consume_od_gauge
  1062.   end
  1063.   #--------------------------------------------------------------------------
  1064.   # ○ 技能使用时的气槽能量的增加处理
  1065.   #--------------------------------------------------------------------------
  1066.   def consume_od_gauge
  1067.     return unless @active_battler.action.skill?

  1068.     skill = @active_battler.action.skill
  1069.     if skill.od_consume_all?
  1070.       @active_battler.overdrive = 0
  1071.     else
  1072.       @active_battler.overdrive -= @active_battler.calc_od_cost(skill)
  1073.     end
  1074.   end
  1075.   #--------------------------------------------------------------------------
  1076.   # ● 伤害的表示
  1077.   #     target : 目标
  1078.   #     obj    : 技能或物品
  1079.   #--------------------------------------------------------------------------
  1080.   alias display_damage_KGC_OverDrive display_damage
  1081.   def display_damage(target, obj = nil)
  1082.     display_damage_KGC_OverDrive(target, obj)

  1083.     return if target.missed || target.evaded
  1084.     display_od_damage(target, obj)
  1085.   end
  1086.   #--------------------------------------------------------------------------
  1087.   # ○ 超必杀的伤害表示
  1088.   #     target : 目标
  1089.   #     obj    : 技能或物品
  1090.   #--------------------------------------------------------------------------
  1091.   def display_od_damage(target, obj = nil)
  1092.     return if target.dead?
  1093.     return if target.od_damage == 0
  1094.     if target.absorbed                      # 吸收
  1095.       fmt = target.actor? ? Vocab::ActorODDrain : Vocab::EnemyODDrain
  1096.       text = sprintf(fmt, target.name, Vocab::overdrive)
  1097.     elsif target.od_damage > 0              # 受到伤害
  1098.       fmt = target.actor? ? Vocab::ActorODLoss : Vocab::EnemyODLoss
  1099.       text = sprintf(fmt, target.name, Vocab::overdrive)
  1100.     else                                    # 回复
  1101.       fmt = target.actor? ? Vocab::ActorODRecovery : Vocab::EnemyODRecovery
  1102.       text = sprintf(fmt, target.name, Vocab::overdrive)
  1103.       Sound.play_recovery
  1104.     end
  1105.     @message_window.add_instant_text(text)
  1106.     wait(30)
  1107.   end
  1108. end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-24 01:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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