Project1

标题: ► 自动战斗 ◄ <<普通自动战斗 + AI 自动战斗>> 更新[13/10/02] [打印本页]

作者: 芯☆淡茹水    时间: 2013-9-24 07:11
标题: ► 自动战斗 ◄ <<普通自动战斗 + AI 自动战斗>> 更新[13/10/02]
本帖最后由 芯☆淡茹水 于 2013-10-18 18:39 编辑

   终于搞出了个算是比较有意思的东西了。其实写这个的脚本倒挺简单,就是繁琐 + 麻烦。完全自己写的
有 500 多行,再加上原默认脚本以及其中添加的,一共 1000 多一点。

  这个自动战斗简单的改一下,也可以作为“援助型 NPC“的行动判定。

  也可以反向改成敌人,提高敌人AI。(首先需要定义每个敌人能够使用的物品)


下面还是先介绍一下:


  自动战斗,顾名思义,就是角色选择“自动战斗”后,无需玩家给角色下达
指令,角色仍可自己行动。

   该自动战斗有 2 个模式:普通自动战斗 和 AI自动战斗。2 种模式的切换
使用脚本设置项设置的开关。

   角色在 普通自动战斗 时,只是普通攻击敌人。选择的敌人目标偏向血较少
者。

   角色在 AI自动战斗 时,判断角色行动类型的流程为:复活同伴 --》 恢复
同伴(HP和SP)--》攻击。
    如果队伍中有同伴死亡,有很大几率复活同伴(具体多大几率就不透露),
死亡的同伴个数越多,几率越大。复活同伴的前提条件是有复活类药品或特技。
    跳过复活同伴是恢复同伴,恢复同伴的几率以整体的剩余HP/SP的百分比来
算,百分比越小,几率越高。单体恢复同伴HP/SP的恢复对象,偏向HP/SP较少
者。恢复同伴的前提条件是有恢复类药品或特技。
   最后是攻击,攻击判断之前有一定的几率对同伴使用 增益特技。攻击分为
普通攻击和使用特技,几率以角色的不同而不同,如果是战士类型的角色,普通
攻击的几率高于使用特技的几率;法师类型的角色则相反。使用特技时有一定的
几率使用不良状态特技。所有使用特技都是以角色已习得的特技为基础。普通攻
击和使用单体攻击特技的对象目标,也是偏向血较少者。



截图看不出效果 —— 无

脚本太长,且会乱码。为方便新手,只发工程。

###########################################
更新[13/10/02]
● 优化自动AI,内容如下:
   
        ■ 恢复:     自动战斗者在恢复同伴时,首先确定恢复对象,根据对象需要恢复的
#               HP/SP 的多少,来确定使用的物品或特技。需要恢复的对象越多,使用
#               “己方全体”的物品或特技的几率越大,单个的恢复对象是不会使用
#               “己方全体”的物品或特技。
#              
#                比如确定了某个恢复对象,该对象需要回复 HP 100 ,所能使用的物品
#               或特技有 3 种:回复 HP 60 ;回复 HP 110 ;回复 HP 220 。那么自动
#               战斗者会选择 “回复 HP 110” 的这个物品或特技来恢复该对象。
#
#
#   ■ 特技攻击:  如果自动战斗者能够使用“敌全体”特技,并且敌人的数量是 2 个
#               或以上时,自动战斗者有几率使用“敌全体”特技,敌人数量越多,几
#               率越大。
#
#                  如果是单个攻击对象,首先确定对象,根据该对象剩余的 HP 来选择
#               特技。在这之前会先判断普通攻击能否打倒该对象,如果能打倒该对象,
#               就使用普通攻击,而不使用特技了。
#
#               比如:例1:攻击对象剩余HP:160 ,自动战斗者可使用的特技有:对该
#                          对象伤害 HP 180 和 伤害 HP 260 两个特技,但自动战斗者
#                          对该对象的普通攻击伤害为:HP 200 ,那么自动战斗者会
#                          选择普通攻击而不使用特技。
#
#                     例2:攻击对象剩余HP:2000 ,自动战斗者可使用的特技有:对该
#                          对象伤害 HP 200 ; 伤害 HP 600 ;伤害 HP 1000 三种,
#                          那么自动战斗者会选择 伤害 HP 1000 的这个特技来攻击该
#                          对象。(始终选择伤害最接近攻击对象剩余HP的特技)

############################################################

范例工程:
自动战斗.rar (196.34 KB, 下载次数: 1339)

