a321321 发表于 2010-1-29 17:14:00

谁有  集气脚本呢? 发下  什么

   就是气 集到 满的时候 可以放 奥义 技能   

zhou317432 发表于 2010-1-29 17:34:04

Re:谁有  集气脚本呢? 发下  什

应该是这种类型的东西了

6R失踪 中文版失踪 就算是日文这也应该不难懂


#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ オーバードライブ - KGC_OverDrive ◆ VX ◆
#_/    ◇ Last update : 2009/11/01 ◇
#_/----------------------------------------------------------------------------
#_/専用のゲージを消費して使用するスキルを作成します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ★ カスタマイズ項目 - Customize BEGIN ★
#==============================================================================

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

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

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

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

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

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

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

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

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

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

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

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

module KGC::OverDrive
# ドライブタイプ
module Type
    ATTACK= 0# 攻撃
    DAMAGE= 1# 被ダメージ
    VICTORY = 2# 勝利
    ESCAPE= 3# 逃走
    ALONE   = 4# 孤独
    ACTION= 5# 行動
    FATAL   = 6# 瀕死
    GUARD   = 7# 防御
end

# 蓄積量表記
module ValueStyle
    NONE         = 0# なし
    IMMEDIATE    = 1# 即値
    RATE         = 2# 割合
    RATE_DETAIL1 = 3# 割合 (詳細1)
    RATE_DETAIL2 = 4# 割合 (詳細2)
    NUMBER       = 5# 蓄積済み本数
end

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

    module Skill
      # オーバードライブ
      OVER_DRIVE = /<(?:OVER_DRIVE|オーバードライブ)\\s*(\\d+)?(\\+)?>/i
      # ゲージ増加率
      OD_GAIN_RATE =
      /<(?:OD_GAIN_RATE|(?:OD|ドライブ)ゲージ増加率)\\s*(\\d+)[%%]?>/i
    end
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ KGC::Commands
#==============================================================================

module KGC
module Commands
module_function
#--------------------------------------------------------------------------
# ○ アクターのドライブゲージの増減
#   actor_id : アクター ID (-1 : パーティ全体)
#   value    : 増加量 (マイナスも可)
#--------------------------------------------------------------------------
def gain_actor_od_gauge(actor_id, value)
    if actor_id == -1
      # 生存メンバー全員のゲージを操作
      $game_party.existing_members.each { |actor|
      next unless actor.can_gain_overdrive?
      actor.overdrive += value
      }
    else
      actor = $game_actors
      actor.overdrive += value if actor != nil && actor.exist?
    end
end
#--------------------------------------------------------------------------
# ○ エネミーのドライブゲージの増減
#   enemy_index : エネミー index (-1 : 全体)
#   value       : 増加量 (マイナスも可)
#--------------------------------------------------------------------------
def gain_enemy_od_gauge(enemy_index, value)
    if enemy_index == -1
      # 生存エネミー全員のゲージを操作
      $game_troop.existing_members.each { |enemy|
      enemy.overdrive += value
      }
    else
      enemy = $game_troop.members
      enemy.overdrive += value if enemy != nil && enemy.exist?
    end
end
#--------------------------------------------------------------------------
# ○ アクターのドライブゲージの取得
#   actor_id    : アクター ID
#   variable_id : 戻り値を格納する変数 ID
#--------------------------------------------------------------------------
def get_actor_od_gauge(actor_id, variable_id = 0)
    actor = $game_actors
    n = (actor != nil ? actor.overdrive : 0)
    if variable_id > 0
      $game_variables = n
    end
    return n
end
#--------------------------------------------------------------------------
# ○ エネミーのドライブゲージの取得
#   enemy_index : エネミー index
#   variable_id : 戻り値を格納する変数 ID
#--------------------------------------------------------------------------
def get_enemy_od_gauge(enemy_index, variable_id = 0)
    enemy = $game_troop.members
    n = (enemy != nil ? enemy.overdrive : 0)
    if variable_id > 0
      $game_variables = n
    end
    return n
