查看: 1847|回复: 5

[已经解决] 修改脚本的技能伤害计算(求帮助,不会写)

[复制链接]
梦石
0
星屑
50
在线时间
7 小时
注册时间
2016-2-25
回帖
4
发表于 2016-2-27 21:47:46 | 显示全部楼层 |阅读模式

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

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

×
我想把技能伤害公式改成  A的攻击力*技能威力*A的力量/B的防御/35*技能力量/20+A的攻击力*技能威力*A的魔力/B的魔法防御/35*技能魔力/20=伤害
该怎么写?脚本没看明白,但是我又想改公式,求各位大神了,这个公式我算了好久,但是写不进去,只能当可耻的伸手党了,跪求各位大神了QAQ

评分

参与人数 1星屑 +35 收起 理由
RyanBern + 35 手动认可奖励

查看全部评分

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
回帖
1643

开拓者

发表于 2016-2-27 22:34:08 | 显示全部楼层
Step1 找出处: 计算特技伤害相关代码位于 Game_Battler 3: 140-156行
Step2 翻译你的公式:
原文代码
Auser
Bself
技能skill
攻击力atk
威力power
力量str
物理防御pdef
魔法防御mdef
技能力量str_f
魔力int

所以
  1. A的攻击力*技能威力*A的力量/B的防御/35*技能力量/20+A的攻击力*技能威力*A的魔力/B的魔法防御/35*技能魔力/20
复制代码
翻译为:
  1. (user.atk * skill.power * user.str * skill.str_f / self.pdef + user.atk * skill.power * user.int / self.mdef) / 700
复制代码
(略作变形)
Step3 用你的公式替换Step1找到的出处
例如在156行下插入一行
  1. self.damage = (user.atk * skill.power * user.str * skill.str_f / self.pdef + user.atk * skill.power * user.int / self.mdef) / 700
复制代码
# 说明: 不负责翻译, 任何人使用此方法写代码出问题不要找我【
# 未测试

评分

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

查看全部评分


  -fk: -azogi:
回复

使用道具 举报

梦石
0
星屑
9716
在线时间
2775 小时
注册时间
2008-9-5
回帖
3458

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

发表于 2016-2-27 22:43:07 | 显示全部楼层
本帖最后由 cinderelmini 于 2016-2-27 22:45 编辑