最后,发现 BUG 或有更好的建议,请回复!
作者: 怪蜀黍    时间: 2013-9-24 10:24
嗷呜,为了游戏需要,我也想做个VX版的。
作者: 美丽晨露    时间: 2013-9-24 10:25
好评,话说这脚本适用于任何的战斗系统吗?
作者: y967    时间: 2013-9-24 16:44
大神的东西都是好东西,但是就是没有技能自动战斗么,记忆上一次技能,然后每次都用这个技能攻击
只是平砍的话,用处有限
作者: 芯☆淡茹水    时间: 2013-9-25 08:08
美丽晨露 发表于 2013-9-24 10:25
好评,话说这脚本适用于任何的战斗系统吗?

过段时间再说吧。因为想把这个东西再改进一下。比如使用全体特技或物品,攻击或需要恢复的对象越多,几率越大,单个的对象是不会使用全体特技或物品的。
再想弄个选择菜单,把能够在自动战斗时使用的特技和物品加以选择,比如一些比较珍贵的物品,不想在自动战斗时浪费掉,就可以不选择。
到时把你的即使制战斗脚本发给我。
作者: wingzeroplus    时间: 2013-9-25 11:03
本帖最后由 wingzeroplus 于 2013-9-25 11:07 编辑

嗯,AI回复方面做得挺好,就是每回合要玩家确认取消AI这点(虽然只是几秒),类似系统默认的战斗、逃跑一样十分打断战斗节奏感
个人建议2种  1、在战斗前调整完毕,战斗途中不可以选择取消AI
                    2、战斗中用快捷键来控制,比如F5-F8对应取消或者开启1-4号角色的自动效果
作者: 芯☆淡茹水    时间: 2013-9-26 05:55
wingzeroplus 发表于 2013-9-25 11:03
嗯,AI回复方面做得挺好,就是每回合要玩家确认取消AI这点(虽然只是几秒),类似系统默认的战斗、逃跑一样 ...

其实做这些东西很难让大众都满意。也有人想随时的手动或自动。该范例的自动提示效果是模仿某些
网游的自动战斗。
下次更新的时候,看有没有什么灵感,把提示设置得再完美一些。
作者: pahk2006    时间: 2014-2-10 03:39
如何強制自動攻擊??
就是不眴問
遇到怪時
直接自動進行AI攻擊
作者: 曹天一    时间: 2014-3-18 07:23
意思是不是一号角色交给自己控制二号交给电脑控制?
作者: 冰枫o鲍辰    时间: 2015-1-1 13:58
芯大 跪求整合熊式横版啊
作者: 白鬼    时间: 2015-6-3 15:00
请问,能不能添加功能,让某些角色职能自动战斗,其他角色可手动可自动?
作者: 锡鹏    时间: 2015-6-19 21:01
好,大神啊
作者: 舞小朵儿    时间: 2015-7-29 23:10
好~学习了
作者: gkl0510    时间: 2015-9-12 23:22
谢谢分享脚本。发现一个bug
自动战斗第一个人如果先选了“自动战斗”然后按Esc返回重新选择,然后再按一下Esc就必然死机。
这个问题能解决吗?
作者: bboodd    时间: 2017-1-12 21:32
谢谢 我学习脚本,正准备写个这样的脚本,下来学习学习,谢谢。
作者: guoxiaomi    时间: 2018-3-7 13:00
本帖最后由 guoxiaomi 于 2018-3-7 13:04 编辑

脚本这里提到了一个 @active_battlers.auto_battle_targets,但是在战斗结束和战斗前都没有进行 clear。

在行动的第一回合,如果 @active_battler.restriction 不等于 2 或 3,auto_battler_targets 会成为上一次战斗中选取的 Game_Enemy 对象,理论上这个对象应该在战斗结束后就会被释放掉的。

这个地方会与全动画脚本冲突,因为全动画脚本要在 Game_Enemy 上播放动画,不会显示相应的动画内容。

不知道是不是开了AI战斗就能避免。

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   def make_basic_auto
  3.     case @active_battler.current_action.basic
  4.     when 0
  5.       @animation1_id = @active_battler.animation1_id
  6.       @animation2_id = @active_battler.animation2_id
  7.       if @active_battler.restriction == 3
  8.         target = $game_party.random_target_actor
  9.         @active_battler.auto_battle_targets = []
  10.         @active_battler.auto_battle_targets.push(target)
  11.       elsif @active_battler.restriction == 2
  12.         target = $game_troop.random_target_enemy
  13.         @active_battler.auto_battle_targets = []
  14.         @active_battler.auto_battle_targets.push(target)
  15.       end
  16.       @target_battlers = @active_battler.auto_battle_targets
  17.       for target in @target_battlers
  18.         target.attack_effect(@active_battler)
  19.       end
  20.       return
  21.     when 1
  22.       @help_window.set_text($data_system.words.guard, 1)
  23.       return
  24.     end
  25.   end
  26.   #--------------------------------------------------------------------------

作者: 黑白无双    时间: 2018-3-10 02:53
感谢楼主分享。
作者: lx1902743807    时间: 2024-9-24 07:15
大佬mz能用吗




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