查看: 5422|回复: 18

[已经解决] 接上次命中類型抗性的問題

[复制链接]
梦石
0
星屑
4230
在线时间
2671 小时
注册时间
2012-3-1
回帖
680
发表于 2017-2-10 02:06:22 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 卡奥尼特 于 2017-2-12 17:33 编辑


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


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


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

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


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



评分

参与人数 1星屑 +26 收起 理由
cinderelmini + 26 忘了看了………………

查看全部评分

梦石
0
星屑
644
在线时间
830 小时
注册时间
2016-7-24
回帖
644

开拓者

发表于 2017-2-11 16:51:23 | 显示全部楼层
本帖最后由 QQ蚊子湯 于 2017-2-11 19:49 编辑

提供放棄人生整合版本

只要複製貼上就可以了

包含主樓要的三樣功能

1.命中類型增傷

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

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


[pre lang="ruby"]    class RPG::BaseItem
      #--------------------------------
      # ○ 獲取抵擋備註
      #--------------------------------
      def qq_damage_parry
        return (self.note =~ /<抵擋:\s*(\d+.*?)>/ ? $1.to_i: 0)
      end
      #--------------------------------
      # ○ 获取必定命中的伤害比率备注信息(通用)
      #--------------------------------
      def certain_hit_damage_rate
        return (self.note =~ /<必中伤害比率\s?(.*)?>/ ? $1.to_i / 100.0 : 1.0)
      end
      #--------------------------------
      # ○ 獲取閃避備註
      #--------------------------------
      def qq_dege
       if self.note =~ /<閃避:\s*(\d+.*?)>/
         case $1.to_i
          when 1
            return "eva"
          when 2
            return "mev"
          else
            return 0
          end
          else
            return 0
        end
      end
    end
    class Game_Actor < Game_Battler
      #--------------------------------
      # ○ 獲取角色抵擋備註
      #--------------------------------
      def qq_damage_parry
        parry = actor.qq_damage_parry
        parry += qq_equip_parry
        return parry
      end
      #--------------------------------
      # ○ 获取必定命中伤害比率备注信息(角色)
      #--------------------------------
      def certain_hit_damage_rate
        rate = actor.certain_hit_damage_rate
        rate *= c_hit_d_rate_plus
        return rate
      end
      #--------------------------------
      # ○ 獲取裝備抵擋備註
      #--------------------------------
      def qq_equip_parry
        state_parry  = self.states.inject(0){|p, s| p += s.qq_damage_parry}
        weapon_parry = self.weapons.inject(0){|p, w| p += w.qq_damage_parry}
        armor_parry  = self.armors.inject(0){|p, a| p += a.qq_damage_parry}
        return (state_parry + weapon_parry + armor_parry)
      end
      #--------------------------------
      # ○ 获取状态/武器/防具的必定命中伤害比率备注信息
      #--------------------------------
      def c_hit_d_rate_plus
        state_rate  = self.states.inject(1.0) {|r, s| r *= s.certain_hit_damage_rate}
        weapon_rate = self.weapons.inject(1.0){|r, w| r *= w.certain_hit_damage_rate}
        armor_rate  = self.armors.inject(1.0) {|r, a| r *= a.certain_hit_damage_rate}
        return (state_rate * weapon_rate * armor_rate)
      end
    end
    class Game_Enemy < Game_Battler
      #--------------------------------
      # ○ 獲取敵人備註
      #--------------------------------
      def qq_damage_parry
        basic = enemy.qq_damage_parry
        state_parry  = self.states.inject(0){|p, s| p += s.qq_damage_parry}
        return (basic + state_parry)
      end
      #--------------------------------
      # ○ 获取必定命中伤害比率备注信息(敌人)
      #--------------------------------
      def certain_hit_damage_rate
        basic = enemy.certain_hit_damage_rate
        state_rate = self.states.inject(1.0){|r, s| r *= s.certain_hit_damage_rate}
        return (basic * state_rate)
      end
    end
    class Game_Battler < Game_BattlerBase
      def parry
        return (self.qq_damage_parry)
      end
      end
    class Game_Battler < Game_BattlerBase
      #--------------------------------
      # ○ 获取必定命中伤害比率(统一入口)
      #--------------------------------
      def cdr
        p "#{self.name}比率:#{self.certain_hit_damage_rate}"
        return (self.certain_hit_damage_rate / 1.0)
      end
      #--------------------------------
      # ○ 计算伤害
      #--------------------------------
      def make_damage_value(user, item)
        value = item.damage.eval(user, self, $game_variables)
        value *= item_element_rate(user, item)
        value *= pdr if item.physical?
        value *= mdr if item.magical?
        value *= rec if item.damage.recover?
        # 必中伤害倍率计算
        value *= cdr if item.certain?
        #----------------
        value = apply_critical(value) if @result.critical
        value = apply_variance(value, item.damage.variance)
        value = apply_guard(value)
        value -= parry if !item.damage.recover?
        value = 0  if !item.damage.recover? && value < 0
        @result.make_damage(value.to_i, item)
      end
      #--------------------------------
      # ○ 计算技能/物品的闪避几率(所有伤害类型的技能都改为无法闪避)
      #--------------------------------
      alias sny46_161005_item_eva item_eva
      def item_eva(user, item)
        return 0 if item.qq_dege == 0
        return eval item.qq_dege if item.is_a?(RPG::Skill)
        return sny46_161005_item_eva(user, item)
      end
      #--------------------------------
      # ○ 计算技能/物品的成功几率(所有伤害类型的技能都改为不会miss)
      #--------------------------------
      alias sny46_161009_item_hit item_hit
      def item_hit(user, item)
        return 1 if item.is_a?(RPG::Skill)
        return sny46_161009_item_hit(user, item)
      end
    end[/pre]

