设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2809|回复: 5
打印 上一主题 下一主题

[已经解决] 如何制作可以反弹伤害的状态?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
29 小时
注册时间
2013-8-23
帖子
69
跳转到指定楼层
1
发表于 2014-5-14 16:32:20 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 火烧兔子的马甲 于 2014-5-15 14:01 编辑

当有这个状态的时候被敌人攻击,自己会受到伤害,同时伤害的一半会反弹给攻击者,而且会提示“XXX(攻击者的名字)受到XX(反弹的伤害数值)点伤害”。

例如:
史莱姆对拉尔夫发动了攻击。
拉尔夫受到100点伤害。
史莱姆受到50点反弹伤害。

注:这个攻击既可以是普通攻击,也可以是技能攻击。

Lv1.梦旅人

梦石
0
星屑
120
在线时间
486 小时
注册时间
2007-5-27
帖子
807
6
发表于 2014-5-18 12:54:21 | 只看该作者
……
直接把反击率调到最高不就好了……
虽然是反击不是直接反伤……
就像山口山武器战当年的反击风暴……
挨揍立刻还击……
伤害用还击者的攻击来算……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3664
在线时间
2654 小时
注册时间
2012-3-1
帖子
770
5
发表于 2014-5-18 10:57:58 | 只看该作者
本帖最后由 卡奥尼特 于 2014-5-20 01:42 编辑

这是我当时收藏的脚本,不知道有没有用-.-   是在别的地方找的
PS:我当时找的时候发现最新版本的会报错,所以就只有0.5版本的不会报错。。。
我废话一次:   别问这脚本为什么没有魔法反射率,因为VA已经自带了