end
#--------------------------------------------------------------------------
# ○ アクターのドライブゲージの本数を設定
#   actor_id : アクター ID (-1 : パーティ全体)
#   number   : ゲージ本数
#--------------------------------------------------------------------------
def set_actor_od_gauge_number(actor_id, number)
    if actor_id == -1
      # メンバー全員の本数を設定
      $game_party.members.each { |actor|
      actor.drive_gauge_number = number
      }
    else
      actor = $game_actors
      actor.drive_gauge_number = number if actor != nil
    end
end
#--------------------------------------------------------------------------
# ○ エネミーのドライブゲージの本数を設定
#   enemy_index : エネミー index (-1 : 全体)
#   number   : ゲージ本数
#--------------------------------------------------------------------------
def set_enemy_od_gauge_number(enemy_index, number)
    if enemy_index == -1
      # 生存エネミー全員の本数を設定
      $game_troop.members.each { |enemy|
      enemy.drive_gauge_number = number
      }
    else
      enemy = $game_troop.members
      enemy.drive_gauge_number = number if enemy != nil
    end
end
#--------------------------------------------------------------------------
# ○ アクターのドライブゲージが最大か判定
#   actor_id : アクター ID
#--------------------------------------------------------------------------
def actor_od_gauge_max?(actor_id)
    actor = $game_actors
    return false if actor == nil
    return actor.overdrive == actor.max_overdrive
end
#--------------------------------------------------------------------------
# ○ エネミーのドライブゲージが最大か判定
#   enemy_index : エネミー index
#--------------------------------------------------------------------------
def enemy_od_gauge_max?(enemy_index)
    enemy = $game_troop.members
    return false if enemy == nil
    return enemy.overdrive == enemy.max_overdrive
end
#--------------------------------------------------------------------------
# ○ アクターのドライブタイプの変更
#   actor_id : アクター ID (-1 : パーティ全体)
#   types    : ドライブタイプの配列 (省略時 : 初期化)
#--------------------------------------------------------------------------
def set_actor_drive_type(actor_id, types = nil)
    if actor_id == -1
      # メンバー全員のドライブタイプを変更
      $game_party.members.each { |actor|
      actor.drive_type = types
      }
    else
      actor = $game_actors
      actor.drive_type = types if actor != nil
    end
end
#--------------------------------------------------------------------------
# ○ エネミーのドライブタイプの変更
#   enemy_index : エネミー index (-1 : 全体)
#   types       : ドライブタイプの配列 (省略時 : 初期化)
#--------------------------------------------------------------------------
def set_enemy_drive_type(enemy_index, types = nil)
    if enemy_index == -1
      # エネミー全員のドライブタイプを変更
      $game_troop.members.each { |enemy|
      enemy.drive_type = types
      }
    else
      enemy = $game_troop.members
      enemy.drive_type = types if enemy != nil
    end
end
end
end

class Game_Interpreter
include KGC::Commands
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ RPG::UsableItem
#==============================================================================

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

    self.note.each_line { |line|
      case line
      when KGC::OverDrive::Regexp::UsableItem::OD_GAIN
      # ドライブゲージ増加
      @__od_gain = $1.to_i
      end
    }
end
#--------------------------------------------------------------------------
# ○ ドライブゲージ増加量
#--------------------------------------------------------------------------
def od_gain
    create_overdrive_cache if @__od_gain == nil
    return @__od_gain
end
#--------------------------------------------------------------------------
# ○ ドライブスキルであるか
#--------------------------------------------------------------------------
def overdrive
    return false
end
alias overdrive? overdrive
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ RPG::Skill
#==============================================================================

class RPG::Skill < RPG::UsableItem
#--------------------------------------------------------------------------
# ○ オーバードライブのキャッシュ生成
#--------------------------------------------------------------------------
def create_overdrive_cache
    super

    @__is_overdrive   = false
    @__od_cost      = KGC::OverDrive::GAUGE_MAX
    @__od_consume_all = false
    @__od_gain_rate   = 100

    self.note.each_line { |line|
      case line
      when KGC::OverDrive::Regexp::Skill::OVER_DRIVE
      # オーバードライブ
      @__is_overdrive   = true
      @__od_cost      = $1.to_i if $1 != nil
      @__od_consume_all = ($2 != nil)
      when KGC::OverDrive::Regexp::Skill::OD_GAIN_RATE
      # ゲージ増加率
      @__od_gain_rate = $1.to_i
      end
    }

    # ドライブスキルでなければ、ゲージ消費量 0
    unless @__is_overdrive
      @__od_cost = 0
    end
