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

Project1

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

[已经解决] [已解决]如何实现每回合自动被技能攻击

[复制链接]

Lv4.逐梦者

梦石
0
星屑
7570
在线时间
1157 小时
注册时间
2016-9-10
帖子
165

开拓者

跳转到指定楼层
1
发表于 2018-3-12 22:40:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 devil033 于 2018-3-14 20:31 编辑

想实现一种战斗场景,就好像是中了埋伏,每回合开始或结束的时候,我方角色会被某个技能全体攻击

想到2个办法,但都不理想:
方法1: 在敌群里面设置每回合某个敌人强制使用技能,但如果使用技能的敌人挂了,在剩下的回合中就无法再使用了,而且中埋伏还要敌人去使用技能感觉也不合理
方法2: 同样是在敌群中设置,我方角色每回合增减体力,这种设置既没有技能动画,也不会有伤害提示,感觉也不理想

所以想请教下,怎么实现,每回合开始或结束的时候,自动触发某个技能,使我方角色受到伤害, 既有技能动画也有伤害显示?

补充一下,使用的是SV100横版战斗脚本

Lv3.寻梦者

梦石
0
星屑
1803
在线时间
133 小时
注册时间
2013-10-6
帖子
193
2
发表于 2018-3-12 23:38:46 | 只看该作者
和使用哪个脚本关系不大
大体说一下思路
你需要找到游戏回合处理的地方,并插入自己的处理逻辑
我手头只有VX,位置是Scene_Battle,你会看到一个叫turn_end的函数,它会在每次回合结束时调用
在这里对我方全体使用一次攻击技能即可
参考
skill_effect(user, skill)是对Game_Battler释放一次技能
execute_damage(user)是对Game_Battler结算一次伤害
类似地,你还能插入更多的处理位置,比如伤害结算时,可以自定义增伤减伤,etc

如果用敌人强制技能的思路的话会更加麻烦,例如这个敌人必须是不死的,那么胜利条件如何判定,以及这个敌人会不会干扰你的多目标技能等等
←你看到一只经常潜水的萌新。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7570
在线时间
1157 小时
注册时间
2016-9-10
帖子
165

开拓者

3
 楼主| 发表于 2018-3-13 00:08:07 | 只看该作者
不死鸟之翼 发表于 2018-3-12 23:38
和使用哪个脚本关系不大
大体说一下思路
你需要找到游戏回合处理的地方,并插入自己的处理逻辑

VA没有skill_effect(user, skill)函数

VA类似的应该是这个吧?
#--------------------------------------------------------------------------
  # ● 使用技能/物品
  #--------------------------------------------------------------------------
  def use_item
    item = @subject.current_action.item
    @log_window.display_use_item(@subject, item)
    @subject.use_item(item)
    refresh_status
    targets = @subject.current_action.make_targets.compact
    show_animation(targets, item.animation_id)
    targets.each {|target| item.repeats.times { invoke_item(target, item) } }
  end

感觉要写个类似的,可是不会
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1803
在线时间
133 小时
注册时间
2013-10-6
帖子
193
4
发表于 2018-3-13 00:20:54 | 只看该作者
devil033 发表于 2018-3-13 00:08
VA没有skill_effect(user, skill)函数

VA类似的应该是这个吧?

这是使用技能或物品的选项处理,我手头没有脚本,但我看到这里面有一个invoke_item
那么我建议你看看invoke_item这个函数,它是实际执行物品/技能效果的
←你看到一只经常潜水的萌新。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7570
在线时间
1157 小时
注册时间
2016-9-10
帖子
165

开拓者

5
 楼主| 发表于 2018-3-13 00:32:22 | 只看该作者
不死鸟之翼 发表于 2018-3-13 00:20
这是使用技能或物品的选项处理,我手头没有脚本,但我看到这里面有一个invoke_item
那么我建议你看看invo ...

  #--------------------------------------------------------------------------
  # ● 发动技能/物品
  #--------------------------------------------------------------------------
  def invoke_item(target, item)
    if rand < target.item_cnt(@subject, item)   
      invoke_counter_attack(target, item)
    elsif rand < target.item_mrf(@subject, item)
      invoke_magic_reflection(target, item)
    else
      apply_item_effects(apply_substitute(target, item), item)
    end
    @subject.last_target_index = target.index
  end
  #--------------------------------------------------------------------------
  # ● 应用技能/物品效果
  #--------------------------------------------------------------------------
  def apply_item_effects(target, item)
    target.item_apply(@subject, item)
    refresh_status
    @log_window.display_action_results(target, item)
  end

看着像这个 apply_item_effects(target, item) 吧?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1803
在线时间
133 小时
注册时间
2013-10-6
帖子
193
6
发表于 2018-3-13 00:55:40 | 只看该作者
devil033 发表于 2018-3-13 00:32
#--------------------------------------------------------------------------
  # ● 发动技能/物 ...

是的。用合适的参数调用它应该就行。调用时机还是在类似turn_end的地方

点评

