Project1

标题: P叔的“反击”脚本有问。。。 [打印本页]

作者: 351323331    时间: 2012-12-21 23:19
标题: P叔的“反击”脚本有问。。。
本帖最后由 351323331 于 2012-12-25 23:36 编辑
  1. #==============================================================================
  2. # ■ 反击系统
  3. #------------------------------------------------------------------------------
  4. #
  5. #   本脚本来自www.66RPG.com,使用和转载请保留此信息
  6. #
  7. #   作者:protosssonny   
  8. #   注意:●●●●●●楼主进行了点小改动。。。。非原脚本。P叔勿怪
  9. #==============================================================================
  10. module Vocab
  11. #设定反击时的文字:  
  12.   Counter_text        = "%s反弹了部分伤害,%s损失%s点的HP!"
  13. #设定状态结束时的文字:  
  14.   Counter_end_text        = "%s不再有反击的准备!"  
  15. end  
  16. #设定反击的状态ID,在拥有这个状态的情况下就可以反击:
  17. COUNTER_STATE = 17
  18. #设定不能反击的敌人ID,比如远程的弓手敌人等:
  19. COUNTER_EXCLUDE_ENEMY = [2]
  20. #设定在以下状态ID时不可以反击,比如睡眠、眩晕等:
  21. COUNTER_EXCLUDE_STATE = [1,6,7,8]
  22. #设定在敌人使用以下技能ID时,不会反击:
  23. COUNTER_EXCLUDE_SKILL = [59]
  24. #设定反击的概率:
  25. PROBABITITY = 100
  26. class Scene_Battle < Scene_Base
  27.   #--------------------------------------------------------------------------
  28.   # ● 执行战斗行动: 攻击
  29.   #--------------------------------------------------------------------------
  30.   def execute_action_attack
  31.     text = sprintf(Vocab::DoAttack, @active_battler.name)
  32.     @message_window.add_instant_text(text)
  33.     targets = @active_battler.action.make_targets
  34.     display_attack_animation(targets)
  35.     wait(20)
  36.     for target in targets
  37.       target.attack_effect(@active_battler)
  38.       display_action_effects(target)
  39.     end
  40.     if target.is_a?(Game_Actor) and @active_battler.is_a?(Game_Enemy)
  41.       if target.state?(COUNTER_STATE) and exclude_state == false \
  42.         and not COUNTER_EXCLUDE_ENEMY.include?(@active_battler.enemy_id) \
  43.         and PROBABITITY > rand(100)  
  44.         damage = 0
  45. #在下面设定反击伤害的公式:
  46. #target——反击者,@active_battler——被反击的敌人:
  47. #atk——攻击力,def——防御力,spi——精神力,agi——敏捷度
  48.         damage = target.atk * 4 - @active_battler.def * 2 ####●●●●●●P叔请看,怎么把这里的伤害公式修改成角色受到伤害的百分比
  49. damage = 0 if damage < 0
  50. #在上面反击伤害的公式        
  51.         text = sprintf(Vocab::Counter_text, target.name, @active_battler.name, damage)
  52.         @message_window.add_instant_text(text)
  53.         @active_battler.animation_id = 7
  54.         wait(45)
  55.         Sound.play_enemy_damage
  56.         @active_battler.blink = true if damage > 0
  57.         wait(30)
  58.         @active_battler.hp -= damage
  59.         @active_battler.perform_collapse if @active_battler.hp <= 0
  60.       end
  61.     end  
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 判断反击排除的状态
  65.   #--------------------------------------------------------------------------
  66.   def exclude_state
  67.     targets = @active_battler.action.make_targets
  68.     for i in 0...COUNTER_EXCLUDE_STATE.size
  69.       for target in targets
  70.         return true if target.state?(COUNTER_EXCLUDE_STATE[i])
  71.       end
  72.     end  
  73.     return false
  74.   end
  75. end

  76. #==============================================================================
  77. # ■ 反击系统
  78. #------------------------------------------------------------------------------
  79. #
  80. #   本脚本来自www.66RPG.com,使用和转载请保留此信息
  81. #
  82. #   作者:protosssonny   
  83. #                                                               2011年10月13日
  84. #==============================================================================