评分

参与人数 2星屑 +80 收起 理由
卡奥尼特 + 60 嗯,测试成功。可能是之前没有保存好。.
魔法丶小肉包 + 20 本肉包选择放弃人生XDDDD

查看全部评分

2016/07/17 加入RPG製作,勿忘初衷!
回复

使用道具 举报

梦石
0
星屑
644
在线时间
830 小时
注册时间
2016-7-24
回帖
644

开拓者

发表于 2017-2-10 16:16:05 | 显示全部楼层
加寫這三行
14864696383297rPCOFFC4hC.jpg
然後在敵人的備註欄寫上數字
14864696383297rPCOFFC4hC.jpg

点评

看上去也只能寫在敵人上才有效。  发表于 2017-2-10 17:50
2016/07/17 加入RPG製作,勿忘初衷!
回复

使用道具 举报

梦石
0
星屑
644
在线时间
830 小时
注册时间
2016-7-24
回帖
644

开拓者

发表于 2017-2-10 20:20:27 | 显示全部楼层
本帖最后由 QQ蚊子湯 于 2017-2-11 17:44 编辑

參考蹭得累桑的代碼,現在所有的備註欄都可以提供抵擋了
2016/07/17 加入RPG製作,勿忘初衷!
回复

使用道具 举报

梦石
0
星屑
4230
在线时间
2671 小时
注册时间
2012-3-1
回帖
680
 楼主| 发表于 2017-2-10 20:40:22 | 显示全部楼层
QQ蚊子湯 发表于 2017-2-10 20:20
參考蹭得累桑的代碼,現在所有的備註欄都可以提供抵擋了

代碼小白不會弄…… 但打上去之後似乎沒效果
回复

使用道具 举报

梦石
0
星屑
644
在线时间
830 小时
注册时间
2016-7-24
回帖
644

开拓者

发表于 2017-2-10 22:45:38 | 显示全部楼层
本帖最后由 QQ蚊子湯 于 2017-2-10 22:49 编辑

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

要反過來作也可以
把蹭得累桑的命中類型增傷64行放這個腳本35行36行之間
並把被插入方放在下面
2016/07/17 加入RPG製作,勿忘初衷!
回复

使用道具 举报

梦石
0
星屑
4230
在线时间
2671 小时
注册时间
2012-3-1
回帖
680
 楼主| 发表于 2017-2-11 11:10:44 | 显示全部楼层
QQ蚊子湯 发表于 2017-2-10 22:45
因為這個腳本需要和蹭得累桑的命中類型增傷插件兼容一下
需要把我這個39行40行插入到,命中類型增傷的68和6 ...

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

[pre lang="ruby"]class RPG::BaseItem
  #--------------------------------
  # ○ 获取必定命中的伤害比率备注信息(通用)
  #--------------------------------
  def certain_hit_damage_rate
    return (self.note =~ /<必中伤害比率\s?(.*)?>/ ? $1.to_i / 100.0 : 1.0)
  end
  #--------------------------------
  # ○ 获取可抵挡的数值(通用)
  #--------------------------------
  def certain_hit_damage_rate
    return (self.note =~ /<抵挡:\s*(\d+.*?)>/ ? $1.to_i : 0)
  end
end