是的,一大堆对象的信息,所以我看不出target应该填什么东西  发表于 2018-3-13 21:09
大概是对像吧..  发表于 2018-3-13 21:05
p 个target能出一大版的信息,什么敌人名字,血量,坐标啥都有,然而能力有限,看不出这个target应该是个什么...  发表于 2018-3-13 20:02
P一下..  发表于 2018-3-13 16:07
可是这个target和item不知道怎么写  发表于 2018-3-13 01:21
←你看到一只经常潜水的萌新。
回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3414
在线时间
461 小时
注册时间
2013-12-7
帖子
333
7
发表于 2018-3-13 09:40:33 | 只看该作者
透明战斗图的敌军,回合结束时解除无法战斗——释放技能——添加无法战斗。

点评

敌人数已经是8个了,不能再加了...  发表于 2018-3-13 20:02

评分

参与人数 1+1 收起 理由
2256538860 + 1 乐于助人!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv6.析梦学徒

老鹰

梦石
40
星屑
34725
在线时间
6740 小时
注册时间
2012-5-26
帖子
3259

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

8
发表于 2018-3-13 14:43:15 | 只看该作者
本帖最后由 百里_飞柳 于 2018-3-13 14:50 编辑

如果你敌人数目没到8个的话,可以试试加个 中途出现 的敌人用来触发你回合数释放技能,而且它也不会被判定成 存活敌人
当然如果你已经用到了中途出现援兵,那就只能自己造个额外敌人了
注意到事件里的强制战斗指令
  1.   #--------------------------------------------------------------------------
  2.   # ● 强制战斗行动
  3.   #--------------------------------------------------------------------------
  4.   def command_339
  5.   #  @param[0] : 0 则敌人、1 则角色
  6.   #  @param[1] : 敌人的索引 或 角色的 ID
  7.     iterate_battler(@params[0], @params[1]) do |battler|
  8.       next if battler.death_state?
  9.       battler.force_action(@params[2], @params[3])
  10.       BattleManager.force_action(battler)
  11.       Fiber.yield while BattleManager.action_forced?
  12.     end
  13.   end
复制代码

新建一个敌人,并强制行动一下(事件-脚本 中使用)
  1. enemy_id = 1 # 此处为作为技能使用者的敌人id
  2. skill_id = 1 # 此处为需要使用的技能id
  3. target_index = -2 # 此处替换成目标的index
  4. #敌人:0~7 我方:0~4 上次目标:-2 随机:-1
  5. battler = Game_Enemy.new(9, enemy_id)
  6. battler.force_action(skill_id, target_index)
  7. BattleManager.force_action(battler)
  8. while BattleManager.action_forced?
  9.   Fiber.yield
  10. end
复制代码

对了,那个目标index不用特别在意,如果你是群体范围的话,它自己会重新按照技能的设置计算一遍,只有对单体范围的技能,这个目标index有效,而且如果目标index对象不存在会被顺延处理

点评

我试了一下在SV100里面设置要用的技能是三个动作:动画,伤害,结束 然后测试的时候发现,动画可以显示,然后就卡住了,没有伤害显示  发表于 2018-3-14 00:32
sv啊……很久没看了,已经不记得sv里到底做了啥,依稀是依靠battler的sv实例更新其sprite来挂起动作,所以这样偷懒加额外敌人果然就崩了  发表于 2018-3-14 00:19
新建工程可以用,但在SV100里面好像用不了,在显示完敌人使用技能的log后就卡住不动了  发表于 2018-3-13 20:56
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1803
在线时间
133 小时
注册时间
2013-10-6
帖子
193
9
发表于 2018-3-13 22:05:11 | 只看该作者
好吧 我下了个VA
这个方案应该更直观一些
首先去数据库新建一个技能 比如127号

一般这种剧情伤害是固定值,你也可以勾上无视防御

然后去脚本里的插件部分加入
RUBY 代码复制
  1. class Scene_Battle
  2.   alias turn_start_c99d0b193c676ebc turn_start
  3.   def turn_start
  4.     user=$game_troop.members[0]
  5.     item=$data_skills[127]
  6.     @log_window.add_text("Foo message text")
  7.     @log_window.wait
  8.     targets = $game_party.members
  9.     show_animation(targets, item.animation_id)
  10.     targets.each {|t|
  11.       t.item_apply(user, item)
  12.       refresh_status
  13.       @log_window.display_action_results(t, item)
  14.     }
  15.     turn_start_c99d0b193c676ebc
  16.   end
  17. end

回合开始前和开始后都可以
也可以显示一下战斗消息
@devil033

点评

改好了  发表于 2018-3-14 11:25
我上传个SV100的工程  发表于 2018-3-14 00:43
SV100可能修改了伤害弹出的显示方式,我没有它的脚本所以我不知道怎么适配它  发表于 2018-3-14 00:34
感谢,不过还有个问题,就是没有伤害显示 SV100有个受到伤害时,会有个伤害数字弹出显示,但现在效果是,既没有LOG显示伤害,也没有伤害数字弹出  发表于 2018-3-14 00:10
←你看到一只经常潜水的萌新。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7570
在线时间
1157 小时
注册时间
2016-9-10
帖子
165

开拓者

10
 楼主| 发表于 2018-3-14 00:42:42 | 只看该作者
上传个SV100的工程

ace横版汉化范例工程.zip

1.78 MB, 下载次数: 76

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 15:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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