战斗分析
- 战斗需要的数据(怪物)
- 首先需要怪物组id列表,决定玩家打几组怪物
- 打的回合数
- 攻击者的战斗列表
- 怪物的等级列表
- 客户端的其他数据(地图,是否负伤, 阵法id)
- 法则数据列表
- 初始血量列表
需知前提
- 怪物同样需要构造战斗列表,战力一般都是通过属性计算的
- 注意站位信息,3人的队伍,可能前排一个,也有可能前排两个,有啥不同呢,因为打前排和打后排伤害是不同的。
- 战斗最好在里面有动态测试标志。
得到攻击者和防御者的列表
数据结构为
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16figh_list = {
baseList = {},
}
baseList = {
modelInfo = {},
propData = {},
skillList = {},
passiveSkillList = {},
gemInfo = {},
assistantInfo = {},
assistantPropData = {},
assistantSkillList = {},
assistantPassive = {},
}首先遍历怪物列表,得到怪物的战斗属性,怪物超过五个的话,还有个
defex结构
战斗计算所需要的一些数据
- 攻击者的战斗列表,防御者的战斗列表,
attackex,defex,回合数,测试标志,地图id,攻击者的队伍类型站位,防御者的队伍站位,法则数据,多少回合结束算赢。
做在agent里面的战斗
- 使用
_G.fightData= {},这里为啥可以这样做呢,因为agent服务是一个单线程的lua虚拟机,使用一定会按顺序计算战斗。
战斗计算流程
清除被动技能数据列表
拷贝一份战斗数据,数据结构如下
1
2
3propFight = table.deepcopy(propData)
baseList.propData = table.deepcopy(propData)
figh_list.baseList.propFight.baseList = figh_list.baseList写入战报站位信息以及地图信息
1
2--写入站位信息及地图id {攻方站位类型(0: 5人站位, 1: 3人站位 2: 1人站位), 守方站位类型, 地图id, 回合上限数, 攻方阵法id, 守方阵法id},
table_insert(fightLog, {attackTeamType or 0, defTeamType or 0, mapId or 0, cycNum, (attack.zhenFa and attack.zhenFa[1] or 0), (def.zhenFa and def.zhenFa[1] or 0)})写入战报战斗初始信息,比如弟子血量和弟子法宝能量
写入战报后援数量,就是
attackEx和defEx大于一回合的时候才判断下重生和复活的技能,不可能第一回合就重生的,第一回合的时候,激活一下第一回的被动技能,其他回合判断一下循环的被动技能