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

Project1

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

[已经解决] 每个技能都有不同的计算伤害公式怎么设定

[复制链接]

Lv1.梦旅人

梦石
0
星屑
111
在线时间
1421 小时
注册时间
2008-8-30
帖子
999
跳转到指定楼层
1
发表于 2013-4-4 11:19:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
2星屑
本帖最后由 jklpgh 于 2013-4-4 20:04 编辑

怪物的技能和角色的技能每个技能都可以用不同的伤害公式,就是每个技能都有每个技能独特的计算伤害公式,请问怎么改

最佳答案

查看完整内容

我用分隔線隔開了? 話說我是照正常的排法.....應該是擠在一團看不清楚.... p.s. 避免傷害為負已經寫進去了這是縮排版:

Lv1.梦旅人

梦石
0
星屑
50
在线时间
193 小时
注册时间
2013-3-24
帖子
448
2
发表于 2013-4-4 11:19:04 | 只看该作者
本帖最后由 joe5491 于 2013-4-4 19:24 编辑

我用分隔線隔開了?
話說我是照正常的排法.....應該是擠在一團看不清楚....
p.s. 避免傷害為負已經寫進去了

  1.       if skill.id == 5 #如果五號技能的話
  2.         self.damage = skill.power * user.atk * skill.atk_f #傷害=技能威力*攻擊力*攻擊力F        
  3.         if self.damage < 0# 避免傷害為負
  4.           self.damage = 0
  5.         end

  6. #===========================================================

  7.       elsif skill.id == 7 #如果七號技能的話
  8.         self.damage = skill.power * 500 #傷害=技能威力*500
  9.         if self.damage < 0          # 避免傷害為負
  10.           self.damage = 0
  11.         end

  12. #===========================================================

  13.       elsif skill.id == 9 #如果九號技能的話
  14.         self.damage = skill.power  #傷害=技能威力
  15.         if skill.variance > 0 and self.damage.abs > 0                     # 傷害分散
  16.           amp = [self.damage.abs * skill.variance / 100, 1].max   # 傷害分散
  17.           self.damage += rand(amp+1) + rand(amp+1) - amp   # 傷害分散
  18.         end                                                                                # 傷害分散
  19.         if self.damage < 0   # 避免傷害為負
  20.           self.damage = 0
  21.         end

  22. #===========================================================

  23.       else   #不是上面有寫到的技能的話,用原本內建的公式
  24.         # 計算威力
  25.         power = skill.power + user.atk * skill.atk_f / 100
  26.         if power > 0
  27.           power -= self.pdef * skill.pdef_f / 200
  28.           power -= self.mdef * skill.mdef_f / 200
  29.           power = [power, 0].max
  30.         end
  31.         # 計算倍率
  32.         rate = 20
  33.         rate += (user.str * skill.str_f / 100)
  34.         rate += (user.dex * skill.dex_f / 100)
  35.         rate += (user.agi * skill.agi_f / 100)
  36.         rate += (user.int * skill.int_f / 100)
  37.         # 計算基本傷害
  38.         self.damage = power * rate / 20
  39.         # 屬性修正
  40.         self.damage *= elements_correct(skill.element_set)
  41.         self.damage /= 100
  42.         # 傷害符號正確的情況下
  43.         if self.damage > 0
  44.           # 防禦修正
  45.           if self.guarding?
  46.             self.damage /= 2
  47.           end
  48.         end
  49.         # 分散
  50.         if skill.variance > 0 and self.damage.abs > 0
  51.           amp = [self.damage.abs * skill.variance / 100, 1].max
  52.           self.damage += rand(amp+1) + rand(amp+1) - amp
  53.         end

  54. #===========================================================

  55.       end