end
#--------------------------------------------------------------------------
# ○ ドライブスキルであるか
#--------------------------------------------------------------------------
def overdrive
    create_overdrive_cache if @__is_overdrive == nil
    return @__is_overdrive
end
alias overdrive? overdrive
#--------------------------------------------------------------------------
# ○ ドライブゲージ消費量
#--------------------------------------------------------------------------
def od_cost
    create_overdrive_cache if @__od_cost == nil
    return @__od_cost
end
#--------------------------------------------------------------------------
# ○ ドライブゲージ全消費か
#--------------------------------------------------------------------------
def od_consume_all
    create_overdrive_cache if @__od_consume_all == nil
    return @__od_consume_all
end
alias od_consume_all? od_consume_all
#--------------------------------------------------------------------------
# ○ ドライブゲージ増加率
#--------------------------------------------------------------------------
def od_gain_rate
    create_overdrive_cache if @__od_gain_rate == nil
    return @__od_gain_rate
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Vocab
#==============================================================================

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

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

# 敵側メッセージ
EnemyODDrain    = KGC::OverDrive::OD_GAIN_MESSAGE[:drain_e]
EnemyODLoss   = KGC::OverDrive::OD_GAIN_MESSAGE[:loss_e]
EnemyODRecovery = KGC::OverDrive::OD_GAIN_MESSAGE[:recover_e]
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Battler
#==============================================================================

class Game_Battler
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_writer   :drive_type               # ドライブタイプ
attr_reader   :od_damage                # 行動結果: ドライブダメージ
#--------------------------------------------------------------------------
# ● 行動効果の保持用変数をクリア
#--------------------------------------------------------------------------
alias clear_action_results_KGC_OverDrive clear_action_results
def clear_action_results
    clear_action_results_KGC_OverDrive

    @od_damage = 0
end
#--------------------------------------------------------------------------
# ○ ドライブゲージ量取得
#--------------------------------------------------------------------------
def overdrive
    @overdrive = 0 if @overdrive == nil
    return @overdrive
end
#--------------------------------------------------------------------------
# ○ ドライブゲージの操作
#--------------------------------------------------------------------------
def overdrive=(value)
    @overdrive = [.min, 0].max
end
#--------------------------------------------------------------------------
# ○ ドライブゲージ最大量取得
#--------------------------------------------------------------------------
def max_overdrive
    return KGC::OverDrive::GAUGE_MAX * drive_gauge_number
end
#--------------------------------------------------------------------------
# ○ ゲージ Max 判定
#--------------------------------------------------------------------------
def overdrive_max?
    return (overdrive == max_overdrive)
end
#--------------------------------------------------------------------------
# ○ ドライブゲージ本数取得
#--------------------------------------------------------------------------
def drive_gauge_number
    if @drive_gauge_number == nil
      @drive_gauge_number = KGC::OverDrive::DEFAULT_GAUGE_NUMBER
    end
    return @drive_gauge_number
end
#--------------------------------------------------------------------------
# ○ ドライブゲージ本数の操作
#--------------------------------------------------------------------------
def drive_gauge_number=(value)
    @drive_gauge_number = .max
end
#--------------------------------------------------------------------------
# ○ ドライブタイプの取得
#--------------------------------------------------------------------------
def drive_type
    return []
end
#--------------------------------------------------------------------------
# ○ ドライブスキル習得済み判定
#--------------------------------------------------------------------------
def overdrive_skill_learned?
    return true
end
#--------------------------------------------------------------------------
# ○ ゲージ表示判定
#--------------------------------------------------------------------------
def od_gauge_visible?
    return false
end
#--------------------------------------------------------------------------
# ○ ゲージ増加可否判定
#--------------------------------------------------------------------------
def can_gain_overdrive?
    return true
end
#--------------------------------------------------------------------------
# ○ 攻撃時増加判定
#--------------------------------------------------------------------------
def drive_attack?
    return drive_type.include?(KGC::OverDrive::Type::ATTACK)
