Project1

标题: 求 一种技能设计思路,根据状态附加属性 [打印本页]

作者: enitsirhc    时间: 2015-7-25 07:03
标题: 求 一种技能设计思路,根据状态附加属性
RT,我想设计一种技能A,当技能B发动的时候同时角色自身附加状态A,然后当角色以状态A的情况下发动技能A,那么技能A将自动附加属性A,当状态A解除后,该技能附加的属性A也一同消失,请问该如何实现呢
作者: 芯☆淡茹水    时间: 2015-7-25 10:16
本帖最后由 芯☆淡茹水 于 2015-7-28 20:59 编辑

在战斗之外使用无效。
  1. class Game_Battler
  2. SKILL_A_ID = [58,59] #能状态附加属性的技能ID.
  3. STATE_A_ID = 17      #状态A ID.
  4. ELEMENT_ID = 9       #属性A ID.
  5.   def skill_element_set(skill)
  6.     add = ($scene.is_a?(Scene_Battle) and self.current_action.kind == 1 and
  7.     state?(STATE_A_ID) and SKILL_A_ID.include?(self.current_action.skill_id)) ? [ELEMENT_ID] : []
  8.     return skill.element_set | add
  9.   end
  10.    #--------------------------------------------------------------------------
  11.   def skill_effect(user, skill)
  12.     # 清除会心一击标志
  13.     self.critical = false
  14.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  15.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  16.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  17.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  18.       # 过程结束
  19.       return false
  20.     end
  21.     # 清除有效标志
  22.     effective = false
  23.     # 公共事件 ID 是有效的情况下,设置为有效标志
  24.     effective |= skill.common_event_id > 0
  25.     # 第一命中判定
  26.     hit = skill.hit
  27.     if skill.atk_f > 0
  28.       hit *= user.hit / 100
  29.     end
  30.     hit_result = (rand(100) < hit)
  31.     # 不确定的特技的情况下设置为有效标志
  32.     effective |= hit < 100
  33.     # 命中的情况下
  34.     if hit_result == true
  35.       # 计算威力
  36.       power = skill.power + user.atk * skill.atk_f / 100
  37.       if power > 0
  38.         power -= self.pdef * skill.pdef_f / 200
  39.         power -= self.mdef * skill.mdef_f / 200
  40.         power = [power, 0].max
  41.       end
  42.       # 计算倍率
  43.       rate = 20
  44.       rate += (user.str * skill.str_f / 100)
  45.       rate += (user.dex * skill.dex_f / 100)
  46.       rate += (user.agi * skill.agi_f / 100)
  47.       rate += (user.int * skill.int_f / 100)
  48.       # 计算基本伤害
  49.       self.damage = power * rate / 20
  50.       # 属性修正
  51.       self.damage *= elements_correct(user.skill_element_set(skill))
  52.       self.damage /= 100
  53.       # 伤害符号正确的情况下
  54.       if self.damage > 0
  55.         # 防御修正
  56.         if self.guarding?
  57.           self.damage /= 2
  58.         end
  59.       end
  60.       # 分散
  61.       if skill.variance > 0 and self.damage.abs > 0
  62.         amp = [self.damage.abs * skill.variance / 100, 1].max
  63.         self.damage += rand(amp+1) + rand(amp+1) - amp
  64.       end
  65.       # 第二命中判定
  66.       eva = 8 * self.agi / user.dex + self.eva
  67.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  68.       hit = self.cant_evade? ? 100 : hit
  69.       hit_result = (rand(100) < hit)
  70.       # 不确定的特技的情况下设置为有效标志
  71.       effective |= hit < 100
  72.     end
  73.     # 命中的情况下
  74.     if hit_result == true
  75.       # 威力 0 以外的物理攻击的情况下
  76.       if skill.power != 0 and skill.atk_f > 0
  77.         # 状态冲击解除
  78.         remove_states_shock
  79.         # 设置有效标志
  80.         effective = true
  81.       end
  82.       # HP 的伤害减法运算
  83.       last_hp = self.hp
  84.       self.hp -= self.damage
  85.       effective |= self.hp != last_hp
  86.       # 状态变化
  87.       @state_changed = false
  88.       effective |= states_plus(skill.plus_state_set)
  89.       effective |= states_minus(skill.minus_state_set)
  90.       # 威力为 0 的场合
  91.       if skill.power == 0
  92.         # 伤害设置为空的字串
  93.         self.damage = ""
  94.         # 状态没有变化的情况下
  95.         unless @state_changed
  96.           # 伤害设置为 "Miss"
  97.           self.damage = "Miss"
  98.         end
  99.       end
  100.     # Miss 的情况下
  101.     else
  102.       # 伤害设置为 "Miss"
  103.       self.damage = "Miss"
  104.     end
  105.     # 不在战斗中的情况下
  106.     unless $game_temp.in_battle
  107.       # 伤害设置为 nil
  108.       self.damage = nil
  109.     end
  110.     # 过程结束
  111.     return effective
  112.   end
  113. end
复制代码

作者: enitsirhc    时间: 2015-7-25 11:21
芯☆淡茹水 发表于 2015-7-25 10:16
在战斗之外使用无效。

分别用RTAB战斗系统和默认战斗系统测试过了,貌似没什么效果啊……
我的用法就是直接修改您注释的那三个ID数字,作为外挂脚本放在main前,难道我的用法错了吗……
作者: enitsirhc    时间: 2015-7-25 20:00
芯☆淡茹水 发表于 2015-7-25 10:16
在战斗之外使用无效。

默认战斗系统测试下来可行,咱回头再自行试试改写进RTAB系统里~谢谢芯大~




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