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

Project1

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

[已经过期] 新人请教,如何设计一种【反击】类型的技能

[复制链接]

Lv2.观梦者

梦石
0
星屑
343
在线时间
37 小时
注册时间
2017-7-1
帖子
17
跳转到指定楼层
1
发表于 2017-9-10 16:07:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
请教一下各位了,我想在游戏中做出一种带【反击】效果的技能,目前的思路是这样的:
当角色或者敌人使用【反击】技能时,他会获得一个反击【状态】,而当对方对其攻击或者是使用特定技能时,反击技能就会发挥效果,给与对方伤害或者激发其他技能效果
之前请教了一位朋友,他说类似的技能只能用脚本才能做出来,所以我来拜托各位了

点评

请参考数据库第87号技能伏虎之反击  发表于 2017-9-18 00:08

Lv2.观梦者

梦石
0
星屑
343
在线时间
37 小时
注册时间
2017-7-1
帖子
17
2
 楼主| 发表于 2017-9-18 01:29:55 | 只看该作者
我研究了一下,似乎【伏虎之反击】只能作用于造成物理伤害,但是没办法给攻击者附加额外状态啊……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
486 小时
注册时间
2007-5-27
帖子
807
3
发表于 2017-9-18 09:52:55 | 只看该作者
……
状态里调整物理反击和魔法反射几率不就完了……
用得着这么麻烦么……
不过这俩不是反特定而是啥都反,这个似乎不符合要求……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
486 小时
注册时间
2007-5-27
帖子
807
4
发表于 2017-9-18 09:54:42 | 只看该作者
本帖最后由 紫苍焰 于 2017-9-18 10:01 编辑
苍月的魔王 发表于 2017-9-18 01:29
我研究了一下,似乎【伏虎之反击】只能作用于造成物理伤害,但是没办法给攻击者附加额外状态啊…… ...