放在Main前应该就可以了,
前置了一个可以设定例外的数组(也就是按照默认算法),往里面填技能ID就好,半角逗号分开。
然后,命中判定和属性修正啥的都是默认的,如果要去掉的话请通知修改……
点击展开/收起
  1. class Game_Battler
  2.   #--------------------------------------------------------------------------
  3.   # ● 例外的技能,也就是想用默认算法的技能
  4.   #    把ID都填进这个数组里
  5.   #--------------------------------------------------------------------------
  6.   def default_skills
  7.     return [233, 224, 666]
  8.   end
  9.   
  10.   #--------------------------------------------------------------------------
  11.   # ● 应用特技效果
  12.   #     user  : 特技的使用者 (battler)
  13.   #     skill : 特技
  14.   #--------------------------------------------------------------------------
  15.   alias sn_160227_skill_effect skill_effect
  16.   def skill_effect(user, skill)
  17.     # 例外的技能用默认算法
  18.     if default_skills.include?(skill.id)
  19.       sn_160227_skill_effect(user, skill)
  20.       return
  21.     end
  22.    
  23.     # 清除会心一击标志
  24.     self.critical = false
  25.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  26.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  27.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  28.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  29.       # 过程结束
  30.       return false
  31.     end
  32.     # 清除有效标志
  33.     effective = false
  34.     # 公共事件 ID 是有效的情况下,设置为有效标志
  35.     effective |= skill.common_event_id > 0
  36.     # 第一命中判定
  37.     hit = skill.hit
  38.     if skill.atk_f > 0
  39.       hit *= user.hit / 100
  40.     end
  41.     hit_result = (rand(100) < hit)
  42.     # 不确定的特技的情况下设置为有效标志
  43.     effective |= hit < 100
  44.     # 命中的情况下
  45.     if hit_result == true
  46.       
  47.       # A的攻击力*技能威力*A的力量/B的防御/35*技能力量/20
  48.       damage_a = user.atk * skill.power * user.str / self.pdef / 35 * skill.str_f / 20
  49.       # A的攻击力*技能威力*A的魔力/B的魔法防御/35*技能魔力/20
  50.       damage_b = user.atk * skill.power * user.int / self.mdef / 35 * skill.int_f / 20
  51.       # 计算基本伤害
  52.       self.damage = damage_a + damage_b
  53.       
  54.       # 属性修正
  55.       self.damage *= elements_correct(skill.element_set)
  56.       self.damage /= 100
  57.       # 伤害符号正确的情况下
  58.       if self.damage > 0
  59.         # 防御修正
  60.         if self.guarding?
  61.           self.damage /= 2
  62.         end
  63.       end
  64.       # 分散
  65.       if skill.variance > 0 and self.damage.abs > 0
  66.         amp = [self.damage.abs * skill.variance / 100, 1].max
  67.         self.damage += rand(amp+1) + rand(amp+1) - amp
  68.       end
  69.       # 第二命中判定
  70.       eva = 8 * self.agi / user.dex + self.eva
  71.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  72.       hit = self.cant_evade? ? 100 : hit
  73.       hit_result = (rand(100) < hit)
  74.       # 不确定的特技的情况下设置为有效标志
  75.       effective |= hit < 100
  76.     end
  77.     # 命中的情况下
  78.     if hit_result == true
  79.       # 威力 0 以外的物理攻击的情况下
  80.       if skill.power != 0 and skill.atk_f > 0
  81.         # 状态冲击解除
  82.         remove_states_shock
  83.         # 设置有效标志
  84.         effective = true
  85.       end
  86.       # HP 的伤害减法运算
  87.       last_hp = self.hp
  88.       self.hp -= self.damage
  89.       effective |= self.hp != last_hp
  90.       # 状态变化
  91.       @state_changed = false
  92.       effective |= states_plus(skill.plus_state_set)
  93.       effective |= states_minus(skill.minus_state_set)
  94.       # 威力为 0 的场合
  95.       if skill.power == 0
  96.         # 伤害设置为空的字串
  97.         self.damage = ""
  98.         # 状态没有变化的情况下
  99.         unless @state_changed
  100.           # 伤害设置为 "Miss"
  101.           self.damage = "Miss"
  102.         end
  103.       end
  104.     # Miss 的情况下
  105.     else
  106.       # 伤害设置为 "Miss"
  107.       self.damage = "Miss"
  108.     end
  109.     # 不在战斗中的情况下
  110.     unless $game_temp.in_battle
  111.       # 伤害设置为 nil
  112.       self.damage = nil
  113.     end
  114.     # 过程结束
  115.     return effective
  116.   end
  117. end
复制代码

评分

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

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
7 小时
注册时间
2016-2-25
回帖
4
 楼主| 发表于 2016-2-27 22:55:08 | 显示全部楼层
谢谢大神!
回复

使用道具 举报

梦石
0
星屑
50
在线时间
7 小时
注册时间
2016-2-25
回帖
4
 楼主| 发表于 2016-2-27 23:01:03 | 显示全部楼层
请问技能威力为负数时的情况在哪里修改?

点评

if skill.power < 0  发表于 2016-2-27 23:17
回复

使用道具 举报

梦石
0
星屑
50
在线时间
7 小时
注册时间
2016-2-25
回帖
4
 楼主| 发表于 2016-2-27 23:41:12 | 显示全部楼层
太长了该怎么换行QAQ,我自己弄了一下结果给弄成字串符了

点评

括号, 以及当前行语义未完情况下自动识别为换行  发表于 2016-2-27 23:59
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部