end
#--------------------------------------------------------------------------
# ○ 被ダメージ時増加判定
#--------------------------------------------------------------------------
def drive_damage?
    return drive_type.include?(KGC::OverDrive::Type::DAMAGE)
end
#--------------------------------------------------------------------------
# ○ 勝利時増加判定
#--------------------------------------------------------------------------
def drive_victory?
    return drive_type.include?(KGC::OverDrive::Type::VICTORY)
end
#--------------------------------------------------------------------------
# ○ 逃走時増加判定
#--------------------------------------------------------------------------
def drive_escape?
    return drive_type.include?(KGC::OverDrive::Type::ESCAPE)
end
#--------------------------------------------------------------------------
# ○ 孤独時増加判定
#--------------------------------------------------------------------------
def drive_alone?
    return drive_type.include?(KGC::OverDrive::Type::ALONE)
end
#--------------------------------------------------------------------------
# ○ 行動時増加判定
#--------------------------------------------------------------------------
def drive_action?
    return drive_type.include?(KGC::OverDrive::Type::ACTION)
end
#--------------------------------------------------------------------------
# ○ 瀕死時増加判定
#--------------------------------------------------------------------------
def drive_fatal?
    return drive_type.include?(KGC::OverDrive::Type::FATAL)
end
#--------------------------------------------------------------------------
# ○ 防御時増加判定
#--------------------------------------------------------------------------
def drive_guard?
    return drive_type.include?(KGC::OverDrive::Type::GUARD)
end
#--------------------------------------------------------------------------
# ● ステートの付加
#   state_id : ステート ID
#--------------------------------------------------------------------------
alias add_state_KGC_OverDrive add_state
def add_state(state_id)
    add_state_KGC_OverDrive(state_id)

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

    return skill.od_cost
end
#--------------------------------------------------------------------------
# ● スキルの使用可能判定
#   skill : スキル
#--------------------------------------------------------------------------
alias skill_can_use_KGC_OverDrive? skill_can_use?
def skill_can_use?(skill)
    return false unless skill_can_use_KGC_OverDrive?(skill)

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

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

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

    increase_overdrive(user)
    increase_overdrive_by_item(user)
end
#--------------------------------------------------------------------------
# ○ 死亡時ドライブゲージ初期化処理
#--------------------------------------------------------------------------
def reset_overdrive_on_dead
    return unless KGC::OverDrive::EMPTY_ON_DEAD

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

    increase_attacker_overdrive(attacker)
    increase_defender_overdrive(attacker)
    reset_overdrive_on_dead if dead?
end
#--------------------------------------------------------------------------
# ○ 攻撃側のドライブゲージ増加処理
#   attacker : 攻撃者
#--------------------------------------------------------------------------
def increase_attacker_overdrive(attacker)
    return unless can_gain_overdrive?
    return unless attacker.drive_attack?# ドライブタイプ「攻撃」なし

    od_gain = KGC::OverDrive::GAIN_RATE
    if attacker.action.kind == 1
      rate = attacker.action.skill.od_gain_rate# スキルの倍率を適用
      od_gain = od_gain * rate / 100
      if rate > 0
      od_gain = .max
      elsif rate < 0
      od_gain = .min
      end
    end
    attacker.overdrive += od_gain
end
#--------------------------------------------------------------------------
# ○ 防御側のドライブゲージ増加処理
#   attacker : 攻撃者
#--------------------------------------------------------------------------
def increase_defender_overdrive(attacker)
    return unless can_gain_overdrive?
    return unless self.drive_damage?# ドライブタイプ「ダメージ」なし

    rate = KGC::OverDrive::GAIN_RATE
    od_gain = 0
    od_gain += hp_damage * rate / maxhp if hp_damage > 0
    od_gain += mp_damage * rate / maxmp if mp_damage > 0 && maxmp > 0
    if rate > 0
      od_gain = .max
    elsif rate < 0
      od_gain = .min
    end
    self.overdrive += od_gain
end
#--------------------------------------------------------------------------
# ○ アイテムによるドライブゲージ増加処理
#   user : 使用者
#--------------------------------------------------------------------------
def increase_overdrive_by_item(user = nil)
    return unless user.is_a?(Game_Battler)
    return unless can_gain_overdrive?

    if user.action.skill?
      obj = user.action.skill
    elsif user.action.item?
      obj = user.action.item
    else
      return
    end
    @od_damage = -obj.od_gain
    self.overdrive -= @od_damage
