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

Project1

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

[推荐问答] 人物设定问题,求助。

[复制链接]

Lv1.梦旅人

梦石
0
星屑
115
在线时间
175 小时
注册时间
2011-8-7
帖子
1032
跳转到指定楼层
1
发表于 2012-8-29 21:36:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 1584927450 于 2012-8-30 11:42 编辑

废话少说了,
问题上:
       本人想设个电脑队员,求助啊~
       就是在你的队伍,自己攻击、使用技能、防御(随机攻击、使用技能、防御),并且不会使用物品、不会逃跑的队员。
       应该是脚本处理吧,求助啊,有人吗!求知者回复啊!!!

点评

AI程序吗,我喜欢....不过你没给数据...全随机...??  发表于 2012-8-30 01:10

Lv1.梦旅人

梦石
0
星屑
54
在线时间
323 小时
注册时间
2010-8-21
帖子
666
2
发表于 2012-8-30 03:25:17 | 只看该作者
本帖最后由 沙漠点灰 于 2012-8-30 03:26 编辑

写出来了,希望多给点经验,好人卡,因为虽然只有100来行,但是debug耗时很久....
这个脚本在默认战斗系统可用,有改动的话......

下面这个是设定,全是"优先",仅仅是概率大些,应该看得懂吧。擦...3点了,写这个花了我3个小时,{:2_258:} ,希望满意

  AI = [2] # 需要自动攻击的角色编号,多的用[]括着...
  
           # 物理攻击倾向指数 魔法攻击倾向指数 防御指数
  Action_Index = [50,  60, 20]
  
  IQ = 80 # 智商设定,90为标准值,IQ越高,越优先攻击生命值少,防御力小的
  Hp_Mark = [30,-10] # 生命值评分标准,[生命值最低的得分,步进值(负)]
  Df_Mark = [20,-10] # 防御值评分标准,[防御值最低的得分,步进值(负)]
  
  EQ = 80 # 情商设定,90为标准值,EQ越高,越优先使用对应魔法(属性有效度为准),


