Project1

标题: 接上次命中類型抗性的問題 [打印本页]

作者: 卡奥尼特    时间: 2017-2-10 02:06
标题: 接上次命中類型抗性的問題
本帖最后由 卡奥尼特 于 2017-2-12 17:33 编辑


首先,這是妮特上次提問的問題
https://rpg.blue/forum.php?mod=viewthread&tid=396595


妮特在原帖要求了該腳本想實現以下要求
現在在這裡總結一下想要的功能
必中傷害加成 。可以參考VA自帶的 物理傷害加成魔法傷害加成
、所有命中類型變成必中類型,不過,也請加個判定,不希望每個技能都是 必中
、希望可以指定抵擋的,比如填 270 ,那麼就可以直接抵擋 270 點傷害……


因為第一個已經解決,所以忽略。
第二個就是,可以改變 物理攻擊魔法攻擊 為 不可閃避, 不過還是要加個判定。
這麼做只是不想讓 必定命中 這種類型的技能這麼孤單而已

第三個就是,可以指定抵擋多少點傷害,當然不需要纍計,是直接抵擋該數值的傷害。  
比如最多 抵擋  270 點傷害,程序計算的傷害為 500 點 ,實際受到的傷害為  230 點傷害。


如果能實現這兩個效果的話,就解決了 0.0
P.S. 不會寫腳本的妮特只能依賴別人了 QAQ
@cinderelmini




作者: QQ蚊子湯    时间: 2017-2-10 16:16
加寫這三行

然後在敵人的備註欄寫上數字

作者: QQ蚊子湯    时间: 2017-2-10 20:20
本帖最后由 QQ蚊子湯 于 2017-2-11 17:44 编辑

參考蹭得累桑的代碼,現在所有的備註欄都可以提供抵擋了

作者: 卡奥尼特    时间: 2017-2-10 20:40
QQ蚊子湯 发表于 2017-2-10 20:20
參考蹭得累桑的代碼,現在所有的備註欄都可以提供抵擋了

代碼小白不會弄…… 但打上去之後似乎沒效果
作者: QQ蚊子湯    时间: 2017-2-10 22:45
本帖最后由 QQ蚊子湯 于 2017-2-10 22:49 编辑

因為這個腳本需要和蹭得累桑的命中類型增傷插件兼容一下
需要把我這個39行40行插入到,命中類型增傷的68和69行之間
並把命中增傷放在下方

要反過來作也可以
把蹭得累桑的命中類型增傷64行放這個腳本35行36行之間
並把被插入方放在下面
作者: 卡奥尼特    时间: 2017-2-11 11:10
QQ蚊子湯 发表于 2017-2-10 22:45
因為這個腳本需要和蹭得累桑的命中類型增傷插件兼容一下
需要把我這個39行40行插入到,命中類型增傷的68和6 ...

加了後就變成這樣了,但去測試了下好像沒有效果。

