1.jpg (69.32 KB, 下载次数: 16)
2.jpg (71.95 KB, 下载次数: 16)
3.jpg (72.41 KB, 下载次数: 16)
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #_/ ◆ 200x/XP 機能再現 - KGC_ReproduceFunctions ◆ VX ◆ #_/ ◇ Last update : 2009/01/02 ◇ #_/---------------------------------------------------------------------------- #_/ 200x/XP の機能を再現します。 #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #============================================================================== # ★ カスタマイズ項目 - Customize BEGIN ★ #============================================================================== module KGC module ReproduceFunctions # ◆ MP 消費武器使用時、消費した MP を表示する SHOW_WEAPON_MP_COST_ON_ATTACK = true # ◆ 「武器属性」と見なす属性の範囲 # この属性を持つスキルは、同じ属性を持つ武器を装備していないと # 使用できなくなります。 # ※素手は 1(格闘)扱いです。 # 範囲オブジェクト(1..6 など)または整数の配列で指定します。 WEAPON_ELEMENTS = [] # [1..6] は [1, 2, 3, 4, 5, 6] と書いてもOK。 # [1..4, 5, 6] のように、両方が混ざってもOK。 end end #============================================================================== # ☆ カスタマイズ項目終了 - Customize END ☆ #============================================================================== $imported = {} if $imported == nil $imported["ReproduceFunctions"] = true module KGC::ReproduceFunctions #-------------------------------------------------------------------------- # ○ 武器属性を整数配列に変換 #-------------------------------------------------------------------------- def self.create_weapon_element_list result = [] WEAPON_ELEMENTS.each { |e| if e.is_a?(Range) result |= e.to_a elsif e.is_a?(Integer) result |= [e] end } return result.sort end # 武器属性配列 WEAPON_ELEMENT_ID_LIST = create_weapon_element_list # 正規表現を定義 module Regexp # ベースアイテム module BaseItem # オートステート AUTO_STATE = /<(?:AUTO_STATE|オートステート)\s*(\d+(?:\s*,\s*\d+)*)>/i # 全体攻撃 WHOLE_ATTACK = /<(?:WHOLE_ATTACK|全体攻撃)>/i # 回避率無視 IGNORE_EVA = /<(?:IGNORE_EVA|回避率無視)>/i # 消費MP MP_COST = /<(?:MP_COST|消費MP)\s*([\-]?\d+)>/i # クリティカル率 CRITICAL = /<(?:CRITICAL|クリティカル率)\s*(\-?\d+)>/i end # アイテム module Item # アイテム使用回数 MULTI_USABLE = /<(?:MULTI_USABLE|使用回数)\s*(\d+)>/i # スキル発動アイテム EXEC_SKILL = /<(?:EXEC_SKILL|スキル発動)\s*(\d+)>/i end # エネミー module Enemy # 半透明 TRANSLUCENT = /<(?:TRANSLUCENT|半透明)>/i # クリティカル率 CRITICAL = /<(?:CRITICAL|クリティカル率)\s*(\d+)>/i end # ステート module State # パラメータ名 PARAMETER_NAME = { "maxhp"=>"MAXHP_RATE|最大HP", "maxmp"=>"MAXMP_RATE|最大MP" } # 打撃関係度で封印 (日本語) SEAL_ATK_F_JP = /<打撃関係度\s*(\d+)\s*以上封印>/ # 打撃関係度で封印 (英語) SEAL_ATK_F_EN = /<SEAL_ATK_F\s*(\d+)>/i # 精神関係度で封印 (日本語) SEAL_SPI_F_JP = /<精神関係度\s*(\d+)\s*以上封印>/ # 精神関係度で封印 (英語) SEAL_SPI_F_EN = /<SEAL_SPI_F\s*(\d+)>/i # 付加ステート PLUS_STATE = /<(?:PLUS_STATE|付加ステート)\s*(\d+(?:\s*,\s*\d+)*)>/i end end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ RPG::BaseItem #============================================================================== class RPG::BaseItem #-------------------------------------------------------------------------- # ○ 再現機能のキャッシュ生成 #-------------------------------------------------------------------------- def create_reproduce_functions_cache @__whole_attack = false @__ignore_eva = false @__mp_cost = 0 @__cri = 0 self.note.each_line { |line| case line when KGC::ReproduceFunctions::Regexp::BaseItem::WHOLE_ATTACK # 全体攻撃 @__whole_attack = true when KGC::ReproduceFunctions::Regexp::BaseItem::IGNORE_EVA # 回避率無視 @__ignore_eva = true when KGC::ReproduceFunctions::Regexp::BaseItem::MP_COST # 通常攻撃消費 MP @__mp_cost += $1.to_i when KGC::ReproduceFunctions::Regexp::BaseItem::CRITICAL # クリティカル修正 @__cri += $1.to_i end } create_auto_state_cache end #-------------------------------------------------------------------------- # ○ オートステートのキャッシュ生成 #-------------------------------------------------------------------------- def create_auto_state_cache # ID のキャッシュ生成 @__auto_state_ids = [] @__auto_state_ids_battle = [] self.note.each_line { |line| next unless line =~ KGC::ReproduceFunctions::Regexp::BaseItem::AUTO_STATE $1.scan(/\d+/).each { |num| if (state = $data_states[num.to_i]) != nil @__auto_state_ids_battle << state.id unless state.battle_only @__auto_state_ids << state.id end end } } # オブジェクトのキャッシュ作成 @__auto_states = [] @__auto_state_ids.each { |i| @__auto_states << $data_states[i] } @__auto_states_battle = [] @__auto_state_ids_battle.each { |i| @__auto_states_battle << $data_states[i] } end #-------------------------------------------------------------------------- # ○ 全体攻撃判定 #-------------------------------------------------------------------------- def whole_attack create_reproduce_functions_cache if @__whole_attack == nil return @__whole_attack end #-------------------------------------------------------------------------- # ○ 回避無視判定 #-------------------------------------------------------------------------- def ignore_eva create_reproduce_functions_cache if @__ignore_eva == nil return @__ignore_eva end #-------------------------------------------------------------------------- # ○ 通常攻撃消費 MP #-------------------------------------------------------------------------- def mp_cost create_reproduce_functions_cache if @__mp_cost == nil return @__mp_cost end #-------------------------------------------------------------------------- # ○ クリティカル修正 #-------------------------------------------------------------------------- def cri create_reproduce_functions_cache if @__cri == nil return @__cri end #-------------------------------------------------------------------------- # ○ オートステート ID #-------------------------------------------------------------------------- def auto_state_ids return ($game_temp.in_battle ? auto_state_ids_battle : auto_state_ids_always) end #-------------------------------------------------------------------------- # ○ オートステート ID (常時) #-------------------------------------------------------------------------- def auto_state_ids_always create_reproduce_functions_cache if @__auto_state_ids == nil return @__auto_state_ids end #-------------------------------------------------------------------------- # ○ オートステート ID (戦闘時) #-------------------------------------------------------------------------- def auto_state_ids_battle create_reproduce_functions_cache if @__auto_state_ids_battle == nil return @__auto_state_ids_battle end #-------------------------------------------------------------------------- # ○ オートステート #-------------------------------------------------------------------------- def auto_states return ($game_temp.in_battle ? auto_states_battle : auto_states_always) end #-------------------------------------------------------------------------- # ○ オートステート (常時) #-------------------------------------------------------------------------- def auto_states_always create_reproduce_functions_cache if @__auto_states == nil return @__auto_states end #-------------------------------------------------------------------------- # ○ オートステート (戦闘時) #-------------------------------------------------------------------------- def auto_states_battle create_reproduce_functions_cache if @__auto_states_battle == nil return @__auto_states_battle end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ RPG::Item #============================================================================== class RPG::Item < RPG::UsableItem #-------------------------------------------------------------------------- # ○ 再現機能のキャッシュ生成 #-------------------------------------------------------------------------- def create_reproduce_functions_cache super @__usable_count = 1 @__skill_id = 0 self.note.each_line { |line| case line when KGC::ReproduceFunctions::Regexp::Item::MULTI_USABLE # 使用可能回数 @__usable_count = $1.to_i when KGC::ReproduceFunctions::Regexp::Item::EXEC_SKILL # 発動スキル ID @__skill_id = $1.to_i end } end #-------------------------------------------------------------------------- # ● アニメーション ID #-------------------------------------------------------------------------- def animation_id if exec_skill? return $data_skills[skill_id].animation_id else return @animation_id end end #-------------------------------------------------------------------------- # ○ 使用可能回数 #-------------------------------------------------------------------------- def usable_count create_reproduce_functions_cache if @__usable_count == nil return @__usable_count end #-------------------------------------------------------------------------- # ○ スキル発動判定 #-------------------------------------------------------------------------- def exec_skill? return (skill_id > 0) end #-------------------------------------------------------------------------- # ○ 発動スキル ID #-------------------------------------------------------------------------- def skill_id create_reproduce_functions_cache if @__skill_id == nil return @__skill_id end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ RPG::Skill #============================================================================== class RPG::Skill < RPG::UsableItem #-------------------------------------------------------------------------- # ○ 再現機能のキャッシュ生成 #-------------------------------------------------------------------------- def create_reproduce_functions_cache super @__weapon_element_set = self.element_set & KGC::ReproduceFunctions::WEAPON_ELEMENT_ID_LIST end #-------------------------------------------------------------------------- # ○ 使用時に必要な武器属性を取得 #-------------------------------------------------------------------------- def weapon_element_set create_reproduce_functions_cache if @__weapon_element_set == nil return @__weapon_element_set end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ RPG::Enemy #============================================================================== class RPG::Enemy #-------------------------------------------------------------------------- # ○ 再現機能のキャッシュ生成 #-------------------------------------------------------------------------- def create_reproduce_functions_cache @__translucent = false @__cri = 0 self.note.each_line { |line| case line when KGC::ReproduceFunctions::Regexp::Enemy::TRANSLUCENT # 半透明 @__translucent = true when KGC::ReproduceFunctions::Regexp::Enemy::CRITICAL # クリティカル修正 @__cri += $1.to_i end } end #-------------------------------------------------------------------------- # ○ 半透明 #-------------------------------------------------------------------------- def translucent? create_reproduce_functions_cache if @__translucent == nil return @__translucent end #-------------------------------------------------------------------------- # ○ クリティカル修正 #-------------------------------------------------------------------------- def cri create_reproduce_functions_cache if @__cri == nil return @__cri end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ RPG::State #============================================================================== class RPG::State #-------------------------------------------------------------------------- # ○ 再現機能のキャッシュ生成 #-------------------------------------------------------------------------- def create_reproduce_functions_cache @__seal_atk_f = 999 @__seal_spi_f = 999 @__plus_state_set = [] self.note.each_line { |line| case line when KGC::ReproduceFunctions::Regexp::State::SEAL_ATK_F_JP, KGC::ReproduceFunctions::Regexp::State::SEAL_ATK_F_EN # 封印するスキルの打撃関係度 @__seal_atk_f = $1.to_i when KGC::ReproduceFunctions::Regexp::State::SEAL_SPI_F_JP, KGC::ReproduceFunctions::Regexp::State::SEAL_SPI_F_EN # 封印するスキルの精神関係度 @__seal_spi_f = $1.to_i when KGC::ReproduceFunctions::Regexp::State::PLUS_STATE # 付加ステート $1.scan(/\d+/).each { |num| if (state = $data_states[num.to_i]) != nil @__plus_state_set << state.id end } end } create_parameter_rate_cache end #-------------------------------------------------------------------------- # ○ パラメータ修正値のキャッシュ生成 #-------------------------------------------------------------------------- def create_parameter_rate_cache @__parameter_rate = {} # 初期化 KGC::ReproduceFunctions::Regexp::State::PARAMETER_NAME.each_key { |k| @__parameter_rate[k] = 100 } # メモ反映 self.note.each_line { |line| KGC::ReproduceFunctions::Regexp::State::PARAMETER_NAME.each { |k, v| if line =~ /<(?:#{v})[ ]*(\d+)[%%]>/i @__parameter_rate[k] = @__parameter_rate[k] * $1.to_i / 100 break end } } end #-------------------------------------------------------------------------- # ○ MaxHP 修正 #-------------------------------------------------------------------------- def maxhp_rate create_reproduce_functions_cache if @__parameter_rate == nil return @__parameter_rate["maxhp"] end #-------------------------------------------------------------------------- # ○ MaxMP 修正 #-------------------------------------------------------------------------- def maxmp_rate create_reproduce_functions_cache if @__parameter_rate == nil return @__parameter_rate["maxmp"] end #-------------------------------------------------------------------------- # ○ 封印するスキルの打撃関係度 #-------------------------------------------------------------------------- def seal_atk_f create_reproduce_functions_cache if @__seal_atk_f == nil return @__seal_atk_f end #-------------------------------------------------------------------------- # ○ 封印するスキルの精神関係度 #-------------------------------------------------------------------------- def seal_spi_f create_reproduce_functions_cache if @__seal_spi_f == nil return @__seal_spi_f end #-------------------------------------------------------------------------- # ○ 付加ステート #-------------------------------------------------------------------------- def plus_state_set create_reproduce_functions_cache if @__plus_state_set == nil return @__plus_state_set end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :exec_skill_on_item # アイテムによるスキル発動フラグ #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_KGC_ReproduceFunctions initialize def initialize initialize_KGC_ReproduceFunctions @exec_skill_on_item = false end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 現在のステートをオブジェクトの配列で取得 #-------------------------------------------------------------------------- alias states_KGC_ReproduceFunctions states def states result = states_KGC_ReproduceFunctions + auto_states result.sort! { |a, b| b.priority <=> a.priority } return result end #-------------------------------------------------------------------------- # ● MaxHP の取得 #-------------------------------------------------------------------------- alias maxhp_KGC_ReproduceFunctions maxhp def maxhp n = maxhp_KGC_ReproduceFunctions states.each { |state| n *= state.maxhp_rate / 100.0 } return [[Integer(n), 1].max, maxhp_limit].min end #-------------------------------------------------------------------------- # ● MaxMP の取得 #-------------------------------------------------------------------------- alias maxmp_KGC_ReproduceFunctions maxmp def maxmp n = maxmp_KGC_ReproduceFunctions states.each { |state| n *= state.maxmp_rate / 100.0 } limit = (defined?(maxmp_limit) ? maxmp_limit : 9999) return [[Integer(n), 0].max, limit].min end #-------------------------------------------------------------------------- # ● HP の取得 #-------------------------------------------------------------------------- alias hp_KGC_ReproduceFunctions_Battler hp def hp @hp = maxhp if @hp > maxhp return hp_KGC_ReproduceFunctions_Battler end #-------------------------------------------------------------------------- # ● MP の取得 #-------------------------------------------------------------------------- alias mp_KGC_ReproduceFunctions_Battler mp def mp @mp = maxmp if @mp > maxmp return mp_KGC_ReproduceFunctions_Battler end #-------------------------------------------------------------------------- # ○ オートステートの ID を取得 #-------------------------------------------------------------------------- def auto_state_ids return auto_states(true) end #-------------------------------------------------------------------------- # ○ オートステートの配列を取得 # id_only : ID のみを取得 #-------------------------------------------------------------------------- def auto_states(id_only = false) return [] end #-------------------------------------------------------------------------- # ● ステートの検査 # state_id : ステート ID # 該当するステートが付加されていれば true を返す。 #-------------------------------------------------------------------------- alias state_KGC_ReproduceFunctions? state? def state?(state_id) return (state_KGC_ReproduceFunctions?(state_id) || auto_state?(state_id)) end #-------------------------------------------------------------------------- # ● ステートの付加 # state_id : ステート ID #-------------------------------------------------------------------------- alias add_state_KGC_ReproduceFunctions add_state def add_state(state_id) last_states = @states.dup add_state_KGC_ReproduceFunctions(state_id) if (@states - last_states).include?(state_id) # ステートが付加された場合 state = $data_states[state_id] # [付加するステート] を適用 state.plus_state_set.each { |i| add_state(i) } end end #-------------------------------------------------------------------------- # ○ オートステートの検査 # state_id : ステート ID # 該当するステートが付加されていれば true を返す。 #-------------------------------------------------------------------------- def auto_state?(state_id) return auto_state_ids.include?(state_id) end #-------------------------------------------------------------------------- # ● ステートの解除 # state_id : ステート ID #-------------------------------------------------------------------------- alias remove_state_KGC_ReproduceFunctions remove_state def remove_state(state_id) if auto_state?(state_id) # オートステートは解除しない return end remove_state_KGC_ReproduceFunctions(state_id) end #-------------------------------------------------------------------------- # ○ 半透明化判定 #-------------------------------------------------------------------------- def translucent? # エネミーの場合は Game_Enemy で再定義 return false end #-------------------------------------------------------------------------- # ○ 装備オプション [全体攻撃] の取得 #-------------------------------------------------------------------------- def whole_attack return false end #-------------------------------------------------------------------------- # ○ 装備オプション [回避無視] の取得 #-------------------------------------------------------------------------- def ignore_eva return false end #-------------------------------------------------------------------------- # ○ MP ダメージ加算 # value : 加算する値 #-------------------------------------------------------------------------- def add_mp_damage(value) @mp_damage += value end #-------------------------------------------------------------------------- # ○ 通常攻撃の消費 MP 計算 #-------------------------------------------------------------------------- def calc_attack_mp_cost return 0 end #-------------------------------------------------------------------------- # ● スキルの使用可能判定 # skill : スキル #-------------------------------------------------------------------------- alias skill_can_use_KGC_ReproduceFunctions? skill_can_use? def skill_can_use?(skill) return false unless skill.is_a?(RPG::Skill) unless $imported["CooperationSkill"] && $game_temp.judging_cooperation_skill return false if skill_seal?(skill) return false unless skill_satisfied_weapon_element?(skill) end return skill_can_use_KGC_ReproduceFunctions?(skill) end #-------------------------------------------------------------------------- # ○ スキル封印判定 #-------------------------------------------------------------------------- def skill_seal?(skill) return (seal_atk_f <= skill.atk_f || seal_spi_f <= skill.spi_f) end #-------------------------------------------------------------------------- # ○ 封印する打撃関係度を取得 #-------------------------------------------------------------------------- def seal_atk_f n = 999 states.each { |state| n = [n, state.seal_atk_f].min } return n end #-------------------------------------------------------------------------- # ○ 封印する精神関係度を取得 #-------------------------------------------------------------------------- def seal_spi_f n = 999 states.each { |state| n = [n, state.seal_spi_f].min } return n end #-------------------------------------------------------------------------- # ○ 必要な武器属性を満たしているか判定 #-------------------------------------------------------------------------- def skill_satisfied_weapon_element?(skill) return true end #-------------------------------------------------------------------------- # ● 最終回避率の計算 # user : 攻撃者、スキルまたはアイテムの使用者 # obj : スキルまたはアイテム (通常攻撃の場合は nil) #-------------------------------------------------------------------------- alias calc_eva_KGC_ReproduceFunctions calc_eva def calc_eva(user, obj = nil) eva = calc_eva_KGC_ReproduceFunctions(user, obj) if obj == nil && user.ignore_eva # 通常攻撃かつ回避無視の場合 eva = 0 end return eva end #-------------------------------------------------------------------------- # ● アイテムの効果適用 # user : アイテムの使用者 # item : アイテム #-------------------------------------------------------------------------- alias item_effect_KGC_ReproduceFunctions item_effect def item_effect(user, item) # スキル発動判定 if item.exec_skill? $game_temp.exec_skill_on_item = true skill_effect(user, $data_skills[item.skill_id]) $game_temp.exec_skill_on_item = false else item_effect_KGC_ReproduceFunctions(user, item) end end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Game_BattleAction #============================================================================== class Game_BattleAction #-------------------------------------------------------------------------- # ● 通常攻撃のターゲット作成 #-------------------------------------------------------------------------- alias make_attack_targets_KGC_ReproduceFunctions make_attack_targets def make_attack_targets unless battler.whole_attack # 全体攻撃でない return make_attack_targets_KGC_ReproduceFunctions end targets = [] if battler.confusion? targets += friends_unit.existing_members else targets += opponents_unit.existing_members end if battler.dual_attack # 連続攻撃 targets += targets end return targets.compact end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● クリティカル率の取得 #-------------------------------------------------------------------------- alias cri_KGC_ReproduceFunctions cri def cri n = cri_KGC_ReproduceFunctions equips.compact.each { |item| n += item.cri } return n end #-------------------------------------------------------------------------- # ○ オートステートの配列を取得 # id_only : ID のみを取得 #-------------------------------------------------------------------------- def auto_states(id_only = false) result = [] equips.compact.each { |item| result |= (id_only ? item.auto_state_ids : item.auto_states) } return result end #-------------------------------------------------------------------------- # ○ 装備オプション [全体攻撃] の取得 #-------------------------------------------------------------------------- def whole_attack equips.compact.each { |item| return true if item.whole_attack } return false end #-------------------------------------------------------------------------- # ○ 装備オプション [回避無視] の取得 #-------------------------------------------------------------------------- def ignore_eva equips.compact.each { |item| return true if item.ignore_eva } return false end #-------------------------------------------------------------------------- # ○ 通常攻撃の消費 MP 計算 #-------------------------------------------------------------------------- def calc_attack_mp_cost n = 0 equips.compact.each { |item| n += item.mp_cost } return n end #-------------------------------------------------------------------------- # ○ 必要な武器属性を満たしているか判定 #-------------------------------------------------------------------------- def skill_satisfied_weapon_element?(skill) elements = skill.weapon_element_set return (self.element_set & elements) == elements end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Game_Enemy #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ○ 半透明化判定 #-------------------------------------------------------------------------- def translucent? return enemy.translucent? end #-------------------------------------------------------------------------- # ● クリティカル率の取得 #-------------------------------------------------------------------------- alias cri_KGC_ReproduceFunctions cri def cri n = cri_KGC_ReproduceFunctions if enemy.has_critical && enemy.cri != 0 n += enemy.cri - 10 end return n end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Game_Party #============================================================================== class Game_Party < Game_Unit #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_KGC_ReproduceFunctions initialize def initialize initialize_KGC_ReproduceFunctions @item_use_count = {} # 所持品使用回数ハッシュ (アイテム ID) end #-------------------------------------------------------------------------- # ● アイテムの減少 # item : アイテム # n : 個数 # include_equip : 装備品も含める #-------------------------------------------------------------------------- alias lose_item_KGC_ReproduceFunctions lose_item def lose_item(item, n, include_equip = false) lose_item_KGC_ReproduceFunctions(item, n, include_equip) # アイテムが無くなったら使用回数をリセット if item.is_a?(RPG::Item) && item.consumable && item_number(item) == 0 @item_use_count[item.id] = 0 end end #-------------------------------------------------------------------------- # ● アイテムの消耗 # item : アイテム #-------------------------------------------------------------------------- alias consume_item_KGC_ReproduceFunctions consume_item def consume_item(item) if item.is_a?(RPG::Item) && item.consumable update_use_count(item) # 使用回数が 0 の場合のみ消耗 if @item_use_count[item.id] == 0 consume_item_KGC_ReproduceFunctions(item) end else consume_item_KGC_ReproduceFunctions(item) end end #-------------------------------------------------------------------------- # ○ 使用回数の更新 # item : アイテム # 指定アイテムの使用回数を 1 増やす。 # 使用後に消耗する場合は、使用回数を 0 にする。 #-------------------------------------------------------------------------- def update_use_count(item) if @item_use_count == nil @item_use_count = {} end unless @item_use_count.has_key?(item.id) @item_use_count[item.id] = 0 end @item_use_count[item.id] += 1 # 使用可能回数に達したら、使用回数を 0 にする if @item_use_count[item.id] >= item.usable_count @item_use_count[item.id] = 0 end end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Sprite_Battler #============================================================================== class Sprite_Battler < Sprite_Base #-------------------------------------------------------------------------- # ● エフェクトの更新 #-------------------------------------------------------------------------- alias update_effect_KGC_ReproduceFunctions update_effect def update_effect # エフェクト実行前に半透明化判定をしておく trans_flag = (@effect_duration > 0 && @battler.translucent?) update_effect_KGC_ReproduceFunctions if trans_flag self.opacity /= 2 end end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 対象敵キャラ選択の開始 #-------------------------------------------------------------------------- alias start_target_enemy_selection_KGC_ReproduceFunctions start_target_enemy_selection def start_target_enemy_selection # 全体通常攻撃なら選択をスキップ if @active_battler.action.kind == 0 && @active_battler.action.basic == 0 && @active_battler.whole_attack next_actor return end start_target_enemy_selection_KGC_ReproduceFunctions end #-------------------------------------------------------------------------- # ● 戦闘行動の実行 : 攻撃 #-------------------------------------------------------------------------- alias execute_action_attack_KGC_ReproduceFunctions execute_action_attack def execute_action_attack execute_action_attack_KGC_ReproduceFunctions # 攻撃者の MP 消費 mp_cost = @active_battler.calc_attack_mp_cost return if mp_cost == 0 @active_battler.mp -= mp_cost if KGC::ReproduceFunctions::SHOW_WEAPON_MP_COST_ON_ATTACK @active_battler.add_mp_damage(mp_cost) display_mp_damage(@active_battler) end end end
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |