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

Project1

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

[已经解决] 请问如何制作治疗时伤害敌人效果的状态?

[复制链接]

Lv2.观梦者

梦石
0
星屑
685
在线时间
661 小时
注册时间
2012-10-21
帖子
350
跳转到指定楼层
1
发表于 2014-10-29 09:26:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
就是2个状态,效果分别为:
状态1:目标受到治疗时,随机对1个敌人造成伤害,伤害值为治疗量的x%
状态2:目标受到治疗时,对全体敌人造成伤害,伤害值为治疗量的x%
请问如何实现呢?

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10079
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

2
发表于 2014-10-29 09:31:16 | 只看该作者
本帖最后由 VIPArcher 于 2014-10-29 09:36 编辑

不嫌麻烦的话就这么做吧。
技能公式v[1]=治疗公式;v[1] #其中v[1]表示1号变量,你自己拿一个临时变量放在这里使用吧。
技能再挂钩一个公共事件,内容强制战斗指令也好,增减敌人体力值也好。应该都可以做到的。
如果你这么做的话,下面这个脚本或许是你所需要的
https://rpg.blue/thread-372077-1-1.html

点评

这东西没写怎么用啊···  发表于 2014-10-30 22:32
直接这么写计算式还是有缺陷的,变量记录的伤害会忽略暴击、减少治疗量的状态等等其它因素,这个变量累计还是得到make_damage里去搞才完整。  发表于 2014-10-29 13:54
这个信息提示具体咋用呢? 信息提示这块我还没接触,想了解一下  发表于 2014-10-29 13:46
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

3
发表于 2014-10-30 22:33:18 | 只看该作者
  1. =begin
  2. 效果:
  3. 让技能或物品可以作用在敌人与我方队员身上
  4. 可以让同样的技能,使用在敌方身上与我方身上不同(也可以相同)
  5. 这样就可以只做出攻击队友来除去睡眠状态这一类的效果

  6. 使用方法:
  7. 在技能/物品备注里面填写 [for_both]
  8. 则可以指定为双向技能/物品

  9. 在技能/物品备注里面填写 [twin_item ID]
  10. 则可以指定双向技能/物品所使用的第二项技能/物品
  11. 没有填写时,默认为原技能ID+1

  12. 设定方法

  13. 下面的说明,技能与物品通用
  14. 要设定为双向技能的技能(假设为18号技能)备注中填写 [for_both]
  15. 效果范围设定为“敌方单体”

  16. 将第19号技能的效果范围设定为“我方单体”
  17. 其他的设定可以自由修改,我方的效果可以与敌方的不同。

  18. 如此选择目标时,则会先出现敌方目标窗口,
  19. 按 B 键再出现我方目标窗口。


  20. 如果第一个技能的效果范围设定为“我方单体”
  21. 那第二个技能必须设定为“敌方单体”
  22. 如此选择目标时,则会先出现我方目标窗口,
  23. 按 B 键再出现敌方目标窗口。

  24. 注意:
  25. 如果是1号技能(即普通攻击),在不修改脚本的情况下,2号技能就是防御
  26. 那这时候就可以使用 [twin_item ID] 来指定对我方使用技能的效果是几号技能
  27. 例如用 [twin_item 30],那在对我方使用攻击时,实际产生效用的是30号技能
  28. =end
复制代码
  1. class RPG::UsableItem < RPG::BaseItem
  2.   #--------------------------------------------------------------------------
  3.   # ● 判断是否为双向技能
  4.   #--------------------------------------------------------------------------
  5.   def for_both?
  6.     return @for_both unless @for_both.nil?
  7.     self.note.split(/[\r\n]+/).each{ |line|
  8.       if line =~ /\[for_both\]/
  9.         return @for_both = true
  10.       end}
  11.     return @for_both = false
  12.   end
  13.   #--------------------------------------------------------------------------
  14.   # ● 指定双向技能/物品的第二个技能/物品
  15.   #--------------------------------------------------------------------------
  16.   def twin_item
  17.     return self.id unless for_both?
  18.     return @twin_item_id unless @twin_item_id.nil?
  19.     @twin_item_id = self.id + 1
  20.     self.note.split(/[\r\n]+/).each{ |line|
  21.       if line =~ /\[twin_item (\d+)\]/
  22.         @twin_item_id = $1.to_i
  23.       end}
  24.     return @twin_item_id
  25.   end
  26. end
  27. class Scene_Battle < Scene_Base
  28.   #--------------------------------------------------------------------------
  29.   # ● 回合开始
  30.   #--------------------------------------------------------------------------
  31.   alias skill_for_both_turn_start turn_start
  32.   def turn_start
  33.     selection_reset
  34.     skill_for_both_turn_start
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 目标选择初始化
  38.   #--------------------------------------------------------------------------
  39.   def selection_reset
  40.     @from_enemy_selection = false
  41.     @from_actor_selection = false
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 取消选择敌人目标时
  45.   #--------------------------------------------------------------------------
  46.   alias skill_for_both_on_enemy_cancel on_enemy_cancel
  47.   def on_enemy_cancel
  48.     item = current_used_item
  49.     if item.for_both? && !@from_actor_selection  # 判断是否为双向技能
  50.       change_current_item_selection(item)
  51.       @from_enemy_selection = true
  52.       select_actor_selection # 开启我方队员选择窗口
  53.       @enemy_window.hide
  54.     else
  55.       selection_reset
  56.       skill_for_both_on_enemy_cancel # 呼叫原有方法
  57.     end
  58.   end
  59.   #--------------------------------------------------------------------------
  60.   # ● 取消选择同伴目标时
  61.   #--------------------------------------------------------------------------
  62.   alias skill_for_both_on_actor_cancel on_actor_cancel
  63.   def on_actor_cancel
  64.     item = current_used_item
  65.     if item.for_both? && !@from_enemy_selection  # 判断是否为双向技能
  66.       change_current_item_selection(item)
  67.       @from_actor_selection = true
  68.       select_enemy_selection # 开启我方队员选择窗口
  69.       @actor_window.hide
  70.     else
  71.       if @actor_command_window.current_symbol == :attack
  72.         @actor_command_window.activate
  73.       end
  74.       selection_reset
  75.       skill_for_both_on_actor_cancel # 呼叫原有方法
  76.     end
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 获取当前技能/物品
  80.   #--------------------------------------------------------------------------
  81.   def current_used_item
  82.     case @actor_command_window.current_symbol
  83.     when :attack
  84.       return $data_skills[1]
  85.     when :skill
  86.       return @skill
  87.     when :item
  88.       return @item
  89.     end
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● 当前技能/物品替换
  93.   #--------------------------------------------------------------------------
  94.   def change_current_item_selection(item)
  95.     case @actor_command_window.current_symbol
  96.     when :attack, :skill
  97.       BattleManager.actor.input.set_skill(item.twin_item)
  98.     when :item
  99.       BattleManager.actor.input.set_item(item.twin_item)
  100.     end
  101.   end
  102. end
  103. class Game_BattlerBase
  104.   #--------------------------------------------------------------------------
  105.   # ● 判断物品是否能使用
  106.   #--------------------------------------------------------------------------
  107.   alias skill_for_both_item_conditions_met? item_conditions_met?
  108.   def item_conditions_met?(item)
  109.     r_item_id = has_twin_item?(item)
  110.     if r_item_id
  111.       real_item = $data_items[r_item_id]
  112.       return skill_for_both_item_conditions_met?(real_item)
  113.     else
  114.       skill_for_both_item_conditions_met?(item)
  115.     end
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● 判断物品是否双向物品的第二个物品
  119.   #--------------------------------------------------------------------------
  120.   def has_twin_item?(item)
  121.     $data_items.each{ |i|
  122.       next unless i
  123.       next unless i.for_both?
  124.       t_id = i.twin_item
  125.       return i.id if t_id == item.id
  126.     }
  127.     return false
  128.   end
  129. end
复制代码
用这个呗

点评

好吧我没看注册时间···被积分骗了ORZ  发表于 2014-10-31 22:16
LZ不是新手了……至少比我要老多了(刚好我来6R的时候他也挺活跃的)  发表于 2014-10-31 22:01
VIP给的那个没有注释对于新手来说用起来有点痛苦···  发表于 2014-10-31 21:51
纯技能公式和公共事件就能做到,基本上就是VIP的思路,只是最完美的解决还是得到make_damage里写  发表于 2014-10-31 21:38
治疗技能和伤害技能不能设置离散度,不然用这个脚本还是要动game_battler···  发表于 2014-10-31 21:32
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
685
在线时间
661 小时
注册时间
2012-10-21
帖子
350
4
 楼主| 发表于 2014-11-1 01:58:18 | 只看该作者
这样好像更麻烦了……有米有检测HP,只要上升就伤害敌人什么的?

点评

对的,有米有简单点的方法  发表于 2014-11-1 17:12
你是需要处在该状态的单位受到治疗时,将治疗量的一定值作为伤害给予敌人吗?  发表于 2014-11-1 09:01
回复 支持 反对

使用道具 举报

Lv3.寻梦者

闇吼者の災悪眷族
不気味存在締造者

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
帖子
6491
5
发表于 2014-11-1 23:02:01 | 只看该作者
本帖最后由 三途亚梦 于 2014-11-2 01:28 编辑
bloodyliao 发表于 2014-11-1 01:58
这样好像更麻烦了……有米有检测HP,只要上升就伤害敌人什么的?


实现的方法是有的,不过还是有些复杂的。

你需要设置相应的状态,这个部分应该就不需要多说了。

然后,直接到 game_battler
大概第358行的
       @result.make_damage(value.to_i, item)
下面加上这么一段
这段的意思是当技能或物品是治疗效果,且技能目标处在2号状态时,
将技能的造成的伤害给变量1,
受到伤害的单位的id给变量2,
然后执行公共事件1。
  1.     if self.actor? && item.damage.recover? && item.damage.to_hp? && self.states.include?($data_states[2])
  2.       $game_variables[1] = value.to_i * -1
  3.       $game_variables[2] = self.id
  4.       $game_temp.reserve_common_event(1)
  5.     end
复制代码
然后在公共事件1中写这么一段。
  1. @params = [1, $game_variables[2], 101 , -1]
  2. command_339
复制代码
它的效果是强制战斗指令让变量2对应的玩家人物对随机目标使用101号技能。
接着设置101号技能。
技能的公式为 v[1],目标是敌人单体。
即该技能造成伤害为变量1,也就是治疗效果造成的伤害。

以上设置全部完成后就是
当一个玩家人物处在状态2的时候,受到任何治疗效果的技能/道具的治疗时,都会将相当于治疗量的伤害随机给予一个敌方单位。
这个效果不会响应事件造成的HP变动、不会响应状态或者特性带来的HP自动回复。

然后你需要的第二个状态给予全体伤害,模仿以上方法设置就可以。
变量可以和状态2使用同一个,不会造成冲突。

点评

谢谢你~好棒!加个QQ吧~  发表于 2014-11-2 15:33
X%的部分你直接在101号技能的公式中设置就可以,比如:v[1] * 0.5  发表于 2014-11-1 23:05

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-5 11:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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