Project1

标题: 反击攻击与非反击攻击 [打印本页]

作者: taoboy    时间: 2008-7-29 10:52
标题: 反击攻击与非反击攻击
非反击攻击大家都见过了,就是常见的攻击方式了——你打我一下,轮到我打,我再打你一下。

主要是想求教反击攻击的方法,即是在A打B的时候,遭到伤害的B先有一次自动对A进行普通攻击的机会(反击),然后才轮到B开打,类似英雄无敌中的近战反击的打法,可以与远程和某些特殊兵种的攻击优势区别开来,请各位前辈赐教~
作者: Kirin    时间: 2008-7-29 17:02
你问的问题很有难度额……{/kuk}

如果不用脚本,应该就是用『状态法』吧,具体你可以搜一下站内,貌似是在XP的教程里。

换我来做的话,大概就是先设定一个名为『反击』的状态,这个状态是『敌人』攻击『我方』的时候附加在『我方』角色上,接下来可能还要用到变量的判定,毕竟不可能每次『敌人』攻击『我方』时『我方』都会『反击』……那就没意思了。

还有如何做到『我方』角色反击时的对象就是刚刚打我的那个『敌人』呢?……好像也得用到变量……哦天哪这样似乎每场战斗都要加个变量判定的条件!

算了你还是无视我这个脚本小白的意见吧{/ll}……如果你是做短篇的话还可以考虑一下{/hx}
作者: 沉影不器    时间: 2008-7-29 21:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: Kirin    时间: 2008-7-30 00:21
{/fd}能说的具体点吗?
作者: 沉影不器    时间: 2008-7-30 04:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: taoboy    时间: 2008-7-30 10:13
非常感谢大家的关注~{/ll}
To:Kirin
   谢谢你提出的状态法的设计方法~根据你的提示我查了坛子里状态法的资料,很有收获~{/cy}
   sp:《天使的旋律》刚看了头,很喜欢,一定要好好看{/se}~~


作者: taoboy    时间: 2008-7-30 10:34
To:沉影不器
   谢谢你的脚本,直观又好用,非常赞{/se}{/qiang}~
   脚本的编写我正在学习,想对这个很棒的设计进一步的请教~
   因为我的初衷是希望把伤害再分为远程(不受反击)和近程(受反击)两类,所以想通过在攻击时给target一个状态,以状态决定是否反击(或反击几率),这样魔法的使用也可以通过附加状态来实现反击与不反击的区分……
   不知道这样的想法是否能通过这个脚本的修改实现,诚请多多指点~~~{/cy}

作者: wangswz    时间: 2008-7-30 10:58
沉影不器大哥  那个反击脚本我怎么用不起来
没反映
构上物理攻击得技能也能反击么?
作者: Kirin    时间: 2008-7-30 15:59
果然最后还要脚本出马……

沉影不器是个随手就能抛出一脚本的大牛人{/fd}{/fd}

PS.要是这个脚本能结合SRPG或横版战斗就好了~
作者: Kirin    时间: 2008-7-30 16:08
以下引用taoboy于2008-7-30 2:34:47的发言:

To:沉影不器
  谢谢你的脚本,直观又好用,非常赞~
  脚本的编写我正在学习,想对这个很棒的设计进一步的请教~
  因为我的初衷是希望把伤害再分为远程(不受反击)和近程(受反击)两类,所以想通过在攻击时给target一个状态,以状态决定是否反击(或反击几率),这样魔法的使用也可以通过附加状态来实现反击与不反击的区分……
  不知道这样的想法是否能通过这个脚本的修改实现,诚请多多指点~~~



[本贴由作者于 2008-7-30 2:36:29 最后编辑]