class Game_Actor < Game_Battler
  #--------------------------------
  # ○ 获取必定命中伤害比率备注信息(角色)
  #--------------------------------
  def certain_hit_damage_rate
    rate = actor.certain_hit_damage_rate
    rate *= c_hit_d_rate_plus
    return rate
  end
   
  #--------------------------------
  # ○ 获取必定命中伤害比率备注信息(角色)
  #--------------------------------
  def certain_hit_damage_rate
    rate = actor.certain_hit_damage_rate
    rate *= c_hit_d_rate_plus
    return rate
  end
  #--------------------------------
  # ○ 获取状态/武器/防具的必定命中伤害比率备注信息
  #--------------------------------
  def c_hit_d_rate_plus
    state_rate  = self.states.inject(1.0) {|r, s| r *= s.certain_hit_damage_rate}
    weapon_rate = self.weapons.inject(1.0){|r, w| r *= w.certain_hit_damage_rate}
    armor_rate  = self.armors.inject(1.0) {|r, a| r *= a.certain_hit_damage_rate}
    return (state_rate * weapon_rate * armor_rate)
  end
end

class Game_Enemy < Game_Battler
  #--------------------------------
  # ○ 获取必定命中伤害比率备注信息(敌人)
  #--------------------------------
  def certain_hit_damage_rate
    basic = enemy.certain_hit_damage_rate
    state_rate = self.states.inject(1.0){|r, s| r *= s.certain_hit_damage_rate}
    return (basic * state_rate)
  end
end



class Game_Battler < Game_BattlerBase
  
  #--------------------------------
  # ○ 获取必定命中伤害比率(统一入口)
  #--------------------------------
  def cdr
    p "#{self.name}比率:#{self.certain_hit_damage_rate}"
    return (self.certain_hit_damage_rate / 1.0)
  end
  
  #--------------------------------
  # ○ 计算伤害
  #--------------------------------
  def make_damage_value(user, item)
    value = item.damage.eval(user, self, $game_variables)
    value *= item_element_rate(user, item)
    value *= pdr if item.physical?
    value *= mdr if item.magical?
    value *= rec if item.damage.recover?
    # 必中伤害倍率计算
    value *= cdr if item.certain?
    #----------------
    value = apply_critical(value) if @result.critical
    value = apply_variance(value, item.damage.variance)
    value = apply_guard(value)
    value -= parry if !item.damage.recover?
    value = 0 if parry > value
    @result.make_damage(value.to_i, item)
  end
  
  #--------------------------------
  # ○ 计算技能/物品的闪避几率(所有伤害类型的技能都改为无法闪避)
  #--------------------------------
  alias sny46_161005_item_eva item_eva
  def item_eva(user, item)
    return 0 if item.is_a?(RPG::Skill)
    return sny46_161005_item_eva(user, item)
  end

  #--------------------------------
  # ○ 计算技能/物品的成功几率(所有伤害类型的技能都改为不会miss)
  #--------------------------------
  alias sny46_161009_item_hit item_hit
  def item_hit(user, item)
    return 1 if item.is_a?(RPG::Skill)
    return sny46_161009_item_hit(user, item)
  end
  
end[/pre]
回复

使用道具 举报

梦石
0
星屑
644
在线时间
830 小时
注册时间
2016-7-24
回帖
644

开拓者

发表于 2017-2-11 13:56:52 | 显示全部楼层
雖然結構一樣,但是實際上這是兩個不一樣的插件
共通的地方只有樓上代碼的72~87行
其他地方也要輸入的說!

還有11行的方法名變得和5行一樣的話會覆蓋方法的!
不能完全理解建議先不要魔改,效果出來再改!
2016/07/17 加入RPG製作,勿忘初衷!
回复

使用道具 举报

梦石
0
星屑
4230
在线时间
2671 小时
注册时间
2012-3-1
回帖
680
 楼主| 发表于 2017-2-11 14:17:44 | 显示全部楼层
本帖最后由 卡奥尼特 于 2017-2-11 14:22 编辑
QQ蚊子湯 发表于 2017-2-11 13:56
雖然結構一樣,但是實際上這是兩個不一樣的插件
共通的地方只有樓上代碼的72~87行
其他地方也要輸入的說!


嗚,所以說是代碼小白。

…………
……
還是等dalao好了,但好像過於依賴了……
回复

使用道具 举报

梦石
0
星屑
4230
在线时间
2671 小时
注册时间
2012-3-1
回帖
680
 楼主| 发表于 2017-2-11 17:17:57 | 显示全部楼层
QQ蚊子湯 发表于 2017-2-11 16:51
提供放棄人生整合版本

只要複製貼上就可以了

嗯,這個,是哪裡出問題了?
QQ截图20170211171751.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部