RUBY 代码复制
  1. class RPG::BaseItem
  2.   #--------------------------------
  3.   # ○ 获取必定命中的伤害比率备注信息(通用)
  4.   #--------------------------------
  5.   def certain_hit_damage_rate
  6.     return (self.note =~ /<必中伤害比率\s?(.*)?>/ ? $1.to_i / 100.0 : 1.0)
  7.   end
  8.   #--------------------------------
  9.   # ○ 获取可抵挡的数值(通用)
  10.   #--------------------------------
  11.   def certain_hit_damage_rate
  12.     return (self.note =~ /<抵挡:\s*(\d+.*?)>/ ? $1.to_i : 0)
  13.   end
  14. end
  15.  
  16.  
  17. class Game_Actor < Game_Battler
  18.   #--------------------------------
  19.   # ○ 获取必定命中伤害比率备注信息(角色)
  20.   #--------------------------------
  21.   def certain_hit_damage_rate
  22.     rate = actor.certain_hit_damage_rate
  23.     rate *= c_hit_d_rate_plus
  24.     return rate
  25.   end
  26.  
  27.   #--------------------------------
  28.   # ○ 获取必定命中伤害比率备注信息(角色)
  29.   #--------------------------------
  30.   def certain_hit_damage_rate
  31.     rate = actor.certain_hit_damage_rate
  32.     rate *= c_hit_d_rate_plus
  33.     return rate
  34.   end
  35.   #--------------------------------
  36.   # ○ 获取状态/武器/防具的必定命中伤害比率备注信息
  37.   #--------------------------------
  38.   def c_hit_d_rate_plus
  39.     state_rate  = self.states.inject(1.0) {|r, s| r *= s.certain_hit_damage_rate}
  40.     weapon_rate = self.weapons.inject(1.0){|r, w| r *= w.certain_hit_damage_rate}
  41.     armor_rate  = self.armors.inject(1.0) {|r, a| r *= a.certain_hit_damage_rate}
  42.     return (state_rate * weapon_rate * armor_rate)
  43.   end
  44. end
  45.  
  46. class Game_Enemy < Game_Battler
  47.   #--------------------------------
  48.   # ○ 获取必定命中伤害比率备注信息(敌人)
  49.   #--------------------------------
  50.   def certain_hit_damage_rate
  51.     basic = enemy.certain_hit_damage_rate
  52.     state_rate = self.states.inject(1.0){|r, s| r *= s.certain_hit_damage_rate}
  53.     return (basic * state_rate)
  54.   end
  55. end
  56.  
  57.  
  58.  
  59. class Game_Battler < Game_BattlerBase
  60.  
  61.   #--------------------------------
  62.   # ○ 获取必定命中伤害比率(统一入口)
  63.   #--------------------------------
  64.   def cdr
  65.     p "#{self.name}比率:#{self.certain_hit_damage_rate}"
  66.     return (self.certain_hit_damage_rate / 1.0)
  67.   end
  68.  
  69.   #--------------------------------
  70.   # ○ 计算伤害
  71.   #--------------------------------
  72.   def make_damage_value(user, item)
  73.     value = item.damage.eval(user, self, $game_variables)
  74.     value *= item_element_rate(user, item)
  75.     value *= pdr if item.physical?
  76.     value *= mdr if item.magical?
  77.     value *= rec if item.damage.recover?
  78.     # 必中伤害倍率计算
  79.     value *= cdr if item.certain?
  80.     #----------------
  81.     value = apply_critical(value) if @result.critical
  82.     value = apply_variance(value, item.damage.variance)
  83.     value = apply_guard(value)
  84.     value -= parry if !item.damage.recover?
  85.     value = 0 if parry > value
  86.     @result.make_damage(value.to_i, item)
  87.   end
  88.  
  89.   #--------------------------------
  90.   # ○ 计算技能/物品的闪避几率(所有伤害类型的技能都改为无法闪避)
  91.   #--------------------------------
  92.   alias sny46_161005_item_eva item_eva
  93.   def item_eva(user, item)
  94.     return 0 if item.is_a?(RPG::Skill)
  95.     return sny46_161005_item_eva(user, item)
  96.   end
  97.  
  98.   #--------------------------------
  99.   # ○ 计算技能/物品的成功几率(所有伤害类型的技能都改为不会miss)
  100.   #--------------------------------
  101.   alias sny46_161009_item_hit item_hit
  102.   def item_hit(user, item)
  103.     return 1 if item.is_a?(RPG::Skill)
  104.     return sny46_161009_item_hit(user, item)
  105.   end
  106.  
  107. end

作者: QQ蚊子湯    时间: 2017-2-11 13:56
雖然結構一樣,但是實際上這是兩個不一樣的插件
共通的地方只有樓上代碼的72~87行
其他地方也要輸入的說!

還有11行的方法名變得和5行一樣的話會覆蓋方法的!
不能完全理解建議先不要魔改,效果出來再改!
作者: 卡奥尼特    时间: 2017-2-11 14:17
本帖最后由 卡奥尼特 于 2017-2-11 14:22 编辑
QQ蚊子湯 发表于 2017-2-11 13:56
雖然結構一樣,但是實際上這是兩個不一樣的插件
共通的地方只有樓上代碼的72~87行
其他地方也要輸入的說!


嗚,所以說是代碼小白。

…………
……
還是等dalao好了,但好像過於依賴了……
作者: QQ蚊子湯    时间: 2017-2-11 16:51
本帖最后由 QQ蚊子湯 于 2017-2-11 19:49 编辑

提供放棄人生整合版本

只要複製貼上就可以了

