赞 | 0 |
VIP | 0 |
好人卡 | 2 |
积分 | 12 |
经验 | 1937 |
最后登录 | 2012-6-16 |
在线时间 | 274 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 1165
- 在线时间
- 274 小时
- 注册时间
- 2011-7-24
- 帖子
- 272
|
本帖最后由 昔日辉煌灬 于 2011-8-24 17:50 编辑
这个脚本- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/ ◆ MP 消費改造 - KGC_MPCostAlter ◆ VX ◆
- #_/ ◇ Last update : 2008/02/06 ◇
- #_/----------------------------------------------------------------------------
- #_/ 様々な消費 MP を作成する機能を追加します。
- #_/============================================================================
- #_/ ダメージ値がおかしい場合は、導入位置を移動してください。
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #==============================================================================
- # ★ カスタマイズ項目 ★
- #==============================================================================
- module KGC
- module MPCostAlter
- # ◆ 消費後 HP 0 許可
- # true : HP 消費後にちょうど 0 になる場合でも使用可能
- # false : HP 消費後に 1 以上残る状況でなければ使用不可
- PERMIT_ZERO_HP = false
- # ◆ HP 消費制限解除
- # true : HP 不足の場合でも使用可能。その場合、使用後は戦闘不能になる。
- # false : HP 不足の場合は使用不可能。(通常)
- RELEASE_HP_LIMIT = false
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- $imported = {} if $imported == nil
- $imported["MPCostAlter"] = true
- module KGC::MPCostAlter
- # 正規表現
- module Regexp
- # スキル
- module Skill
- # HP 消費
- CONSUME_HP = /<(?:CONSUME_HP|HP消費)>/i
- # MP 割合消費
- MP_COST_RATE = /<(MAX)?(?:MP_COST_RATE|MP割合消費)>/i
- # 消費 MP 比例ダメージ
- MP_PROPORTIONAL_DAMAGE =
- /<(?:MP_PROPORTIONAL_DAMAGE|消費MP比例ダメージ)>/i
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ RPG::Skill
- #==============================================================================
- class RPG::Skill < RPG::UsableItem
- #--------------------------------------------------------------------------
- # ○ MP 消費改造のキャッシュを生成
- #--------------------------------------------------------------------------
- def create_mp_cost_alter_cache
- @__consume_hp = false
- @__mp_cost_rate = false
- @__max_mp_cost_rate = false
- @__mp_proportional_damage = false
- self.note.each_line { |prop|
- case prop
- when KGC::MPCostAlter::Regexp::Skill::CONSUME_HP
- # HP 消費
- @__consume_hp = true
- when KGC::MPCostAlter::Regexp::Skill::MP_COST_RATE
- # MP 割合消費
- @__mp_cost_rate = true
- @__max_mp_cost_rate = ($1 != nil)
- when KGC::MPCostAlter::Regexp::Skill::MP_PROPORTIONAL_DAMAGE
- # 消費 MP 比例ダメージ
- @__mp_proportional_damage = true
- end
- }
- end
- #--------------------------------------------------------------------------
- # ○ HP 消費
- #--------------------------------------------------------------------------
- def consume_hp
- create_mp_cost_alter_cache if @__consume_hp == nil
- return @__consume_hp
- end
- #--------------------------------------------------------------------------
- # ○ 消費 MP 割合
- #--------------------------------------------------------------------------
- def mp_cost_rate
- create_mp_cost_alter_cache if @__mp_cost_rate == nil
- return (@__mp_cost_rate ? self.mp_cost : -1)
- end
- #--------------------------------------------------------------------------
- # ○ MaxMP 割合消費
- #--------------------------------------------------------------------------
- def max_mp_cost_rate
- create_mp_cost_alter_cache if @__max_mp_cost_rate == nil
- return @__max_mp_cost_rate
- end
- #--------------------------------------------------------------------------
- # ○ 消費 MP 比例ダメージ
- #--------------------------------------------------------------------------
- def mp_proportional_damage
- create_mp_cost_alter_cache if @__mp_proportional_damage == nil
- return @__mp_proportional_damage
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Game_Battler
- #==============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :spend_cost # 消費した HP/MP
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias initialize_KGC_MPCostAlter initialize
- def initialize
- initialize_KGC_MPCostAlter
- @spend_cost = 0
- end
- #--------------------------------------------------------------------------
- # ● スキルの消費 MP 計算
- # skill : スキル
- #--------------------------------------------------------------------------
- alias calc_mp_cost_KGC_MPCostAlter calc_mp_cost
- def calc_mp_cost(skill)
- return 0 if skill.consume_hp # HP 消費
- if skill.mp_cost_rate < 0 # 割合消費でない
- return calc_mp_cost_KGC_MPCostAlter(skill)
- end
- if skill.max_mp_cost_rate # MaxMP 割合消費
- return calc_skill_cost_rate(skill, maxmp)
- else # MP 割合消費
- return calc_skill_cost_rate(skill, mp)
- end
- end
- #--------------------------------------------------------------------------
- # ○ スキルの割合消費量計算
- # skill : スキル
- # base : 基準値
- #--------------------------------------------------------------------------
- def calc_skill_cost_rate(skill, base)
- return base * skill.mp_cost_rate / 100
- end
- #--------------------------------------------------------------------------
- # ○ スキルの消費 HP 計算
- # skill : スキル
- #--------------------------------------------------------------------------
- def calc_hp_cost(skill)
- return 0 unless skill.consume_hp # HP 消費でない
- if skill.mp_cost_rate < 0 # 割合消費でない
- return skill.mp_cost
- end
- if skill.max_mp_cost_rate # MaxHP 割合消費
- return calc_skill_cost_rate(skill, maxhp)
- else # HP 割合消費
- return calc_skill_cost_rate(skill, hp)
- end
- end
- #--------------------------------------------------------------------------
- # ○ 消費すべき HP/MP 量を保持
- # skill : スキル
- #--------------------------------------------------------------------------
- def set_spend_cost(skill)
- @spend_cost = [calc_hp_cost(skill), calc_mp_cost(skill)].max
- end
- #--------------------------------------------------------------------------
- # ● スキルの使用可能判定
- # skill : スキル
- #--------------------------------------------------------------------------
- alias skill_can_use_KGC_MPCostAlter? skill_can_use?
- def skill_can_use?(skill)
- return false unless skill.is_a?(RPG::Skill) # スキルでない
- return false unless mp_cost_restrict_clear?(skill) # MP 制限抵触
- return false unless hp_cost_restrict_clear?(skill) # HP 制限抵触
- return skill_can_use_KGC_MPCostAlter?(skill)
- end
- #--------------------------------------------------------------------------
- # ○ MP 制限クリア判定
- # skill : スキル
- #--------------------------------------------------------------------------
- def mp_cost_restrict_clear?(skill)
- return true if skill.consume_hp # HP 消費
- # 割合消費の場合は、消費量が 1 以上でないと使用不可
- if skill.mp_cost_rate >= 0
- return false if calc_mp_cost(skill) == 0
- end
- return calc_mp_cost(skill) <= mp
- end
- #--------------------------------------------------------------------------
- # ○ HP 制限クリア判定
- # skill : スキル
- #--------------------------------------------------------------------------
- def hp_cost_restrict_clear?(skill)
- return true unless skill.consume_hp # MP 消費
- # 割合消費の場合は、消費量が 1 以上でないと使用不可
- if skill.mp_cost_rate >= 0
- return false if calc_hp_cost(skill) == 0
- end
- if KGC::MPCostAlter::RELEASE_HP_LIMIT
- # 制限解除の場合は使用可能
- return true
- elsif KGC::MPCostAlter::PERMIT_ZERO_HP
- # HP と同量まで消費可能
- return calc_hp_cost(skill) <= hp
- else
- # 1 以上残る必要あり
- return calc_hp_cost(skill) < hp
- end
- end
- #--------------------------------------------------------------------------
- # ● スキルまたはアイテムによるダメージ計算
- # user : スキルまたはアイテムの使用者
- # obj : スキルまたはアイテム
- # 結果は @hp_damage または @mp_damage に代入する。
- #--------------------------------------------------------------------------
- alias make_obj_damage_value_KGC_MPCostAlter make_obj_damage_value
- def make_obj_damage_value(user, obj)
- # 消費 MP 比例ダメージでない場合
- unless obj.is_a?(RPG::Skill) && obj.mp_proportional_damage
- # 元の計算式を使用
- make_obj_damage_value_KGC_MPCostAlter(user, obj)
- return
- end
- damage = user.spend_cost * obj.base_damage / 100 # 基本ダメージ算出
- damage *= elements_max_rate(obj.element_set) # 属性修正
- damage /= 100
- damage = apply_variance(damage, obj.variance) # 分散
- damage = apply_guard(damage) # 防御修正
- if obj.damage_to_mp
- @mp_damage = damage # MP にダメージ
- else
- @hp_damage = damage # HP にダメージ
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_Skill
- #==============================================================================
- class Window_Skill < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 項目の描画
- # index : 項目番号
- #--------------------------------------------------------------------------
- def draw_item(index)
- rect = item_rect(index)
- self.contents.clear_rect(rect)
- skill = @data[index]
- if skill != nil
- rect.width -= 4
- enabled = @actor.skill_can_use?(skill)
- draw_item_name(skill, rect.x, rect.y, enabled)
- if skill.consume_hp
- # HP 消費
- text = sprintf("%s%d", Vocab.hp_a, @actor.calc_hp_cost(skill))
- else
- # MP 消費
- text = @actor.calc_mp_cost(skill).to_s
- end
- self.contents.draw_text(rect, text, 2)
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_Skill
- #==============================================================================
- class Scene_Skill < Scene_Base
- #--------------------------------------------------------------------------
- # ● ターゲットの決定
- # 効果なしの場合 (戦闘不能にポーションなど) ブザー SE を演奏。
- #--------------------------------------------------------------------------
- alias determine_target_KGC_MPCostAlter determine_target
- def determine_target
- @actor.set_spend_cost(@skill) # 消費する HP/MP をセット
- determine_target_KGC_MPCostAlter
- end
- #--------------------------------------------------------------------------
- # ● スキルの使用 (味方対象以外の使用効果を適用)
- #--------------------------------------------------------------------------
- alias use_skill_nontarget_KGC_MPCostAlter use_skill_nontarget
- def use_skill_nontarget
- @actor.hp -= @actor.calc_hp_cost(@skill)
- use_skill_nontarget_KGC_MPCostAlter
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_Battle
- #==============================================================================
- class Scene_Battle < Scene_Base
- #--------------------------------------------------------------------------
- # ● 戦闘行動の実行 : スキル
- #--------------------------------------------------------------------------
- alias execute_action_skill_KGC_MPCostAlter execute_action_skill
- def execute_action_skill
- skill = @active_battler.action.skill
- @active_battler.set_spend_cost(skill) # 消費する HP/MP をセット
- if skill.consume_hp
- hp_cost = [@active_battler.hp - 1,
- @active_battler.spend_cost].min # HP を 1 だけ残す
- @active_battler.hp -= hp_cost
- end
- execute_action_skill_KGC_MPCostAlter
- # 死亡するはずだった場合
- if skill.consume_hp && hp_cost < @active_battler.spend_cost
- @active_battler.hp = 0 # HP を 0 にする
- display_added_states(@active_battler) # 死亡メッセージの表示
- end
- end
- end
复制代码 在技能备注里写 <HP消費 x> ← x 是消耗数 |
|