end
#--------------------------------------------------------------------------
# ● スキルの効果適用
#   user: スキルの使用者
#   skill : スキル
#--------------------------------------------------------------------------
alias skill_effect_KGC_OverDrive skill_effect
def skill_effect(user, skill)
    skill_effect_KGC_OverDrive(user, skill)

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

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● セットアップ
#   actor_id : アクター ID
#--------------------------------------------------------------------------
alias setup_KGC_OverDrive setup
def setup(actor_id)
    setup_KGC_OverDrive(actor_id)

    @overdrive= 0
    @drive_type = nil
end
#--------------------------------------------------------------------------
# ○ ドライブタイプの取得
#--------------------------------------------------------------------------
def drive_type
    unless @drive_type.is_a?(Array)
      return KGC::OverDrive::DEFAULT_ACTOR_DRIVE_TYPE
    end
    return @drive_type
end
#--------------------------------------------------------------------------
# ○ ドライブスキル習得済み判定
#--------------------------------------------------------------------------
def overdrive_skill_learned?
    result = false
    # 一時的に戦闘中フラグを解除
    last_in_battle = $game_temp.in_battle
    $game_temp.in_battle = false

    self.skills.each { |skill|
      if skill.overdrive?
      result = true
      break
      end
    }
    $game_temp.in_battle = last_in_battle
    return result
end
#--------------------------------------------------------------------------
# ○ ゲージ増加可否判定
#--------------------------------------------------------------------------
def can_gain_overdrive?
    if KGC::OverDrive::NOT_GAIN_GAUGE_HIDING
      # 非表示
      return false unless od_gauge_visible_l?
    end
    if KGC::OverDrive::HIDE_GAUGE_NO_OD_SKILLS
      # 未修得
      return false unless overdrive_skill_learned?
    end

    return true
end
#--------------------------------------------------------------------------
# ○ ゲージ表示判定
#--------------------------------------------------------------------------
def od_gauge_visible?
    return false unless od_gauge_visible_l?
    return false unless can_gain_overdrive?

    return true
end
#--------------------------------------------------------------------------
# ○ ゲージ表示判定 (簡易版)
#--------------------------------------------------------------------------
def od_gauge_visible_l?
    # 戦闘中非表示
    if KGC::OverDrive::HIDE_GAUGE_NOT_IN_BATTLE && !$game_temp.in_battle
      return false
    end
    # 非表示
    return false if KGC::OverDrive::HIDE_GAUGE_ACTOR.include?(self.id)

    return true
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Enemy
#==============================================================================

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

    @overdrive= 0
    @drive_type = nil
end
#--------------------------------------------------------------------------
# ○ ドライブタイプの取得
#--------------------------------------------------------------------------
def drive_type
    unless @drive_type.is_a?(Array)
      return KGC::OverDrive::DEFAULT_ENEMY_DRIVE_TYPE
    end
    return @drive_type
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_Base
#==============================================================================

class Window_Base < Window
#--------------------------------------------------------------------------
# ○ ドライブゲージの通常時の色 1 の取得
#--------------------------------------------------------------------------
def od_gauge_normal_color1
    color = KGC::OverDrive::GAUGE_NORMAL_START_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
end
#--------------------------------------------------------------------------
# ○ ドライブゲージの通常時の色 2 の取得
#--------------------------------------------------------------------------
def od_gauge_normal_color2
    color = KGC::OverDrive::GAUGE_NORMAL_END_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
end
#--------------------------------------------------------------------------
# ○ ドライブゲージの最大時の色 1 の取得
#--------------------------------------------------------------------------
def od_gauge_max_color1
    color = KGC::OverDrive::GAUGE_MAX_START_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
end
#--------------------------------------------------------------------------
# ○ ドライブゲージの最大時の色 2 の取得
#--------------------------------------------------------------------------
def od_gauge_max_color2
    color = KGC::OverDrive::GAUGE_MAX_END_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
end
#--------------------------------------------------------------------------
# ● 名前の描画
#   actor : アクター
#   x   : 描画先 X 座標
#   y   : 描画先 Y 座標
#--------------------------------------------------------------------------
alias draw_actor_name_KGC_OverDrive draw_actor_name
def draw_actor_name(actor, x, y)
    draw_actor_od_gauge(actor, x, y, 108)

    draw_actor_name_KGC_OverDrive(actor, x, y)
end
#--------------------------------------------------------------------------
# ○ ドライブゲージの描画
#   actor : アクター
#   x   : 描画先 X 座標
#   y   : 描画先 Y 座標
#   width : 幅
#--------------------------------------------------------------------------
def draw_actor_od_gauge(actor, x, y, width = 120)
    return unless actor.od_gauge_visible?

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

    if KGC::OverDrive::ENABLE_GENERIC_GAUGE && $imported["GenericGauge"]
      # 汎用ゲージ
      file = (actor.overdrive_max? ?
      KGC::OverDrive::GAUGE_MAX_IMAGE : KGC::OverDrive::GAUGE_IMAGE)
      draw_gauge(file,
      x, y, width, n, KGC::OverDrive::GAUGE_MAX,
      KGC::OverDrive::GAUGE_OFFSET,
      KGC::OverDrive::GAUGE_LENGTH,
      KGC::OverDrive::GAUGE_SLOPE)
    else
      # デフォルトゲージ
      gw = width * n / KGC::OverDrive::GAUGE_MAX
      gc1 = (gw == width ? od_gauge_max_color1 : od_gauge_normal_color1)
      gc2 = (gw == width ? od_gauge_max_color2 : od_gauge_normal_color2)
      self.contents.fill_rect(x, y + WLH + KGC::OverDrive::GAUGE_OFFSET_Y,
      width, 6, gauge_back_color)
      self.contents.gradient_fill_rect(
      x, y + WLH + KGC::OverDrive::GAUGE_OFFSET_Y, gw, 6, gc1, gc2)
    end

    draw_actor_od_gauge_value(actor, x, y, width)
end
#--------------------------------------------------------------------------
# ○ ドライブゲージ蓄積量の描画
#   actor : アクター
#   x   : 描画先 X 座標
#   y   : 描画先 Y 座標
#   width : 幅
#--------------------------------------------------------------------------
def draw_actor_od_gauge_value(actor, x, y, width = 120)
    text = ""
    value = actor.overdrive * 100.0 / KGC::OverDrive::GAUGE_MAX
    case KGC::OverDrive::GAUGE_VALUE_STYLE
    when KGC::OverDrive::ValueStyle::IMMEDIATE
      text = actor.overdrive.to_s
    when KGC::OverDrive::ValueStyle::RATE
      text = sprintf("%d%%", actor.overdrive * 100 / KGC::OverDrive::GAUGE_MAX)
    when KGC::OverDrive::ValueStyle::RATE_DETAIL1
      text = sprintf("%0.1f%%", value)
    when KGC::OverDrive::ValueStyle::RATE_DETAIL2
      text = sprintf("%0.2f%%", value)
    when KGC::OverDrive::ValueStyle::NUMBER
      text = "#{actor.overdrive / KGC::OverDrive::GAUGE_MAX}"
    else
      return
    end

    last_font_size = self.contents.font.size
    new_font_size= KGC::OverDrive::GAUGE_VALUE_FONT_SIZE
    self.contents.font.size = new_font_size
    self.contents.draw_text(
      x, y + WLH + KGC::OverDrive::GAUGE_OFFSET_Y - new_font_size / 2,
      width, new_font_size, text, 2)
    self.contents.font.size = last_font_size
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_Skill
#==============================================================================

if KGC::OverDrive::HIDE_SKILL_LACK_OF_GAUGE

class Window_Skill < Window_Selectable
#--------------------------------------------------------------------------
# ○ スキルをリストに含めるかどうか
#   skill : スキル
#--------------------------------------------------------------------------
unless $@
    alias include_KGC_OverDrive? include? if method_defined?(:include?)
end
def include?(skill)
    return false if skill == nil

    if defined?(include_KGC_OverDrive?)
      return false unless include_KGC_OverDrive?(skill)
    end

    if skill.overdrive?
      return (@actor.calc_od_cost(skill) <= @actor.overdrive)
    else
      return true
    end
