Project1

标题: hpmp效果互换该怎么做? [打印本页]

作者: 春风莉露    时间: 2018-2-28 08:15
标题: hpmp效果互换该怎么做?
喔喔
mp为0时,角色就会死掉。
hp为0时不会。
战斗里,hp还有数值时
回合结束会将hp的数值补充到mp。
数值够就补满。数值不够就补到hp为0。
1hp换1mp。
请问该怎么实现?
作者: 300英雄    时间: 2018-2-28 11:45
本帖最后由 300英雄 于 2018-2-28 11:48 编辑

你可以让HP为1啊,0的话直接死亡的,这样的话也不需要改脚本了,并且1血量让他放着问题也不大.
伤害公式还缺一块
if value >= self.hp
      value = 0
      self.hp = 1
      end

防止角色被打死,留一点血量,插到两种方法的下面或者上面问题都不大

回合结束的判定.png (104.53 KB, 下载次数: 25)

回合结束的判定.png

伤害公式.png (117.8 KB, 下载次数: 30)

伤害公式.png

作者: 喵呜喵5    时间: 2018-2-28 13:26


作者: chd114    时间: 2018-2-28 14:28
你指的是在使用某个技能后获得魔法盾的效果,通过消耗MP来抵挡受到的伤害吗?
作者: 刹那铃音    时间: 2018-2-28 23:00
  1. class Game_Battler < Game_BattlerBase
  2.   
  3.   STATE_ID = 60   #魔法盾状态的id号
  4.   MP_RATE  = 0.8 #魔法盾吸收伤害的比率0.4就是10点伤害hp6点mp4点
  5.   MP_DAMAGE_RATE = 2
  6.   VARIABLE_ID = 3      #1点mp抵消(3号变量的值+2)点伤害,如果不需要变量功能,就把这个值设为0或负数
  7.   #--------------------------------------------------------------------------
  8.   # ● 计算伤害
  9.   #--------------------------------------------------------------------------
  10.   def make_damage_value(user, item)
  11.     value = item.damage.eval(user, self, $game_variables)
  12.     value *= item_element_rate(user, item)
  13.     value *= pdr if item.physical?
  14.     value *= mdr if item.magical?
  15.     value *= rec if item.damage.recover?
  16.     value = apply_critical(value) if @result.critical
  17.     value = apply_variance(value, item.damage.variance)
  18.     value = apply_guard(value)
  19.     if item.damage.to_hp? and self.state?(STATE_ID)
  20.       mrate = MP_DAMAGE_RATE
  21.       mrate += $game_variables[VARIABLE_ID] if $game_variables[VARIABLE_ID]
  22.       mp_value = [(value * MP_RATE/mrate).to_i  , self.mp].min
  23.       value -= mp_value * mrate
  24.       self.mp -= mp_value
  25.     end
  26.     @result.make_damage(value.to_i, item)
  27.   end
  28. end
复制代码

作者: WantMy蕙    时间: 2018-2-28 23:14
怎么又来一个露qwq
那就设定不会战斗不能,然后在战斗执行的时候不会gameover不就行了
至于MP为零死亡就设个并行处理的公共事件???
作者: 文雅夕露    时间: 2018-3-24 18:26
本帖最后由 文雅夕露 于 2018-3-24 19:15 编辑

其实这个效果很简单实现,就是简单的替换一些战斗数据摆了。
脚本已经写好了。