复制代码
這是縮排版:


  1. if skill.id == 5 #如果五號技能的話
  2.   self.damage = skill.power * user.atk * skill.atk_f #傷害=技能威力*攻擊力*攻擊力F        
  3.   if self.damage < 0# 避免傷害為負
  4.     self.damage = 0
  5.   end

  6. #===========================================================

  7. elsif skill.id == 7 #如果七號技能的話
  8.   self.damage = skill.power * 500 #傷害=技能威力*500
  9.   if self.damage < 0          # 避免傷害為負
  10.     self.damage = 0
  11.   end

  12. #===========================================================

  13. elsif skill.id == 9 #如果九號技能的話
  14.   self.damage = skill.power  #傷害=技能威力
  15.   if skill.variance > 0 and self.damage.abs > 0                     # 傷害分散
  16.     amp = [self.damage.abs * skill.variance / 100, 1].max   # 傷害分散
  17.     self.damage += rand(amp+1) + rand(amp+1) - amp   # 傷害分散
  18.   end                                                                                # 傷害分散
  19.   if self.damage < 0   # 避免傷害為負
  20.     self.damage = 0
  21.   end

  22. #===========================================================

  23. else   #不是上面有寫到的技能的話,用原本內建的公式
  24.   # 計算威力
  25.   power = skill.power + user.atk * skill.atk_f / 100
  26.   if power > 0
  27.     power -= self.pdef * skill.pdef_f / 200
  28.     power -= self.mdef * skill.mdef_f / 200
  29.     power = [power, 0].max
  30.   end
  31.   # 計算倍率
  32.   rate = 20
  33.   rate += (user.str * skill.str_f / 100)
  34.   rate += (user.dex * skill.dex_f / 100)
  35.   rate += (user.agi * skill.agi_f / 100)
  36.   rate += (user.int * skill.int_f / 100)
  37.   # 計算基本傷害
  38.   self.damage = power * rate / 20
  39.   # 屬性修正
  40.   self.damage *= elements_correct(skill.element_set)
  41.   self.damage /= 100
  42.   # 傷害符號正確的情況下
  43.   if self.damage > 0
  44.     # 防禦修正
  45.     if self.guarding?
  46.       self.damage /= 2
  47.     end
  48.   end
  49.   # 分散
  50.   if skill.variance > 0 and self.damage.abs > 0
  51.     amp = [self.damage.abs * skill.variance / 100, 1].max
  52.     self.damage += rand(amp+1) + rand(amp+1) - amp
  53.   end

  54. #===========================================================

  55. end
复制代码
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
182 小时
注册时间
2011-2-17
帖子
518
3
发表于 2013-4-4 11:47:51 | 只看该作者
事件党表示 = =可以用事件做..
比如技能 A带公共事件 且技能自身没有任何作用
事件内容
增减能力值
强制使用技能B
然后再恢复原本的能力值
这样可以造成不能技能有不能伤害公式的假象 当然玩游戏的人不知道=

点评

而且特别麻烦  发表于 2013-4-4 12:05
那样不是没法显示伤害吗  发表于 2013-4-4 12:05
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
193 小时
注册时间
2013-3-24
帖子
448
4
发表于 2013-4-4 12:19:57 | 只看该作者
本帖最后由 joe5491 于 2013-4-4 18:47 编辑

在Game_Battler 3第103行附近,發現def skill_effect(user, skill)
然後往下發現
  1.       # 計算威力
  2.       power = skill.power + user.atk * skill.atk_f / 100
  3.       if power > 0
  4.         power -= self.pdef * skill.pdef_f / 200
  5.         power -= self.mdef * skill.mdef_f / 200
  6.         power = [power, 0].max
  7.       end
  8.       # 計算倍率
  9.       rate = 20
  10.       rate += (user.str * skill.str_f / 100)
  11.       rate += (user.dex * skill.dex_f / 100)
  12.       rate += (user.agi * skill.agi_f / 100)
  13.       rate += (user.int * skill.int_f / 100)
  14.       # 計算基本傷害
  15.       self.damage = power * rate / 20
  16.       # 屬性修正
  17.       self.damage *= elements_correct(skill.element_set)
  18.       self.damage /= 100
  19.       # 傷害符號正確的情況下
  20.       if self.damage > 0
  21.         # 防禦修正
  22.         if self.guarding?
  23.           self.damage /= 2
  24.         end
  25.       end
  26.       # 分散
  27.       if skill.variance > 0 and self.damage.abs > 0
  28.         amp = [self.damage.abs * skill.variance / 100, 1].max
  29.         self.damage += rand(amp+1) + rand(amp+1) - amp
  30.       end
