赞 | 352 |
VIP | 55 |
好人卡 | 9 |
积分 | 364 |
经验 | 117206 |
最后登录 | 2024-11-24 |
在线时间 | 10800 小时 |
Lv5.捕梦者
- 梦石
- 0
- 星屑
- 36442
- 在线时间
- 10800 小时
- 注册时间
- 2009-3-15
- 帖子
- 4814
|
回帖奖励 +10 星屑
#============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ # AI模块 #============================================================================== class Game_Battler attr_accessor :marks end class Game_Actor < Game_Battler AI = [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36] # 需要自动攻击的角色编号 # 物理攻击倾向指数 魔法攻击倾向指数 防御指数 什么都不做指数 Action_Index = [100,0] IQ = 100 # 智商设定,90为标准值,IQ越高,越优先攻击生命值少,防御力小的 Hp_Mark = [30,-10] # 生命值评分标准,[生命值最低的得分,步进值(负)] Df_Mark = [20,-10] # 防御值评分标准,[防御值最低的得分,步进值(负)] EQ = 100 # 情商设定,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.battle_skill.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/90.0 # index[0].to_i;index[1].to_i all = index.inject(0){|a,b|a+b}.to_i value = rand(all) action = 0 # 默认攻击 for i in 0...index.size if i > value action = i break else value -= index end end if self.sp <= self.maxsp/10 action = 2 end # 目前动作为 action case action when 0 # 攻击 # 智商检查 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.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.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 d_target=0 for enemy in $game_troop.enemies unless enemy.state?(1) d_target+=1 end end return @current_action.target_index = rand(d_target) unless tag @current_action.target_index = $game_troop.enemies.index(tag) when 1 # 魔法 # 魔法分类,对敌/对己(加持)/附着状态/解除状态 @current_action.kind = 0 return @current_action.basic = 1 if skills == [] @current_action.kind = 1 # 随机技能 @current_action.skill_id = skills[rand(skills.size)] # 确认对象 d_target=0 scope = $data_skills[@current_action.skill_id].scope for enemy in $game_troop.enemies unless enemy.state?(1) d_target+=1 end end @current_action.target_index = rand(d_target) case @scope when 1 # 敌单体 # 智商检查 enemies = $game_troop.enemies.inject([]){|a,b|a<<b if !b.hp0?;a} # 属性有效度评分 table = [0,50,25,10,0,-10,-20] for i in 0...enemies.size enemies.marks += enemies.element_ranks[@current_action.skill_id] 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 @current_action.target_index = $game_troop.enemies.index(tag) if tag when 3 # 智商检查 enemies = game_party.actors.inject([]){|a,b|a<<b if !b.hp0?;a} # 属性有效度评分 table = [0,50,25,10,0,-10,-20] for i in 0...enemies.size enemies.marks += enemies.element_ranks[@current_action.skill_id] 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 @current_action.target_index = game_party.actors.index(tag) if tag end when 2 # 防御 @current_action.basic = 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? unless @active_battler.state?(72) #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? # 设置角色的命令窗口 unless @active_battler.state?(72) #AI同伴 phase3_prior_actor else phase3_setup_command_window end end end
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
# AI模块
#==============================================================================
class Game_Battler
attr_accessor :marks
end
class Game_Actor < Game_Battler
AI = [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36] # 需要自动攻击的角色编号
# 物理攻击倾向指数 魔法攻击倾向指数 防御指数 什么都不做指数
Action_Index = [100,0]
IQ = 100 # 智商设定,90为标准值,IQ越高,越优先攻击生命值少,防御力小的
Hp_Mark = [30,-10] # 生命值评分标准,[生命值最低的得分,步进值(负)]
Df_Mark = [20,-10] # 防御值评分标准,[防御值最低的得分,步进值(负)]
EQ = 100 # 情商设定,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.battle_skill.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/90.0
# index[0].to_i;index[1].to_i
all = index.inject(0){|a,b|a+b}.to_i
value = rand(all)
action = 0 # 默认攻击
for i in 0...index.size
if i > value
action = i
break
else
value -= index
end
end
if self.sp <= self.maxsp/10
action = 2
end
# 目前动作为 action
case action
when 0 # 攻击
# 智商检查
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.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.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
d_target=0
for enemy in $game_troop.enemies
unless enemy.state?(1)
d_target+=1
end
end
return @current_action.target_index = rand(d_target) unless tag
@current_action.target_index = $game_troop.enemies.index(tag)
when 1 # 魔法
# 魔法分类,对敌/对己(加持)/附着状态/解除状态
@current_action.kind = 0
return @current_action.basic = 1 if skills == []
@current_action.kind = 1
# 随机技能
@current_action.skill_id = skills[rand(skills.size)]
# 确认对象
d_target=0
scope = $data_skills[@current_action.skill_id].scope
for enemy in $game_troop.enemies
unless enemy.state?(1)
d_target+=1
end
end
@current_action.target_index = rand(d_target)
case @scope
when 1 # 敌单体
# 智商检查
enemies = $game_troop.enemies.inject([]){|a,b|a<<b if !b.hp0?;a}
# 属性有效度评分
table = [0,50,25,10,0,-10,-20]
for i in 0...enemies.size
enemies.marks += enemies.element_ranks[@current_action.skill_id]
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
@current_action.target_index = $game_troop.enemies.index(tag) if tag
when 3
# 智商检查
enemies = game_party.actors.inject([]){|a,b|a<<b if !b.hp0?;a}
# 属性有效度评分
table = [0,50,25,10,0,-10,-20]
for i in 0...enemies.size
enemies.marks += enemies.element_ranks[@current_action.skill_id]
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
@current_action.target_index = game_party.actors.index(tag) if tag
end
when 2 # 防御
@current_action.basic = 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?
unless @active_battler.state?(72)
#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?
# 设置角色的命令窗口
unless @active_battler.state?(72)
#AI同伴
phase3_prior_actor
else
phase3_setup_command_window
end
end
end
|
|