RUBY 代码复制
  1. # PowerShield_ver.0.5
  2. #「物理反射&伤害反射&反射伤害倍率」          (作成日……2011/12/ 7)
  3. #______________________________________________________________________________
  4. module PowerShield
  5.   MESSAGE="%s反弹了物理攻击!"    #  %s..反弹时显示的文字
  6.   SE     ="Audio/SE/Reflection"  # 物理攻击or伤害反射时播放的SE
  7. =begin
  8. ______________________________________________________________________________
  9. 备注栏写法:
  10.  
  11. 物理反射率          <prf:+n%>
  12. 物理伤害反射率      <pdrf:+n%>
  13. 魔法伤害反射率      <mdrf:+n%>
  14. 物理伤害反射倍率    <dr_prf:+n%>
  15. 魔法伤害反射倍率    <dr_mrf:+n%>
  16. 物理伤害反射伤害倍率<dr_pdrf:+n%>
  17. 魔法伤害反射伤害倍率<dr_mdrf:+n%>
  18.  
  19. 0.3 2011/12/11  デフォの反射バグに対応·修正
  20. 0.4 2011/12/12  删除要求(RPG::UsableItem)类方法的定义
  21.                 备注栏判断法(例:<prf:+n%>)增加
  22. 0.5 2011/12/25  使用効果「逃げる」適用時に落ちる現象に対応
  23. ______________________________________________________________________________
  24. =end
  25.  
  26. module Methods
  27.   def prf
  28.     if @__prf == nil
  29.       @__prf = 0.0
  30.       if /<(?:prf|物理反射率):\+(\d+)\%>/i =~ note
  31.         @__prf = $1.to_i / 100.0
  32.       end
  33.     end
  34.     return @__prf
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   def pdrf
  38.     if @__pdrf == nil
  39.       @__pdrf = 0.0
  40.       if /<(?:pdrf|物理伤害反射率):\+(\d+)\%>/i =~ note
  41.         @__pdrf = $1.to_i / 100.0
  42.       end
  43.     end
  44.     return @__pdrf
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   def mdrf
  48.     if @__mdrf == nil
  49.       @__mdrf = 0.0
  50.       if /<(?:mdrf|魔法伤害反射率):\+(\d+)\%>/i =~ note
  51.         @__mdrf = $1.to_i / 100.0
  52.       end
  53.     end
  54.     return @__mdrf
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   def dr_prf
  58.     if @__dr_prf == nil
  59.       @__dr_prf = 1.0
  60.       if /<(?:dr_prf|物理反射伤害倍率):(\d+)\%>/i =~ note
  61.         @__dr_prf = $1.to_i / 100.0
  62.       end
  63.     end
  64.     return @__dr_prf
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   def dr_mrf
  68.     if @__dr_mrf == nil
  69.       @__dr_mrf = 1.0
  70.       if /<(?:dr_mrf|魔法反射伤害倍率):(\d+)\%>/i =~ note
  71.         @__dr_mrf = $1.to_i / 100.0
  72.       end
  73.     end
  74.     return @__dr_mrf
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   def dr_pdrf
  78.     if @__dr_pdrf == nil
  79.       @__dr_pdrf = 1.0
  80.       if /<(?:dr_pdrf|物理伤害反射伤害倍率):(\d+)\%>/i =~ note
  81.         @__dr_pdrf = $1.to_i / 100.0
  82.       end
  83.     end
  84.     return @__dr_pdrf
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   def dr_mdrf
  88.     if @__dr_mdrf == nil
  89.       @__dr_mdrf = 1.0
  90.       if /<(?:dr_mdrf|魔法伤害反射伤害倍率):(\d+)\%>/i =~ note
  91.         @__dr_mdrf = $1.to_i / 100.0
  92.       end
  93.     end
  94.     return @__dr_mdrf
  95.   end
  96. end# module PowerShield::Methods
  97. end# module PowerShield
  98.  
  99. # feature_objects
  100. class RPG::Actor    ;  include PowerShield::Methods;  end
  101. class RPG::Class    ;  include PowerShield::Methods;  end
  102. class RPG::EquipItem;  include PowerShield::Methods;  end
  103. class RPG::Enemy    ;  include PowerShield::Methods;  end
  104. class RPG::State    ;  include PowerShield::Methods;  end
  105. #______________________________________________________________________________
  106.  
  107.  
  108. class Game_Action
  109.   attr_accessor :current_target           # 現在の攻撃(行動)対象
  110.   attr_accessor :be_reflected             # 被反射フラグ
  111.  
  112.   alias power_shield__clear  clear
  113.   def clear
  114.     power_shield__clear
  115.  
  116.     @current_target = nil
  117.     @be_reflected   = false
  118.   end
  119. end
  120.  
  121. class Game_BattlerBase
  122.   def prf
  123.     return feature_objects.inject(0.0){|r, obj| r += obj.prf }
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   def pdrf
  127.     return feature_objects.inject(0.0){|r, obj| r += obj.pdrf }
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   def mdrf
  131.     return feature_objects.inject(0.0){|r, obj| r += obj.mdrf }
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   def dr_prf
  135.     return feature_objects.inject(1.0){|r, obj| r *= obj.dr_prf }
  136.   end
  137.   #--------------------------------------------------------------------------
  138.   def dr_mrf
  139.     return feature_objects.inject(1.0){|r, obj| r *= obj.dr_mrf }
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   def dr_pdrf
  143.     return feature_objects.inject(1.0){|r, obj| r *= obj.dr_pdrf }
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   def dr_mdrf
  147.     return feature_objects.inject(1.0){|r, obj| r *= obj.dr_mdrf }
  148.   end
  149. end
  150.  
  151. class Game_Battler < Game_BattlerBase
  152.   def item_prf(user, item)
  153.     return prf if item.physical?            # 物理攻撃なら物理反射率を返す
  154.     return 0
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   def item_drf(user, item)
  158.     return pdrf if item.physical?           # 物理攻撃なら物理D反射率を返す
  159.     return mdrf if item.magical?            # 魔法攻撃なら魔法D反射率を返す
  160.     return 0
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   def item_dr_prf(user, item)
  164.     return dr_prf if item.physical?       # 物理攻撃なら物理反射D倍率を返す
  165.     return 1.0
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   def item_dr_mrf(user, item)
  169.     return dr_mrf if item.magical?        # 魔法攻撃なら魔法反射D倍率を返す
  170.     return 1.0
  171.   end  
  172.   #--------------------------------------------------------------------------
  173.   def item_dr_pdrf(user, item)
  174.     return dr_pdrf if item.physical?    # 物理攻撃なら物理D反射D倍率を返す
  175.     return 1.0
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   def item_dr_mdrf(user, item)
  179.     return dr_mdrf if item.magical?     # 魔法攻撃なら魔法D反射D倍率を返す
  180.     return 1.0
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   alias power_shield__item_hit  item_hit
  184.   def item_hit(user, item)
  185.     return 1.0 unless $game_party.in_battle
  186.     return 1.0 if user.current_action && user.current_action.be_reflected
  187.  
  188.     return power_shield__item_hit(user, item)
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   alias power_shield__item_eva  item_eva
  192.   def item_eva(user, item)
  193.     return 0.0 unless $game_party.in_battle
  194.     return 0.0 if user.current_action && user.current_action.be_reflected
  195.  
  196.     return power_shield__item_eva(user, item)
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 使用効果[ステート付加]:通常                            ※ 再定義
  200.   #--------------------------------------------------------------------------
  201.   def item_effect_add_state_normal(user, item, effect)
  202.     chance = effect.value1
  203.     if opposite?(user) or
  204.        user.current_action && user.current_action.be_reflected
  205.       chance *= state_rate(effect.data_id)
  206.       chance *= luk_effect_rate(user)
  207.     end
  208.     if rand < chance
  209.       add_state(effect.data_id)
  210.       @result.success = true
  211.     end
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   alias power_shield___item_element_rate  item_element_rate
  215.   def item_element_rate(user, item)
  216.     r = power_shield___item_element_rate(user, item)
  217.  
  218.     return r * reflected_damage_rate(user, item)
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   def reflected_damage_rate(user, item)
  222.     return 1.0 unless $game_party.in_battle
  223.     return 1.0 unless user.current_action && user.current_action.be_reflected
  224.  
  225.     target = user.current_action.current_target
  226.     return target.item_dr_prf(user, item) * target.item_dr_mrf(user, item)
  227.   end
  228. end
  229.  
  230. class Window_BattleLog < Window_Selectable
  231.   def display_attack_reflection(target, item)
  232.     Audio.se_play(PowerShield::SE)
  233.     add_text(sprintf(PowerShield::MESSAGE, target.name))
  234.     wait
  235.     back_one
  236.   end
  237. end
  238.  
  239. class Scene_Battle < Scene_Base
  240.   #--------------------------------------------------------------------------
  241.   # ● スキル/アイテムの発動                                    ※ 再定義
  242.   #--------------------------------------------------------------------------
  243.   def invoke_item(target, item)
  244.     if @subject.current_action
  245.       @subject.current_action.current_target = target
  246.     end
  247.  
  248.     if rand < target.item_cnt(@subject, item)
  249.       invoke_counter_attack(target, item)
  250.     elsif rand < target.item_mrf(@subject, item)
  251.       invoke_magic_reflection(target, item)
  252.     elsif rand < target.item_prf(@subject, item)
  253.       invoke_attack_reflection(target, item)
  254.     else
  255.       true_target = apply_substitute(target, item)
  256.       apply_item_effects(true_target, item)
  257.       if true_target.result.hit? && rand < true_target.item_drf(@subject, item)
  258.         invoke_damage_reflection(true_target, item)
  259.       end
  260.     end
  261.     @subject.last_target_index = target.index
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   alias power_shield__invoke_magic_reflection  invoke_magic_reflection
  265.   def invoke_magic_reflection(target, item)
  266.     @subject.current_action.be_reflected = true
  267.  
  268.     power_shield__invoke_magic_reflection(target, item)
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   def invoke_attack_reflection(target, item)
  272.     @subject.current_action.be_reflected = true
  273.  
  274.     @log_window.display_attack_reflection(target, item)
  275.     apply_item_effects(@subject, item)
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   def invoke_damage_reflection(target, item)
  279.     @log_window.display_attack_reflection(target, item)
  280.  
  281.     @subject.result.clear
  282.     @subject.result.used = true
  283.     value = target.result.hp_damage  if item.damage.to_hp?
  284.     value = target.result.mp_damage  if item.damage.to_mp?
  285.     value *= target.item_dr_pdrf(@subject, item)
  286.     value *= target.item_dr_mdrf(@subject, item)
  287.     value = 0  if value < 0                            # 吸収された場合を考慮
  288.     @subject.result.make_damage(value.to_i, item)
  289.     @subject.execute_damage(target)
  290.     refresh_status
  291.  
  292.     @log_window.display_action_results(@subject, item)
  293.   end
  294. end

点评

确实好用!  发表于 2014-5-19 19:03
写在备注栏里就能生效的,武器,防具或者是状态都可以的。。。  发表于 2014-5-19 16:37
这么长...  发表于 2014-5-19 16:20

评分

参与人数 1梦石 +1 收起 理由
迷糊的安安 + 1 确实好用!

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

4
发表于 2014-5-18 10:05:31 | 只看该作者
脚本里模仿魔法反弹的内容即可…… 不过还是挺麻烦的……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

火烧大神

梦石
0
星屑
1823
在线时间
942 小时
注册时间
2012-1-1
帖子
1777
3
发表于 2014-5-17 21:51:29 | 只看该作者
没人能帮忙解决吗

火兔游戏官网上线啦!!
戳 >>> www.huotuyouxi.com <<<戳
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
29 小时
注册时间
2013-8-23
帖子
69
2
 楼主| 发表于 2014-5-15 14:03:29 | 只看该作者
重新修改了内容,希望能得到解决
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-27 15:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表