复制代码
改成
  1.         if skill.id == 5 #如果五號技能的話
  2.         self.damage = skill.power * user.atk * skill.atk_f #傷害=技能威力*攻擊力*攻擊力F
  3.         
  4.       elsif skill.id == 7 #如果七號技能的話
  5.         self.damage = skill.power * 500 #傷害=技能威力*500
  6.         
  7.       elsif skill.id == 9 #如果九號技能的話
  8.         self.damage = skill.power  #傷害=技能威力
  9.         if skill.variance > 0 and self.damage.abs > 0
  10.           amp = [self.damage.abs * skill.variance / 100, 1].max
  11.           self.damage += rand(amp+1) + rand(amp+1) - amp   # 傷害分散
  12.         end
  13.         
  14.       else   #不是上面有寫到的技能的話,用原本內建的公式
  15.         # 計算威力
  16.         power = skill.power + user.atk * skill.atk_f / 100
  17.         if power > 0
  18.           power -= self.pdef * skill.pdef_f / 200
  19.           power -= self.mdef * skill.mdef_f / 200
  20.           power = [power, 0].max
  21.         end
  22.         # 計算倍率
  23.         rate = 20
  24.         rate += (user.str * skill.str_f / 100)
  25.         rate += (user.dex * skill.dex_f / 100)
  26.         rate += (user.agi * skill.agi_f / 100)
  27.         rate += (user.int * skill.int_f / 100)
  28.         # 計算基本傷害
  29.         self.damage = power * rate / 20
  30.         # 屬性修正
  31.         self.damage *= elements_correct(skill.element_set)
  32.         self.damage /= 100
  33.         # 傷害符號正確的情況下
  34.         if self.damage > 0
  35.           # 防禦修正
  36.           if self.guarding?
  37.             self.damage /= 2
  38.           end
  39.         end
  40.         # 分散
  41.         if skill.variance > 0 and self.damage.abs > 0
  42.           amp = [self.damage.abs * skill.variance / 100, 1].max
  43.           self.damage += rand(amp+1) + rand(amp+1) - amp
  44.         end
  45.       end
  46.       
复制代码
對了!裡面的傷害公式是亂寫的....別在意...直接換成你自己的吧
p.s.   self.damage 就是傷害值(就是會被扣的血量,如果是負的話,貌似會補血?)

点评

仔细看了一下,MISS是我填错了技能ID...,多谢热心的帮助  发表于 2013-4-5 22:04
能不能帮忙整理下你写的脚本格式,有点乱  发表于 2013-4-4 18:54
對齊了  发表于 2013-4-4 18:48
能对齐下吗,格式很乱  发表于 2013-4-4 13:01
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
111
在线时间
1421 小时
注册时间
2008-8-30
帖子
999
5
 楼主| 发表于 2013-4-4 13:47:02 | 只看该作者
joe5491 发表于 2013-4-4 12:19
在Game_Battler 3第103行附近,發現def skill_effect(user, skill)
然後往下發現改成對了!裡面的傷害公式 ...

我想弄成这样,不是直接定义伤害,而是计算威力,因为我在直接定义伤害用的公式是威力减敌方防御,防御太高就变成加血了,所以不想用直接定义伤害,但好像这样写格式又有错啊,能帮忙看看吗

1.jpg (81.28 KB, 下载次数: 4)

1.jpg

点评

你可以在計算傷害完後加上: if self.damage < 0 self.damage=0 end 這樣即可避免傷害為負...  发表于 2013-4-4 18:52
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
帖子
768
6
发表于 2013-4-4 14:01:14 | 只看该作者
jklpgh 发表于 2013-4-4 13:47
我想弄成这样,不是直接定义伤害,而是计算威力,因为我在直接定义伤害用的公式是威力减敌方防御,防御太 ...

{:2_251:} 好像少了几个"end"
回复

使用道具 举报

Lv1.梦旅人

秋寒

梦石
0
星屑
63
在线时间
801 小时
注册时间
2013-1-17
帖子
1992
7
发表于 2013-4-4 14:27:39 | 只看该作者
我只懂一点,如果用敏捷,体力上限之类的能力值影响数值 这里完全可以改,公共事件其实也不麻烦,脚本还容易出错呢
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
111
在线时间
1421 小时
注册时间
2008-8-30
帖子
999
8
 楼主| 发表于 2013-4-4 19:10:57 | 只看该作者
joe5491 发表于 2013-4-4 12:19
在Game_Battler 3第103行附近,發現def skill_effect(user, skill)
然後往下發現改成對了!裡面的傷害公式 ...

