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

Project1

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

[已经过期] 请问如何做个自动攻击和技能攻击敌人的状态?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3176
在线时间
1442 小时
注册时间
2009-7-27
帖子
1454
跳转到指定楼层
1
发表于 2012-11-23 13:13:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
简单来说就是做个类似电脑控制的状态,就是我方角色2为这个状态,他会自动普通攻击敌人和技能攻击敌人,当HP百分几以下时自动使用恢复HP的技能。

请问该如何实现?

博客:我的博客

Lv3.寻梦者

梦石
0
星屑
3176
在线时间
1442 小时
注册时间
2009-7-27
帖子
1454
2
 楼主| 发表于 2012-11-24 11:28:37 | 只看该作者
没人帮我吗?

博客:我的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
568 小时
注册时间
2012-9-7
帖子
611
3
发表于 2012-11-24 15:08:08 | 只看该作者
本帖最后由 wingzeroplus 于 2012-11-24 15:26 编辑

不是没人理,有点复杂(貌似有自动战斗脚本,不过我只听说过,下面是我自己改的),首先得重新定义改状态(我拿普通攻击同伴状态改的)Scene_Battle 4里面修改这一段

  1. #--------------------------------------------------------------------------
  2. # ● 生成基本行动结果
  3. #--------------------------------------------------------------------------
  4.   def make_basic_action_result
  5.     # 攻击的情况下
  6.     if @active_battler.current_action.basic == 0
  7.       # 设置攻击 ID
  8.       @animation1_id = @active_battler.animation1_id
  9.       @animation2_id = @active_battler.animation2_id
  10.       # 行动方的战斗者是敌人的情况下
  11.       if @active_battler.is_a?(Game_Enemy)
  12.         if @active_battler.restriction == 3
  13.           target = $game_troop.random_target_enemy
  14.         elsif @active_battler.restriction == 2
  15.           target = $game_party.random_target_actor
  16.         else
  17.           index = @active_battler.current_action.target_index
  18.           target = $game_party.smooth_target_actor(index)
  19.         end
  20.       end
  21.       #######################################################
  22.       #自动行动详细设定
  23.     ##################################################
  24.       # 行动方的战斗者是角色的情况下
  25.       if @active_battler.is_a?(Game_Actor)
  26.         if @active_battler.restriction == 3  #随机攻击敌人状态
  27.           if  @active_battler.state?(6)    #本身的混乱状态
  28.             target = $game_party.random_target_actor
  29.           elsif   @active_battler.state?(5) or @active_battler.state?(12) or @active_battler.state?(17)#排除其他强制行动的冲突(因为游戏不同,编号不同)
  30.             target = $game_troop.random_target_enemy # 角色攻击敌人
  31.           else               #除外中混乱和沉默外,还有状态带有普通攻击同伴的话
  32. #####################
  33.            if @active_battler.id == 2  #如果是2号角色行动
  34.               case rand(150)+$game_variables[102]/10    #这里是条件,我用的随机数(0-150)+第102号变量修正行动率做的
  35.               when 0..50  #随机0-50之间,角色什么都不做(下面是打酱油的指令)
  36.               $game_temp.forcing_battler = nil
  37.               @phase4_step = 1
  38.               return
  39.               when 50..110  #50到110之间,普通攻击(下面是普通攻击指令)
  40.               target = $game_troop.random_target_enemy # 角色攻击敌人
  41.          target.attack_effect(@active_battler)
  42.               @target_battlers = [target]
  43.               @animation1_id = @active_battler.animation1_id
  44.               @animation2_id = @active_battler.animation2_id
  45.               return
  46.               when 110..160   #110-160时就放技能了
  47.               list = [2,44,90]    #这里要自定义角色使用的技能编号,下面一定写清楚技能作用范围,不然系统无法识别
  48.               sk = $data_skills[list[rand(list.size)]]
  49.               if sk.id==2
  50.            target = $game_party.random_target_actor   #行动范围开始
  51.               target.skill_effect(@active_battler,sk)
  52.               @target_battlers = [target]                   #行动范围结束
  53.                    else
  54.            set_target_battlers(sk.scope)                  #行动范围开始
  55.                for target in @target_battlers                 
  56.                 target.skill_effect(@active_battler,sk)
  57.                end                                                          #行动范围结束
  58.               end
  59.               @help_window.set_text(sk.name, 1)
  60.               @animation1_id = sk.animation1_id
  61.               @animation2_id = sk.animation2_id
  62.               return
  63.               when 160..999     #随机数超过160的范围,可以使用更多的技能
  64.                list = [2,44,59,87,90,151]
  65.                sk = $data_skills[list[rand(list.size)]]
  66.                  if sk.id==44 or sk.id==87 or sk.id==90
  67.                   set_target_battlers(sk.scope)                    #行动范围开始
  68.                   for target in @target_battlers
  69.                   target.skill_effect(@active_battler,sk)      
  70.                   end                                                     #行动范围结束
  71.               elsif sk.id == 151 or sk.id == 59
  72.               target = $game_troop.random_target_enemy    #行动范围开始
  73.                    @target_battlers = [target]                  
  74.                   target.skill_effect(@active_battler,sk)             #行动范围结束
  75.                 else
  76.                 target = $game_party.random_target_actor     #行动范围开始
  77.                   @target_battlers = [target]
  78.                   target.skill_effect(@active_battler,sk)       #行动范围结束
  79.              end   
  80.                 @help_window.set_text(sk.name, 1)
  81.                 @animation1_id = sk.animation1_id
  82.                 @animation2_id = sk.animation2_id
  83.                return
  84.               end
  85.             end      
  86.          #2号角色行动结束
  87. ##################################
  88.         end
  89.            elsif @active_battler.restriction == 2
  90.           target = $game_troop.random_target_enemy
  91.         else
  92.           index = @active_battler.current_action.target_index
  93.           target = $game_troop.smooth_target_enemy(index)
  94.         end
  95.       end
  96.       # 设置对像方的战斗者序列
  97.       @target_battlers = [target]
  98.       # 应用通常攻击效果
  99.       for target in @target_battlers
  100.         target.attack_effect(@active_battler)
  101.       end
  102.       return
  103.     end
  104.     # 防御的情况下
  105.     if @active_battler.current_action.basic == 1
  106.       # 帮助窗口显示"防御"
  107.       @help_window.set_text($data_system.words.guard, 1)
  108.       return
  109.     end
  110.     # 逃跑的情况下
  111.     if @active_battler.is_a?(Game_Enemy) and
  112.        @active_battler.current_action.basic == 2
  113.       #  帮助窗口显示"逃跑"
  114.       @help_window.set_text("逃跑", 1)
  115.       # 逃跑
  116.       @active_battler.escape
  117.       return
  118.     end
  119.     # 什么也不做的情况下
  120.     if @active_battler.current_action.basic == 3
  121.       # 清除强制行动对像的战斗者
  122.       $game_temp.forcing_battler = nil
  123.       # 移至步骤 1
  124.       @phase4_step = 1
  125.       return
  126.     end
  127.   end

