Project1

标题: 战斗效果-属性增幅 [打印本页]

作者: 禾西    时间: 2008-3-8 22:47
标题: 战斗效果-属性增幅
本帖最后由 后知后觉 于 2009-12-29 16:43 编辑

感覺上好像沒有發表過甚麽腳本,於是寫了個很無聊很無聊的功能……

設置狀態名字爲:(增幅)(屬性名字)(幅度)
比如:增幅光100%
然後附加此狀態

正常用:

  1. class Game_Battler
  2.   #--------------------------------------------------------------------------
  3.   # ● 取得關聯數組
  4.   #--------------------------------------------------------------------------
  5.   def moaleikzeangbhuk
  6.     data = Hash.new
  7.     for i in 1...$data_states.size
  8.       next unless $data_states[i].name=~ /^增幅(\D*)(\d*)%$/
  9.       data[i] = [$2.to_i , []]
  10.       elements = $1.scan(/./)
  11.       for j in 1...$data_system.elements.size
  12.         next unless elements.include?($data_system.elements[j])
  13.         data[i][1].push (j)
  14.       end
  15.     end
  16.     return data
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● スキルの傷害を再修正
  20.   #     user  : スキルの使用者 (バトラー)
  21.   #     skill : スキル
  22.   #     damage : 傷害
  23.   #--------------------------------------------------------------------------
  24.   def recorrection(user, skill, damage)
  25.     $increse_ek ||= moaleikzeangbhuk # 初始化
  26.     return damage if $increse_ek == {}      # 如果關聯數組為空,返回
  27.     $increse_ek.each{|state, data|   # 查找是否在增幅狀態當中
  28.       next unless user.state?(state)
  29.       data[1].each{|id|
  30.         next unless skill.element_set.include?(id)
  31.         n = data[0]/100
  32.         damage *= 1 + n
  33.       }
  34.     }
  35.     return damage
  36.   end
  37. #----------------------------------------------------------------------------
  38. # ● 召喚原方法
  39. #----------------------------------------------------------------------------
  40.   # 倍率修正
  41.   #--------------------------------------------------------------------------
  42.   # ● 应用特技效果
  43.   #     user  : 特技的使用者 (battler)
  44.   #     skill : 特技
  45.   #--------------------------------------------------------------------------
  46.   def skill_effect(user, skill)
  47.     # 清除会心一击标志
  48.     self.critical = false
  49.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  50.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  51.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  52.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  53.       # 过程结束
  54.       return false
  55.     end
  56.     # 清除有效标志
  57.     effective = false
  58.     # 公共事件 ID 是有效的情况下,设置为有效标志
  59.     effective |= skill.common_event_id > 0
  60.     # 第一命中判定
  61.     hit = skill.hit
  62.     if skill.atk_f > 0
  63.       hit *= user.hit / 100
  64.     end
  65.     hit_result = (rand(100) < hit)
  66.     # 不确定的特技的情况下设置为有效标志
  67.     effective |= hit < 100
  68.     # 命中的情况下
  69.     if hit_result == true
  70.       # 计算威力
  71.       power = skill.power + user.atk * skill.atk_f / 100
  72.       if power > 0
  73.         power -= self.pdef * skill.pdef_f / 200
  74.         power -= self.mdef * skill.mdef_f / 200
  75.         power = [power, 0].max
  76.       end
  77.       # 计算倍率
  78.       rate = 20
  79.       rate += (user.str * skill.str_f / 100)
  80.       rate += (user.dex * skill.dex_f / 100)
  81.       rate += (user.agi * skill.agi_f / 100)
  82.       rate += (user.int * skill.int_f / 100)
  83.       # 计算基本伤害
  84.       self.damage = power * rate / 20
  85.       # 属性修正
  86.       self.damage *= elements_correct(skill.element_set)
  87.       self.damage /= 100
  88. # スキルの傷害を再修正---------------------------------------------------------
  89.       self.damage = recorrection(user, skill, self.damage)
  90. # 完了-------------------------------------------------------------------------
  91.       # 伤害符号正确的情况下
  92.       if self.damage > 0
  93.         # 防御修正
  94.         if self.guarding?
  95.           self.damage /= 2
  96.         end
  97.       end
  98.       # 分散
  99.       if skill.variance > 0 and self.damage.abs > 0
  100.         amp = [self.damage.abs * skill.variance / 100, 1].max
  101.         self.damage += rand(amp+1) + rand(amp+1) - amp
  102.       end
  103.       # 第二命中判定
  104.       eva = 8 * self.agi / user.dex + self.eva
  105.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  106.       hit = self.cant_evade? ? 100 : hit
  107.       hit_result = (rand(100) < hit)
  108.       # 不确定的特技的情况下设置为有效标志
  109.       effective |= hit < 100
  110.     end
  111.     # 命中的情况下
  112.     if hit_result == true
  113.       # 威力 0 以外的物理攻击的情况下
  114.       if skill.power != 0 and skill.atk_f > 0
  115.         # 状态冲击解除
  116.         remove_states_shock
  117.         # 设置有效标志
  118.         effective = true
  119.       end
  120.       # HP 的伤害减法运算
  121.       last_hp = self.hp
  122.       self.hp -= self.damage
  123.       effective |= self.hp != last_hp
  124.       # 状态变化
  125.       @state_changed = false
  126.       effective |= states_plus(skill.plus_state_set)
  127.       effective |= states_minus(skill.minus_state_set)
  128.       # 威力为 0 的场合
  129.       if skill.power == 0
  130.         # 伤害设置为空的字串
  131.         self.damage = ""
  132.         # 状态没有变化的情况下
  133.         unless @state_changed
  134.           # 伤害设置为 "Miss"
  135.           self.damage = "Miss"
  136.         end
  137.       end
  138.     # Miss 的情况下
  139.     else
  140.       # 伤害设置为 "Miss"
  141.       self.damage = "Miss"
  142.     end
  143.     # 不在战斗中的情况下
  144.     unless $game_temp.in_battle
  145.       # 伤害设置为 nil
  146.       self.damage = nil
  147.     end
  148.     # 过程结束
  149.     return effective
  150.   end
  151. end
