Project1

标题: 如何做到增加某属性威力的效果? [打印本页]

作者: K·斯尼吉    时间: 2015-3-8 12:28
标题: 如何做到增加某属性威力的效果?
以前玩一些游戏,都有这种设定,就是使用某种道具或某种技能或装备某种道具可以使角色的某属性的威力提升,但是XP只有属性防御没有属性威力,所以求教下……

比如,使用“油壶”或者“火焰强化”,可以使火属性威力加强,或者装备“水之心”增强角色的水属性威力……
作者: 芯☆淡茹水    时间: 2015-3-8 12:51
这样的话需要给角色定义N个属性实例变量,状态和物品可以改变属性值,技能威力再加上与其属性相同的角色属性补正。
作者: RyanBern    时间: 2015-3-8 12:56
本帖最后由 RyanBern 于 2015-3-8 14:24 编辑

写了一个,未测试。
此脚本仅对技能有效。
RUBY 代码复制
  1. module RB
  2. end
  3. # 设置区域
  4. module RB::Power_Correct
  5.   # 状态对属性攻击的威力的修正
  6.   # 如果想要17号状态可以增强1号属性攻击的威力,就加上17 => 1
  7.   States_Hash = {
  8.     17 => 1,
  9.     18 => 3
  10.   }
  11.   # 增加威力的比例,可叠加
  12.   Power_Increase_Rate = 1.1
  13. end
  14. class Game_Battler
  15.   def power_correct(user, element_set)
  16.     rate = 1.0
  17.     RB::Power_Correct::States_Hash.keys.each do |state_id|
  18.       if user.state?(state_id) && element_set.include?(RB::Power_Correct::States_Hash[state_id])
  19.         rate *= RB::Power_Correct::Power_Increase_Rate
  20.       end
  21.     end
  22.     return rate
  23.   end
  24.   # 此处可能会造成脚本冲突
  25.   def skill_effect(user, skill)
  26.     # 清除会心一击标志
  27.     self.critical = false
  28.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  29.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  30.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  31.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  32.       # 过程结束
  33.       return false
  34.     end
  35.     # 清除有效标志
  36.     effective = false
  37.     # 公共事件 ID 是有效的情况下,设置为有效标志
  38.     effective |= skill.common_event_id > 0
  39.     # 第一命中判定
  40.     hit = skill.hit
  41.     if skill.atk_f > 0
  42.       hit *= user.hit / 100
  43.     end
  44.     hit_result = (rand(100) < hit)
  45.     # 不确定的特技的情况下设置为有效标志
  46.     effective |= hit < 100
  47.     # 命中的情况下
  48.     if hit_result == true
  49.       # 计算威力
  50.       power = skill.power + user.atk * skill.atk_f / 100
  51.       #==================================
  52.       # 仅仅加了这一句话,改的时候可以直接在原脚本上添加
  53.       #==================================
  54.       power = Integer(power * power_correct(user, skill.element_set)
  55.       #==================================
  56.       if power > 0
  57.         power -= self.pdef * skill.pdef_f / 200
  58.         power -= self.mdef * skill.mdef_f / 200
  59.         power = [power, 0].max
  60.       end
  61.       # 计算倍率
  62.       rate = 20
  63.       rate += (user.str * skill.str_f / 100)
  64.       rate += (user.dex * skill.dex_f / 100)
  65.       rate += (user.agi * skill.agi_f / 100)
  66.       rate += (user.int * skill.int_f / 100)
  67.       # 计算基本伤害
  68.       self.damage = power * rate / 20
  69.       # 属性修正
  70.       self.damage *= elements_correct(skill.element_set)
  71.       self.damage /= 100
  72.       # 伤害符号正确的情况下
  73.       if self.damage > 0
  74.         # 防御修正
  75.         if self.guarding?
  76.           self.damage /= 2
  77.         end
  78.       end
  79.       # 分散
  80.       if skill.variance > 0 and self.damage.abs > 0
  81.         amp = [self.damage.abs * skill.variance / 100, 1].max
  82.         self.damage += rand(amp+1) + rand(amp+1) - amp
  83.       end
  84.       # 第二命中判定
  85.       eva = 8 * self.agi / user.dex + self.eva
  86.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  87.       hit = self.cant_evade? ? 100 : hit
  88.       hit_result = (rand(100) < hit)
  89.       # 不确定的特技的情况下设置为有效标志
  90.       effective |= hit < 100
  91.     end
  92.     # 命中的情况下
  93.     if hit_result == true
  94.       # 威力 0 以外的物理攻击的情况下
  95.       if skill.power != 0 and skill.atk_f > 0
  96.         # 状态冲击解除
  97.         remove_states_shock
  98.         # 设置有效标志
  99.         effective = true
  100.       end
  101.       # HP 的伤害减法运算
  102.       last_hp = self.hp
  103.       self.hp -= self.damage
  104.       effective |= self.hp != last_hp
  105.       # 状态变化
  106.       @state_changed = false
  107.       effective |= states_plus(skill.plus_state_set)
  108.       effective |= states_minus(skill.minus_state_set)
  109.       # 威力为 0 的场合
  110.       if skill.power == 0
  111.         # 伤害设置为空的字串
  112.         self.damage = ""
  113.         # 状态没有变化的情况下
  114.         unless @state_changed
  115.           # 伤害设置为 "Miss"
  116.           self.damage = "Miss"
  117.         end
  118.       end
  119.     # Miss 的情况下
  120.     else
  121.       # 伤害设置为 "Miss"
  122.       self.damage = "Miss"
  123.     end
  124.     # 不在战斗中的情况下
  125.     unless $game_temp.in_battle
  126.       # 伤害设置为 nil
  127.       self.damage = nil
  128.     end
  129.     # 过程结束
  130.     return effective
  131.   end
  132. end





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1