设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1536|回复: 7
打印 上一主题 下一主题

[已经解决] 物理技能攻击伤害异常

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2914
在线时间
387 小时
注册时间
2010-12-4
帖子
141
跳转到指定楼层
1
发表于 2022-10-19 23:12:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 letppigogo 于 2022-10-19 23:19 编辑

每战首次攻击目标伤害正常,第二次开始攻击目标伤害开始异常。而且只影响受到武器伤害加成的技能,如果武器伤害只有几十,第二次攻击伤害会突降200左右的,如果武器伤害提供到200左右,第二次技能伤害会突然提高200左右的伤害。例如第一次攻击在600-800之间的伤害,第二次开始伤害就变成了800-1000左右。确定不是分散度的问题,感觉应该是脚本哪里异常了,排查了很久没发现原因,不知道有大神知道原因吗?

    # 命中的情况下
    if hit_result == true
      # 计算威力
      power = skill.power
      if power > 0
        power -= self.pdef * skill.pdef_f / 300
        power -= self.mdef * skill.mdef_f / 300
        power -= self.int * skill.int_f / 200
        power = [power, 0].max
      end
      # 计算倍率
      rate = 10
      rate += (user.atk * skill.atk_f / 100)
      rate += (user.int * skill.int_f / 100)
      rate += (user.str * skill.str_f / 100)
      rate += (user.mdef * skill.mdef_f / 100)
      # 计算基本伤害
      # 施法者智力大于等于230,计策伤害乘以1.1倍
      if user.int >= 230 and skill.int_f = 100
        self.damage = power * rate / 90
        #伤害为整数
        self.damage = Integer(self.damage)
      end
      # 施法者智力小于等于229,计策伤害不变
      if user.int <= 229
        self.damage = power * rate / 100
      end
      #-----------------------------------------------------
      # ● 装备战争之潮时绝技伤害1.3
      #-----------------------------------------------------
      if user.state?(83) and skill.id >= 1 and skill.id <= 99
        self.damage = power * rate / 100 * 1.3
        #伤害为整数
        self.damage = Integer(self.damage)
      end
      #-----------------------------------------------------
      # ● 夏维娜“天机”状态,技能伤害增加1.5
      #-----------------------------------------------------
      if user.state?(66)
        self.damage = power * rate / 100 * 1.5
        #伤害为整数
        self.damage = Integer(self.damage)
      end
      #-----------------------------------------------------
      # ● 修斯兰特“破竹”天赋,全员技能伤害增加1.2
      #-----------------------------------------------------
      if user.state?(72)
        self.damage = power * rate / 100 * 1.2
        #伤害为整数
        self.damage = Integer(self.damage)
      end
      #-------------------------------------------------------------
      # ● 皮尔斯“靠山”天赋,受到物理伤害减半。
      #-------------------------------------------------------------
      if self.name == "皮尔斯"
        self.damage = power * rate / 100 / 2
        #伤害为整数      
        self.damage = Integer(self.damage)
      end
      #-------------------------------------------------------------
      # ● 阿加西“水神”开启,敌26号状态时受到1、17号属性伤害1.3倍。
      #-------------------------------------------------------------
      if self.states.include?(26) and  element_set = 1
        self.damage = power * rate / 100 * 1.3
        #伤害为整数      
        self.damage = Integer(self.damage)
      end
      if self.states.include?(26) and  element_set = 17
        self.damage = power * rate / 100 * 1.3
        #伤害为整数      
        self.damage = Integer(self.damage)
      end
      #----------------------------------------------------------------------
      # ● 泰勒“不屈”状态,呈阶梯状增加减伤
      #----------------------------------------------------------------------
      if self.name == "泰勒" and self.hp <= self.maxhp * 0.3
        self.damage = power * rate / 100 * 0.45
        #伤害为整数      
        self.damage = Integer(self.damage)
      end
      if self.name == "泰勒" and self.hp <= self.maxhp * 0.2
        self.damage = power * rate / 100 * 0.30
        #伤害为整数      
        self.damage = Integer(self.damage)
      end
      if self.name == "泰勒" and self.hp <= self.maxhp * 0.1
        self.damage = power * rate / 100 * 0.15
        #伤害为整数      
        self.damage = Integer(self.damage)
      end
      #-------------------------------------------------------------
      # 属性修正
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      # 伤害符号正确的情况下
      if self.damage > 0
      #----------------------------------------------------------------------
      # ● 技能疾风千裂破 可以会心一击
      #----------------------------------------------------------------------
      if skill.id == 4 or skill.id == 6 and
        rand(100) < 10 * user.dex / self.dex + 25
      # 会心一击伤害
        self.damage *= 1.5
        self.damage = Integer(self.damage)
        self.critical = true
      end
        # 防御修正
        if self.guarding?
          self.damage /= 2
        end
      end
      # 分散
      if skill.variance > 0 and self.damage.abs > 0
        amp = [self.damage.abs * skill.variance / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # 第二命中判定
     #eva = 8 * self.agi / user.dex + self.eva
     #hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
     #hit = self.cant_evade? ? 100 : hit
     #hit_result = (rand(100) < hit)
      hit_result = true
      # 不确定的特技的情况下设置为有效标志
      effective |= hit < 100
    end
    # 命中的情况下
    if hit_result == true
      # 威力 0 以外的物理攻击的情况下
      if skill.power != 0 and skill.atk_f > 0
        # 状态冲击解除
        remove_states_shock
        # 设置有效标志
        effective = true
      end
     # HP 的伤害减法运算
      last_hp = self.hp
      self.hp -= self.damage
      effective |= self.hp != last_hp
      #--------------------------------------------
      # ● 伊布斯 烈波斩 回血
      #--------------------------------------------
      if skill.id == 7  #烈波斩ID:7
        amp = (self.damage / 2).to_i
        user.hp += amp
        user.damage = -amp
      end
      #--------------------------------------------
      # 状态变化
      @state_changed = false
      #--------------------------------------------
      # ● 使用技能后获得增益状态
      #--------------------------------------------
      # 使用水神特技后获得水神状态
      user.add_state(75) if skill.id == 31
      # 使用迂回打击特技后获得迂回状态
      user.add_state(76) if skill.id == 24
      # 使用英勇打击特技后获得英勇状态
      user.add_state(77) if skill.id == 26      
      #--------------------------------------------
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      # 威力为 0 的场合
      if skill.power == 0
        # 伤害设置为空的字串
        self.damage = ""
        # 状态没有变化的情况下
        unless @state_changed
          # 伤害设置为 "Miss"
          self.damage = "MISS"
        end
      end
    # Miss 的情况下
    else
      # 伤害设置为 "Miss"
      self.damage = "MISS"
    end
    # 不在战斗中的情况下
    unless $game_temp.in_battle
      # 伤害设置为 nil
      self.damage = nil
    end
    # 过程结束
    return effective
  end

Lv3.寻梦者

梦石
0
星屑
2421
在线时间
162 小时
注册时间
2020-8-9
帖子
106
2
发表于 2022-10-20 18:07:03 | 只看该作者
没看懂楼主的需求,你这个武器伤害是什么,正常伤害应该是啥样,你的脚本里装备对伤害的增幅好像都是倍数关系,没有看到有固定伤害,而且每次符合条件都将self.damage重新赋值如果有重叠的情况会只保留靠后的情况,如果想将伤害转化为整数,在伤害生效之前加一次就行了,没必要每次都加

评分

参与人数 1星屑 +50 收起 理由
guoxiaomi + 50 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2914
在线时间
387 小时
注册时间
2010-12-4
帖子
141
3
 楼主| 发表于 2022-10-21 09:52:28 | 只看该作者
本帖最后由 letppigogo 于 2022-10-21 09:54 编辑
939034448 发表于 2022-10-20 18:07
没看懂楼主的需求,你这个武器伤害是什么,正常伤害应该是啥样,你的脚本里装备对伤害的增幅好像都是倍数关 ...


是这样的,异常的技能都是攻击力设置大于0的技能,我的定义是技能伤害会随着角色攻击力的提升而提高。举个例子,装备了低攻击力的武器,例如10点攻击力的武器时,使用技能第一次攻击敌人造成300左右的伤害,这应该是正常的。可是第二次攻击开始,造成伤害变成了0,之后的伤害也都是0。如果装备攻击力较高的武器,例如80点攻击力的武器时,使用技能第一次攻击造成600左右的伤害,这也应该是正常的。但是第二次攻击开始,造成伤害变成了900左右。这么大幅度的伤害变动,肯定是由问题的。

点评

是的,少了个等号,称这个机会我把规则优化了一下,现在应该会更加严谨,谢谢之前的提示  发表于 2022-10-24 09:26
不是要重新定义规则,你这少打了一个=号,判断是==  发表于 2022-10-23 20:10
问题找到了,bug出现在if user.int >= 230 and skill.int_f = 100 中的 and skill.int_f = 100,需要重新定义规则,谢谢  发表于 2022-10-22 23:20
如果在战斗公式里没找到问题,可以去Game_Battler里找atk方法,战斗者的数据基本都是在Game_Battler处理的,不排除是你的某个状态造成的异常  发表于 2022-10-22 10:49
最简单粗暴的方法,就是在你这段伤害公式里找到有关攻击力的地方,在这个地方前后 p self.damage,看是什么时候在什么位置出的问题  发表于 2022-10-22 10:43
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-28 11:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表