查看: 3684|回复: 8

[已经解决] 求把伤害的计算公式改成这样。。。

[复制链接]
梦石
0
星屑
1328
在线时间
354 小时
注册时间
2009-9-14
回帖
211
发表于 2014-9-22 16:58:25 | 显示全部楼层 |阅读模式
悬赏3星屑已解决
角色力量*技能力量%+角色攻击力*技能攻击力%
+角色智力*技能智力%*(100+技能威力)%
+角色敏捷*技能敏捷%
-敌人物理防御*技能物理防御%-敌人魔法防御*技能魔法防御%
=伤害结果1


伤害结果1*(100+伤害增幅变量n)%=伤害结果2


最后用分散度使伤害结果具有随机性,设   技能分散度=10,则最终分散度为 -10 到 10 之间的一个随机数.


伤害结果2*(100+最终分散度)%=最终伤害


伤害增幅变量n是一个变量,可以在游戏中改变数值。。。

最佳答案

查看完整内容

下面脚本插入到main前,将对所有技能伤害的计算有影响,没有改变命中的判定和属性修正。 威力增幅被设定为1号变量的值,第一次忘记说了。 不过,要按这么做的话,加血技能就不太好弄了。 [pre lang="Ruby"]class Game_Battler #-------------------------------------------------------------------------- # ● 应用特技效果 # user : 特技的使用者 (battler) # skill : 特技 #--------------------------- ...

评分

参与人数 1星屑 +35 收起 理由
︶ㄣ牛排ぶ + 35 手动认可奖励

查看全部评分

梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2014-9-22 16:58:26 | 显示全部楼层
本帖最后由 RyanBern 于 2014-9-24 21:00 编辑

下面脚本插入到main前,将对所有技能伤害的计算有影响,没有改变命中的判定和属性修正。
威力增幅被设定为1号变量的值,第一次忘记说了。
不过,要按这么做的话,加血技能就不太好弄了。
[pre lang="Ruby"]class Game_Battler  
  #--------------------------------------------------------------------------
  # ● 应用特技效果
  #     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 = (user.int * skill.int_f * (100 + skill.power) / 100 + user.str * skill.str_f + user.dex * skill.dex_f + user.atk * skill.atk_f) / 100
      if power > 0
        power -= self.pdef * skill.pdef_f / 100
        power -= self.mdef * skill.mdef_f / 100
        power = [power, 0].max
      end
      # 计算基本伤害
      plus = user.is_a?(Game_Actor) && user.id == 1 $game_variables[1] : 0
      self.damage = skill.power >= 0 ? power * (100 + plus) / 100 : skill.power
      # 属性修正
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      # 伤害符号正确的情况下
      if self.damage > 0
        # 防御修正
        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)
      # 不确定的特技的情况下设置为有效标志
      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
      # 状态变化
      @state_changed = false
      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
end[/pre]

点评

user.id == 1 $game变成user.id == 1 ? $game  发表于 2014-9-25 13:54
CR~
新加的那行39行出错啊。。。  发表于 2014-9-25 08:15

评分

参与人数 1梦石 +1 收起 理由
︶ㄣ牛排ぶ + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
1328
在线时间
354 小时
注册时间
2009-9-14
回帖
211
 楼主| 发表于 2014-9-23 10:06:53 | 显示全部楼层
RyanBern 发表于 2014-9-22 19:18
下面脚本插入到main前,将对所有技能伤害的计算有影响,没有改变命中的判定和属性修正。
不过,要按这么做 ...

这个有分散度和增幅变量的功能么。。。
加血可不可以弄成另一种算法,,,当威力为负的时候是加血,
加血的算法是:
恢复血量=威力

点评

为什么没有呢?伤害值分散原来的脚本就有,并未改动(见50~54行)。威力增幅设置成1号变量,这个一开始忘说了。回复技能也已设置(有分散度)  发表于 2014-9-23 19:10
回复

使用道具 举报

