Project1

标题: 戰鬥結束回血魔,如何在逃跑不執行?(極短腳本) [打印本页]

作者: 冷徹心扉    时间: 2012-12-5 12:37
标题: 戰鬥結束回血魔,如何在逃跑不執行?(極短腳本)
本帖最后由 冷徹心扉 于 2012-12-5 14:30 编辑

這是一個極度簡短的腳本、卻相當實用
在戰鬥後回復某百分比的血魔
但問題是就算逃跑了也會回復
想只有在戰鬥勝利回復、而逃跑不回復該怎麼改呢?

  1. #===============================================================================
  2. #戰鬥後回覆HP
  3. #===============================================================================
  4. class Game_Battler
  5.   def remove_states_battle
  6.     for state in states
  7.       remove_state(state.id) if state.battle_only
  8.     end
  9.     h = maxhp * 3#%         #戰鬥後回復的HP百分比
  10.     h /= 100
  11.     m = maxmp * 3#%         #戰鬥後回復的MP百分比
  12.     m /= 100
  13.     self.hp += h
  14.     self.mp += m
  15.   end
  16. end
复制代码
另外一問,這是攻擊敵人時回復的血魔
但是以固定數字計算,想改成以百分比回復
  1. if true
  2. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  3. #_/    ◆ 攻撃時MP回復 - KGC_AttackRecoverMP ◆ VX ◆
  4. #_/    ◇ Last update : 2007/12/05 ◇
  5. #_/----------------------------------------------------------------------------
  6. #_/  通常攻撃時に MP が回復する処理を追加します。
  7. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  8. #==============================================================================
  9. # ★ カスタマイズ項目 - Customize ★
  10. #==============================================================================

  11. module KGC
  12. module AttackRecoverMP
  13.   # ◆ 攻撃敵人時 MP 回復量 (角色)
  14.   HIT_RECOVER_MP_ACTOR = 3
  15.   # ◆ 打敗敵人後 MP 回復量 (角色)
  16.   DEFEAT_RECOVER_MP_ACTOR = 7

  17.   # ◆ 攻撃玩家時 MP 回復量 (敵)
  18.   HIT_RECOVER_MP_ENEMY = 3
  19.   # ◆ 打敗玩家時 MP 回復量 (敵)
  20.   DEFEAT_RECOVER_MP_ENEMY = 7

  21.   # ◆ 顯示恢復的 MP
  22.   SHOW_RECOVERED_MP = false
  23. end
  24. end

  25. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  26. $imported = {} if $imported == nil
  27. $imported["AttackRecoverMP"] = true

  28. #==============================================================================
  29. # ■ Game_Battler
  30. #==============================================================================

  31. class Game_Battler
  32.   #--------------------------------------------------------------------------
  33.   # ○ MP 傷害加算
  34.   #     value : 加算する値
  35.   #--------------------------------------------------------------------------
  36.   def add_mp_damage(value)
  37.     @mp_damage += value
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ○ 攻撃時 MP 回復効果適用
  41.   #     defender : 被攻撃者
  42.   #--------------------------------------------------------------------------
  43.   def attack_recover_mp_effect(defender)
  44.     value = calc_attack_recover_mp_value(defender)
  45.     self.mp += value
  46.     return value
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ○ 攻撃時 MP 回復量取得
  50.   #     defender : 被攻撃者
  51.   #--------------------------------------------------------------------------
  52.   def calc_attack_recover_mp_value(defender)
  53.     # 継承先で定義
  54.     return 0
  55.   end
  56. end

  57. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  58. #==============================================================================
  59. # ■ Game_Actor
  60. #==============================================================================

  61. class Game_Actor < Game_Battler
  62.   #--------------------------------------------------------------------------
  63.   # ○ 攻撃時 MP 回復量取得
  64.   #     defender : 被攻撃者
  65.   #--------------------------------------------------------------------------
  66.   def calc_attack_recover_mp_value(defender)
  67.     if defender != nil && defender.dead?
  68.       return KGC::AttackRecoverMP::DEFEAT_RECOVER_MP_ACTOR
  69.     else
  70.       return KGC::AttackRecoverMP::HIT_RECOVER_MP_ACTOR
  71.     end
  72.   end
  73. end

  74. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  75. #==============================================================================
  76. # ■ Game_Enemy
  77. #==============================================================================

  78. class Game_Enemy < Game_Battler
  79.   #--------------------------------------------------------------------------
  80.   # ○ 攻撃時 MP 回復量取得
  81.   #     defender : 被攻撃者
  82.   #--------------------------------------------------------------------------
  83.   def calc_attack_recover_mp_value(defender)
  84.     if defender != nil && defender.dead?
  85.       return KGC::AttackRecoverMP::DEFEAT_RECOVER_MP_ENEMY
  86.     else
  87.       return KGC::AttackRecoverMP::HIT_RECOVER_MP_ENEMY
  88.     end
  89.   end
  90. end

  91. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  92. #==============================================================================
  93. # ■ Scene_Battle
  94. #==============================================================================

  95. class Scene_Battle < Scene_Base
  96.   #--------------------------------------------------------------------------
  97.   # ● 戦闘行動の実行 : 攻撃
  98.   #--------------------------------------------------------------------------
  99.   alias execute_action_attack_KGC_AttackRecoverMP execute_action_attack
  100.   def execute_action_attack
  101.     unit = @active_battler.actor? ? $game_troop : $game_party
  102.     last_dead_members = unit.dead_members

  103.     execute_action_attack_KGC_AttackRecoverMP

  104.     # 攻撃者の MP 回復
  105.     target = (unit.dead_members - last_dead_members)[0]
  106.     mp_damage = @active_battler.attack_recover_mp_effect(target)
  107.     if KGC::AttackRecoverMP::SHOW_RECOVERED_MP
  108.       @active_battler.add_mp_damage(-mp_damage)
  109.       display_mp_damage(@active_battler)
  110.     end
  111.   end
  112. end
  113. end