复制代码
楼主是想把此脚本进行修改,拿来做一个反弹伤害的技能。。
请问@protosssonny 如何把脚本伤害公式改为角色受到的伤害的百分比,即拉尔夫被史莱姆攻击,损失100点HP,反弹30%即30点HP这样。损失50,则反弹15。
还有就是能不能让怪物攻击没有命中角色,就不会反弹伤害呢?(由于原脚本为反击,所以这里是设置成了无论是否命中角色,都会反击的样子。)
作者: 怪蜀黍    时间: 2012-12-22 13:08
  1. #==============================================================================
  2. # ■ 反击系统
  3. #------------------------------------------------------------------------------
  4. #
  5. #   本脚本来自www.66RPG.com,使用和转载请保留此信息
  6. #
  7. #   作者:protosssonny   
  8. #   注意:●●●●●●楼主进行了点小改动。。。。非原脚本。P叔勿怪
  9. #==============================================================================
  10. module Vocab
  11. #设定反击时的文字:  
  12.   Counter_text        = "%s反弹了部分伤害,%s损失%s点的HP!"
  13. #设定状态结束时的文字:  
  14.   Counter_end_text        = "%s不再有反击的准备!"  
  15. end  
  16. #设定反击的状态ID,在拥有这个状态的情况下就可以反击:
  17. COUNTER_STATE = 17
  18. #设定不能反击的敌人ID,比如远程的弓手敌人等:
  19. COUNTER_EXCLUDE_ENEMY = [2]
  20. #设定在以下状态ID时不可以反击,比如睡眠、眩晕等:
  21. COUNTER_EXCLUDE_STATE = [1,6,7,8]
  22. #设定在敌人使用以下技能ID时,不会反击:
  23. COUNTER_EXCLUDE_SKILL = [59]
  24. #设定反击的概率:
  25. PROBABITITY = 100
  26. class Scene_Battle < Scene_Base
  27.   #--------------------------------------------------------------------------
  28.   # ● 执行战斗行动: 攻击
  29.   #--------------------------------------------------------------------------
  30.   def execute_action_attack
  31.     text = sprintf(Vocab::DoAttack, @active_battler.name)
  32.     @message_window.add_instant_text(text)
  33.     targets = @active_battler.action.make_targets
  34.     display_attack_animation(targets)
  35.     wait(20)
  36.     for target in targets
  37.       target.attack_effect(@active_battler)
  38.       display_action_effects(target)
  39.     end
  40.     if target.is_a?(Game_Actor) and @active_battler.is_a?(Game_Enemy)
  41.       if target.state?(COUNTER_STATE) and exclude_state == false \
  42.         and not COUNTER_EXCLUDE_ENEMY.include?(@active_battler.enemy_id) \
  43.         and PROBABITITY > rand(100) and $counter_value[0] == true
  44.         damage = 0
  45. #在下面设定反击伤害的公式:
  46. #target——反击者,@active_battler——被反击的敌人:
  47. #atk——攻击力,def——防御力,spi——精神力,agi——敏捷度
  48.         damage = $counter_value[1] * 30 / 100 #### 反击百分之多少就是乘多少再除以100
  49.         damage = 0 if damage < 0
  50. #在上面反击伤害的公式        
  51.         text = sprintf(Vocab::Counter_text, target.name, @active_battler.name, damage)
  52.         @message_window.add_instant_text(text)
  53.         @active_battler.animation_id = 7
  54.         wait(45)
  55.         Sound.play_enemy_damage
  56.         @active_battler.blink = true if damage > 0
  57.         wait(30)
  58.         @active_battler.hp -= damage
  59.         @active_battler.perform_collapse if @active_battler.hp <= 0
  60.       end
  61.     end  
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 判断反击排除的状态
  65.   #--------------------------------------------------------------------------
  66.   def exclude_state
  67.     targets = @active_battler.action.make_targets
  68.     for i in 0...COUNTER_EXCLUDE_STATE.size
  69.       for target in targets
  70.         return true if target.state?(COUNTER_EXCLUDE_STATE[i])
  71.       end
  72.     end  
  73.     return false
  74.   end
  75. end

  76. class Game_Battler
  77.   #--------------------------------------------------------------------------
  78.   # ● 发动普通攻击
  79.   #     attacker : 攻击者
  80.   #--------------------------------------------------------------------------
  81.   def attack_effect(attacker)
  82.     clear_action_results
  83.     unless attack_effective?(attacker)
  84.       @skipped = true
  85.       $counter_value = [false, 0]
  86.       return
  87.     end
  88.     if rand(100) >= calc_hit(attacker)            # 计算命中率
  89.       @missed = true
  90.       $counter_value = [false, 0]
  91.       return
  92.     end
  93.     if rand(100) < calc_eva(attacker)             # 计算闪躲率
  94.       @evaded = true
  95.       $counter_value = [false, 0]
  96.       return
  97.     end
  98.     make_attack_damage_value(attacker)            # 计算伤害
  99.     execute_damage(attacker)                      # 伤害效果
  100.     if @hp_damage == 0                            # 判断是否有物理伤害
  101.       $counter_value = [false, 0]
  102.       return                                    
  103.     end
  104.     apply_state_changes(attacker)                 # 增减状态
  105.     $counter_value = [true, @hp_damage]
  106.   end
  107. end  
  108. #==============================================================================
  109. # ■ 反击系统
  110. #------------------------------------------------------------------------------
  111. #
  112. #   本脚本来自www.66RPG.com,使用和转载请保留此信息
  113. #
  114. #   作者:protosssonny   
  115. #                                                               2011年10月13日
  116. #==============================================================================
复制代码

作者: 351323331    时间: 2012-12-22 22:37
protosssonny 发表于 2012-12-22 13:08

感谢P叔。。




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