添加状态【反击】,效果是物理反击几率提升100%持续3回合。
你复制一个这个技能,然后改名字改描述,最后再添加一个状态【魔法反射】试试看。
以上。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2323
在线时间
274 小时
注册时间
2017-7-25
帖子
163
5
发表于 2017-9-18 13:11:22 | 只看该作者
  1. #==============================================================================
  2. # ■ 伤害吸血与反弹  by 老鹰
  3. #------------------------------------------------------------------------------
  4. #   - 新增对所有造成的伤害的吸血、反弹的处理(先吸血、再反弹)
  5. #   - 角色、职业、武器、护甲、敌人、状态的备注栏中填入下式,即可对伤害反弹进行设置
  6. #    <HP Rebound: 伤害反弹比例(%)>
  7. #     - 伤害反弹比例(%) : 填入对最终伤害的反弹的比例,为百分数,%可省略
  8. #    <Resist HP Rebound: 抵抗反弹比例(%)>
  9. #     - 抵抗反弹比例(%) : 填入对最终伤害的抵抗反弹的比例,为百分数,%可省略
  10. #   - 角色、职业、武器、护甲、敌人、状态的备注栏中填入下式,即可对伤害吸血进行设置
  11. #    <HP Drain: 吸血比例(%) 吸血概率分子 吸血概率分母>
  12. #     - 吸血比例(%) : 填入最终伤害的吸血比例,为百分数,%可加可不加
  13. #     - 概率分子分母 : 吸血的概率为 分子/分母,可不填,默认为 1
  14. #    <Resist HP Drain: 抵抗吸血比例(%) 抵抗概率分子 抵抗概率分母>
  15. #     - 抵抗比例(%) : 被吸血时,比例要减去的值,默认为 0
  16. #     - 抵抗分子分母 : 抵抗的概率为 分子/分母,进行吸血处理时,要减去该概率,默认为 0
  17. #   - 举例:
  18. #    1 号角色备注内填入了 <HP Drain: 20%>
  19. #     - 1号角色造成的所有伤害,会吸取伤害的 20% (不超过目标的当前hp值)回复自己
  20. #    1 号敌人备注内填入了 <Resist HP Drain: 10%, 1,5>
  21. #    1 号角色备注内填入了 <HP Drain: 20%, 1,2>
  22. #     - 1号角色攻击1号敌人,有 1/2 - 1/5 的概率 吸取伤害的 20% - 10% 回复自己
  23. #
  24. #   - 实质:在真正实行伤害加减时,先进行吸血操作的处理;在计算完伤害后,进行反弹计算
  25. #==============================================================================

  26. class Game_ActionResult
  27.   #--------------------------------------------------------------------------
  28.   # ○ 生成反弹数值
  29.   #--------------------------------------------------------------------------
  30.   def execute_equips_hp_rebound(user)
  31.     return if @hp_damage <= 0
  32.     rate = (@battler.hp_rebound_rate - user.resist_hp_rebound_rate) / 100.0
  33.     return if rate <= 0
  34.     value = (@hp_damage * rate).to_i
  35.     user.result.hp_damage += value
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ○ 生成吸血数值
  39.   #--------------------------------------------------------------------------
  40.   def execute_equips_hp_drain(user)
  41.     return if @hp_damage <= 0
  42.     pro = user.hp_drain_pro - @battler.resist_hp_drain_pro
  43.     return if pro < 1 && (pro < 0 || rand > pro)
  44.     rate = (user.hp_drain_rate - @battler.resist_hp_drain_rate) / 100.0
  45.     return if rate <= 0
  46.     @hp_drain += (@hp_damage * rate).to_i
  47.     @hp_drain = [@battler.hp, @hp_drain.to_i].min
  48.   end
  49. end

  50. class Game_BattlerBase
  51.   #--------------------------------------------------------------------------
  52.   # ○ 获取用于计算吸血相关的数组
  53.   #--------------------------------------------------------------------------
  54.   def get_hp_drain_array
  55.     []
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ○ 重新获取吸血与反弹的相关参数
  59.   #--------------------------------------------------------------------------
  60.   def reget_hp_drain_params
  61.     # 数组依次存储 [吸血比例 吸血概率 抗吸血比例 抗吸血概率]
  62.     @hp_drain_params = [0, 0, 0, 0]
  63.     # [反弹比例 抗反弹比例]
  64.     @hp_rebound_params = [0, 0]
  65.     get_hp_drain_array.each do |a|
  66.       next if a == nil
  67.       if a.note =~ /<HP Drain: *(-?\d+)%?[ ,]*(\d*)[ ,]*(\d*)>/
  68.         @hp_drain_params[0] = $1.to_i
  69.         pro1 = $2 == "" ? 1 : $2.to_i
  70.         pro2 = $3 == "" ? 1 : $3.to_i
  71.         @hp_drain_params[1] = pro1 * 1.0 / pro2
  72.       end
  73.       if a.note =~ /<Resist HP Drain: *(-?\d+)%?[ ,]*(\d*)[ ,]*(\d*)>/
  74.         @hp_drain_params[2] = $1.to_i
  75.         pro1 = $2 == "" ? 1 : $2.to_i
  76.         pro2 = $3 == "" ? 1 : $3.to_i
  77.         @hp_drain_params[3] = pro1 * 1.0 / pro2
  78.       end
  79.       if a.note =~ /<HP Rebound: *(-?\d+)%?>/
  80.       @hp_rebound_params[0] = $1.to_i
  81.       end
  82.       if a.note =~ /<Resist HP Rebound: *(-?\d+)%?>/
  83.       @hp_rebound_params[1] = $1.to_i
  84.       end
  85.     end
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ○ 吸血比例与概率
  89.   #--------------------------------------------------------------------------
  90.   def hp_drain_rate
  91.     @hp_drain_params[0]
  92.   end
  93.   def hp_drain_pro
  94.     @hp_drain_params[1]
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ○ 抗吸血比例与概率
  98.   #--------------------------------------------------------------------------
  99.   def resist_hp_drain_rate
  100.     @hp_drain_params[2]
  101.   end
  102.   def resist_hp_drain_pro
  103.     @hp_drain_params[3]
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ○ 伤害反弹比例
  107.   #--------------------------------------------------------------------------
  108.   def hp_rebound_rate
  109.     @hp_rebound_params[0]
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ○ 抗反弹比例
  113.   #--------------------------------------------------------------------------
  114.   def resist_hp_rebound_rate
  115.     @hp_rebound_params[1]
  116.   end
  117. end

  118. class Game_Battler < Game_BattlerBase
  119. #~   #--------------------------------------------------------------------------
  120. #~   # ● 计算伤害
  121. #~   #--------------------------------------------------------------------------
  122.   alias eagle_equips_hp_rebound_make_damage_value make_damage_value
  123.   def make_damage_value(user, item)
  124.     user.reget_hp_drain_params
  125.     reget_hp_drain_params
  126.     eagle_equips_hp_rebound_make_damage_value(user, item)
  127.     @result.execute_equips_hp_rebound(user)
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● 执行伤害
  131.   #--------------------------------------------------------------------------
  132.   alias eagle_equips_hp_drain_execute_damage execute_damage
  133.   def execute_damage(user)
  134.     @result.execute_equips_hp_drain(user)
  135.     eagle_equips_hp_drain_execute_damage(user)
  136.     user.hp -= user.result.hp_damage
  137.   end
  138. end

  139. class Game_Actor < Game_Battler
  140.   #--------------------------------------------------------------------------
  141.   # ○ 获取用于计算吸血相关的数组
  142.   #--------------------------------------------------------------------------
  143.   def get_hp_drain_array
  144.     [actor, self.class] + equips + states
  145.   end
  146. end

  147. class Game_Enemy < Game_Battler
  148.   #--------------------------------------------------------------------------
  149.   # ○ 获取用于计算吸血相关的数组
  150.   #--------------------------------------------------------------------------
  151.   def get_hp_drain_array
  152.     [enemy] + states
  153.   end
  154. end
  155. class Scene_Battle
  156.   #--------------------------------------------------------------------------
  157.   # ● 战斗行动结束时的处理
  158.   #--------------------------------------------------------------------------
  159.   alias eagle_hp_drain_process_action_end process_action_end
  160.   def process_action_end
  161.     all_battle_members.each { |m| m.result.clear_damage_values }
  162.     eagle_hp_drain_process_action_end
  163.   end
  164. end