复制代码
主要是很麻烦,要让多个角色可以自行战斗,复制2号角色的那部分内容,放在2个#######与#########之间,然后修改成你想要的结果,这个估计你一时半会也看不太懂
简单点说技能作用范围最重要,对照上面的看

target = $game_party.random_target_actor
  @target_battlers = [target]
  target.skill_effect(@active_battler,sk)
这段表示技能作用范围为已方随机

target = $game_troop.random_target_enemy
@target_battlers = [target]
  target.skill_effect(@active_battler,sk)
这段表示技能作用范围为敌方随机

set_target_battlers(sk.scope)
for target in @target_battlers
target.skill_effect(@active_battler,sk)
end
这段表示自身,敌方全体或者我方全体之类的范围(都适用)

@target_battlers = $game_party.actors + $game_troop.enemies
for target in @target_battlers
target.skill_effect(@active_battler,sk)
end
还可以自己发挥,这是敌我双方全体范围
简单点说
1 定义哪位角色
2 定义行为区间(什么条件下,角色执行什么行动)
3 如果使用技能,则要定义技能的种类(写上技能的编号)
4 如果使用技能,还要定义技能的范围(上面给你写的几种范围,根据需要替换 原文中的行动范围开始到结束部分,自行组合)
以上几点必不可少

点评

无法确认?  发表于 2012-12-3 14:02
没有效果呀  发表于 2012-11-24 19:03
FTM正式版已经发布,点击图片开启传送门
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3176
在线时间
1442 小时
注册时间
2009-7-27
帖子
1454
4
 楼主| 发表于 2012-11-24 20:24:01 | 只看该作者
wingzeroplus 发表于 2012-11-24 15:08
不是没人理,有点复杂(貌似有自动战斗脚本,不过我只听说过,下面是我自己改的),首先得重新定义改状态( ...

我的意思是,可以设置自动普通攻击敌人嘛,只要加上会自动使用技能就可以了。就像敌人一样的行动方式。

博客:我的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
47
在线时间
976 小时
注册时间
2011-4-30
帖子
860
5
发表于 2012-11-24 23:10:38 | 只看该作者
爆焰 发表于 2012-11-24 20:24
我的意思是,可以设置自动普通攻击敌人嘛,只要加上会自动使用技能就可以了。就像敌人一样的行动方式。 ...

同学,我知道自动攻击有多种实现方案,个人认为你这个思路倒也不错。我构思了一下,可以做成一个人物有手动模式和自动模式,而自动模式其实是调用数据库中对应某ID的敌人的行为,这样可以把数据库也利用起来,不然要自己在脚本里设定角色的行为倒也挺麻烦的……当然我暂时没兴趣研究这个,只能帮你到这儿了……
湿滑落式骑!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
568 小时
注册时间
2012-9-7
帖子
611
6
发表于 2012-11-25 12:39:01 | 只看该作者
爆焰 发表于 2012-11-24 20:24
我的意思是,可以设置自动普通攻击敌人嘛,只要加上会自动使用技能就可以了。就像敌人一样的行动方式。 ...

你说的很简单,做起来并不简单,你可以参考我的作品研究下(队友自动战斗),核心脚本就是上面我发的
http://pan.baidu.com/share/link?shareid=139561&uk=3842134166

点评

X号状态上要选择“普通攻击同伴”,然后在战斗中(或者战斗开始时)给其附加上这个状态  发表于 2012-11-26 09:01
我设置了X号ID状态,和设置了角色ID,可是那个状态根本没任何变化呀。具体到底是怎么回事?  发表于 2012-11-25 23:51

评分

参与人数 1星屑 +100 收起 理由
hcm + 100 感谢回答

查看全部评分

FTM正式版已经发布,点击图片开启传送门
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-19 10:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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