Project1

标题: 升等完全恢復的問題...... [打印本页]

作者: asd89860    时间: 2015-2-27 15:12
标题: 升等完全恢復的問題......
角色升級時,
如何讓他恢復HP、MP、異常狀態.......
求教
作者: 三途亚梦    时间: 2015-2-27 15:20
https://rpg.blue/thread-368163-1-2.html
作者: tseyik    时间: 2015-2-27 15:52
本帖最后由 tseyik 于 2015-2-27 15:58 编辑

  1. #--------------------------------------------------------------------------
  2. # RGSS3 勝利時 HP・MP回復スクリプト
  3. #--------------------------------------------------------------------------
  4. =begin

  5.  戦闘終了時、勝利していればRECOVER_VICTORYモジュールの設定内容を実行します。

  6.  RECOVER_DECLARATION … 開関。「全員のXXが少量回復した!」表示/不表示。
  7.  HP_RECOVER_FLAG   … 開関。勝利時HP回復/不回復。
  8.   HP_RECOVER_VALUE  … 変数。勝利時HP回復量。
  9.               最大HP / VALUE の値が現在のHPに足されます。
  10.  MP_RECOVER_FLAG   … 開関。勝利時MP回復/不回復。
  11.   MP_RECOVER_VALUE  … 変数。勝利時MP回復量。
  12.               最大MP / VALUE の値が現在のMPに足されます。

  13.   改寫VICTORY_TEXT_HEALb的内容、可改変表示文字。
  14.   
  15.   テキストは表示できますが、テンポが悪くなるので推奨しません。
  16. =end

  17. module RECOVER_VICTORY
  18.   RECOVER_DECLARATION =  86  # 勝利時 回復宣言フラグ
  19.   HP_RECOVER_FLAG     =  87  # 勝利時 HP回復フラグ
  20.   HP_RECOVER_VALUE    =   5  # 勝利時 HP回復量
  21.   MP_RECOVER_FLAG     =  88  # 勝利時 MP回復フラグ
  22.   MP_RECOVER_VALUE    =  17  # 勝利時 MP回復量
  23. end

  24. module Vocab
  25.   VICTORY_TEXT_HEAL         = "全員の%sが少量回復した!"
  26. end

  27. module BattleManager
  28.   #--------------------------------------------------------------------------
  29.   # ● 戦闘メンバーのHP指定数回復(生存時のみ)
  30.   #--------------------------------------------------------------------------
  31.   def self.hp_recover_assign_value_battle_members
  32.     $game_party.battle_members.each do |actor|
  33.       actor.hp += actor.mhp / RECOVER_VICTORY::HP_RECOVER_VALUE if actor.alive?
  34.     end
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 戦闘メンバーのMP指定数回復(生存時のみ)
  38.   #--------------------------------------------------------------------------
  39.   def self.mp_recover_assign_value_battle_members
  40.     $game_party.battle_members.each do |actor|
  41.       actor.mp += actor.mmp / RECOVER_VICTORY::MP_RECOVER_VALUE if actor.alive?
  42.     end
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 勝利の処理
  46.   #--------------------------------------------------------------------------
  47.   def self.process_victory
  48.     play_battle_end_me
  49.     replay_bgm_and_bgs
  50.     $game_message.add(sprintf(Vocab::Victory, $game_party.name))
  51.     display_exp
  52.     gain_gold
  53.     gain_drop_items
  54.     gain_exp
  55.     if $game_switches[RECOVER_VICTORY::HP_RECOVER_FLAG] == true
  56.       hp_recover_assign_value_battle_members
  57.       if $game_switches[RECOVER_VICTORY::RECOVER_DECLARATION] == true
  58.         Sound.play_recovery
  59.         $game_message.add(sprintf(Vocab::VICTORY_TEXT_HEAL, Vocab::hp))
  60.         wait_for_message
  61.       end
  62.     end
  63.     if $game_switches[RECOVER_VICTORY::MP_RECOVER_FLAG] == true
  64.       mp_recover_assign_value_battle_members
  65.       if $game_switches[RECOVER_VICTORY::RECOVER_DECLARATION] == true
  66.         Sound.play_recovery
  67.         $game_message.add(sprintf(Vocab::VICTORY_TEXT_HEAL, Vocab::mp))
  68.         wait_for_message
  69.       end
  70.     end
  71.     SceneManager.return
  72.     battle_end(0)
  73.     return true
  74.   end
  75. end
复制代码

作者: howhow1314    时间: 2015-2-27 16:27
本帖最后由 howhow1314 于 2015-2-27 16:30 编辑

我也是新手才學RM幾天,跟你分享一下自行解決的辦法

按F11打開腳本編輯器,Ctrl+Shift+F嘗試搜尋一些關鍵字,比如level/level_up/level += 1(level = level + 1的意思)等

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 等級上升
  3.   #--------------------------------------------------------------------------
  4.   def level_up
  5.     @level += 1
  6.     self.class.learnings.each do |learning|
  7.       learn_skill(learning.skill_id) if learning.level == @level
  8.     end
  9.   end

找到這,第一行@level += 1,就是等級加一,後面的則是習得升級學會的技能,這明顯就是等級上升的函數了
只要在裡面加上恢復hp的script就可以了
不過通常做法好像是不直接在這改,下面的插件腳本插入一個,把前面的函數複製到這邊,
(名稱不一定叫SYSTEM,可以隨意改,沒影響的,這樣把自己加的系統都集合一處比較方便修改或查看)
然後再作修改,不過這要加上
RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.  
  3. end

就是變成
RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2. def level_up
  3.     @level += 1
  4.     self.class.learnings.each do |learning|
  5.       learn_skill(learning.skill_id) if learning.level == @level
  6.     end
  7.   end
  8. end

這樣,因為原本的函數是在class Game_Actor < Game_Battler底下的(def level_up那邊往上拉就找到)
順便分享一下自己的經驗,如果遇到其他不確定作用的函數,可以這樣做,比如level_up
RUBY 代码复制
  1. def level_up
  2.     msgbox "123"         #加這句
  3.     @level += 1
  4.     self.class.learnings.each do |learning|
  5.       learn_skill(learning.skill_id) if learning.level == @level
  6.     end
  7.   end

然後你f12進遊戲升一級,出現msgbox,那就可以大概知道函數是什麼時候被調用的
作者: tan12345    时间: 2015-2-27 22:44
  1. class Game_Actor < Game_Battler
  2. #--------------------------------------------------------------------------
  3.   # ● 等级上升
  4.   #--------------------------------------------------------------------------
  5.   def level_up
  6.     @level += 1
  7.     self.class.learnings.each do |learning|
  8.       learn_skill(learning.skill_id) if learning.level == @level
  9.     end
  10.     self.recover_all
  11.   end
  12. end
复制代码

作者: asd89860    时间: 2015-2-28 14:26
感謝 可以了




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