能帮忙调整格式重新写好下吗,还有伤害如果小于零则修正为零也帮忙写下
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
111
在线时间
1421 小时
注册时间
2008-8-30
帖子
999
9
 楼主| 发表于 2013-4-4 19:36:11 | 只看该作者
joe5491 发表于 2013-4-4 19:20
我用分隔線隔開了?
話說我是照正常的排法.....應該是擠在一團看不清楚....
p.s. 避免傷害為負已經寫進去了 ...

请问特殊定义的技能还能受到属性抗性什么的影响吗,就是下面的计算倍率,和属性修正还对特殊定义的技能有效果吗,还是只有按原来公式的那些技能有效果

点评

原本內建公式一大串的原因就是因為包含了抗性、分散之類的東東,所以特殊定義的技能要自己把後面的抗性、分散補上  发表于 2013-4-4 20:01
而且还有防御什么的是不是也不会影响到定义的技能的伤害了?  发表于 2013-4-4 19:42
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
111
在线时间
1421 小时
注册时间
2008-8-30
帖子
999
10
 楼主| 发表于 2013-4-4 21:01:18 | 只看该作者
joe5491 发表于 2013-4-4 11:19
我用分隔線隔開了?
話說我是照正常的排法.....應該是擠在一團看不清楚....
p.s. 避免傷害為負已經寫進去了 ...

能再帮忙弄下吗,看下脚本第一行注释,这样怎么写

  1.       if skill.id == 5,6,7,8,9#像这样一次定义很多个技能编号,都用这个公式,怎么写?
  2.         self.damage = skill.power * user.atk * skill.atk_f #傷害=技能威力*攻擊力*攻擊力F        
  3.         if self.damage < 0# 避免傷害為負
  4.           self.damage = 0
  5.         end

  6. #===========================================================

  7.       elsif skill.id == 7 #如果七號技能的話
  8.         self.damage = skill.power * 500 #傷害=技能威力*500
  9.         if self.damage < 0          # 避免傷害為負
  10.           self.damage = 0
  11.         end

  12. #===========================================================

  13.       elsif skill.id == 9 #如果九號技能的話
  14.         self.damage = skill.power  #傷害=技能威力
  15.         if skill.variance > 0 and self.damage.abs > 0                     # 傷害分散
  16.           amp = [self.damage.abs * skill.variance / 100, 1].max   # 傷害分散
  17.           self.damage += rand(amp+1) + rand(amp+1) - amp   # 傷害分散
  18.         end                                                                                # 傷害分散
  19.         if self.damage < 0   # 避免傷害為負
  20.           self.damage = 0
  21.         end

  22. #===========================================================

  23.       else   #不是上面有寫到的技能的話,用原本內建的公式
  24.         # 計算威力
  25.         power = skill.power + user.atk * skill.atk_f / 100
  26.         if power > 0
  27.           power -= self.pdef * skill.pdef_f / 200
  28.           power -= self.mdef * skill.mdef_f / 200
  29.           power = [power, 0].max
  30.         end
  31.         # 計算倍率
  32.         rate = 20
  33.         rate += (user.str * skill.str_f / 100)
  34.         rate += (user.dex * skill.dex_f / 100)
  35.         rate += (user.agi * skill.agi_f / 100)
  36.         rate += (user.int * skill.int_f / 100)
  37.         # 計算基本傷害
  38.         self.damage = power * rate / 20
  39.         # 屬性修正
  40.         self.damage *= elements_correct(skill.element_set)
  41.         self.damage /= 100
  42.         # 傷害符號正確的情況下
  43.         if self.damage > 0
  44.           # 防禦修正
  45.           if self.guarding?
  46.             self.damage /= 2
  47.           end
  48.         end
  49.         # 分散
  50.         if skill.variance > 0 and self.damage.abs > 0
  51.           amp = [self.damage.abs * skill.variance / 100, 1].max
  52.           self.damage += rand(amp+1) + rand(amp+1) - amp
  53.         end

  54. #===========================================================

  55.       end
复制代码

点评

if skill.id == 5 or skill.id == 6 or skill.id == 7 or skill.id == 8 or skill.id == 9 #加個or來把他們合在一起  发表于 2013-4-4 21:05
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-5 07:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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