Project1
标题:
如何增加体力系统
[打印本页]
作者:
yuanlongyu
时间:
2011-8-24 16:51
标题:
如何增加体力系统
本帖最后由 yuanlongyu 于 2011-8-24 17:24 编辑
GTBS v1.5.1 如何能增加像
金庸奇侠传
一样的体力系统
攻击 技能都要消耗体力 不足则无法使用攻击和技能
(还有另一问题 攻击误伤和帮敌人回复问题)
谢谢
dsu_plus_rewardpost_czw
作者:
昔日辉煌灬
时间:
2011-8-24 17:09
本帖最后由 昔日辉煌灬 于 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 是消耗数
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1