Project1

标题: 升级脚本与战斗后自动回血 [打印本页]

作者: MLRPG    时间: 2015-12-21 15:04
标题: 升级脚本与战斗后自动回血
本人先是用了个简单的脚本 战斗结束后自动回复80%的HP

随后使用了以下这个升级脚本 这个自动回血就失效了 求解决方法?

#===============================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#===============================================================


# ———————————————————————————

# ▼▲▼ XRXS_BP10. LEVEL UP!能力上昇表示ウィンドウ plus ▼▲▼
# by 桜雅 在土

#——以下3个如果需要修改,直接输入文件名即可
$data_system_level_up_se = "" #升级时的音效设置
$data_system_level_up_me = "Audio/ME/se_cardget" # 升级时播放的ME
$data_system_skilllearn_se = "Audio/SE/se_powerup" # 学会特技时播放的声效。

#=============================================================
# ■ Window_LevelUpWindow
#-------------------------------------------------------------------
#  バトル終了時、レベルアップした場合にステータスを表示するウィンドウです。
#=============================================================
class Window_LevelUpWindow < Window_Base
  #---------------------------------------------------------
  # ● オブジェクト初期化
  #------------------------------------------------------
  def initialize(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
    super(0, 128, 160, 192)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    self.back_opacity = 160
    refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
  end
  #-----------------------------------------------------------
  # ● リフレッシュ
  #---------------------------------------------------------
  def refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.font.size = 14
    self.contents.draw_text( 0, 0, 160, 24, "升级")
    self.contents.font.size = 18
    self.contents.draw_text( 0, 28, 160, 24, $data_system.words.hp)
    self.contents.draw_text( 0, 50, 160, 24, $data_system.words.sp)
    self.contents.font.size = 14
    self.contents.draw_text( 0, 72, 80, 24, $data_system.words.str)
    self.contents.draw_text( 0, 94, 80, 24, $data_system.words.dex)
    self.contents.draw_text( 0, 116, 80, 24, $data_system.words.agi)
    self.contents.draw_text( 0, 138, 80, 24, $data_system.words.int)
    self.contents.draw_text(92, 0, 128, 24, "→")
    self.contents.draw_text(76, 28, 128, 24, "=")
    self.contents.draw_text(76, 50, 128, 24, "=")
    self.contents.draw_text(76, 72, 128, 24, "=")
    self.contents.draw_text(76, 94, 128, 24, "=")
    self.contents.draw_text(76, 116, 128, 24, "=")
    self.contents.draw_text(76, 138, 128, 24, "=")
    self.contents.font.color = normal_color
    self.contents.draw_text( 0, 0, 88, 24, last_lv.to_s, 2)
    self.contents.draw_text( 0, 28, 72, 24, "+" + up_hp.to_s, 2)
    self.contents.draw_text( 0, 50, 72, 24, "+" + up_sp.to_s, 2)
    self.contents.draw_text( 0, 72, 72, 24, "+" + up_str.to_s, 2)
    self.contents.draw_text( 0, 94, 72, 24, "+" + up_dex.to_s, 2)
    self.contents.draw_text( 0, 116, 72, 24, "+" + up_agi.to_s, 2)
    self.contents.draw_text( 0, 138, 72, 24, "+" + up_int.to_s, 2)
    self.contents.font.size = 20
    self.contents.draw_text( 0, 0, 128, 24, actor.level.to_s, 2)
    self.contents.draw_text( 0, 26, 128, 24, actor.maxhp.to_s, 2)
    self.contents.draw_text( 0, 48, 128, 24, actor.maxsp.to_s, 2)
    self.contents.draw_text( 0, 70, 128, 24, actor.str.to_s, 2)
    self.contents.draw_text( 0, 92, 128, 24, actor.dex.to_s, 2)
    self.contents.draw_text( 0, 114, 128, 24, actor.agi.to_s, 2)
    self.contents.draw_text( 0, 136, 128, 24, actor.int.to_s, 2)
  end
end
#===========================================================
# ■ Window_SkillLearning
#------------------------------------------------------------------------------
#  レベルアップ時などにスキルを習得した場合にそれを表示するウィンドウです。
#=============================================================
class Window_SkillLearning < Window_Base
  #-------------------------------------------------------------
  # ● 公開インスタンス変数
  #-----------------------------------------------------------
  attr_reader :learned # スキルを習得したかどうか
  #----------------------------------------------------------
  # ● オブジェクト初期化
  #----------------------------------------------------------
  def initialize(class_id, last_lv, now_lv)
    super(160, 64, 320, 64)
    self.contents = Bitmap.new(width - 32, height - 28) # わざと▽を表示
    self.visible = false
    self.back_opacity = 160
    @learned = false
    refresh(class_id, last_lv, now_lv)
  end
  #------------------------------------------------------------
  # ● リフレッシュ
  #-------------------------------------------------------
  def refresh(class_id, last_lv, now_lv)
    for i in 0...$data_classes[class_id].learnings.size
      learn_lv = $data_classes[class_id].learnings.level
      # 今回のレベルアップ範囲で習得するスキルの場合
      if learn_lv > last_lv and learn_lv <= now_lv
        @learned = true
        # SEの再生
        if $data_system_skilllearn_se != ""
          Audio.se_play($data_system_skilllearn_se)
        end
        # 各描写
        skill_name = $data_skills[$data_classes[class_id].learnings.skill_id].name
        self.contents.clear
        self.contents.font.color = text_color(8)
        self.contents.draw_text(0,0,448,32,"学会")
        self.contents.font.color = text_color(8)
        self.contents.draw_text(0,0,448,32, "          "+skill_name)
        self.contents.font.color = text_color(8)
        self.visible = true
        # メインループ
        loop do
          # ゲーム画面を更新
          Graphics.update
          # 入力情報を更新
          Input.update
          # フレーム更新
          update
          # 画面が切り替わったらループを中断
          if @learned == false
            break
          end
        end
      # メインループここまで
      end
    end
  end
  #-----------------------------------------------------------
  # ● フレーム更新
  #------------------------------------------------------------
  def update
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      @learned = false
      self.visible = false
    end
  end
end
#==================================================================
# ■ Window_BattleStatus
#==================================================================
class Window_BattleStatus < Window_Base
  #---------------------------------------------------------
  # ● 追加?公開インスタンス変数
  #-------------------------------------------------------
  attr_accessor :level_up_flags # LEVEL UP!表示
end
#===============================================================
# ■ Game_Battler
#===============================================================
class Game_Battler
  #--------------------------------------------------------------
  # ● 追加?公開インスタンス変数
  #----------------------------------------------------------
  attr_accessor :exp_gain_ban # EXP取得一時禁止
  #------------------------------------------------------
  # ● オブジェクト初期化
  #-----------------------------------------------------
  alias xrxs_bp10_initialize initialize
  def initialize
    @exp_gain_ban = false
    xrxs_bp10_initialize
  end
  #-------------------------------------------------------
  # ● ステート [EXP を獲得できない] 判定
  #-----------------------------------------------------
  alias xrxs_bp10_cant_get_exp? cant_get_exp?
  def cant_get_exp?
    if @exp_gain_ban == true
      return true
    else
      return xrxs_bp10_cant_get_exp?
    end
  end
end
#==============================================================
# ■ Scene_Battle
#==============================================================
class Scene_Battle
  #--------------------------------------------------
  # ● アフターバトルフェーズ開始
  #--------------------------------------------------
  alias xrxs_bp10_start_phase5 start_phase5
  def start_phase5
    # EXP 獲得禁止
    for i in 0...$game_party.actors.size
      $game_party.actors.exp_gain_ban = true
    end
    xrxs_bp10_start_phase5
    # EXP 獲得禁止の解除
    for i in 0...$game_party.actors.size
      $game_party.actors.exp_gain_ban = false
    end
    # EXPを初期化
    @exp_gained = 0
    for enemy in $game_troop.enemies
      # 獲得 EXPを追加 # エネミーが隠れ状態でない場合
      @exp_gained += enemy.exp if not enemy.hidden
    end
    # 設定
    @phase5_step = 1
    @exp_gain_actor = -1
    # リザルトウィンドウを表示
    @result_window.visible = true
  end
  #----------------------------------------------------------
  # ● フレーム更新 (アフターバトルフェーズ)
  #--------------------------------------------------------
  #alias xrxs_bp10_update_phase5 update_phase5
  def update_phase5
    case @phase5_step
    when 1
      update_phase5_step1
    else
    # ウェイトカウントが 0 より大きい場合
      if @phase5_wait_count > 0
        # ウェイトカウントを減らす
        @phase5_wait_count -= 1
        # ウェイトカウントが 0 になった場合
        if @phase5_wait_count == 0
          # リザルトウィンドウを表示
          #@result_window.visible = true
          # メインフェーズフラグをクリア
          $game_temp.battle_main_phase = false
          # ステータスウィンドウをリフレッシュ
          @status_window.refresh
        end
      return
      end
      # C ボタンが押された場合
      if Input.trigger?(Input::C)
        # バトル終了
        battle_end(0)
      end
    # レベルアップしている場合は強制バトル終了
    battle_end(0) if @levelup_window != nil and @phase5_wait_count <= 0
    end
  end
  #-----------------------------------------------------------
  # ● フレーム更新 (アフターバトルフェーズ 1 : レベルアップ)
  #-----------------------------------------------------------
  def update_phase5_step1
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # ウィンドウを閉じて次のアクターへ
      @levelup_window.visible = false if @levelup_window != nil
      @status_window.level_up_flags[@exp_gain_actor] = false
      phase5_next_levelup
    end
  end
  #---------------------------------------------------------
  # ● 次のアクターのレベルアップ表示へ
  #---------------------------------------------------------
  def phase5_next_levelup
    begin
      # 次のアクターへ
      @exp_gain_actor += 1
      # 最後のアクターの場合
      if @exp_gain_actor >= $game_party.actors.size
        # アフターバトルフェーズ開始
        @phase5_step = 0
        return
      end
      actor = $game_party.actors[@exp_gain_actor]
      if actor.cant_get_exp? == false
        # 現在の能力値を保持
        last_level = actor.level
        last_maxhp = actor.maxhp
        last_maxsp = actor.maxsp
        last_str = actor.str
        last_dex = actor.dex
        last_agi = actor.agi
        last_int = actor.int
        # 経験値取得の決定的瞬間(謎
        actor.exp += @exp_gained
        # 判定
        if actor.level > last_level
          # レベルアップした場合
          @status_window.level_up(@exp_gain_actor)
          # リザルトウィンドウを消す
          @result_window.visible = false
          # SEの再生
          if $data_system_level_up_se != ""
            Audio.se_play($data_system_level_up_se)
          end
          # MEの再生
          if $data_system_level_up_me != ""
            Audio.me_stop
            Audio.me_play($data_system_level_up_me)
          end
          # LEVEL-UPウィンドウの設定
          @levelup_window = Window_LevelUpWindow.new(actor, last_level,
          actor.maxhp - last_maxhp, actor.maxsp - last_maxsp, actor.str - last_str,
          actor.dex - last_dex, actor.agi - last_agi, actor.int - last_int)
          @levelup_window.x = 160 * @exp_gain_actor
          @levelup_window.visible = true
          # ステータスウィンドウをリフレッシュ
          @status_window.refresh
          # スキル習得ウィンドウの設定
          @skilllearning_window = Window_SkillLearning.new(actor.class_id, last_level, actor.level)
          # ウェイトカウントを設定
          @phase5_wait_count = 40
          @phase5_step = 1
          return
        end
      end
    end until false
  end
end


#=============================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#=============================================================
作者: jiushiainilip19    时间: 2015-12-21 15:20
用代码框发啊 这怎么看啊 都晕了 还是给你一个战后恢复脚本吧 很容易就看懂的

RUBY 代码复制
  1. #战斗后定量恢复HP/MP
  2. #收集,修改 BY 玄天
  3. #原作者:日站。其版权由其原作者拥有,任何人不得非法使用。
  4.  
  5.  
  6. #HP回復量(百分率)
  7. HP_DAMAGE_POINT = 10
  8.  
  9. #SP回復量(百分率)
  10. SP_DAMAGE_POINT = 10
  11.  
  12. #HP分散量 0为不散乱(100回復量、分散度15 = 85~115)
  13. HP_DAMAGE_UNEVEN = 0
  14.  
  15. #SP分散量 0为不散乱(100回復量、分散度15 = 85~115)
  16. SP_DAMAGE_UNEVEN = 0
  17.  
  18. #是否演示动画。false为不使用;true为使用
  19. ANIMATION_POP = true
  20.  
  21. #动画号码,即资料库『动画』中的动画代码
  22. ANIMATION_ID = 15
  23.  
  24. #损坏表示
  25. DAMAGE_POP = true
  26.  
  27.  
  28. #========================下面基本不用修改==============================
  29.  
  30.  
  31. #==============================================================================
  32. # ■ Game_Battler (分割定義 3)
  33. #------------------------------------------------------------------------------
  34. #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ
  35. # スのスーパークラスとして使用されます。
  36. #==============================================================================
  37.  
  38. class Game_Battler
  39.   #--------------------------------------------------------------------------
  40.   # ● 戦闘後HP回復
  41.   #--------------------------------------------------------------------------
  42.   def hp_recover
  43.     # SP回復量を設定
  44.     self.damage = self.maxhp * SP_DAMAGE_POINT / 100
  45.     if SP_DAMAGE_UNEVEN > 0
  46.       amp = [self.damage.abs * SP_DAMAGE_UNEVEN / 100, 1].max
  47.       self.damage += rand(amp+1) + rand(amp+1) - amp
  48.     end
  49.     self.sp += self.damage
  50.     # HP回復量を設定
  51.            self.damage = self.maxhp * HP_DAMAGE_POINT / 100
  52.     if HP_DAMAGE_UNEVEN > 0
  53.       amp = [self.damage.abs * HP_DAMAGE_UNEVEN / 100, 1].max
  54.       self.damage += rand(amp+1) + rand(amp+1) - amp
  55.     end
  56.     self.damage = -self.damage
  57.     # HP に回復量を加算
  58.     self.hp -= self.damage
  59.     # メソッド終了
  60.     return
  61.   end
  62. end
  63.  
  64. #-------------------------------------------------------------------------------
  65.  
  66. #==============================================================================
  67. # ■ Scene_Battle (分割定義 2)
  68. #------------------------------------------------------------------------------
  69. #  バトル画面の処理を行うクラスです。
  70. #==============================================================================
  71.  
  72. class Scene_Battle
  73.   #--------------------------------------------------------------------------
  74.   # ● アフターバトルフェーズ開始
  75.   #--------------------------------------------------------------------------
  76.   alias start_phase5_battler_recover start_phase5
  77.   def start_phase5
  78.     for i in 0...$game_party.actors.size
  79.       actor = $game_party.actors[i]
  80.       next if actor.dead?
  81.       actor.hp_recover
  82.       if DAMAGE_POP
  83.         actor.damage_pop = true
  84.       end
  85.       if ANIMATION_POP
  86.         actor.animation_id = ANIMATION_ID
  87.       end
  88.     end
  89.     # 元の処理を実行
  90.     start_phase5_battler_recover
  91.   end
  92. end

作者: 无忧谷主幻    时间: 2015-12-21 21:22
本帖最后由 无忧谷主幻 于 2015-12-26 20:02 编辑

其实没这么麻烦,找到Game_Actor脚本,查看第461到462行
RUBY 代码复制
  1. while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
  2.       @level += 1

点击插入,在下面插入
RUBY 代码复制
  1. @hp = self.maxhp
  2. @sp = self.maxsp

即可完全恢复
如果是80%的话,加个0.8就可以了

作者: 丿蛋蛋的疯    时间: 2015-12-26 18:08
无忧谷主幻 发表于 2015-12-21 21:22
其实没这么麻烦,找到Game_Actor脚本,查看第461到462行
    while @exp >= @exp_list[@level+1] and @exp_ ...

在那加0.8( ゚ω゚)
作者: 无忧谷主幻    时间: 2015-12-26 19:56
丿蛋蛋的疯 发表于 2015-12-26 18:08
在那加0.8( ゚ω゚)

@hp = self.maxhp*0.8
@sp = self.maxsp*0.8
作者: 丿蛋蛋的疯    时间: 2015-12-27 13:35
无忧谷主幻 发表于 2015-12-26 19:56
@hp = self.maxhp*0.8
@sp = self.maxsp*0.8

这个是恢复到80%还是恢复80%




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