Project1

标题: 如何设置状态可以提高某属性的攻击威力? [打印本页]

作者: 苹果星ねこ    时间: 2012-5-10 16:42
标题: 如何设置状态可以提高某属性的攻击威力?
本帖最后由 苹果星ねこ 于 2012-5-10 18:44 编辑

比如附加一个火状态,火属性的技能的威力会上升这样子dsu_plus_rewardpost_czw
作者: Luciffer    时间: 2012-5-10 17:47
大概可以做成:通过该属性技能引发公共事件判定某人是否有该状态然后触发二次伤害就好了。。。
作者: hys111111    时间: 2012-5-10 18:35
本帖最后由 hys111111 于 2012-5-10 18:41 编辑

……很高级的东西(另外,如果你想叠加伤害的话,hurt = 2 改为 hurt +=1)

  1. class Game_Battler
  2.   #--------------------------------------------------------------------------
  3.   # ● 应用特技效果
  4.   #     user  : 特技的使用者 (battler)
  5.   #     skill : 特技
  6.   #--------------------------------------------------------------------------
  7.   def skill_effect(user, skill)
  8.    
  9.     hurt = 1
  10.    
  11.     #————————————————————————————————————
  12.     # 火属性
  13.     #————————————————————————————————————
  14.     #下面这行就是如果是技能1号属性,并且使用者中了17号状态,伤害翻倍
  15.     if skill.element_set[1] and user.states.include?(17)
  16.       hurt = 2
  17.       #翻倍的伤害,2就是两倍伤害,可自己改
  18.     end
  19.    
  20.     #————————————————————————————————————
  21.     # 冰属性
  22.     #————————————————————————————————————
  23.     #下面这行就是如果是技能2号属性,并且使用者中了18号状态,伤害翻倍
  24.     if skill.element_set[2] and user.states.include?(18)
  25.       hurt = 2
  26.       #翻倍的伤害,2就是两倍伤害,可自己改
  27.     end
  28.    
  29.    
  30.     # 清除会心一击标志
  31.     self.critical = false
  32.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  33.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  34.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  35.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  36.       # 过程结束
  37.       return false
  38.     end
  39.     # 清除有效标志
  40.     effective = false
  41.     # 公共事件 ID 是有效的情况下,设置为有效标志
  42.     effective |= skill.common_event_id > 0
  43.     # 第一命中判定
  44.     hit = skill.hit
  45.     if skill.atk_f > 0
  46.       hit *= user.hit / 100
  47.     end
  48.     hit_result = (rand(100) < hit)
  49.     # 不确定的特技的情况下设置为有效标志
  50.     effective |= hit < 100
  51.     # 命中的情况下
  52.     if hit_result == true
  53.       # 计算威力
  54.       power = skill.power + user.atk * skill.atk_f / 100
  55.       if power > 0
  56.         power -= self.pdef * skill.pdef_f / 200
  57.         power -= self.mdef * skill.mdef_f / 200
  58.         power = [power, 0].max
  59.       end
  60.       power *= hurt
  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