效果1.MP为0时进入战斗不能状态;HP为0不会有影响,并且使用魔法依旧消耗MP
效果2.战斗每回合结束恢复所有的MP,前提HP充足的情况之下;
效果3.HP不充足,只恢复应有的数值;
效果4.MP为0时,HP还有也不能恢复。
脚本一览:

  1. #==============================================================================
  2. # ■ Game_BattlerBase
  3. #------------------------------------------------------------------------------
  4. #  管理战斗者的类。主要含有能力值计算的方法。Game_Battler 类的父类。
  5. #==============================================================================

  6. class Game_BattlerBase
  7.   #--------------------------------------------------------------------------
  8.   # ● 获取普通能力的最小值
  9.   #--------------------------------------------------------------------------
  10.   def param_min(param_id)
  11.     return 0 if param_id == 0  # MMP
  12.     return 1
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 刷新
  16.   #--------------------------------------------------------------------------
  17.   def refresh
  18.     state_resist_set.each {|state_id| erase_state(state_id) }
  19.     @hp = [[@hp, mhp].min, 0].max
  20.     @mp = [[@mp, mmp].min, 0].max
  21.     @mp == 0 ? add_state(death_state_id) : remove_state(death_state_id)
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 判定是否死亡
  25.   #--------------------------------------------------------------------------
  26.   def dead?
  27.     exist? && death_state? || @mp == 0
  28.   end
  29. end
  30. #==============================================================================
  31. # ■ Game_Battler
  32. #------------------------------------------------------------------------------
  33. #  处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。
  34. #==============================================================================

  35. class Game_Battler < Game_BattlerBase
  36.   #--------------------------------------------------------------------------
  37.   # ● 处理伤害
  38.   #    调用前需要设置好
  39.   #    @result.hp_damage   @result.mp_damage
  40.   #    @result.hp_drain    @result.mp_drain
  41.   #--------------------------------------------------------------------------
  42.   def execute_damage(user)
  43.     on_damage(@result.hp_damage) if @result.hp_damage > 0
  44.     self.hp -= @result.mp_damage
  45.     self.mp -= @result.hp_damage
  46.     user.hp += @result.mp_drain
  47.     user.mp += @result.hp_drain
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 死亡
  51.   #--------------------------------------------------------------------------
  52.   def die
  53.     @mp = 0
  54.     clear_states
  55.     clear_buffs
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 复活
  59.   #--------------------------------------------------------------------------
  60.   def revive
  61.     @mp = 1 if @mp == 0
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 回合结束处理
  65.   #--------------------------------------------------------------------------
  66.   alias recover_on_turn_end on_turn_end
  67.   def on_turn_end
  68.      if self.is_a?(Game_Actor) && self.mp != 0
  69.      if (self.mmp - self.mp) <= self.hp
  70.        self.hp -= (self.mmp - self.mp).abs
  71.        self.mp += (self.mmp - self.mp)
  72.      elsif (self.mmp - self.mp) > self.hp
  73.        self.mp += self.hp
  74.        self.hp -= self.hp
  75.      end
  76.      end
  77.     recover_on_turn_end
  78.   end
  79. end
  80. #encoding:utf-8
  81. #==============================================================================
  82. # ■ Window_Base
  83. #------------------------------------------------------------------------------
  84. #  游戏中所有窗口的父类
  85. #==============================================================================

  86. class Window_Base < Window
  87.   #--------------------------------------------------------------------------
  88.   # ● 获取 HP 的文字颜色
  89.   #--------------------------------------------------------------------------
  90.   def hp_color(actor)
  91.     return crisis_color if actor.hp < actor.mhp / 4
  92.     return normal_color
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 获取 MP 的文字颜色
  96.   #--------------------------------------------------------------------------
  97.   def mp_color(actor)
  98.     return knockout_color if actor.mp == 0
  99.     return crisis_color if actor.mp < actor.mmp / 4
  100.     return normal_color
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ● 获取 TP 的文字颜色
  104.   #--------------------------------------------------------------------------
  105.   def tp_color(actor)
  106.     return normal_color
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 绘制角色行走图
  110.   #--------------------------------------------------------------------------
  111.   def draw_actor_graphic(actor, x, y)
  112.     draw_character(actor.character_name, actor.character_index, x, y)
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 绘制角色肖像图
  116.   #--------------------------------------------------------------------------
  117.   def draw_actor_face(actor, x, y, enabled = true)
  118.     draw_face(actor.face_name, actor.face_index, x, y, enabled)
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● 绘制名字
  122.   #--------------------------------------------------------------------------
  123.   def draw_actor_name(actor, x, y, width = 112)
  124.     change_color(mp_color(actor))
  125.     draw_text(x, y, width, line_height, actor.name)
  126.   end
  127. end
复制代码





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