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

Project1

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

[已经解决] 自动战斗中如何用敏捷或其它参数控制普攻或用特技

 关闭 [复制链接]

Lv3.寻梦者

梦石
0
星屑
957
在线时间
237 小时
注册时间
2011-6-9
帖子
42
跳转到指定楼层
1
发表于 2011-6-12 21:25:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
如题
在设置了自动战斗,我方角色的攻击选择是我想通过敏捷去调,敏捷越高越容易出特技(我设特技不用MP)
  
#--------------------------------------------------------------------------
  # ● 评价行动价值 (自动战斗用)
  #    自动设置 @value 以及 @target_index。
  #--------------------------------------------------------------------------
  def evaluate
    if attack?
      evaluate_attack
    elsif skill?
      evaluate_skill
    else
      @value = 0
    end
    if @value > 0
      @value + rand(nil)
    end
  end
  #--------------------------------------------------------------------------
  # ● 评价普通攻击
  #--------------------------------------------------------------------------
  def evaluate_attack
    @value = 0
    for target in opponents_unit.existing_members
      value = evaluate_attack_with_target(target)
      if value > @value
        @value = value
        @target_index = target.index
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 评价普通攻击 (指定目标)
  #     target : 对象战斗者
  #--------------------------------------------------------------------------
  def evaluate_attack_with_target(target)
    target.clear_action_results
    target.make_attack_damage_value(battler)
    return target.hp_damage.to_f / [target.hp, 1].max
  end
  #--------------------------------------------------------------------------
  # ● 评价特技
  #--------------------------------------------------------------------------
  def evaluate_skill
    @value = 0
    unless battler.skill_can_use?(skill)
      return
    end
    if skill.for_opponent?
      targets = opponents_unit.existing_members
    elsif skill.for_user?
      targets = [battler]
    elsif skill.for_dead_friend?
      targets = friends_unit.dead_members
    else
      targets = friends_unit.existing_members
    end
    for target in targets
      value = evaluate_skill_with_target(target)
      if skill.for_all?
        @value += value
      elsif value > @value
        @value = value
        @target_index = target.index
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 评价特技 (指定对象)
  #     target : 对象战斗者
  #--------------------------------------------------------------------------
  def evaluate_skill_with_target(target)
    target.clear_action_results
    target.make_obj_damage_value(battler, skill)
    if skill.for_opponent?
      return target.hp_damage.to_f / [target.hp, 1].max
    else
      recovery = [-target.hp_damage, target.maxhp - target.hp].min
      return recovery.to_f / target.maxhp
    end
  end
end



Lv3.寻梦者

梦石
0
星屑
957
在线时间
237 小时
注册时间
2011-6-9
帖子
42
3
 楼主| 发表于 2011-6-13 22:35:39 | 只看该作者
本帖最后由 ok侠 于 2011-6-13 23:52 编辑

好象有两个问题
1、一直都是判断特技,没有普通攻击(普通攻击低于特技的情况,要是普通攻击高于特技就会有普通攻击)
2、特技的话能进行随机选择吗?而不是最大价值的特技

点评

1,特技不发动的情况就是普通攻击,确认你的特技发动几率小于100%。2,“@value += 100000”改成“@value = 100000 + (10000)” 特技随机发动  发表于 2011-6-15 01:50
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2011-4-1
帖子
74
2
发表于 2011-6-13 04:48:37 | 只看该作者
def evaluate_skill
    @value = 0
    unless battler.skill_can_use?(skill)
      return
    end
    if skill.for_opponent?
      targets = opponents_unit.existing_members
    elsif skill.for_user?
      targets = [battler]
    elsif skill.for_dead_friend?
      targets = friends_unit.dead_members
    else
      targets = friends_unit.existing_members
    end
    for target in targets
      value = evaluate_skill_with_target(target)
      if skill.for_all?
        @value += value
      elsif value > @value
        @value = value
        @target_index = target.index
      end
    end

#这里添加敏捷影响技能触发,具体怎么定义你自己决定,下边只是个例子
   if rand(1000) + battler.agi >= 1000 #敏捷/1000 几率触发
#下边设置敏捷触发后的评价值
#可以设置成评价值必定发动,也可以“@value *= 2”这样设置成评价值加倍
#或者“@value += battler.agi * 10”,自己设计吧
     @value += 100000  #这里采用敏捷触发后必定发动技能(+10000应该就够了,多点保险- -)
   else         
     @value = 0
   end  
#注意,如果有多个技能可以使用,则每个技能分别进行判断

end
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-11 12:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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