梦石
0
星屑
782
在线时间
3431 小时
注册时间
2011-6-10
回帖
6325
发表于 2014-9-23 11:37:07 | 显示全部楼层

角色力量*技能力量%+角色攻击力*技能攻击力%
+角色智力*技能智力%*(100+技能威力)%
+角色敏捷*技能敏捷%
-敌人物理防御*技能物理防御%-敌人魔法防御*技能魔法防御%
=伤害结果1


伤害结果1*(100+伤害增幅变量n)%=伤害结果2


最后用分散度使伤害结果具有随机性,设   技能分散度=10,则最终分散度为 -10 到 10 之间的一个随机数.


伤害结果2*(100+最终分散度)%=最终伤害


伤害增幅变量n是一个变量,可以在游戏中改变数值。。。

————————————————————————————
貌似有新变量 要重新定义
长名公主玩家群:372588926 攻略娱乐应有尽有
了解更多新RM游戏,游戏制作请加入RPGmaker支援群:113622890
回复

使用道具 举报

梦石
0
星屑
1328
在线时间
354 小时
注册时间
2009-9-14
回帖
211
 楼主| 发表于 2014-9-23 20:50:42 | 显示全部楼层
RyanBern 发表于 2014-9-22 19:18
下面脚本插入到main前,将对所有技能伤害的计算有影响,没有改变命中的判定和属性修正。
威力增幅被设定为1 ...

普通攻击要怎么改??
我想把普通攻击的伤害弄成
伤害=角色力量/2+角色的攻击力-敌人物理防御
然后这个伤害还会上下浮动20%左右。。。谢谢,
回复

使用道具 举报

梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2014-9-23 21:25:53 | 显示全部楼层
[pre lang="Ruby"]class Game_Battler
  #--------------------------------------------------------------------------
  # ● 应用通常攻击效果
  #     attacker : 攻击者 (battler)
  #--------------------------------------------------------------------------
  def attack_effect(attacker)
    # 清除会心一击标志
    self.critical = false
    # 第一命中判定
    hit_result = (rand(100) < attacker.hit)
    # 命中的情况下
    if hit_result == true
      # 计算基本伤害
      atk = [attacker.str / 2 + attacker.atk - self.pdef, 0].max
      self.damage = atk
      # 属性修正
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      # 伤害符号正确的情况下
      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 * 20 / 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
end[/pre]
回复

使用道具 举报

梦石
0
星屑
1328
在线时间
354 小时
注册时间
2009-9-14
回帖
211
 楼主| 发表于 2014-9-24 10:05:51 来自手机 | 显示全部楼层
RyanBern 发表于 2014-9-23 21:25
class Game_Battler
  #--------------------------------------------------------------------------
  # ...

额。。。还有最后一个问题。。怎么让那个伤害增幅变量只对角色一阿尔塞斯或者位置一的主角的技能有效,对敌人和其他角色无效。。

点评

2L帖子已编辑。  发表于 2014-9-24 21:00
是队伍中位置为1还是ID为1?这两个有区别的。  发表于 2014-9-24 10:31
回复

使用道具 举报

梦石
0
星屑
1328
在线时间
354 小时
注册时间
2009-9-14
回帖
211
 楼主| 发表于 2014-9-24 20:33:54 | 显示全部楼层
RyanBern 发表于 2014-9-23 21:25
class Game_Battler
  #--------------------------------------------------------------------------
  # ...

就弄成ID1的吧。
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-9-25 22:45:03 | 显示全部楼层
本帖最后由 chd114 于 2014-9-25 23:32 编辑

Game_Battler里面可以修改伤害公式等等的判定,attacker.dex是普通攻击时的攻击者的敏捷···,在
  1. ● 应用通常攻击效果
复制代码
那里修改普通攻击,
  1. ● 应用特技效果
复制代码
下面修改技能

点评

好吧···魔塔样板用多了···那里面是勇士的防御···  发表于 2014-9-26 16:31
attacker.dex明明是攻击者的敏捷  发表于 2014-9-26 08:35
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部