复制代码
RTAB用:

  1. class Game_Battler
  2.   #--------------------------------------------------------------------------
  3.   # ● 取得關聯數組
  4.   #--------------------------------------------------------------------------
  5.   def moaleikzeangbhuk
  6.     data = Hash.new
  7.     for i in 1...$data_states.size
  8.       next unless $data_states[i].name=~ /^增幅(\D*)(\d*)%$/
  9.       data[i] = [$2.to_i , []]
  10.       elements = $1.scan(/./)
  11.       for j in 1...$data_system.elements.size
  12.         next unless elements.include?($data_system.elements[j])
  13.         data[i][1].push (j)
  14.       end
  15.     end
  16.     return data
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● スキルの傷害を再修正
  20.   #     user  : スキルの使用者 (バトラー)
  21.   #     skill : スキル
  22.   #     damage : 傷害
  23.   #--------------------------------------------------------------------------
  24.   def recorrection(user, skill, damage)
  25.     $increse_ek ||= moaleikzeangbhuk # 初始化
  26.     return damage if $increse_ek == {}      # 如果關聯數組為空,返回
  27.     $increse_ek.each{|state, data|   # 查找是否在增幅狀態當中
  28.       next unless user.state?(state)
  29.       data[1].each{|id|
  30.         next unless skill.element_set.include?(id)
  31.         n = data[0]/100
  32.         damage *= 1 + n
  33.       }
  34.     }
  35.     return damage
  36.   end
  37. #----------------------------------------------------------------------------
  38. # ● 召喚原方法
  39. #----------------------------------------------------------------------------
  40.   # 倍率修正
  41.   def rate_correct(user, skill, power)
  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[user] = power * rate / 20
  50.   end
  51.   # 屬性相尅修正
  52.   def element_correct(user, skill)
  53.     # 属性修正
  54.     self.damage[user] *= elements_correct(skill.element_set)
  55.     self.damage[user] /= 100
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● スキルの効果適用
  59.   #     user  : スキルの使用者 (バトラー)
  60.   #     skill : スキル
  61.   #--------------------------------------------------------------------------
  62.   def skill_effect(user, skill)
  63.     # クリティカルフラグをクリア
  64.     self.critical[user] = false
  65.     state_p[user] = []
  66.     state_m[user] = []
  67.     # スキルの効果範囲が HP 1 以上の味方で、自分の HP が 0、
  68.     # またはスキルの効果範囲が HP 0 の味方で、自分の HP が 1 以上の場合
  69.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0)# or
  70.   #     ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  71.       # メソッド終了
  72.       return false
  73.     end
  74.     # 有効フラグをクリア
  75.     effective = false
  76.     # コモンイベント ID が有効の場合は有効フラグをセット
  77.     effective |= skill.common_event_id > 0
  78.     # 第一命中判定
  79.     hit = skill.hit
  80.     if skill.atk_f > 0
  81.       hit *= user.hit / 100
  82.     end
  83.     hit_result = (rand(100) < hit)
  84.     # 不確実なスキルの場合は有効フラグをセット
  85.     effective |= hit < 100
  86.     # 命中の場合
  87.     if hit_result == true
  88.       # 威力を計算
  89.       power = skill.power + user.atk * skill.atk_f / 100
  90.       if power > 0
  91.         power -= self.pdef * skill.pdef_f / 200
  92.         power -= self.mdef * skill.mdef_f / 200
  93.         power = [power, 0].max
  94.       end
  95.       rate_correct(user, skill, power)
  96.       element_correct(user, skill)
  97. # スキルの傷害を再修正---------------------------------------------------------
  98.       self.damage = recorrection(user, skill, self.damage)
  99. # 完了-------------------------------------------------------------------------
  100.       # ダメージの符号が正の場合
  101.       if self.damage[user] > 0
  102.         # 防御修正
  103.         if self.guarding?
  104.           self.damage[user] /= 2
  105.         end
  106.       end
  107.       # 分散
  108.       if skill.variance > 0 and self.damage[user].abs > 0
  109.         amp = [self.damage[user].abs * skill.variance / 100, 1].max
  110.         self.damage[user] += rand(amp+1) + rand(amp+1) - amp
  111.       end
  112.       # 第二命中判定
  113.       eva = 8 * self.agi / user.dex + self.eva
  114.       hit = self.damage[user] < 0 ? 100 : 100 - eva * skill.eva_f / 100
  115.       hit = self.cant_evade? ? 100 : hit
  116.       hit_result = (rand(100) < hit)
  117.       # 不確実なスキルの場合は有効フラグをセット
  118.       effective |= hit < 100
  119.     end
  120.     # 命中の場合
  121.     if hit_result == true
  122.       # 威力 0 以外の物理攻撃の場合
  123.       if skill.power != 0 and skill.atk_f > 0
  124.         # ステート衝撃解除
  125.         remove_states_shock
  126.         # 有効フラグをセット
  127.         effective = true
  128.       end
  129.       # HP の変動判定
  130.       last_hp = [[self.hp - self.damage[user], self.maxhp].min, 0].max
  131.       # 効果判定
  132.       effective |= self.hp != last_hp
  133.       # ステート変化
  134.       @state_changed = false
  135.       effective |= states_plus(user, skill.plus_state_set)
  136.       effective |= states_minus(user, skill.minus_state_set)
  137.       unless $game_temp.in_battle
  138.         self.damage_effect(user, 1)
  139.       end
  140.       # 威力が 0 の場合
  141.       if skill.power == 0
  142.         # ダメージに空文字列を設定
  143.         self.damage[user] = ""
  144.         # ステートに変化がない場合
  145.         unless @state_changed
  146.           # ダメージに "Miss" を設定
  147.           self.damage[user] = "Miss"
  148.         end
  149.       end
  150.     # ミスの場合
  151.     else
  152.       # ダメージに "Miss" を設定
  153.       self.damage[user] = "Miss"
  154.     end
  155.     # 戦闘中でない場合
  156.     unless $game_temp.in_battle
  157.       # ダメージに nil を設定
  158.       self.damage[user] = nil
  159.     end
  160.     # メソッド終了
  161.     return effective
  162.   end
  163. end
复制代码

作者: 阿米尔    时间: 2008-3-8 22:50
怎么用啊?
作者: 越前リョーマ    时间: 2008-3-8 22:56
我也想问……
作者: 阿米尔    时间: 2008-3-8 22:58
3楼的开下QQ行不?加我吧!
作者: 禾西    时间: 2008-3-8 23:24
設置一個狀態,名字爲:(增幅)(屬性名字)(幅度)
比如:增幅光100%
然後給角色附加上這個狀態……(比如設置爲裝備的自動狀態)

在戰鬥當中,如果技能包含這個屬性,技能傷害就會上昇。
作者: 沉影不器    时间: 2008-3-9 00:50
提示: 作者被禁止或删除 内容自动屏蔽




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