其实你似乎是想用那个横版或SRPG的战斗脚本吧?……估计这就派不上用场了
作者: 沉影不器    时间: 2008-7-30 18:31
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水镜风生    时间: 2008-7-30 18:47
好吧,在下不才,根据沉影不器大师的脚本依样画葫芦改了改:
  1. #==============================================================================
  2. # 战斗中机率反击 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # 脚本设定为:
  5. #   ① 只有受到物理攻击才能反击
  6. #   ② 默认发动反击的机率为50%,可自定义
  7. #   ③ 防御可提高30%反击机率
  8. #   ④ 默认受击者拥有15号状态时才能反击,可自定义
  9. #------------------------------------------------------------------------------
  10. # ◎ 参数设定
  11. #------------------------------------------------------------------------------
  12. # 发动反击的机率
  13.   PROBA = 50
  14. # 受击对象拥有该ID状态时才反击  
  15.   CATK_STATE_ID = 15
  16. #==============================================================================
  17. # ■ Scene_Battle
  18. #==============================================================================
  19. class Scene_Battle < Scene_Base
  20.   #--------------------------------------------------------------------------
  21.   # ● 执行战斗行动: 攻击
  22.   #--------------------------------------------------------------------------
  23.   def execute_action_attack
  24.     text = sprintf(Vocab::DoAttack, @active_battler.name)
  25.     @message_window.add_instant_text(text)
  26.     targets = @active_battler.action.make_targets
  27.     display_attack_animation(targets)
  28.     wait(20)
  29.     for target in targets
  30.       target.attack_effect(@active_battler)
  31.       display_action_effects(target)
  32.     if target.state?(CATK_STATE_ID)
  33.       proba = PROBA
  34.       # 防御时增加反击机率
  35.       proba += 30 if target.guarding?
  36.       # 计算机率
  37.       next if rand(100) > proba  
  38.       @active_battler.attack_effect(target)
  39.       Sound.play_evasion
  40.       text = sprintf(Vocab::Counterattack, @active_battler.name, target.name)
  41.       @message_window.add_instant_text(text)
  42.       display_attack_animation([@active_battler])
  43.       wait(20)
  44.       display_action_effects(@active_battler)
  45.       end
  46.     end
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● 执行战斗行动:使用技能
  50.   #--------------------------------------------------------------------------
  51.   def execute_action_skill
  52.     skill = @active_battler.action.skill
  53.     text = @active_battler.name + skill.message1
  54.     @message_window.add_instant_text(text)
  55.     unless skill.message2.empty?
  56.       wait(10)
  57.       @message_window.add_instant_text(skill.message2)
  58.     end
  59.     targets = @active_battler.action.make_targets
  60.     display_animation(targets, skill.animation_id)
  61.     @active_battler.mp -= @active_battler.calc_mp_cost(skill)
  62.     $game_temp.common_event_id = skill.common_event_id
  63.     for target in targets
  64.       target.skill_effect(@active_battler, skill)
  65.       display_action_effects(target, skill)
  66.     end
  67.    if target.state?(CATK_STATE_ID)
  68.     for target in targets
  69.       proba = PROBA
  70.       # 防御时增加反击机率
  71.       proba += 30 if target.guarding?
  72.       # 计算机率
  73.       next if rand(100) > proba
  74.       @active_battler.attack_effect(target)
  75.       Sound.play_evasion
  76.       text = sprintf(Vocab::Counterattack, @active_battler.name, target.name)
  77.       @message_window.add_instant_text(text)
  78.       display_attack_animation([@active_battler])
  79.       wait(20)
  80.       display_action_effects(@active_battler)
  81.     end
  82.   end
  83. end

  84. end

  85. #==============================================================================
  86. # ■ Vocab
  87. #==============================================================================
  88. module Vocab
  89.   # 反击
  90.   Counterattack          = "%s遭到%s反击!"
  91. end
复制代码


这个脚本是受击者拥有15号状态时才能反击,注意事项:
1.近程武器(就是能反击的武器),请附加上反击状态。
2.能反击的技能,请在【附加状态变更】一栏附加反击状态。
3.反击状态设置为【100%成功率】,0回合后100%解除,挨揍时解除。 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 零月霜殇    时间: 2008-7-30 22:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: Kirin    时间: 2008-7-31 01:51
现在的脚本牛人太可怕了……
作者: 沉影不器    时间: 2008-7-31 04:35
提示: 作者被禁止或删除 内容自动屏蔽
作者: taoboy    时间: 2008-7-31 23:49
TO:沉影不器 水镜风生
   非常感谢两位前辈改写的脚本,通过对比学习你们写的脚本,收获真不小{/se}{/qiang}
特别是攻击设定和状态运用的方法,两位直观的脚本对我这样的新手帮助很大~~再次感谢~{/qiang}
   根据影大的思路,我对state改element作了尝试,结果失败了{/dk},想不通问题出在什么地方……急死了,请帮我看看咯{/hx}
  1. # 受击对象拥有该ID状态时才反击  
  2.   CATK_ELEMENTS_ID = 22
  3.   CATK_STATE_ID = 18
  4. #==============================================================================
  5. # ■ Scene_Battle
  6. #==============================================================================
  7. class Scene_Battle < Scene_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 执行战斗行动: 攻击
  10.   #--------------------------------------------------------------------------
  11.   def execute_action_attack
  12.     text = sprintf(Vocab::DoAttack, @active_battler.name)
  13.     @message_window.add_instant_text(text)
  14.     targets = @active_battler.action.make_targets
  15.     display_attack_animation(targets)
  16.     wait(20)
  17.     for target in targets
  18.       target.attack_effect(@active_battler)
  19.       display_action_effects(target)
  20.     if @active_battler.element_id?(CATK_ELEMENTS_ID)
  21.       proba = PROBA
  22.       # 防御时增加反击机率
  23.       proba += 30 if target.guarding?
  24.       # 计算机率
  25.       next if rand(100) > proba  
  26.       @active_battler.attack_effect(target)
  27.       Sound.play_evasion
  28.       text = sprintf(Vocab::Counterattack, @active_battler.name, target.name)
  29.       @message_window.add_instant_text(text)
  30.       display_attack_animation([@active_battler])
  31.       wait(20)
  32.       display_action_effects(@active_battler)
  33.       end
  34.     end
  35.   end
复制代码

作者: taoboy    时间: 2008-7-31 23:56
以下引用沉影不器于2008-7-30 20:35:51的发言:

我更倾向于用elements而不用states
仔细想想...脚本需要考虑的方面还挺多的...比如受攻击者直接被打死的情况就不能反击了

-----------------------------------
一口气考虑了更多,像受限状态..带"连续攻击"属性的武器特技什么的:

http://rpg.blue/viewthread.php?tid=96363


[本贴由作者于 2008-7-30 21:17:15 最后编辑]

是啊,死了确实还是会反击……还有像‘受限状态’"连续攻击"的问题能具体讲讲吗?~~




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