end

if method_defined?(:include_KGC_OverDrive?)
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
    @data = []
    for skill in @actor.skills
      next unless include?(skill)
      @data.push(skill)
      if skill.id == @actor.last_skill_id
      self.index = @data.size - 1
      end
    end
    @item_max = @data.size
    create_contents
    for i in 0...@item_max
      draw_item(i)
    end
end
end

end# <-- class
end# <-- if KGC::OverDrive::HIDE_SKILL_LACK_OF_GAUGE

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Skill
#==============================================================================

class Scene_Skill < Scene_Base
#--------------------------------------------------------------------------
# ● スキルの使用 (味方対象以外の使用効果を適用)
#--------------------------------------------------------------------------
alias use_skill_nontarget_KGC_OverDrive use_skill_nontarget
def use_skill_nontarget
    consume_od_gauge

    use_skill_nontarget_KGC_OverDrive
end
#--------------------------------------------------------------------------
# ○ スキル使用時のドライブゲージ消費
#--------------------------------------------------------------------------
def consume_od_gauge
    if @skill.od_consume_all?
      @actor.overdrive = 0
    else
      @actor.overdrive -= @actor.calc_od_cost(@skill)
    end
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle
#==============================================================================

class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 戦闘終了
#   result : 結果 (0:勝利 1:逃走 2:敗北)
#--------------------------------------------------------------------------
alias battle_end_KGC_OverDrive battle_end
def battle_end(result)
    increase_overdrive_on_battle_end(result)

    battle_end_KGC_OverDrive(result)
end
#--------------------------------------------------------------------------
# ○ 戦闘終了時のドライブゲージ増加処理
#   result : 結果 (0:勝利 1:逃走 2:敗北)
#--------------------------------------------------------------------------
def increase_overdrive_on_battle_end(result)
    case result
    when 0# 勝利
      od_gain = KGC::OverDrive::GAIN_RATE
      $game_party.existing_members.each { |actor|
      actor.overdrive += od_gain if actor.drive_victory?
      }
    when 1# 逃走
      od_gain = KGC::OverDrive::GAIN_RATE
      $game_party.existing_members.each { |actor|
      actor.overdrive += od_gain if actor.drive_escape?
      }
    end
end
#--------------------------------------------------------------------------
# ● 戦闘行動の実行
#--------------------------------------------------------------------------
alias execute_action_KGC_OverDrive execute_action
def execute_action
    increase_overdrive_on_action

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

    # 孤独戦闘
    if battler.drive_alone? && unit.existing_members.size == 1
      od_gain += KGC::OverDrive::GAIN_RATE
    end
    # 行動
    if battler.drive_action?
      od_gain += KGC::OverDrive::GAIN_RATE
    end
    # 瀕死
    if battler.drive_fatal? && battler.hp < battler.maxhp / 4
      od_gain += KGC::OverDrive::GAIN_RATE
    end
    # 防御
    if battler.drive_guard? && battler.action.kind == 0 &&
      battler.action.basic == 1
      od_gain += KGC::OverDrive::GAIN_RATE
    end
    battler.overdrive += od_gain
end
#--------------------------------------------------------------------------
# ● 戦闘行動の実行 : スキル
#--------------------------------------------------------------------------
alias execute_action_skill_KGC_OverDrive execute_action_skill
def execute_action_skill
    execute_action_skill_KGC_OverDrive

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

    skill = @active_battler.action.skill
    if skill.od_consume_all?
      @active_battler.overdrive = 0
    else
      @active_battler.overdrive -= @active_battler.calc_od_cost(skill)
    end
end
#--------------------------------------------------------------------------
# ● ダメージの表示
#   target : 対象者
#   obj    : スキルまたはアイテム
#--------------------------------------------------------------------------
alias display_damage_KGC_OverDrive display_damage
def display_damage(target, obj = nil)
    display_damage_KGC_OverDrive(target, obj)

    return if target.missed || target.evaded
    display_od_damage(target, obj)
