赞 | 0 |
VIP | 0 |
好人卡 | 12 |
积分 | 1 |
经验 | 5827 |
最后登录 | 2020-5-5 |
在线时间 | 116 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 55
- 在线时间
- 116 小时
- 注册时间
- 2008-5-12
- 帖子
- 264
|
有个技能消费改造脚本- #==============================================================================
- # 本汉化脚本来自www.66RPG.com,使用和转载请保留此信息
- #==============================================================================
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/
- #
- # ◆ MP 消費改造 - KGC_MPCostAlter ◆ VX ◆
- #
- #
- #_/ ◇ Last update : 2008/02/06 ◇
- #
- #原脚本来源:http://f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/techlist_vx.html
- #
- #
- # 汉化:CHAR工作室
- #_/----------------------------------------------------------------------------
- #_/
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #
- #功能介绍:
- #
- #HP消费:使用特定的技能时消耗HP
- #
- #MP比例消费:让特定按照一定比例来消耗MP,而非消耗固定值
- #
- #消费MP比例伤害:让特定技能的伤害数值变成跟该技能的MP消耗量相关联
- #
- #
- #-----------------------------------------------------------------------------
- #
- #—————————————————使用方法——————————————————
- #
- #一、HP消费:
- #
- # 在特定技能的备注中加入括弧和文字:<HP消费>
- #
- # 效果:使用该技能时将消费HP,而且会在技能消耗值前面表示出来
- #
- #
- #
- #
- #二、MP比例消费:
- #
- # 01、残存MP比例消费
- #
- # 在特定技能的备注中加入括弧和文字:<MP比例消费>
- #
- # 效果:如果该技能在数据库中的消费量是10,那么在使用该技能时
- # 将消耗当前残存的MP的10%。
- #
- # 02、最大MP比例消费
- #
- # 在特定技能的备注中加入括弧和文字:<MAXMP比例消费>
- #
- # 效果:如果该技能在数据库中的消费量是10,那么在使用该技能时
- # 将消费该角色最大MP的10%。
- #
- #
- #
- #三、消费MP比例伤害
- #
- # 在特定技能的备注中加入括弧和文字:<消费MP比例伤害>
- #
- # 效果:很囧的效果,技能的基本伤害值变为该技能所消耗MP数值的一定比例。
- #
- # 比如,该技能在数据库中的MP消费量是40,基本伤害是500
- # 那么该技能的实际基本伤害将是所消费MP的500% = 200
- #
- #
- #==============================================================================
- # ★ 脚本设定项目 ★
- #==============================================================================
- module KGC
- module MPCostAlter
- # ◆ HP 为0场合下的设定
- # true : HP 消费到0的时候,仍然能够继续使用相应技能
- # false : HP 消费到0的时候,无法继续使用相应技能
- PERMIT_ZERO_HP = false
- # ◆ HP 消費制限解除
- # true : HP 不足的时候仍然能够使用HP消耗的技能,但是使用后角色死亡
- # false : HP 不足的时候无法使用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.split(/[\r\n]+/).each { |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 = "- " + @actor.calc_hp_cost(skill).to_s + " HP"
- else
- # MP 消費
- if @actor.calc_mp_cost(skill) != 0
- text = "- " + @actor.calc_mp_cost(skill).to_s + " MP"
- else
- text = "--"
- end
- 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
复制代码 |
|