包含主樓要的三樣功能

1.命中類型增傷

2.敵人、裝備、角色、狀態的備註欄輸入<抵擋:
數字> 都可以減免傷害

3.默認所有技能為必中,只要在技能的備註欄輸入<閃避:1或2>可以變更為指定閃避,1 為物理閃避 2為魔法閃避


RUBY 代码复制
  1. class RPG::BaseItem
  2.       #--------------------------------
  3.       # ○ 獲取抵擋備註
  4.       #--------------------------------
  5.       def qq_damage_parry
  6.         return (self.note =~ /<抵擋:\s*(\d+.*?)>/ ? $1.to_i: 0)
  7.       end
  8.       #--------------------------------
  9.       # ○ 获取必定命中的伤害比率备注信息(通用)
  10.       #--------------------------------
  11.       def certain_hit_damage_rate
  12.         return (self.note =~ /<必中伤害比率\s?(.*)?>/ ? $1.to_i / 100.0 : 1.0)
  13.       end
  14.       #--------------------------------
  15.       # ○ 獲取閃避備註
  16.       #--------------------------------
  17.       def qq_dege
  18.        if self.note =~ /<閃避:\s*(\d+.*?)>/
  19.          case $1.to_i
  20.           when 1
  21.             return "eva"
  22.           when 2
  23.             return "mev"
  24.           else
  25.             return 0
  26.           end
  27.           else
  28.             return 0
  29.         end
  30.       end
  31.     end
  32.     class Game_Actor < Game_Battler
  33.       #--------------------------------
  34.       # ○ 獲取角色抵擋備註
  35.       #--------------------------------
  36.       def qq_damage_parry
  37.         parry = actor.qq_damage_parry
  38.         parry += qq_equip_parry
  39.         return parry
  40.       end
  41.       #--------------------------------
  42.       # ○ 获取必定命中伤害比率备注信息(角色)
  43.       #--------------------------------
  44.       def certain_hit_damage_rate
  45.         rate = actor.certain_hit_damage_rate
  46.         rate *= c_hit_d_rate_plus
  47.         return rate
  48.       end
  49.       #--------------------------------
  50.       # ○ 獲取裝備抵擋備註
  51.       #--------------------------------
  52.       def qq_equip_parry
  53.         state_parry  = self.states.inject(0){|p, s| p += s.qq_damage_parry}
  54.         weapon_parry = self.weapons.inject(0){|p, w| p += w.qq_damage_parry}
  55.         armor_parry  = self.armors.inject(0){|p, a| p += a.qq_damage_parry}
  56.         return (state_parry + weapon_parry + armor_parry)
  57.       end
  58.       #--------------------------------
  59.       # ○ 获取状态/武器/防具的必定命中伤害比率备注信息
  60.       #--------------------------------
  61.       def c_hit_d_rate_plus
  62.         state_rate  = self.states.inject(1.0) {|r, s| r *= s.certain_hit_damage_rate}
  63.         weapon_rate = self.weapons.inject(1.0){|r, w| r *= w.certain_hit_damage_rate}
  64.         armor_rate  = self.armors.inject(1.0) {|r, a| r *= a.certain_hit_damage_rate}
  65.         return (state_rate * weapon_rate * armor_rate)
  66.       end
  67.     end
  68.     class Game_Enemy < Game_Battler
  69.       #--------------------------------
  70.       # ○ 獲取敵人備註
  71.       #--------------------------------
  72.       def qq_damage_parry
  73.         basic = enemy.qq_damage_parry
  74.         state_parry  = self.states.inject(0){|p, s| p += s.qq_damage_parry}
  75.         return (basic + state_parry)
  76.       end
  77.       #--------------------------------
  78.       # ○ 获取必定命中伤害比率备注信息(敌人)
  79.       #--------------------------------
  80.       def certain_hit_damage_rate
  81.         basic = enemy.certain_hit_damage_rate
  82.         state_rate = self.states.inject(1.0){|r, s| r *= s.certain_hit_damage_rate}
  83.         return (basic * state_rate)
  84.       end
  85.     end
  86.     class Game_Battler < Game_BattlerBase
  87.       def parry
  88.         return (self.qq_damage_parry)
  89.       end
  90.       end
  91.     class Game_Battler < Game_BattlerBase
  92.       #--------------------------------
  93.       # ○ 获取必定命中伤害比率(统一入口)
  94.       #--------------------------------
  95.       def cdr
  96.         p "#{self.name}比率:#{self.certain_hit_damage_rate}"
  97.         return (self.certain_hit_damage_rate / 1.0)
  98.       end
  99.       #--------------------------------
  100.       # ○ 计算伤害
  101.       #--------------------------------
  102.       def make_damage_value(user, item)
  103.         value = item.damage.eval(user, self, $game_variables)
  104.         value *= item_element_rate(user, item)
  105.         value *= pdr if item.physical?
  106.         value *= mdr if item.magical?
  107.         value *= rec if item.damage.recover?
  108.         # 必中伤害倍率计算
  109.         value *= cdr if item.certain?
  110.         #----------------
  111.         value = apply_critical(value) if @result.critical
  112.         value = apply_variance(value, item.damage.variance)
  113.         value = apply_guard(value)
  114.         value -= parry if !item.damage.recover?
  115.         value = 0  if !item.damage.recover? && value < 0
  116.         @result.make_damage(value.to_i, item)
  117.       end
  118.       #--------------------------------
  119.       # ○ 计算技能/物品的闪避几率(所有伤害类型的技能都改为无法闪避)
  120.       #--------------------------------
  121.       alias sny46_161005_item_eva item_eva
  122.       def item_eva(user, item)
  123.         return 0 if item.qq_dege == 0
  124.         return eval item.qq_dege if item.is_a?(RPG::Skill)
  125.         return sny46_161005_item_eva(user, item)
  126.       end
  127.       #--------------------------------
  128.       # ○ 计算技能/物品的成功几率(所有伤害类型的技能都改为不会miss)
  129.       #--------------------------------
  130.       alias sny46_161009_item_hit item_hit
  131.       def item_hit(user, item)
  132.         return 1 if item.is_a?(RPG::Skill)
  133.         return sny46_161009_item_hit(user, item)
  134.       end
  135.     end