复制代码

作者: 怪蜀黍    时间: 2012-12-5 14:12
本帖最后由 protosssonny 于 2012-12-5 14:31 编辑

你的第一个脚本删除,贴上用这个或者找到相应的脚本用以下脚本取代:
  1. class Scene_Battle < Scene_Base
  2.   #--------------------------------------------------------------------------
  3.   # ● 结束战斗
  4.   #     result : 结果(0:胜利,1:逃跑,2:失败)
  5.   #--------------------------------------------------------------------------
  6.   def battle_end(result)
  7.     if result == 2 and not $game_troop.can_lose
  8.       call_gameover
  9.     else
  10.       $game_party.clear_actions
  11.       $game_party.remove_states_battle
  12.       $game_troop.clear
  13.       if $game_temp.battle_proc != nil
  14.         $game_temp.battle_proc.call(result)
  15.         $game_temp.battle_proc = nil
  16.       end
  17.       if result == 0
  18.         $game_party.members.each{|i|
  19.           h = i.maxhp * 3#%         #戰鬥後回復的HP百分比
  20.           h /= 100
  21.           m = i.maxmp * 3#%         #戰鬥後回復的MP百分比
  22.           m /= 100
  23.           i.hp += h
  24.           i.mp += m
  25.         }
  26.       end  
  27.       unless $BTEST
  28.         $game_temp.map_bgm.play
  29.         $game_temp.map_bgs.play
  30.       end
  31.       $scene = Scene_Map.new
  32.       @message_window.clear
  33.       Graphics.fadeout(30)
  34.     end
  35.     $game_temp.in_battle = false
  36.   end
  37. end
复制代码
第二问,只讲解其中一个:
  1. return KGC::AttackRecoverMP::DEFEAT_RECOVER_MP_ENEMY
复制代码
表示返回杀死后恢复的MP,self表示攻击者,取百分比可以用
  1. return self.maxmp * KGC::AttackRecoverMP::DEFEAT_RECOVER_MP_ENEMY / 100
复制代码
为了防止伸手,请LZ自己完成其它3个,喵~




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1