复制代码


脚本在这,设置给你想要的反击状态(不想反的状况还可以设置反伤抗性,虽然我不需要还没用过),搭配技能公式系列https://rpg.blue/thread-307316-1-1.html?_dsign=5a9bad8f食用,赞
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
343
在线时间
37 小时
注册时间
2017-7-1
帖子
17
6
 楼主| 发表于 2017-9-19 01:29:24 | 只看该作者
骷髅岛遗老 发表于 2017-9-18 13:11
脚本在这,设置给你想要的反击状态(不想反的状况还可以设置反伤抗性,虽然我不需要还没用过),搭配技能 ...

谢谢,我这就回去试试{:2_249:}
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
343
在线时间
37 小时
注册时间
2017-7-1
帖子
17
7
 楼主| 发表于 2017-9-19 02:15:15 | 只看该作者
紫苍焰 发表于 2017-9-18 09:54
添加状态【反击】,效果是物理反击几率提升100%持续3回合。
你复制一个这个技能,然后改名字改描述,最后 ...

那个……可能是我一开始的意思没有表达明确,我的想法其实是这样:当角色处于设置的状态时,如果对手对其发动攻击,再取消伤害(或者不取消)的同时会给攻击的对手身上附加额外的状态(如黑暗、麻痹等)
反击造成伤害只是基础,最重要的还是要给予攻击者附加异常状态作为反击(没有表达明确真是抱歉……)
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
343
在线时间
37 小时
注册时间
2017-7-1
帖子
17
8
 楼主| 发表于 2017-9-19 02:22:50 | 只看该作者
骷髅岛遗老 发表于 2017-9-18 13:11
脚本在这,设置给你想要的反击状态(不想反的状况还可以设置反伤抗性,虽然我不需要还没用过),搭配技能 ...

那个……我虽然回去看了一下……但是……还是看不懂啊……还是想拜托大佬指点一下了……(我想要做出的技能的效果在第7楼有说明)

点评

麻烦先假设几种你希望的实际情况,我不是很懂你要的到底是什么样的效果  发表于 2017-9-19 13:07
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
343
在线时间
37 小时
注册时间
2017-7-1
帖子
17
9
 楼主| 发表于 2017-9-19 19:14:00 | 只看该作者
骷髅岛遗老 发表于 2017-9-18 13:11
脚本在这,设置给你想要的反击状态(不想反的状况还可以设置反伤抗性,虽然我不需要还没用过),搭配技能 ...

我是这么想的:设定一个拥有【异常状态反击】效果的技能,当角色或敌人使用这个技能之后,就会给自己附加一个状态,而当角色处于这个设置的状态时,如果对手对角色其发动攻击时,会给攻击的对手身上附加额外的状态,如黑暗、麻痹甚至是禁止使用魔法等,根据不同的需求设定有不同异常状态的技能,这就是目前我想要的
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2323
在线时间
274 小时
注册时间
2017-7-25
帖子
163
10
发表于 2017-9-20 00:03:12 | 只看该作者
苍月的魔王 发表于 2017-9-19 19:14
我是这么想的:设定一个拥有【异常状态反击】效果的技能,当角色或敌人使用这个技能之后,就会给自己附加 ...

上状态很简单数据库里面设个无属性状态再来个技能加上就行了
不过被攻击时给攻击者附加不同异常状态的效果不好搞,从数据库技能公式入手的话可能必须每个敌人的技能都要改,真的贼麻烦还容易错漏啊
多研究一下6、8、12楼吧直接从基础脚本的Game_Battler的
def make_damage_value(user, item)
    value = item.damage.eval(user, self, $game_variables)下方插入,可以全局性地对所有技能进行判断,12楼的写法应该跟你要的效果非常接近了,当然你希望出现几种效果还是要写分别出几个来,添加多组的写法参考29楼
       if self.state?(2)               #如果目标处在2号状态,也就是你设定的反击状态
        user.add_state(66)         #技能的使用者(攻击方)被附加66号状态
        value = ???              #伤害公式,如果不希望这个状态改变原有技能的伤害,这行就写value += 0
       end
          我先照葫芦画个瓢,这个比较简单,但反击结果只能是固定一种(66)状态,如果你有【不同需求】还要判断具体技能编号(其实12楼的写法我复制下来一个劲出错,你要是研究出来了麻烦告诉我到底哪出了问题)

点评

不同效果的话单靠事件就不太好办了……不过其实也不是做不到……  发表于 2017-9-29 16:19
在反击状态里添加攻击附加状态效果,反击时被反击的目标如果没有对应抗性就会中招……  发表于 2017-9-29 16:18
添加“攻击附加状态”效果,只要攻击者不免疫该状态就会在被反击的时候中招……  发表于 2017-9-22 16:04
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-27 06:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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