作者: 卡奥尼特    时间: 2017-2-11 17:17
QQ蚊子湯 发表于 2017-2-11 16:51
提供放棄人生整合版本

只要複製貼上就可以了

嗯,這個,是哪裡出問題了?


作者: QQ蚊子湯    时间: 2017-2-11 17:42
上面代碼有更改一下,不過跟你這問題沒關係
再重新複製一次吧

為了避免衝突,
你有把其他的版本移除或註解掉嗎
如果同時存在可能會出BUG哦
作者: 卡奥尼特    时间: 2017-2-11 17:48
本帖最后由 卡奥尼特 于 2017-2-11 17:58 编辑
QQ蚊子湯 发表于 2017-2-11 17:42
上面代碼有更改一下,不過跟你這問題沒關係
再重新複製一次吧


嗯,刪掉了。

然後,再次用了你修改出來的腳本,但是剛要測試戰鬥的時候,就彈出了這個

作者: QQ蚊子湯    时间: 2017-2-11 17:59
剛忘了加個防護罩,你再重貼一次
作者: 卡奥尼特    时间: 2017-2-11 18:06
QQ蚊子湯 发表于 2017-2-11 17:59
剛忘了加個防護罩,你再重貼一次

還是提示135行出現錯誤。 嗯,建議您測試後再放上來 0.0
作者: QQ蚊子湯    时间: 2017-2-11 18:57
新版本沒有135行,使用戰鬥測試需要按存檔之後才會應用腳本變動
作者: 卡奥尼特    时间: 2017-2-11 19:22
本帖最后由 卡奥尼特 于 2017-2-11 19:26 编辑
QQ蚊子湯 发表于 2017-2-11 18:57
新版本沒有135行,使用戰鬥測試需要按存檔之後才會應用腳本變動


在測試之後的發現的最後一個問題,就是
在所有技能类型(即物理攻擊、魔法攻擊)为必中的情况下, 如果主角、職業、裝備等具有閃避的特性的情況下,
那麼所有技能類型的 “必中” 都失效了
作者: QQ蚊子湯    时间: 2017-2-11 19:51
再次修改,
現在只要不是註解欄寫有閃避類型的技能
即使敵人有閃避特性也會必中了




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