查看: 6038|回复: 5

[推荐问答] 战斗时每回合自动回复固定数值的HP和MP

[复制链接]
梦石
0
星屑
2952
在线时间
941 小时
注册时间
2009-1-4
回帖
137
发表于 2015-10-4 01:21:02 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
如题 就是每回合自动回复1点2点这种固定数值的装备 请问要怎么做

评分

参与人数 1星屑 +135 收起 理由
RyanBern + 135 设置为推荐问答+手动认可奖励

查看全部评分

梦石
0
星屑
606
在线时间
797 小时
注册时间
2014-7-1
回帖
501

开拓者

发表于 2015-10-4 11:45:23 | 显示全部楼层
本帖最后由 jiushiainilip19 于 2015-10-4 12:00 编辑

可以在数据库里面给装备添加一个状态 然后在
Game_Battler 3 中
[pre lang="ruby"]
#==============================================================================
# ■ Game_Battler (分割定义 3)
#------------------------------------------------------------------------------
#  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
# 超级类来使用。
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 可以使用特技的判定
  #     skill_id : 特技 ID
  #--------------------------------------------------------------------------
  def skill_can_use?(skill_id)
    # SP 不足的情况下不能使用
    if $data_skills[skill_id].sp_cost > self.sp
      return false
    end
    # 战斗不能的情况下不能使用
    if dead?
      return false
    end
    # 沉默状态的情况下、物理特技以外的特技不能使用
    if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
      return false
    end
    # 获取可以使用的时机
    occasion = $data_skills[skill_id].occasion
    # 战斗中的情况下
    if $game_temp.in_battle
      # [平时] 或者是 [战斗中] 可以使用
      return (occasion == 0 or occasion == 1)
    # 不是战斗中的情况下
    else
      # [平时] 或者是 [菜单中] 可以使用
      return (occasion == 0 or occasion == 2)
    end
  end
  #--------------------------------------------------------------------------
  # ● 应用通常攻击效果
  #     attacker : 攻击者 (battler)
  #--------------------------------------------------------------------------
  def attack_effect(attacker)
    # 清除会心一击标志
    self.critical = false
    # 第一命中判定
    hit_result = (rand(100) < attacker.hit)
    # 命中的情况下
    if hit_result == true
      # 计算基本伤害
      atk = [attacker.atk - self.pdef / 2, 0].max
      self.damage = atk * (20 + attacker.str) / 20
      # 属性修正
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      ################角色1行动一次显示恢复数值###################
       if attacker.is_a?(Game_Actor) && attacker.id == 1
         attacker.hp+=1 and attacker.damage=-1 and attacker.damage_pop=true
       end
      ##############角色1行动一次不显示恢复数值######################
      if attacker.is_a?(Game_Actor) && attacker.id == 1
         attacker.hp+=1
       end
       #####################################################
      ##############角色17号状态下恢复数值##############
       if attacker.state?(17)
        attacker.hp+=1 and attacker.damage=-1 and attacker.damage_pop=true
      end
      #################################################


      # 伤害符号正确的情况下
      if self.damage > 0
        # 会心一击修正
        if rand(100) < 4 * attacker.dex / self.agi
          self.damage *= 2
          self.critical = true
        end
        # 防御修正
        if self.guarding?
          self.damage /= 2
        end
      end
      # 分散
      if self.damage.abs > 0
        amp = [self.damage.abs * 15 / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # 第二命中判定
      eva = 8 * self.agi / attacker.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
    end
    # 命中的情况下
    if hit_result == true
      # 状态冲击解除
      remove_states_shock
      # HP 的伤害计算
      self.hp -= self.damage
      # 状态变化
      @state_changed = false
      states_plus(attacker.plus_state_set)
      states_minus(attacker.minus_state_set)
    # Miss 的情况下
    else
      # 伤害设置为 "Miss"
      self.damage = "Miss"
      # 清除会心一击标志
      self.critical = false
    end
    # 过程结束
    return true
  end
  #--------------------------------------------------------------------------
  # ● 应用特技效果
  #     user  : 特技的使用者 (battler)
  #     skill : 特技
  #--------------------------------------------------------------------------
  def skill_effect(user, skill)
    # 清除会心一击标志
    self.critical = false
    # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
    # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
       ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
      # 过程结束
      return false
    end
    # 清除有效标志
    effective = false
    # 公共事件 ID 是有效的情况下,设置为有效标志
    effective |= skill.common_event_id > 0
    # 第一命中判定
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    # 不确定的特技的情况下设置为有效标志
    effective |= hit < 100
    # 命中的情况下
    if hit_result == true #技能行动下:
    # 计算威力
      power = skill.power + user.atk * skill.atk_f / 100
      if power > 0
        power -= self.pdef * skill.pdef_f / 200
        power -= self.mdef * skill.mdef_f / 200
        power = [power, 0].max
      end
      ################角色1行动一次显示恢复数值###################
       if user.is_a?(Game_Actor) && user.id == 1
         user.hp+=1 and user.damage=-1 and user.damage_pop=true
       end
      ##############角色1行动一次不显示恢复数值######################
      if user.is_a?(Game_Actor) && user.id == 1
         user.hp+=1
       end
       ##############角色17号状态下行动一次恢复数值##############
       if user.state?(17)
        user.hp+=1 and user.damage=-1 and user.damage_pop=true
      end
      #################################################
      # 计算倍率
      rate = 20
      rate += (user.str * skill.str_f / 100)
      rate += (user.dex * skill.dex_f / 100)
      rate += (user.agi * skill.agi_f / 100)
      rate += (user.int * skill.int_f / 100)
[/pre]
学习使我疲劳,打工使我疲惫,恋爱使我伤身,吸烟伤我肺腑,饮酒损我形象,旅游使我破费,月底不见铜板,只有在论坛里面看看各种大佬才能使我进去
回复

使用道具 举报

梦石
0
星屑
2952
在线时间
941 小时
注册时间
2009-1-4
回帖
137
 楼主| 发表于 2015-10-7 03:47:41 | 显示全部楼层
jiushiainilip19 发表于 2015-10-4 11:45
可以在数据库里面给装备添加一个状态 然后在
Game_Battler 3 中

是直接替换掉吗……感觉很麻烦 事件能不能做呢
回复

使用道具 举报

梦石
0
星屑
55
在线时间
71 小时
注册时间
2010-9-20
回帖
78
发表于 2015-10-7 06:18:24 | 显示全部楼层
MLRPG 发表于 2015-10-6 11:47
是直接替换掉吗……感觉很麻烦 事件能不能做呢

事件不行,每回合进行回复判定依靠事件貌似是没法做的,可以参照系统自带的【中毒】状态,在脚本内反写伤害就可以了。详细参考二楼。以中毒为基础可以写很多内容,包括sp回合减少/增加,配合状态的持续时间可以设定成Hot机制或者持续回复的装备。
回复

使用道具 举报

梦石
0
星屑
606
在线时间
797 小时
注册时间
2014-7-1
回帖
501

开拓者

发表于 2015-10-7 10:52:06 | 显示全部楼层
MLRPG 发表于 2015-10-7 03:47
是直接替换掉吗……感觉很麻烦 事件能不能做呢

不麻烦的 你要自己看 需要用到的地方我用#####上下说明了 只需要参照里面意思就可以
Game_Battler 2 3 中 可以实现的技能效果非常多 想做游戏就几乎必须去了解



                     

点评

下次我直接做个范例给你吧  发表于 2015-10-8 02:06
但是这个还是不会用……直接替换?进游戏报错 修改了也不行  发表于 2015-10-8 00:54
谢谢指导  发表于 2015-10-8 00:41
学习使我疲劳,打工使我疲惫,恋爱使我伤身,吸烟伤我肺腑,饮酒损我形象,旅游使我破费,月底不见铜板,只有在论坛里面看看各种大佬才能使我进去
回复

使用道具 举报

梦石
0
星屑
606
在线时间
797 小时
注册时间
2014-7-1
回帖
501

开拓者

发表于 2015-10-8 02:28:01 | 显示全部楼层
里面我都写的很清楚了 测试过 没有问题

范例.zip

270.38 KB, 下载次数: 275

点评

已经彻底解决 辛苦您了~  发表于 2015-10-8 03:04

评分

参与人数 1梦石 +1 收起 理由
RyanBern + 1 认可答案

查看全部评分

学习使我疲劳,打工使我疲惫,恋爱使我伤身,吸烟伤我肺腑,饮酒损我形象,旅游使我破费,月底不见铜板,只有在论坛里面看看各种大佬才能使我进去
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部