#============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ # AI模块 本脚本来自与66RPG #============================================================================== class Game_Battler attr_accessor :marks end class Game_Actor < Game_Battler AI = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] # 需要自动攻击的角色编号 # 物理攻击倾向指数 魔法攻击倾向指数 防御指数 什么都不做指数 Action_Index = [0,100,0] IQ = 90 # 智商设定,90为标准值,IQ越高,越优先攻击生命值少,防御力小的 Hp_Mark = [30,-10] # 生命值评分标准,[生命值最低的得分,步进值(负)] Df_Mark = [20,-10] # 防御值评分标准,[防御值最低的得分,步进值(负)] EQ = 90 # 情商设定,90为标准值,EQ越高,越优先使用对应魔法(属性有效度为准), def make_action $game_troop.enemies.each{|i|i.marks=50} $game_party.actors.each{|i|i.marks=50} # 先确认动作 index = Action_Index skills = self.skills.inject([]){|a,b|a<<b if skill_can_use?(b);a} index[1] = 0 if skills == [] index[0] *= IQ/90.0;index[1] *= IQ/90.0;index[1] *= EQ/1.0 index[0].to_i;index[1].to_i all = index.inject(0){|a,b|a+b}.to_i value = rand(all) action = 2 # 默认魔法 for i in 0...index.size if i > value action = i break else value -= index[i] end end case action when 1 # 攻击 # 智商检查 enemies = $game_troop.enemies.inject([]){|a,b|a<<b if !b.hp0?;a} # 评分 enemies.sort!{|a,b|a.hp<=>b.hp} for i in 0...enemies.size enemies[i].marks += (Hp_Mark[0] + i*Hp_Mark[1])*IQ/90 end # 防御检查 enemies.sort!{|a,b|a.pdef<=>b.pdef} for i in 0...enemies.size enemies[i].marks += (Df_Mark[0] + i*Df_Mark[1])*IQ/90 end # 确认目标 value = rand(enemies.inject(0){|a,b|a+b.marks}) tag = nil for i in enemies if i.marks > value tag = i break else value -= i.marks end end # 目标确认 tag @current_action.kind = 0 @current_action.basic = 0 return @current_action.target_index = 0 unless tag @current_action.target_index = $game_troop.enemies.index(tag) when 2 # 魔法 # 魔法分类,对敌/对己(加持)/附着状态/解除状态 @current_action.kind = 0 return @current_action.basic = 1 if skills == [] @current_action.kind = 1 # 随机技能 idex = 0 loop do idex += 1 @current_action.skill_id = skills[rand(skills.size)] if $data_skills[@current_action.skill_id].int_f != 1 #@current_action.skill_id >=94 && @current_action.skill_id <=900 break end if idex >= 100 && $data_skills[@current_action.skill_id].int_f == 1 @current_action.kind = 0 @current_action.basic = 1 break end end case self.id when 1 if self.state?(951) @current_action.skill_id = 54 else @current_action.skill_id = 950 end when 2 if self.state?(952) @current_action.skill_id = 56 else @current_action.skill_id = 951 end when 3 if self.state?(953) @current_action.skill_id = 57 else @current_action.skill_id = 952 end when 4 if self.state?(954) @current_action.skill_id = 55 else @current_action.skill_id = 953 end when 5 if self.state?(955) @current_action.skill_id = 62 else @current_action.skill_id = 954 end when 6 if self.state?(957) @current_action.skill_id = 59 else @current_action.skill_id = 956 end when 7 if self.state?(958) @current_action.skill_id = 58 else @current_action.skill_id = 957 end when 8 if self.state?(959) @current_action.skill_id = 65 else @current_action.skill_id = 958 end when 9 if self.state?(960) @current_action.skill_id = 60 else @current_action.skill_id = 959 end when 10 if self.state?(961) @current_action.skill_id = 61 else @current_action.skill_id = 960 end when 11 if self.state?(963) @current_action.skill_id = 63 else @current_action.skill_id = 962 end when 12 if self.state?(964) @current_action.skill_id = 64 else @current_action.skill_id = 963 end when 13 if self.state?(965) @current_action.skill_id = 66 else @current_action.skill_id = 964 end when 14 if self.state?(966) @current_action.skill_id = 67 else @current_action.skill_id = 965 end when 15 if self.state?(967) @current_action.skill_id = 68 else @current_action.skill_id = 966 end end # 确认对象 scope = $data_skills[@current_action.skill_id].scope @current_action.target_index = 0 case scope when 1 # 敌单体 # 智商检查 enemies = $game_troop.enemies.inject([]){|a,b|a<<b if !b.hp0?;a} target = $game_troop.random_target_enemy @current_action.target_index = target.index when 2 @current_action.target_index = game_party.actors.index(tag) if tag when 7 @current_action.kind = 0 @current_action.basic = 1 when 3 target = $game_troop.random_target_enemy @current_action.target_index = target.index end when 3 # 防御 @current_action.kind = 0 @current_action.basic = 1 end end end class Scene_Battle #-------------------------------------------------------------------------- # ● 转到输入下一个角色的命令 #-------------------------------------------------------------------------- def phase3_next_actor # 循环 begin # 角色的明灭效果 OFF if @active_battler != nil @active_battler.blink = false end # 最后的角色的情况 if @actor_index == $game_party.actors.size-1 # 开始主回合 start_phase4 return end # 推进角色索引 @actor_index += 1 @active_battler = $game_party.actors[@actor_index] @active_battler.blink = true # 如果角色是在无法接受指令的状态就再试 end until @active_battler.inputable? #当角色装备@active_battler.state?(213)状态下就可以开启自动化战斗 if Game_Actor::AI.include?(@active_battler.id) or $game_switches[14] == true#@active_battler.state?(213) #AI同伴 @actor_command_window.active = false @actor_command_window.visible = false @active_battler.make_action phase3_next_actor else # 设置角色的命令窗口 phase3_setup_command_window end end #-------------------------------------------------------------------------- # ● 转向前一个角色的命令输入 #-------------------------------------------------------------------------- def phase3_prior_actor # 循环 begin # 角色的明灭效果 OFF if @active_battler != nil @active_battler.blink = false end # 最初的角色的情况下 if @actor_index == 0 # 开始同伴指令回合 start_phase2 return end # 返回角色索引 @actor_index -= 1 @active_battler = $game_party.actors[@actor_index] @active_battler.blink = true # 如果角色是在无法接受指令的状态就再试 end until @active_battler.inputable? # 设置角色的命令窗口 if Game_Actor::AI.include?(@active_battler.id)#@active_battler.id !=1 #AI同伴 phase3_prior_actor else phase3_setup_command_window end end end
QQ截图20160120004254.png (6.2 KB, 下载次数: 16)
291.93 KB, 下载次数: 44
FloatDomainError
若想将正负无穷或NaN(Not a Number)变为Bignum,或与NaN进行比较时就会引发该异常。
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |