设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1624|回复: 1
打印 上一主题 下一主题

[已经过期] 如何增加体力系统

 关闭 [复制链接]

Lv2.观梦者

梦石
0
星屑
942
在线时间
524 小时
注册时间
2011-1-16
帖子
69
跳转到指定楼层
1
发表于 2011-8-24 16:51:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yuanlongyu 于 2011-8-24 17:24 编辑

GTBS v1.5.1 如何能增加像金庸奇侠传一样的体力系统
攻击 技能都要消耗体力 不足则无法使用攻击和技能
(还有另一问题 攻击误伤和帮敌人回复问题)
谢谢

Lv3.寻梦者

梦石
0
星屑
1165
在线时间
274 小时
注册时间
2011-7-24
帖子
272
2
发表于 2011-8-24 17:09:13 | 只看该作者
本帖最后由 昔日辉煌灬 于 2011-8-24 17:50 编辑

这个脚本
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ MP 消費改造 - KGC_MPCostAlter ◆ VX ◆
  3. #_/    ◇ Last update : 2008/02/06 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  様々な消費 MP を作成する機能を追加します。
  6. #_/============================================================================
  7. #_/  ダメージ値がおかしい場合は、導入位置を移動してください。
  8. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  9. #==============================================================================
  10. # ★ カスタマイズ項目 ★
  11. #==============================================================================

  12. module KGC
  13. module MPCostAlter
  14.   # ◆ 消費後 HP 0 許可
  15.   #  true  : HP 消費後にちょうど 0 になる場合でも使用可能
  16.   #  false : HP 消費後に 1 以上残る状況でなければ使用不可
  17.   PERMIT_ZERO_HP = false
  18.   # ◆ HP 消費制限解除
  19.   #  true  : HP 不足の場合でも使用可能。その場合、使用後は戦闘不能になる。
  20.   #  false : HP 不足の場合は使用不可能。(通常)
  21.   RELEASE_HP_LIMIT = false
  22. end
  23. end

  24. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  25. $imported = {} if $imported == nil
  26. $imported["MPCostAlter"] = true

  27. module KGC::MPCostAlter
  28.   # 正規表現
  29.   module Regexp
  30.     # スキル
  31.     module Skill
  32.       # HP 消費
  33.       CONSUME_HP = /<(?:CONSUME_HP|HP消費)>/i
  34.       # MP 割合消費
  35.       MP_COST_RATE = /<(MAX)?(?:MP_COST_RATE|MP割合消費)>/i
  36.       # 消費 MP 比例ダメージ
  37.       MP_PROPORTIONAL_DAMAGE =
  38.         /<(?:MP_PROPORTIONAL_DAMAGE|消費MP比例ダメージ)>/i
  39.     end
  40.   end
  41. end

  42. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  43. #==============================================================================
  44. # ■ RPG::Skill
  45. #==============================================================================

  46. class RPG::Skill < RPG::UsableItem
  47.   #--------------------------------------------------------------------------
  48.   # ○ MP 消費改造のキャッシュを生成
  49.   #--------------------------------------------------------------------------
  50.   def create_mp_cost_alter_cache
  51.     @__consume_hp = false
  52.     @__mp_cost_rate = false
  53.     @__max_mp_cost_rate = false
  54.     @__mp_proportional_damage = false

  55.     self.note.each_line { |prop|
  56.       case prop
  57.       when KGC::MPCostAlter::Regexp::Skill::CONSUME_HP
  58.         # HP 消費
  59.         @__consume_hp = true
  60.       when KGC::MPCostAlter::Regexp::Skill::MP_COST_RATE
  61.         # MP 割合消費
  62.         @__mp_cost_rate = true
  63.         @__max_mp_cost_rate = ($1 != nil)
  64.       when KGC::MPCostAlter::Regexp::Skill::MP_PROPORTIONAL_DAMAGE
  65.         # 消費 MP 比例ダメージ
  66.         @__mp_proportional_damage = true
  67.       end
  68.     }
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ○ HP 消費
  72.   #--------------------------------------------------------------------------
  73.   def consume_hp
  74.     create_mp_cost_alter_cache if @__consume_hp == nil
  75.     return @__consume_hp
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ○ 消費 MP 割合
  79.   #--------------------------------------------------------------------------
  80.   def mp_cost_rate
  81.     create_mp_cost_alter_cache if @__mp_cost_rate == nil
  82.     return (@__mp_cost_rate ? self.mp_cost : -1)
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ○ MaxMP 割合消費
  86.   #--------------------------------------------------------------------------
  87.   def max_mp_cost_rate
  88.     create_mp_cost_alter_cache if @__max_mp_cost_rate == nil
  89.     return @__max_mp_cost_rate
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ○ 消費 MP 比例ダメージ
  93.   #--------------------------------------------------------------------------
  94.   def mp_proportional_damage
  95.     create_mp_cost_alter_cache if @__mp_proportional_damage == nil
  96.     return @__mp_proportional_damage
  97.   end
  98. end

  99. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  100. #==============================================================================
  101. # ■ Game_Battler
  102. #==============================================================================

  103. class Game_Battler
  104.   #--------------------------------------------------------------------------
  105.   # ● 公開インスタンス変数
  106.   #--------------------------------------------------------------------------
  107.   attr_reader   :spend_cost               # 消費した HP/MP
  108.   #--------------------------------------------------------------------------
  109.   # ● オブジェクト初期化
  110.   #--------------------------------------------------------------------------
  111.   alias initialize_KGC_MPCostAlter initialize
  112.   def initialize
  113.     initialize_KGC_MPCostAlter

  114.     @spend_cost = 0
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● スキルの消費 MP 計算
  118.   #     skill : スキル
  119.   #--------------------------------------------------------------------------
  120.   alias calc_mp_cost_KGC_MPCostAlter calc_mp_cost
  121.   def calc_mp_cost(skill)
  122.     return 0 if skill.consume_hp  # HP 消費

  123.     if skill.mp_cost_rate < 0                     # 割合消費でない
  124.       return calc_mp_cost_KGC_MPCostAlter(skill)
  125.     end

  126.     if skill.max_mp_cost_rate                    # MaxMP 割合消費
  127.       return calc_skill_cost_rate(skill, maxmp)
  128.     else                                         # MP 割合消費
  129.       return calc_skill_cost_rate(skill, mp)
  130.     end
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ○ スキルの割合消費量計算
  134.   #     skill : スキル
  135.   #     base  : 基準値
  136.   #--------------------------------------------------------------------------
  137.   def calc_skill_cost_rate(skill, base)
  138.     return base * skill.mp_cost_rate / 100
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ○ スキルの消費 HP 計算
  142.   #     skill : スキル
  143.   #--------------------------------------------------------------------------
  144.   def calc_hp_cost(skill)
  145.     return 0 unless skill.consume_hp  # HP 消費でない

  146.     if skill.mp_cost_rate < 0         # 割合消費でない
  147.       return skill.mp_cost
  148.     end

  149.     if skill.max_mp_cost_rate                    # MaxHP 割合消費
  150.       return calc_skill_cost_rate(skill, maxhp)
  151.     else                                         # HP 割合消費
  152.       return calc_skill_cost_rate(skill, hp)
  153.     end
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ○ 消費すべき HP/MP 量を保持
  157.   #     skill : スキル
  158.   #--------------------------------------------------------------------------
  159.   def set_spend_cost(skill)
  160.     @spend_cost = [calc_hp_cost(skill), calc_mp_cost(skill)].max
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● スキルの使用可能判定
  164.   #     skill : スキル
  165.   #--------------------------------------------------------------------------
  166.   alias skill_can_use_KGC_MPCostAlter? skill_can_use?
  167.   def skill_can_use?(skill)
  168.     return false unless skill.is_a?(RPG::Skill)         # スキルでない
  169.     return false unless mp_cost_restrict_clear?(skill)  # MP 制限抵触
  170.     return false unless hp_cost_restrict_clear?(skill)  # HP 制限抵触

  171.     return skill_can_use_KGC_MPCostAlter?(skill)
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # ○ MP 制限クリア判定
  175.   #     skill : スキル
  176.   #--------------------------------------------------------------------------
  177.   def mp_cost_restrict_clear?(skill)
  178.     return true if skill.consume_hp  # HP 消費

  179.     # 割合消費の場合は、消費量が 1 以上でないと使用不可
  180.     if skill.mp_cost_rate >= 0
  181.       return false if calc_mp_cost(skill) == 0
  182.     end

  183.     return calc_mp_cost(skill) <= mp
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ○ HP 制限クリア判定
  187.   #     skill : スキル
  188.   #--------------------------------------------------------------------------
  189.   def hp_cost_restrict_clear?(skill)
  190.     return true unless skill.consume_hp  # MP 消費

  191.     # 割合消費の場合は、消費量が 1 以上でないと使用不可
  192.     if skill.mp_cost_rate >= 0
  193.       return false if calc_hp_cost(skill) == 0
  194.     end

  195.     if KGC::MPCostAlter::RELEASE_HP_LIMIT
  196.       # 制限解除の場合は使用可能
  197.       return true
  198.     elsif KGC::MPCostAlter::PERMIT_ZERO_HP
  199.       # HP と同量まで消費可能
  200.       return calc_hp_cost(skill) <= hp
  201.     else
  202.       # 1 以上残る必要あり
  203.       return calc_hp_cost(skill) < hp
  204.     end
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   # ● スキルまたはアイテムによるダメージ計算
  208.   #     user : スキルまたはアイテムの使用者
  209.   #     obj  : スキルまたはアイテム
  210.   #    結果は @hp_damage または @mp_damage に代入する。
  211.   #--------------------------------------------------------------------------
  212.   alias make_obj_damage_value_KGC_MPCostAlter make_obj_damage_value
  213.   def make_obj_damage_value(user, obj)
  214.     # 消費 MP 比例ダメージでない場合
  215.     unless obj.is_a?(RPG::Skill) && obj.mp_proportional_damage
  216.       # 元の計算式を使用
  217.       make_obj_damage_value_KGC_MPCostAlter(user, obj)
  218.       return
  219.     end

  220.     damage = user.spend_cost * obj.base_damage / 100  # 基本ダメージ算出

  221.     damage *= elements_max_rate(obj.element_set)    # 属性修正
  222.     damage /= 100
  223.     damage = apply_variance(damage, obj.variance)   # 分散
  224.     damage = apply_guard(damage)                    # 防御修正
  225.     if obj.damage_to_mp  
  226.       @mp_damage = damage                           # MP にダメージ
  227.     else
  228.       @hp_damage = damage                           # HP にダメージ
  229.     end
  230.   end
  231. end

  232. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  233. #==============================================================================
  234. # ■ Window_Skill
  235. #==============================================================================

  236. class Window_Skill < Window_Selectable
  237.   #--------------------------------------------------------------------------
  238.   # ● 項目の描画
  239.   #     index : 項目番号
  240.   #--------------------------------------------------------------------------
  241.   def draw_item(index)
  242.     rect = item_rect(index)
  243.     self.contents.clear_rect(rect)
  244.     skill = @data[index]
  245.     if skill != nil
  246.       rect.width -= 4
  247.       enabled = @actor.skill_can_use?(skill)
  248.       draw_item_name(skill, rect.x, rect.y, enabled)

  249.       if skill.consume_hp
  250.         # HP 消費
  251.         text = sprintf("%s%d", Vocab.hp_a, @actor.calc_hp_cost(skill))
  252.       else
  253.         # MP 消費
  254.         text = @actor.calc_mp_cost(skill).to_s
  255.       end
  256.       self.contents.draw_text(rect, text, 2)
  257.     end
  258.   end
  259. end

  260. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  261. #==============================================================================
  262. # ■ Scene_Skill
  263. #==============================================================================

  264. class Scene_Skill < Scene_Base
  265.   #--------------------------------------------------------------------------
  266.   # ● ターゲットの決定
  267.   #    効果なしの場合 (戦闘不能にポーションなど) ブザー SE を演奏。
  268.   #--------------------------------------------------------------------------
  269.   alias determine_target_KGC_MPCostAlter determine_target
  270.   def determine_target
  271.     @actor.set_spend_cost(@skill)  # 消費する HP/MP をセット

  272.     determine_target_KGC_MPCostAlter
  273.   end
  274.   #--------------------------------------------------------------------------
  275.   # ● スキルの使用 (味方対象以外の使用効果を適用)
  276.   #--------------------------------------------------------------------------
  277.   alias use_skill_nontarget_KGC_MPCostAlter use_skill_nontarget
  278.   def use_skill_nontarget
  279.     @actor.hp -= @actor.calc_hp_cost(@skill)

  280.     use_skill_nontarget_KGC_MPCostAlter
  281.   end
  282. end

  283. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  284. #==============================================================================
  285. # ■ Scene_Battle
  286. #==============================================================================

  287. class Scene_Battle < Scene_Base
  288.   #--------------------------------------------------------------------------
  289.   # ● 戦闘行動の実行 : スキル
  290.   #--------------------------------------------------------------------------
  291.   alias execute_action_skill_KGC_MPCostAlter execute_action_skill
  292.   def execute_action_skill
  293.     skill = @active_battler.action.skill
  294.     @active_battler.set_spend_cost(skill)  # 消費する HP/MP をセット
  295.     if skill.consume_hp
  296.       hp_cost = [@active_battler.hp - 1,
  297.         @active_battler.spend_cost].min      # HP を 1 だけ残す
  298.       @active_battler.hp -= hp_cost
  299.     end

  300.     execute_action_skill_KGC_MPCostAlter

  301.     # 死亡するはずだった場合
  302.     if skill.consume_hp && hp_cost < @active_battler.spend_cost
  303.       @active_battler.hp = 0                 # HP を 0 にする
  304.       display_added_states(@active_battler)  # 死亡メッセージの表示
  305.     end
  306.   end
  307. end
复制代码
在技能备注里写 <HP消費 x>  ← x 是消耗数

点评

?  发表于 2011-8-24 17:10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-10 04:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表