RUBY 代码复制
  1. #==============================================================================
  2. # ■ Game_Actor
  3. #------------------------------------------------------------------------------
  4. #  AI模块
  5. #==============================================================================
  6.  
  7. class  Game_Battler
  8.   attr_accessor :marks
  9. end
  10. class Game_Actor < Game_Battler
  11.   AI = [2] # 需要自动攻击的角色编号
  12.  
  13.            # 物理攻击倾向指数 魔法攻击倾向指数 防御指数 什么都不做指数
  14.   Action_Index = [50,  60, 20]
  15.  
  16.   IQ = 80 # 智商设定,90为标准值,IQ越高,越优先攻击生命值少,防御力小的
  17.   Hp_Mark = [30,-10] # 生命值评分标准,[生命值最低的得分,步进值(负)]
  18.   Df_Mark = [20,-10] # 防御值评分标准,[防御值最低的得分,步进值(负)]
  19.  
  20.   EQ = 80 # 情商设定,90为标准值,EQ越高,越优先使用对应魔法(属性有效度为准),
  21.   def make_action
  22.     $game_troop.enemies.each{|i|i.marks=50}
  23.     $game_party.actors.each{|i|i.marks=50}
  24.     # 先确认动作
  25.     index = Action_Index
  26.     skills = self.skills.inject([]){|a,b|a<<b if skill_can_use?(b);a}
  27.     index[1] = 0 if skills == []
  28.     index[0] *= IQ/90.0;index[1] *= IQ/90.0;index[1] *= EQ/90.0
  29.     index[0].to_i;index[1].to_i
  30.     all = index.inject(0){|a,b|a+b}.to_i
  31.     value = rand(all)
  32.     action = 0 # 默认攻击
  33.     for i in 0...index.size
  34.       if i > value
  35.         action = i
  36.         break
  37.       else
  38.         value -= index[i]
  39.       end
  40.     end
  41.     # 目前动作为 action
  42.     case action
  43.     when 0 # 攻击
  44.       # 智商检查
  45.       enemies = $game_troop.enemies.inject([]){|a,b|a<<b if !b.hp0?;a}
  46.       # 评分
  47.       enemies.sort!{|a,b|a.hp<=>b.hp}
  48.       for i in 0...enemies.size
  49.         enemies[i].marks += (Hp_Mark[0] + i*Hp_Mark[1])*IQ/90
  50.       end
  51.       # 防御检查
  52.       enemies.sort!{|a,b|a.pdef<=>b.pdef}
  53.       for i in 0...enemies.size
  54.         enemies[i].marks += (Df_Mark[0] + i*Df_Mark[1])*IQ/90
  55.       end
  56.       # 确认目标
  57.       value = rand(enemies.inject(0){|a,b|a+b.marks})
  58.       tag = nil
  59.       for i in enemies
  60.         if i.marks > value
  61.           tag = i
  62.           break
  63.         else
  64.           value -= i.marks
  65.         end
  66.       end
  67.       # 目标确认 tag
  68.       @current_action.kind = 0
  69.       @current_action.basic = 0
  70.       return @current_action.target_index = 0 unless tag
  71.       @current_action.target_index = $game_troop.enemies.index(tag)
  72.     when 1 # 魔法
  73.       # 魔法分类,对敌/对己(加持)/附着状态/解除状态
  74.       @current_action.kind = 0
  75.       return @current_action.basic = 1 if skills == []
  76.       @current_action.kind = 1
  77.       # 随机技能
  78.       @current_action.skill_id = skills[rand(skills.size)]
  79.       # 确认对象
  80.       scope = $data_skills[@current_action.skill_id].scope
  81.       @current_action.target_index = 0
  82.       case @scope
  83.       when 1 # 敌单体
  84.         # 智商检查
  85.         enemies = $game_troop.enemies.inject([]){|a,b|a<<b if !b.hp0?;a}
  86.         # 属性有效度评分
  87.         table = [0,50,25,10,0,-10,-20]
  88.         for i in 0...enemies.size
  89.           enemies[i].marks += enemies[i].element_ranks[@current_action.skill_id]
  90.         end
  91.         # 确认目标
  92.         value = rand(enemies.inject(0){|a,b|a+b.marks})
  93.         tag = nil
  94.         for i in enemies
  95.          if i.marks > value
  96.             tag = i
  97.             break
  98.           else
  99.             value -= i.marks
  100.           end
  101.         end
  102.         @current_action.target_index = $game_troop.enemies.index(tag) if tag
  103.       when 3
  104.         # 智商检查
  105.         enemies = game_party.actors.inject([]){|a,b|a<<b if !b.hp0?;a}
  106.         # 属性有效度评分
  107.         table = [0,50,25,10,0,-10,-20]
  108.         for i in 0...enemies.size
  109.           enemies[i].marks += enemies[i].element_ranks[@current_action.skill_id]
  110.         end
  111.         # 确认目标
  112.         value = rand(enemies.inject(0){|a,b|a+b.marks})
  113.         tag = nil
  114.         for i in enemies
  115.          if i.marks > value
  116.             tag = i
  117.             break
  118.           else
  119.             value -= i.marks
  120.           end
  121.         end
  122.         @current_action.target_index = game_party.actors.index(tag) if tag
  123.       end
  124.     when 2 # 防御
  125.       @current_action.basic = 0
  126.       @current_action.basic = 1
  127.     end
  128.   end
  129. end
  130. class Scene_Battle
  131.   #--------------------------------------------------------------------------
  132.   # ● 转到输入下一个角色的命令
  133.   #--------------------------------------------------------------------------
  134.   def phase3_next_actor
  135.     # 循环
  136.     begin
  137.       # 角色的明灭效果 OFF
  138.       if @active_battler != nil
  139.         @active_battler.blink = false
  140.       end
  141.       # 最后的角色的情况
  142.       if @actor_index == $game_party.actors.size-1
  143.         # 开始主回合
  144.         start_phase4
  145.         return
  146.       end
  147.       # 推进角色索引
  148.       @actor_index += 1
  149.       @active_battler = $game_party.actors[@actor_index]
  150.       @active_battler.blink = true
  151.     # 如果角色是在无法接受指令的状态就再试
  152.   end until @active_battler.inputable?
  153.   # $$$$$$$$$$$$$$
  154.     if Game_Actor::AI.include?(@active_battler.id)
  155.       #AI同伴
  156.       @actor_command_window.active = false
  157.       @actor_command_window.visible = false
  158.       @active_battler.make_action
  159.       phase3_next_actor
  160.     else
  161.       # 设置角色的命令窗口
  162.       phase3_setup_command_window
  163.     end
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 转向前一个角色的命令输入
  167.   #--------------------------------------------------------------------------
  168.   def phase3_prior_actor
  169.     # 循环
  170.     begin
  171.       # 角色的明灭效果 OFF
  172.       if @active_battler != nil
  173.         @active_battler.blink = false
  174.       end
  175.       # 最初的角色的情况下
  176.       if @actor_index == 0
  177.         # 开始同伴指令回合
  178.         start_phase2
  179.         return
  180.       end
  181.       # 返回角色索引
  182.       @actor_index -= 1
  183.       @active_battler = $game_party.actors[@actor_index]
  184.       @active_battler.blink = true
  185.     # 如果角色是在无法接受指令的状态就再试
  186.     end until @active_battler.inputable?
  187.     # 设置角色的命令窗口
  188.     if Game_Actor::AI.include?(@active_battler.id)
  189.       #AI同伴
  190.       phase3_prior_actor
  191.     else
  192.       phase3_setup_command_window
  193.     end
  194.   end
  195. end
���

点评

按照你的要求,追加了100EXP,现在论坛得经验难啊!只能追加这么多了,我会了接近两年才有这么点经验啊!  发表于 2012-8-30 11:43
一张好人卡来之不易啊,论坛现在都不提供好人卡了%>_<%  发表于 2012-8-30 11:41
还真给力,这么快就来了个脚本,我还以为要花几天时间等呢  发表于 2012-8-30 11:34

评分

参与人数 3星屑 +146 梦石 +2 收起 理由
yagami + 14 精品文章
hcm + 2 认可答案
Wind2010 + 132 给个糖w

查看全部评分

>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-19 17:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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