end
#--------------------------------------------------------------------------
# ○ ドライブダメージ表示
#   target : 対象者
#   obj    : スキルまたはアイテム
#--------------------------------------------------------------------------
def display_od_damage(target, obj = nil)
    return if target.dead?
    return if target.od_damage == 0
    if target.absorbed                      # 吸収
      fmt = target.actor? ? Vocab::ActorODDrain : Vocab::EnemyODDrain
      text = sprintf(fmt, target.name, Vocab::overdrive)
    elsif target.od_damage > 0            # ダメージ
      fmt = target.actor? ? Vocab::ActorODLoss : Vocab::EnemyODLoss
      text = sprintf(fmt, target.name, Vocab::overdrive)
    else                                    # 回復
      fmt = target.actor? ? Vocab::ActorODRecovery : Vocab::EnemyODRecovery
      text = sprintf(fmt, target.name, Vocab::overdrive)
      Sound.play_recovery
    end
    @message_window.add_instant_text(text)
    wait(30)
end
end

a321321 发表于 2010-1-29 17:38:38

感谢 看看 能不能用..

a321321 发表于 2010-1-29 17:41:17

日文看 不懂 悲剧了...

zhou317432 发表于 2010-1-29 18:16:22

Re:谁有  集气脚本呢? 发下  什

日文苦手 大概就这样。

怒气条最大值以及行动后的增加量之类的
# ◆ ドライブゲージ最大値
  #  普通はこのままでOK。微調整したい場合に変更。
  GAUGE_MAX = 1000
  # ◆ ドライブゲージ増加量
  #  高いほどゲージが溜まりやすい。
  #  マイナス値を指定すると減少。
  #  「被ダメージ」は、受けたダメージの最大 HP に対する割合で増加量を算出。
  #  (500 だと、最大 HP 相当のダメージで 500 溜まる)
  GAIN_RATE = [
     80,  # 攻撃
    500,  # 被ダメージ
    200,  # 勝利
    100,  # 逃走
    160,  # 孤独
     40,  # 行動
    160,  # 瀕死
     50,  # 防御
  ]  # ← この ] は消さないこと!

什么行动增加怒气条

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

关于怒气条的绘制

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

引用怒气条图片 没有图片建议 ENABLE_GENERIC_GAUGE = false

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

怒气条值显示方面

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


死亡后怒气条是否清零

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

不使用怒气条的角色

  # ◆ ドライブゲージを表示しないアクター
  #  ゲージを隠すアクターのIDを配列に格納。
  HIDE_GAUGE_ACTOR = []

不是战斗画面时隐藏怒气条

  # ◆ 非戦闘時はドライブゲージを隠す
  HIDE_GAUGE_NOT_IN_BATTLE = false

没有学会消耗怒气的技能 是否隐藏

  # ◆ オーバードライブスキル未修得ならゲージを隠す
  HIDE_GAUGE_NO_OD_SKILLS  = true

在隐藏怒气条的情况下 是否增加怒气条

  # ◆ ゲージを隠している場合はゲージを増加させない
  NOT_GAIN_GAUGE_HIDING    = true

怒气条不足的时候 隐藏怒气不足的技能

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

战斗时的消息显示

  # ◆ ドライブゲージ名
  GAUGE_NAME = "ドライブゲージ"
  # ◆ ドライブゲージ変動アイテム使用時のメッセージ
  OD_GAIN_MESSAGE = {
    :drain_a   => "%sは%sを奪われた!",  # 吸収: アクター
    :drain_e   => "%sの%sを奪った!",    # 吸収: 敵
    :loss_a    => "%sの%sが減った!",    # 減少: アクター
    :loss_e    => "%sの%sが減った!",    # 減少: 敵
    :recover_a => "%sの%sが増えた!",    # 増加: アクター
    :recover_e => "%sの%sが増えた!",    # 増加: 敵

下面的用法 请自己去试

至于使用 在技能的备注栏
<over_drive n>  N=消耗量
技能备注栏填写  使用后  怒气条增加量加成
<od_gain_rate n%>  N=多少
在技能或者物品栏 备注填写
<ドライブゲージ増加 n> 加
<ドライブゲージ増加 -n> 减  

a321321 发表于 2010-1-29 18:47:08

感谢   
页: [1]
查看完整版本: 谁有  集气脚本呢? 发下  什么是集气?看