BattleManager = {} local this = BattleManager local PassiveSkillLogicConfig = ConfigManager.GetConfig(ConfigName.PassiveSkillLogicConfig) local SkillLogicConfig = ConfigManager.GetConfig(ConfigName.SkillLogicConfig) local HeroConfig = ConfigManager.GetConfig(ConfigName.HeroConfig) local MonsterGroup = ConfigManager.GetConfig(ConfigName.MonsterGroup) local MonsterConfig = ConfigManager.GetConfig(ConfigName.MonsterConfig) local CombatControl = ConfigManager.GetConfig(ConfigName.CombatControl) local MainLevelConfig = ConfigManager.GetConfig(ConfigName.MainLevelConfig) local BattleEventConfig = ConfigManager.GetConfig(ConfigName.BattleEventConfig) local FormationConfig = ConfigManager.GetConfig(ConfigName.FormationConfig) local MotherShipPlaneConfig =ConfigManager.GetConfig(ConfigName.MotherShipPlaneConfig) local function pairsByKeys(t) local a = {} for n in pairs(t) do if n then a[#a+1] = n end end table.sort(a, function( op1, op2 ) local type1, type2 = type(op1), type(op2) local num1, num2 = tonumber(op1), tonumber(op2) if ( num1 ~= nil) and (num2 ~= nil) then return num1 < num2 elseif type1 ~= type2 then return type1 < type2 elseif type1 == "string" then return op1 < op2 elseif type1 == "boolean" then return op1 -- 以上处理: number, string, boolean else -- 处理剩下的: function, table, thread, userdata return tostring(op1) < tostring(op2) -- tostring后比较字符串 end end) local i = 0 return function() i = i + 1 return a[i], t[a[i]] end end function this.PrintBattleTable(tb) local indent_str = "{" local count = 0 for k,v in pairs(tb) do count = count + 1 end for k=1, #tb do local v = tb[k] if type(v) == "table" then indent_str = indent_str .. this.PrintBattleTable(v) elseif type(v) == "string" then indent_str = indent_str .. "\""..tostring(v) .. "\"" else indent_str = indent_str .. tostring(v) end if k < count then indent_str = indent_str.."," end end local index = 0 for k,v in pairsByKeys(tb) do index = index + 1 if type(k) ~= "number" then if type(v) == "table" then indent_str = string.format("%s%s=%s", indent_str, tostring(k), this.PrintBattleTable(v)) elseif type(v) == "string" then indent_str = string.format("%s%s=\"%s\"", indent_str, tostring(k), tostring(v)) else indent_str = string.format("%s%s=%s", indent_str, tostring(k), tostring(v)) end if index < count then indent_str = indent_str .. "," end end end indent_str = indent_str .. "}" return indent_str end function this.Initialize() --加载相关模块 local files = ReloadFile("Modules/Battle/Config/LuaFileConfig") LoadLuaFiles(files) BattleManager.ResetCVDatas() end --获取技能数据(战斗用) function this.GetSkillData(skillId, pos,leaderskill,leaderlv) pos = pos or 0 if not skillId or not SkillLogicConfig[skillId] then return end local skill = {skillId} --skill = {skillId, 命中时间, 持续时间, 伤害次数, {目标id1, 效果1, 效果2, ...},{目标id2, 效果3, 效果4, ...}, ...} --效果 = {效果类型id, 效果参数1, 效果参数2, ...} local target = SkillLogicConfig[skillId].Target local effectList = SkillLogicConfig[skillId].Effect local effectArgsList = SkillLogicConfig[skillId].EffectValue local repeatAttackTimes = 0--SkillLogicConfig[skillId].Repeat local EffectCombat = CombatControl[SkillLogicConfig[skillId].SkillDisplay] local index = 1 skill[1] = skillId skill[2] = EffectCombat.KeyFrame/1000 local SkillDurationSecound = {} for i = 1, #EffectCombat.SkillDuration do table.insert(SkillDurationSecound, EffectCombat.SkillDuration[i] / 1000) end skill[3] = SkillDurationSecound skill[4] = EffectCombat.SkillNumber skill[5] = EffectCombat.ReturnTime skill[6] = EffectCombat.CastBullet skill[7] = repeatAttackTimes local _isleader = false local ext = {slot = SkillLogicConfig[skillId].Slot, cd = SkillLogicConfig[skillId].CD, release = SkillLogicConfig[skillId].release, isCannon = EffectCombat.IsCannon, isLeaderSkill = _isleader, lv = 0 } if leaderskill then --测试数据 ext.isLeaderSkill = leaderskill ext.slot = pos ext.cd = 4 ext.release = pos ext.sort = pos ext.lv = leaderlv -- LogError("ADD ".. ext.slot) end skill[8] = ext for i = 1, #effectList do local effectGroup = { target[i][1] } -- 效果目标 for j = 1, #effectList[i] do local effect = { effectList[i][j] } -- 效果Id for k = 1, #effectArgsList[index] do effect[k + 1] = effectArgsList[index][k] -- 效果参数 end effectGroup[j + 1] = effect index = index + 1 end skill[i + 8] = effectGroup end --IgnoreControl==1表示无视技能 skill[-1] = SkillLogicConfig[skillId].IgnoreControl return skill end function this.GetPassivityData(passivityList) local pList = {} if not passivityList then return pList end -- 遍历被动,检查是否有要覆盖的被动技能 local orderList = {} local coverList = {} for i = 1, #passivityList do local passiveId = tonumber(passivityList[i]) local cfg = PassiveSkillLogicConfig[passiveId] -- 判断技能是否在战斗中生效 -- if cfg and cfg.EffectiveRange == 1 then -- -- 判断是否有需要覆盖的被动技能 -- local coverId = cfg.CoverID -- if coverId and coverId ~= 0 then -- if orderList[coverId] then -- orderList[coverId] = nil -- end -- coverList[coverId] = 1 -- end -- --> 最初数据格式passivity={{90,22,0.1,1}} -- --> 此处已错误 passivity={{{90,90},{22,0.1,1},{26,0.05,1}}} -- --> 但是战斗处解析被动数据时按照上面规则进行解析了 后端已按此传数据 暂时不动 后续需要需修正 -- -- 判断该被动技能是否已经被覆盖 -- if not coverList[passiveId] then -- -- 没有被覆盖,数据加入 -- local pass = {} -- if cfg and cfg.Type ~= 0 then -- pass[1] = cfg.Type -- for j = 1, #cfg.Value do -- pass[j + 1] = cfg.Value[j] -- end -- orderList[passiveId] = pass -- end -- end -- end if cfg then -- 判断是否有需要覆盖的被动技能 local coverId = cfg.CoverID if coverId and coverId ~= 0 then if orderList[coverId] then orderList[coverId] = nil end coverList[coverId] = 1 end --> 最初数据格式passivity={{90,22,0.1,1}} --> 此处已错误 passivity={{{90,90},{22,0.1,1},{26,0.05,1}}} --> 但是战斗处解析被动数据时按照上面规则进行解析了 后端已按此传数据 暂时不动 后续需要需修正 --> 应对EffectiveRange 修改为数组修改 -- 判断该被动技能是否已经被覆盖 if not coverList[passiveId] then -- 没有被覆盖,数据加入 local pass = {} local j = 2 for idx, v in ipairs(cfg.Type) do if cfg.EffectiveRange[idx] == 1 and v ~= 0 then if pass[1] == nil then pass[1] = {} end table.insert(pass[1], v) pass[j] = cfg.Value[idx] j = j + 1 end end if next(pass) ~= nil then orderList[passiveId] = pass end end end end -- 构建数据 for _, passive in pairs(orderList) do table.insert(pList, passive) end return pList end -- --> deprecated -- --获取怪物数据(战斗用) -- function this.GetMonsterData(monsterId) -- local monsterConfig = MonsterConfig[monsterId] -- return { -- roleId = monsterConfig.MonsterId, -- monsterId = monsterId, --非战斗数据,仅用于显示怪物名称 -- professionId = monsterConfig.Profession, -- size = monsterConfig.Size, -- camp = 1, -- type = 1, -- quality = 0, -- skill = this.GetSkillData(monsterConfig.SkillList[1]), -- superSkill = this.GetSkillData(monsterConfig.SkillList[2]), -- element = monsterConfig.PropertyName, -- passivity = this.GetPassivityData(monsterConfig.PassiveSkillList), -- property = { -- monsterConfig.Level, -- monsterConfig.Hp, -- monsterConfig.Hp, -- monsterConfig.Attack, -- monsterConfig.PhysicalDefence, -- monsterConfig.MagicDefence, -- monsterConfig.Speed, -- monsterConfig.DamageBocusFactor, -- monsterConfig.DamageReduceFactor, -- monsterConfig.Hit, -- monsterConfig.Dodge, -- monsterConfig.CritFactor, -- monsterConfig.CritDamageFactor, -- monsterConfig.AntiCritDamageFactor, -- monsterConfig.TreatFacter, -- monsterConfig.CureFacter, -- monsterConfig.DifferDemonsBocusFactor, -- monsterConfig.DifferDemonsReduceFactor, -- monsterConfig.ElementDamageReduceFactor[1], -- monsterConfig.ElementDamageReduceFactor[2], -- monsterConfig.ElementDamageReduceFactor[3], -- monsterConfig.ElementDamageReduceFactor[4], -- monsterConfig.ElementDamageReduceFactor[5], -- monsterConfig.ElementDamageReduceFactor[6], -- monsterConfig.ElementDamageBonusFactor, -- }, -- ai = monsterConfig.MonsterAi, -- star = monsterConfig.Star, -- level = monsterConfig.Level -- } -- end ---获取服务端传过来的战斗数据和随机数种子 ---参数2 isFightPlayer 0和怪物对战 1和玩家对战 ---> fightId 关卡id 随机加入副系统战斗单位(支援 副官) function this.GetBattleServerData(msg, isFightPlayer, fightId) BattleManager.ResetCVDatas() local fightData = { playerData = { teamSkill = {}, teamPassive = {}, firstCamp = 0}, tibuData = {}, enemyData = { }, fightUnitData = {}, leaderData = {}, fightUnitDataAppend = {}, tankDataAppend = {}, noUnitDataAppend = {} } isFightPlayer = isFightPlayer == 1 local data = msg.fightData.heroFightInfos local elementIds = {} local setPlayerItemData = function(fightUnit,istibu) local rid = tonumber(fightUnit.unitId) local position = tonumber(fightUnit.position) local star = tonumber(fightUnit.star) -- if rid == 0 then --to do add check yh 模拟数据 -- rid = 10006 -- star = 5 -- position = 9 -- fightUnit.unitSkillIds = "22301#22313#22333#22323#22343" --- lv hp maxhp -- fightUnit.property = "255#432093#432093#41941#1827#0#1521#0.0#0.0#1.0#0.0#0.1#1.5#0.0#0.1#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0" --340#1208430#118239#2359#0#2100#1208430#0.0#0.0#1.0#0.0#0.25#1.5#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0#0#0.0#0.0#0.0#0.0#0.0#0.0 #0.0#0.0#0.0#0.0#0.0#0.0#0.0 -- end -- 340 -- 915423#915423#116098#2355#0#2294#0.15#0.15#1.0 -- 0.0#0.45#1.6#0.15#0.0#0.0#0.0#0.0#0.0#0.0 -- 0.0#0.0 #0.0#0.0 #0.0#0.0#0.0#0.0#0.0#0.0 -- 0.0#0.0 #0.0#0.0 #0.1#0.0#0.0#0.0#0.1 local Reflact = { [1]={"Level"," --等级"}, [2]={"Hp"," --生命"}, [3]={"MaxHp"," --最大生命"}, [4]={"Attack"," --攻击力"}, [5]={"PhysicalDefence","--护甲"}, [6]={"MagicDefence","--魔抗"}, [7]={"Speed","--速度"}, [8]={"DamageBocusFactor"," --伤害加成系数(%)"}, [9]={"DamageReduceFactor"," --伤害减免系数(%)"}, [10]={"Hit"," --施法率(%"}, [11]={"Dodge"," --后期基础施法率(%)"}, [12]={"Crit"," --暴击率(%)"}, [13]={"CritDamageFactor"," --暴击伤害系数(%)"}, [14]={"Tenacity"," --抗暴率(%)"}, [15]={"TreatFacter","--治疗加成系数(%)"}, [16]={"CureFacter","--受到治疗加成系数(%)"}, [17]={"PhysicalDamage","--< 物伤"}, [18]={"MagicDamage","--< 法伤"}, [19]={"PhysicalImmune","--< 物免"}, [20]={"MagicImmune","--< 法免"}, [21]={"SpeedAddition"," --< 速度加成"}, [22]={"AttackAddition","--< 攻击加成"}, [23]={"ArmorAddition"," --< 护甲加成"}, [24]={"ControlProbability"," --< 控制几率"}, [25]={"ControlResist","--< 控制抵抗"}, [26]={"SkillDamage","--< 技能伤害"}, [27]={"DamageToMage"," --< 对高爆型伤害"}, [28]={"DamageToFighter","--< 对穿甲型伤害"}, [29]={"DamageToDefender","--< 对防御型伤害"}, [30]={"DamageToHealer","--< 对辅助型伤害"}, [31]={"DefenceFromFighter","--< 受穿甲型伤害降低"}, [32]={"DefenceFromMage","--< 受高爆型伤害降低"}, [33]={"DefenceFromDefender","--< 受防御型伤害降低"}, [34]={"DefenceFromHealer","--< 受辅助型伤害降低"}, [35]={"CriDamageReduceRate","--< 暴伤抵抗"}, [36]={"HealCritical","--< 修理暴击"}, [37]={"HealCriEffect","--< 修理暴击效果"}, [38]={"MaxHpPercentage","--< 生命加成"}, [39]={"other","--< temp"}, [40]={"other","--< temp"}, [41]={"other","--< temp"}, [42]={"other","--< temp"}, [43]={"other","--< temp"}, [44]={"other","--< temp"}, } local skills = string.split(fightUnit.unitSkillIds, "#") local propertys = string.split(fightUnit.property, "#") -- LogError("fightUnit.property:"..tostring(fightUnit.property)) local role = { roleId = rid, position = position, star = star, camp = 0, type = 1, quality = 0, element = HeroConfig[rid].PropertyName, professionId = HeroConfig[rid].Profession, size = 1, passivity = { }, property = { }, isTibu = istibu, leader = false } if not istibu and not role.leader then table.insert(elementIds, role.element) end -- if skills[1] then -- role.skill = this.GetSkillData(tonumber(skills[1])) -- end -- if skills[2] and skills[2] ~= "0" then -- role.superSkill = this.GetSkillData(tonumber(skills[2])) -- end --> role.skillArray = {} local passivityList = {} local idx = 1 for i = 1, #skills do if skills[i] and skills[i] ~= 0 then --> 0 1 3 主动技 --if i - 1 == SkillSlotPos.Slot_0 or i - 1 == SkillSlotPos.Slot_1 or i - 1 == SkillSlotPos.Slot_3 then if i <= 3 then role.skillArray[idx] = this.GetSkillData(tonumber(skills[i])) idx = idx + 1 -- table.insert(role.skillArray, this.GetSkillData(tonumber(skills[i]))) else local passivityId = tonumber(skills[i]) for j = 1,#passivityList do if PassiveSkillLogicConfig[passivityList[j]].Group == PassiveSkillLogicConfig[passivityId].Group then if PassiveSkillLogicConfig[passivityList[j]].Level < PassiveSkillLogicConfig[passivityId].Level then table.remove(passivityList,j) else passivityId = nil end break end end if passivityId ~= nil then table.insert(passivityList, passivityId) end end end end --做个普攻技能检查 if role.skillArray[1] == nil then LogError("配表错误!!!进攻方普攻未找到 roleId:" .. role.roleId .. " 普攻技能id:" .. tonumber(skills[1])) end -- role.passivity, role.passivityIds = this.GetPassivityData(passivityList) role.passivity = this.GetPassivityData(passivityList) role.passivityIds = passivityList -- if #skills > 2 then -- local passivityList = {} -- for j = 3, #skills do -- table.insert(passivityList, tonumber(skills[j])) -- end -- role.passivity = this.GetPassivityData(passivityList) -- end for j = 1, #propertys do role.property[j] = tonumber(propertys[j]) -- LogError(j.."prop:"..tostring(role.property[j])) end return role end for i = 1, #data.fightUnitList do fightData.playerData[i] = setPlayerItemData(data.fightUnitList[i],false) end -- 替补数据条件 to do yh check if data.substitute.unitId ~= "" then fightData.tibuData[1] = setPlayerItemData(data.substitute,true) end this.SetFightElement(0, elementIds) -- local teamSkills = string.split(data.teamSkillList, "|") --异妖位置1#技能id1|异妖位置2#技能id2|.. -- for i = 1, #teamSkills do -- local s = string.split(teamSkills[i], "#") -- fightData.playerData.teamSkill[i] = this.GetSkillData(tonumber(s[2]), tonumber(s[1])) -- end -- -- local teamPassives = string.split(data.teamPassiveList, "|") -- for i = 1, #teamPassives do -- local s = string.split(teamPassives[i], "#") -- local teamPassiveList = {} -- for j = 1, #s do -- teamPassiveList[j] = tonumber(s[j]) -- end -- fightData.playerData.teamPassive[i] = this.GetPassivityData(teamPassiveList) -- end -- 一些战斗外数据 fightData.playerData.outData = data.specialPassive --> 支援 if data.useSupportId and data.useSupportId ~= 0 and data.useSupportId ~= "" then this.AddUnitDataByType(data.useSupportId, fightData.fightUnitData, data.supportSkillLevel, FightUnitType.UnitSupport, 0) end --> 副官 if data.useAdjutantId and data.useAdjutantId ~= 0 and data.useAdjutantId ~= "" then this.AddUnitDataByType(data.useAdjutantId, fightData.fightUnitData, data.adjutantSkillLevel, FightUnitType.UnitAdjutant, 0) end -- 模拟数据 local setPlayerLeaderItemDate = function(fightUnit,_camp) local rid = 1 local position = 99 local star = 0 local allPro = {10,10,10,10,10,10} if fightUnit ~= nil then allPro = string.split(fightUnit.property, "#") end local propertys = { allPro[1],-- Level, allPro[2] and allPro[2] or 0,-- Hp, allPro[3] and allPro[3] or 0,-- Hp, allPro[4] and allPro[4] or 0,-- Attack, allPro[5] and allPro[5] or 0,-- PhysicalDefence, 0,-- MagicDefence, allPro[7] and allPro[7] or 0,-- Speed, 0,-- DamageBocusFactor, 0,-- DamageReduceFactor, allPro[10] and allPro[10] or 0,-- Hit, 0,-- Dodge, 0,-- CritFactor, 0,-- CritDamageFactor, 0,-- AntiCritDamageFactor, 0,-- TreatFacter, 0,-- CureFacter, 0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 } --AircraftCarrierManager.GetFightDataProperty() 对应读表方法 local role = { roleId = rid, position = position, star = star, camp = _camp, type = 1, quality = 0, element = 0, professionId = 0, size = 1, passivity = { }, property = { }, isTibu = false, leader = true, leaderSkillUnlock = 0 } --data.motherShipInfo.plan --id (string) 战机ID --cfgId (int32) 战机表ID (服务器需要切换为技能id脚本中没有此数据!!!) --sort (int32) 穿戴顺序 --skillid (string)技能id -- 技能等级通过id反向读表 todo 需要修改读取方式 role.leaderSkillUnlock = fightUnit.unlockSkillSize local skills = fightUnit.plan role.skillArray = {} if false then --true测试数据 if _camp == 0 then skills = string.split("910111#911012#910513#910714", "#")--910111 else skills = string.split("910915#911011#911111#911211", "#") end local idx = 1 for i = 1, #skills do role.skillArray[idx] = this.GetSkillData(tonumber(skills[i]),i,true,1) idx = idx + 1 end else local idx = 1 for i = 1, #fightUnit.plan do local plane = fightUnit.plan[i] local id = plane.cfgId local lv = MotherShipPlaneConfig[id].Lvl role.skillArray[idx] = this.GetSkillData(tonumber(plane.leaderSkill),plane.sort,true,lv) idx = idx + 1 Log(i.." skilld>>> "..plane.leaderSkill.." plane.sort:"..plane.sort) end --非测试数据方法 读取方式根据数据结构决定 end for j = 1, #propertys do role.property[j] = tonumber(propertys[j]) end return role end -- 数据结构 -- data.motherShipInfo -- Id (int32) -- property (string) -- plan (MotherShipPlan) 技能数据 if data.motherShipInfo and #data.motherShipInfo.plan > 0 then fightData.leaderData["A"] = setPlayerLeaderItemDate(data.motherShipInfo,0) end --data.motherShipInfo.plan --id (string) 战机ID --cfgId (int32) 战机表ID (服务器需要切换为技能id脚本中没有此数据!!!) --sort (int32) 穿戴顺序 -- 角色性别为非主要信息前端显示即可 -- 测试数据 test -- fightData.enemyAircraftCarrier = setPlayerLeaderItemDate(nil,1) --> 航母 if data.motherShipInfo and #data.motherShipInfo.plan > 0 then -- todo 数据结构需要调整 --> 0 1 主装备数据 2 3 ext数据 -- this.CV_equipDatas[0] = {} -- this.CV_equipDatas[2] = {} -- local infos = string.format("id:%s proprty:%s skillLen:%s", -- data.motherShipInfo.id, -- data.motherShipInfo.property, -- #data.motherShipInfo.plan) -- LogError("motherShipInfo 》》》 "..infos) for i = 1, #data.motherShipInfo.plan do -- local plane =data.motherShipInfo.plan[i] -- local planeInfo = string.format("id:%s cfgId:%s sort:%s", -- plane.id,plane.cfgId,plane.sort) -- LogError("plane>>> "..planeInfo) end local cvMineTb = {} for i = 1, #data.motherShipInfo.plan do -- local equipPlane = AircraftCarrierManager.CreateEmptyTable() -- AircraftCarrierManager.CopyValue(equipPlane, data.motherShipInfo.plan[i]) -- table.insert(this.CV_equipDatas[0], equipPlane) end -- this.CV_equipDatas[2].CVLv = data.motherShipInfo.id table.sort(this.CV_equipDatas[0], function(a, b) return a.sort < b.sort end) cvMineTb.skill = {} for i = 1, #this.CV_equipDatas[0] do -- local planeConfig = G_MotherShipPlaneConfig[this.CV_equipDatas[0][i].cfgId] -- table.insert(cvMineTb.skill, this.GetSkillData(planeConfig.Skill)) -- cvMineTb.skill[i][8].release = this.CV_equipDatas[0][i].sort --< 修改触发顺序为槽位顺序 -- --> 设置显示用到数据 需排序完数据 -- this.CV_equipDatas[0][i].release = this.CV_equipDatas[0][i].sort -- this.CV_equipDatas[0][i].cd = cvMineTb.skill[i][8].cd end -- local proArr = string.split(data.motherShipInfo.property, "#") -- cvMineTb.property = {} -- for j = 1, #proArr do -- cvMineTb.property[j] = tonumber(proArr[j]) -- end -- cvMineTb.rootId = data.motherShipInfo.id --< 各系统主表id -- cvMineTb.camp = 0 -- cvMineTb.type = FightUnitType.UnitAircraftCarrier -- table.insert(fightData.fightUnitData, cvMineTb) end -- 敌方 for i = 1, #msg.fightData.monsterList do local data2 = msg.fightData.monsterList[i] fightData.enemyData[i] = { teamSkill = {}, teamPassive = {} , firstCamp = 0, } -- 判断是否先手 --fightData.enemyData[i].firstCamp = data2.firstCamp or 0 local elementIds = {} for j = 1, #data2.fightUnitList do local skills, propertys, role if not isFightPlayer then local monsterConfig = ConfigManager.GetConfigData(ConfigName.MonsterConfig, tonumber(data2.fightUnitList[j].unitId)) local position = tonumber(data2.fightUnitList[j].position) local star = tonumber(data2.fightUnitList[j].star) skills = string.split(data2.fightUnitList[j].unitSkillIds, "#") propertys = string.split(data2.fightUnitList[j].property, "#") role = { roleId = monsterConfig.MonsterId, --monsterId = tonumber(data2.fightUnitList[j].unitId), --非战斗数据,仅用于显示怪物名称 position = position, star = star, camp = 1, type = monsterConfig.Type, quality = monsterConfig.Quality, element = monsterConfig.PropertyName, ai = monsterConfig.MonsterAi, professionId = monsterConfig.Profession, size = monsterConfig.Size, passivity = { }, property = { }, } else local rid = tonumber(data2.fightUnitList[j].unitId) local position = tonumber(data2.fightUnitList[j].position) local star = tonumber(data2.fightUnitList[j].star) skills = string.split(data2.fightUnitList[j].unitSkillIds, "#") propertys = string.split(data2.fightUnitList[j].property, "#") role = { roleId = rid, position = position, star = star, camp = 1, type = 1, quality = 0, element = HeroConfig[rid].PropertyName, professionId = HeroConfig[rid].Profession, size = 1, passivity = { }, property = { }, } end table.insert(elementIds, role.element) -- HeroConfig[role.roleId].OpenSkillRules -- this.GetSkillUnlockLv(skillpos, _star, _break) --> role.skillArray = {} local passivityList = {} local idx = 1 for i = 1, #skills do if skills[i] and skills[i] ~= 0 then --> 0 1 3 主动技 --> monster 技能顺序为 三个主动后面全是被动11011...格式 -- if i - 1 == SkillSlotPos.Slot_0 or i - 1 == SkillSlotPos.Slot_1 or i - 1 == SkillSlotPos.Slot_3 then if i <= 3 then role.skillArray[idx] = this.GetSkillData(tonumber(skills[i])) idx = idx + 1 -- table.insert(role.skillArray, this.GetSkillData(tonumber(skills[i]))) else table.insert(passivityList, tonumber(skills[i])) end end end --做个普攻技能检查 if role.skillArray[1] == nil then LogError("配表错误!!!防守方普攻未找到 roleId:" .. role.roleId .. " 普攻技能id:" .. tonumber(skills[1])) end -- role.passivity, role.passivityIds = this.GetPassivityData(passivityList) role.passivity = this.GetPassivityData(passivityList) role.passivityIds = passivityList -- if skills[1] then -- role.skill = this.GetSkillData(tonumber(skills[1])) -- end -- if skills[2] and skills[2] ~= "0" then -- role.superSkill = this.GetSkillData(tonumber(skills[2])) -- end -- if #skills > 2 then -- local passivityList = {} -- for k = 3, #skills do -- table.insert(passivityList, tonumber(skills[k])) -- end -- role.passivity = this.GetPassivityData(passivityList) -- end for k = 1, #propertys do role.property[k] = tonumber(propertys[k]) end fightData.enemyData[i][j] = role -- break end local setEnemyItemData = function(fightUnit,istibu) local rid = tonumber(fightUnit.unitId) local position = tonumber(fightUnit.position) local star = tonumber(fightUnit.star) local skills = string.split(fightUnit.unitSkillIds, "#") local propertys = string.split(fightUnit.property, "#") local role = { roleId = rid, position = -1, star = star, camp = 1, type = 1, quality = 0, element = HeroConfig[rid].PropertyName, professionId = HeroConfig[rid].Profession, size = 1, passivity = { }, property = { }, isTibu = istibu, } if not istibu then table.insert(elementIds, role.element) end role.skillArray = {} local passivityList = {} local idx = 1 for i = 1, #skills do if skills[i] and skills[i] ~= 0 then if i <= 3 then role.skillArray[idx] = this.GetSkillData(tonumber(skills[i])) idx = idx + 1 else local passivityId = tonumber(skills[i]) for j = 1,#passivityList do if PassiveSkillLogicConfig[passivityList[j]].Group == PassiveSkillLogicConfig[passivityId].Group then if PassiveSkillLogicConfig[passivityList[j]].Level < PassiveSkillLogicConfig[passivityId].Level then table.remove(passivityList,j) else passivityId = nil end break end end if passivityId ~= nil then table.insert(passivityList, passivityId) end end end end --做个普攻技能检查 if role.skillArray[1] == nil then LogError("配表错误!!!进攻方普攻未找到 roleId:" .. role.roleId .. " 普攻技能id:" .. tonumber(skills[1])) end role.passivity = this.GetPassivityData(passivityList) role.passivityIds = passivityList for j = 1, #propertys do role.property[j] = tonumber(propertys[j]) end return role end -- 敌方替补测试数据 真是数据 if data2.substitute.unitId ~= "" then if data.substitute.unitId == "" then fightData.tibuData[1] = setEnemyItemData(data2.substitute,true) else fightData.tibuData[2] = setEnemyItemData(data2.substitute,true) end end if i == 1 then this.SetFightElement(1, elementIds) end -- local teamSkills2 = string.split(data2.teamSkillList, "|") --异妖位置1#技能id1|异妖位置2#技能id2|.. -- for j = 1, #teamSkills2 do -- local s = string.split(teamSkills2[j], "#") -- fightData.enemyData[i].teamSkill[j] = this.GetSkillData(tonumber(s[2]), tonumber(s[1])) -- end -- 一些战斗外数据 fightData.enemyData[i].outData = data2.specialPassive --> 支援 if data2.useSupportId and data2.useSupportId ~= 0 and data2.useSupportId ~= "" then this.AddUnitDataByType(data2.useSupportId, fightData.fightUnitData, data2.supportSkillLevel, FightUnitType.UnitSupport, 1) end --> 副官 if data2.useAdjutantId and data2.useAdjutantId ~= 0 and data2.useAdjutantId ~= "" then -- LogError("skillLv:"..data2.adjutantSkillLevel) this.AddUnitDataByType(data2.useAdjutantId, fightData.fightUnitData, data2.adjutantSkillLevel, FightUnitType.UnitAdjutant, 1) end --> 航母主角 if data2.motherShipInfo and #data2.motherShipInfo.plan > 0 then fightData.leaderData["B"] = setPlayerLeaderItemDate(data2.motherShipInfo,1) end --> 航母 if data2.motherShipInfo and #data2.motherShipInfo.plan > 0 then --> 0 1 主装备数据 2 3 ext数据 -- this.CV_equipDatas[1] = {} -- this.CV_equipDatas[3] = {} -- local cvMineTb = {} -- for i = 1, #data2.motherShipInfo.plan do -- local equipPlane = AircraftCarrierManager.CreateEmptyTable() -- AircraftCarrierManager.CopyValue(equipPlane, data2.motherShipInfo.plan[i]) -- table.insert(this.CV_equipDatas[1], equipPlane) -- end -- this.CV_equipDatas[3].CVLv = data2.motherShipInfo.id -- table.sort(this.CV_equipDatas[1], function(a, b) -- return a.sort < b.sort -- end) -- cvMineTb.skill = {} -- for i = 1, #this.CV_equipDatas[1] do -- local planeConfig = G_MotherShipPlaneConfig[this.CV_equipDatas[1][i].cfgId] -- table.insert(cvMineTb.skill, this.GetSkillData(planeConfig.Skill)) -- cvMineTb.skill[i][8].release = this.CV_equipDatas[1][i].sort --< 修改触发顺序为槽位顺序 -- --> 设置显示用到数据 需排序完数据 -- this.CV_equipDatas[1][i].release = this.CV_equipDatas[1][i].sort -- this.CV_equipDatas[1][i].cd = cvMineTb.skill[i][8].cd -- end -- local proArr = string.split(data2.motherShipInfo.property, "#") -- cvMineTb.property = {} -- for j = 1, #proArr do -- cvMineTb.property[j] = tonumber(proArr[j]) -- end -- cvMineTb.rootId = data2.motherShipInfo.id --< 各系统主表id -- cvMineTb.camp = 1 -- cvMineTb.type = FightUnitType.UnitAircraftCarrier -- table.insert(fightData.fightUnitData, cvMineTb) end end --> 关卡插入 if fightId then local stageData = MainLevelConfig[fightId] if stageData then if stageData.BattleEvent and #stageData.BattleEvent > 0 then local temp = {} for i = 1, #stageData.BattleEvent do local becId = stageData.BattleEvent[i] if becId and BattleEventConfig[becId] then if #BattleEventConfig[becId].Event ~= 5 then LogError("### BattleEventConfig[i].Event not 5") end local typeId = BattleEventConfig[becId].Event[1] if (typeId == FightUnitType.UnitSupport or typeId == FightUnitType.UnitAircraftCarrier or typeId == FightUnitType.UnitAdjutant) then --< 类型判断 坦克类型不加入 table.insert(temp, {}) for j = 1, #BattleEventConfig[becId].Event do table.insert(temp[#temp], tonumber(BattleEventConfig[becId].Event[j])) end table.insert(temp[#temp], tonumber(BattleEventConfig[becId].Dialogue)) end end end --> 1 FightUnitType 2 rootId 3 skilllv 4 camp 5 round -- local temp = {{1, 1, 1, 0, 3}, {3, 1, 1, 1, 2}} for i = 1, #temp do this.AddUnitDataByType(temp[i][2], fightData.fightUnitDataAppend, temp[i][3], temp[i][1], temp[i][4]) fightData.fightUnitDataAppend[i].round = temp[i][5] fightData.fightUnitDataAppend[i].client_dialogue = temp[i][6] --< 只在客户端用 模拟战斗中不能用 end end else LogError(string.format("BattleManager stageData nil fightId is %s", tostring(fightId))) end else end --> 关卡插入 坦克类型 if fightId then local stageData = MainLevelConfig[fightId] if stageData then local msgTankAppendData = msg.fightData.temporaryUnit if #msgTankAppendData > 0 then local dialogueIdx = 1 for j = 1, #msgTankAppendData do local dialogue = 0 for k = 1, #stageData.BattleEvent do if BattleEventConfig[stageData.BattleEvent[k]].Event[1] == 4 and dialogueIdx == j then --< 4类型为tank dialogue = BattleEventConfig[stageData.BattleEvent[k]].Dialogue dialogueIdx = dialogueIdx + 1 end end local skills, propertys, role local monsterConfig = ConfigManager.GetConfigData(ConfigName.MonsterConfig, tonumber(msgTankAppendData[j].unitId)) skills = string.split(msgTankAppendData[j].unitSkillIds, "#") propertys = string.split(msgTankAppendData[j].property, "#") role = { roleId = monsterConfig.MonsterId, position = tonumber(msgTankAppendData[j].position), star = monsterConfig.Star, camp = tonumber(msgTankAppendData[j].camp), type = monsterConfig.Type, quality = monsterConfig.Quality, element = monsterConfig.PropertyName, ai = monsterConfig.MonsterAi, professionId = monsterConfig.Profession, size = monsterConfig.Size, passivity = { }, property = { }, round = tonumber(msgTankAppendData[j].round), client_dialogue = dialogue --< 只在客户端用 模拟战斗中不能用 } role.skillArray = {} local passivityList = {} local idx = 1 for i = 1, #skills do if skills[i] and skills[i] ~= 0 then --> 0 1 3 主动技 --> monster 技能顺序为 三个主动后面全是被动11011...格式 if i <= 3 then role.skillArray[idx] = this.GetSkillData(tonumber(skills[i])) idx = idx + 1 else table.insert(passivityList, tonumber(skills[i])) end end end -- role.passivity, role.passivityIds = this.GetPassivityData(passivityList) role.passivity = this.GetPassivityData(passivityList) role.passivityIds = passivityList for k = 1, #propertys do role.property[k] = tonumber(propertys[k]) end fightData.tankDataAppend[j] = role end end --插入无战斗单位进入的聊天对话 if stageData.BattleEvent then local dialogue = 0 local dialogueRound = 0 for k = 1, #stageData.BattleEvent do local battleEvent = BattleEventConfig[stageData.BattleEvent[k]] if battleEvent.Event[1] == 0 then --< 0类型为不需要插入战斗单位 dialogue = battleEvent.Dialogue dialogueRound = battleEvent.Event[5] local noUnitData = { round = dialogueRound, client_dialogue = dialogue --< 只在客户端用 模拟战斗中不能用 } table.insert(fightData.noUnitDataAppend, noUnitData) end end end else LogError(string.format("BattleManager stageData append tank nil fightId is %s", tostring(fightId))) end end local data = { fightData = fightData, fightSeed = msg.fightData.fightSeed, fightType = msg.fightData.fightType, maxRound = msg.fightData.fightMaxTime, } -- 本地模拟战斗 -- data.fightSeed = 1661235986 -- {enemyData={{ -- {ai={0},size=1,start=0,camp=1,element=4, --passivity={{{369},{6,1,0.3,2}},{{371},{6,2,0.09}},{{385},{2,23,1,0.01,10}}}, --passivityIds={40423,60353,60302,60242,60291,60372,810251},position=2,professionId=1, --property={221,591983,591983,46673,1907,0,1646,0.1,0.185,1.025,0.02,0.17,1.545,0.11,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.02,0.105,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}, --quality=0,roleId=10062,round=0, --skillArray={ --{40401,0.4,{0},1,1300,0,0, --{cd=0,isCannon=0,release=1,slot=0}, --{400000,{1,1,1}}}, --{40413,0.57,{0.2,0.2},3,2200,0,0,{cd=3,isCannon=0,release=1,slot=1}, --{200000,{1,0.99,1},{3,0.3,1,2}}}, --{40433,2,{0.4},2,3000,0,0,{cd=3,isCannon=0,release=2,slot=3}, --{100000,{213,1,2,12,0.2}}}},type=4}, --skill = {skillId, 命中时间, 持续时间, 伤害次数, {目标id1, 效果1, 效果2, ...},{目标id2, 效果3, 效果4, ...}, ...} --效果 = {效果类型id, 效果参数1, 效果参数2, ...} -- {ai={0},size=1,start=0,camp=1,element=3,passivity={{{369},{6,1,0.3,2}},{{371},{6,2,0.09}},{{385},{2,23,1,0.01,10}}},passivityIds={10223,60353,60302,60242,60291,60372,810251},position=4,professionId=1,property={221,475696,475696,44650,1852,0,1527,0.1,0.185,1.025,0.02,0.17,1.545,0.11,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.02,0.105,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0},quality=0,roleId=10038,round=0,skillArray={{10201,0.4,{0.263},2,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{10213,0.99,{0},1,1700,0,0,{cd=1,isCannon=0,release=1,slot=1},{210000,{10,2.06,1,0.3}}},{10233,1.15,{0},1,2600,0,0,{cd=3,isCannon=0,release=2,slot=3},{300000,{4,23,0.25,2,1},{4,6,0.25,2,1}}}},type=3}, -- {ai={0},size=1,start=0,camp=1,element=4,passivity={{{334},{1,0.5,1,10,2}},{{369},{18,1,0.2,2}},{{357},{0.2,3}},{{368},{2,4,0.2}},{{360},{0.2,4,4,0.1,2}},{{377},{0.031,5}},{{385},{2,4,1,10,10}}},passivityIds={40723,40743,60423,60152,60332,60181,60042,90202,810351},position=6,professionId=2,property={221,416745,416745,64048,1573,0,1710,0.185,0.05,1.025,0.02,0.255,1.715,0.025,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.07,0.02,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0},quality=0,roleId=10065,round=0,skillArray={{40701,0.53,{0},1,1200,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{40713,1.4,{0.08,0.08,0.24},4,3100,0,0,{cd=3,isCannon=0,release=1,slot=1},{200000,{1,1.28,2},{254,0.5,1,5,4,0.1,3}}},{40733,3.65,{0.397,0.66},3,6300,0,0,{cd=3,isCannon=0,release=2,slot=3},{200000,{1,1.51,2},{230,5,0.45,1,2},{231,5,0.2,1,2}}}},type=4}, -- {ai={0},size=1,start=0,camp=1,element=2,passivity={{{319},{5,1,0.25,9,1,0.15,1,0.8}},{{369},{17,1,0.2,2}},{{368},{2,4,0.2}},{{358},{12,0.3,0.2,1,2}},{{385},{2,4,1,10,10}}},passivityIds={30223,30243,60413,60092,60332,60161,60052,810351},position=7,professionId=3,property={221,397484,397484,64600,1462,0,1640,0.185,0.05,1.025,0.02,0.255,1.715,0.025,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.07,0.02,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0},quality=0,roleId=10020,round=0,skillArray={{30201,0.4,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{30213,0.85,{0},1,1700,0,0,{cd=3,isCannon=0,release=1,slot=1},{250002,{235,2,22,1,0.3},{1,2.1,1},{3,0.59,2,1}}},{30233,0.95,{0},1,2100,0,0,{cd=3,isCannon=0,release=2,slot=3},{200111,{232,1,0.4,2,5,1,0.25},{1,3.75,1},{226,12,0.25}}}},type=2}, -- {ai={0},size=1,start=0,camp=1,element=3,passivity={{{369},{6,1,0.3,2}},{{365},{0.45,4}},{{366},{12,0.04}},{{385},{2,27,1,0.01,10}}},passivityIds={11121,60353,60232,60252,60241,60312,810651},position=9,professionId=4,property={221,447306,447306,54316,1575,0,1447,0.1,0.135,1.025,0.02,0.17,1.545,0.11,0.05,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.02,0.105,0.0,0.0,0.0,0.0,0.0,0.05,0.0,0.0,0.0,0.0,0.0,0.0},quality=0,roleId=10047,round=0,skillArray={{11101,0.4,{0},1,1100,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{11111,1.1,{0},1,1800,0,0,{cd=1,isCannon=0,release=1,slot=1},{400000,{1,1.7,2},{254,0.3,1,1,4,0.3,2}}},{11131,1.9,{0},1,2400,0,0,{cd=3,isCannon=0,release=2,slot=3},{100112,{24,1,2.47}}}},type=3},teamPassive={},teamSkill={}}}, -- fightUnitData={{camp=0,property={},rootId=5,skill={{80404,2.5,{0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.15},10,4800,0,0,{cd=2,isCannon=0,release=3,slot=1},{200002,{272,4992},{275,0.16,1,2}}}},type=1},{},{},{},{},{}}, -- playerData={{camp=0,size=1,element=3,passivity={{{300},{9,1,0.2,18,1,0.2,1}},{{358},{12,0.3,0.2,1,2}},{{350},{2,0.2,0.5,24,4,0.5}},{{366},{12,0.06}}},passivityIds={10123,10143,60161,60031,60012,60253},position=1,professionId=2,property={251,527538,527538,75309,1693,0,1783,0.045,0,1.01,0.01,0.31,1.62,0.01,0,0,0,0,0,0,0,0,0,0.01,0.01,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10037,skillArray={{10101,1,{0},1,1400,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{10113,2.4,{0.096,0.147,0.257},4,4600,0,0,{cd=1,isCannon=0,release=1,slot=1},{200000,{1,1,2},{211,0.5,1,20,4,0.2,2}}},{10133,2.456,{0.45,0.45,0.45},4,5300,0,0,{cd=3,isCannon=0,release=2,slot=3},{200000,{1,1.58,2},{254,1,1,1,4,0.15,2}}}},type=1}, -- {camp=0,size=1,element=2,passivity={{{319},{5,1,0.2,9,1,0.1,0.6,0.8}},{{358},{12,0.3,0.2,1,2}},{{370},{1,0.3}}},passivityIds={30223,30242,60161,60363,60083},position=3,professionId=3,property={205,283091,283091,54873,1347,0,1454,0.1,0,1.01,0.01,0.415,2.03,0.01,0,0,0,0,0,0,0,0,0,0.01,0.01,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10020,skillArray={{30201,0.4,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{30213,0.85,{0},1,1700,0,0,{cd=3,isCannon=0,release=1,slot=1},{250002,{235,2,22,1,0.3},{1,2.1,1},{3,0.59,2,1}}},{30233,0.95,{0},1,2100,0,0,{cd=3,isCannon=0,release=2,slot=3},{200111,{232,1,0.4,2,5,1,0.25},{1,3.75,1},{226,12,0.25}}}},type=1}, -- {camp=0,size=1,element=1,passivity={{{313},{0.08}},{{367},{0.12,12,0.1,3}}},passivityIds={20321,20341,60261},position=4,professionId=4,property={100,90937,90937,11665,755,0,696,0,0,1.01,0.01,0.11,1.52,0.01,0,0,0,0,0,0,0,0,0,0.01,0.01,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10004,skillArray={{20301,0.55,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{20311,1.05,{0.15,0.15,0.15,0.15},5,2000,0,0,{cd=1,isCannon=0,release=1,slot=1},{240000,{211,0.5,1,6,3,0.2,2},{1,0.87,2}}},{20331,1.7,{0},1,2700,0,0,{cd=3,isCannon=0,release=2,slot=3},{100000,{263,0.1,2,1}}}},type=1}, -- {camp=0,size=1,element=2,passivity={{{367},{0.12,12,0.1,3}},{{354},{8,2,0.25,2}}},passivityIds={30523,30542,60261,60113},position=6,professionId=2,property={185,220444,220444,31271,1386,0,1256,0.045,0.15,1.01,0.01,0.16,1.62,0.01,0,0,0,0,0,0,0,0,0,0.01,0.01,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10023,skillArray={{30501,0.48,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{30513,0.5,{0.1,0.47},3,1900,0,0,{cd=3,isCannon=0,release=1,slot=1},{200000,{1,1.44,2},{3,0.25,1,2}}},{30532,1.03,{0.25,0.25,0.25,0.45,0.85},6,4000,0,0,{cd=3,isCannon=0,release=2,slot=3},{200000,{239,1,5,1,0.2},{1,1.38,2}}}},type=1}, -- {camp=0,size=1,element=5,passivity={{{347},{5,1,0.12}},{{370},{1,0.25}},{{358},{12,0.3,0.2,1,2}}},passivityIds={50722,50742,60362,60161},position=8,professionId=3,property={149,191168,191168,24197,1205,0,1121,0.1,0,1.01,0.01,0.315,1.73,0.01,0,0,0,0,0,0,0,0,0,0.01,0.01,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10082,skillArray={{50701,0.35,{0},1,1200,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{50713,0.73,{0},1,1400,0,0,{cd=3,isCannon=0,release=1,slot=1},{200003,{1,1.71,1},{261,0.72,3,1,0.15,2}}},{50732,0.6,{0.1,0.1,0.1,0.6,0.1,0.55},7,2700,0,0,{cd=3,isCannon=0,release=2,slot=3},{400000,{264,3,1,6,3,0.2},{1,3.13,1}}}},type=1}, -- firstCamp=0,outData="",teamPassive={},teamSkill={}},tankDataAppend={}} -- data.fightSeed = 1661307997 -- data.fightData={enemyData={{{ai={0},camp=1,element=3,passivity={{{369},{6,1,0.3,2}},{{371},{6,2,0.09}},{{385},{2,23,1,0.01,10}}},passivityIds={11521,60353,60302,60242,60291,60372,810251},position=1,professionId=1,property={224,520414,520414,47645,1877,0,1519,0.1,0.19,1.025,0.02,0.17,1.545,0.115,0,0,0,0,0,0,0,0,0,0.03,0.11,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10051,size=1,skillArray={{11501,0.35,{0.29},2,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{11511,0.5,{0.25,0.3,0.2,0.4},5,2800,0,0,{cd=1,isCannon=0,release=1,slot=1},{400000,{10,1.4,1,1}}},{11531,1.2,{0},1,2200,0,0,{cd=3,isCannon=0,release=2,slot=3},{100321,{220,0.4,2,3}},{300000,{211,1,1,23,2,0.3,2}}}},star=0,type=3},{ai={0},camp=1,element=1,passivity={{{371},{6,2,0.09}},{{314},{12,0.55,6,1,0.3}},{{369},{6,1,0.3,2}},{{385},{2,23,1,0.01,10}},{{315},{1,5,12,0.07,1}}},passivityIds={20623,20633,20643,60353,60302,60242,60291,60372,810251},position=3,professionId=1,property={224,514137,514137,48389,1808,0,1576,0.1,0.19,1.025,0.02,0.17,1.545,0.115,0,0,0,0,0,0,0,0,0,0.03,0.11,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10007,size=1,skillArray={{20601,0.38,{0},1,1000,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{20613,0.86,{0},1,2200,0,0,{cd=0,isCannon=0,release=1,slot=1},{230000,{219,1.56,1,0.9,4,2,1.04,1,1,1,0.15}}}},star=0,type=1},{ai={0},camp=1,element=4,passivity={{{368},{2,4,0.2}},{{360},{0.2,4,4,0.1,2}},{{357},{0.2,3}},{{369},{18,1,0.2,2}},{{385},{2,4,1,10,10}}},passivityIds={40921,60423,60152,60332,60181,60042,810351},position=5,professionId=2,property={224,550424,550424,68697,1597,0,1713,0.19,0.05,1.025,0.02,0.26,1.725,0.025,0,0,0,0,0,0,0,0,0,0.08,0.02,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10067,size=1,skillArray={{40901,0.68,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{40911,1.7,{0},1,2000,0,0,{cd=1,isCannon=0,release=1,slot=1},{400000,{1,1.68,2},{3,0.2,1,2}}},{40931,1.1,{0},1,2300,0,0,{cd=3,isCannon=0,release=2,slot=3},{200000,{1,1.29,2},{3,0.2,1,2}}}},star=0,type=4},{ai={0},camp=1,element=4,passivity={{{368},{2,4,0.2}},{{360},{0.2,4,4,0.1,2}},{{357},{0.2,3}},{{369},{18,1,0.2,2}},{{385},{2,4,1,10,10}}},passivityIds={40921,60423,60152,60332,60181,60042,810351},position=7,professionId=2,property={224,458687,458687,68697,1597,0,1713,0.19,0.05,1.025,0.02,0.26,1.725,0.025,0,0,0,0,0,0,0,0,0,0.08,0.02,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10067,size=1,skillArray={{40901,0.68,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{40911,1.7,{0},1,2000,0,0,{cd=1,isCannon=0,release=1,slot=1},{400000,{1,1.68,2},{3,0.2,1,2}}},{40931,1.1,{0},1,2300,0,0,{cd=3,isCannon=0,release=2,slot=3},{200000,{1,1.29,2},{3,0.2,1,2}}}},star=0,type=4},{ai={0},camp=1,element=4,passivity={{{369},{6,1,0.3,2}},{{365},{0.45,4}},{{385},{2,27,1,0.01,10}},{{366},{12,0.04}}},passivityIds={41221,60353,60232,60252,60241,60312,810651},position=9,professionId=4,property={224,514370,514370,56030,1651,0,1594,0.1,0.14,1.025,0.02,0.17,1.545,0.115,0.1802,0,0,0,0,0,0,0,0,0.03,0.11,0,0,0,0,0,0.05,0,0,0,0,0,0},quality=0,roleId=10070,size=1,skillArray={{41201,0.46,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{41211,0.5,{0},1,1600,0,0,{cd=1,isCannon=0,release=1,slot=1},{100111,{24,1,1.18}}},{41231,2,{0},1,2400,0,0,{cd=3,isCannon=0,release=2,slot=3},{100000,{24,1,0.98},{211,1,1,22,1,0.2,2}}}},star=0,type=4},firstCamp=0,outData="",teamPassive={},teamSkill={}}},fightUnitData={},fightUnitDataAppend={},noUnitDataAppend={},playerData={{camp=0,element=4,passivity={},passivityIds={40423},position=2,professionId=1,property={255,657846,657846,47322,1890,0,1696,0,0.23,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10062,size=1,skillArray={{40401,0.4,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{40413,0.57,{0.2,0.2},3,2200,0,0,{cd=3,isCannon=0,release=1,slot=1},{200000,{1,0.99,1},{3,0.3,1,2}}},{40433,2,{0.4},2,3000,0,0,{cd=3,isCannon=0,release=2,slot=3},{100000,{213,1,2,12,0.2}}}},star=10,type=1},{camp=0,element=4,passivity={{{334},{1,0.5,1,10,2}}},passivityIds={40723,40743},position=4,professionId=2,property={255,573956,573956,79328,1768,0,1682,0,0.03,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10065,size=1,skillArray={{40701,0.53,{0},1,1200,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{40713,1.4,{0.08,0.08,0.24},4,3100,0,0,{cd=3,isCannon=0,release=1,slot=1},{200000,{1,1.28,2},{254,0.5,1,5,4,0.1,3}}},{40733,3.65,{0.397,0.66},3,6300,0,0,{cd=3,isCannon=0,release=2,slot=3},{200000,{1,1.51,2},{230,5,0.45,1,2},{231,5,0.2,1,2}}}},star=10,type=1},{camp=0,element=4,passivity={{{328},{1,2.41,1}}},passivityIds={40123,40143},position=7,professionId=4,property={255,581467,581467,72085,1837,0,1667,0,0.03,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10059,size=1,skillArray={{40101,0.65,{0},1,1300,400,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{40113,1.05,{0},1,1600,0,0,{cd=3,isCannon=0,release=1,slot=1},{100324,{208,1,1,0,6},{211,1,1,22,1,0.25,2},{236,4,9,1,0.2,2}}},{40133,1.7,{0},1,2300,0,0,{cd=3,isCannon=0,release=2,slot=3},{100000,{253,20,1,0.15,2,1,0.98}}}},star=10,type=1},{camp=0,element=4,passivity={{{338,338,339},{4,22,1,0.09},{4,15,1,0.09},{1,0.15}}},passivityIds={41523,41543},position=6,professionId=3,property={255,578888,578888,81251,1806,0,1672,0,0.03,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10057,size=1,skillArray={{41501,0.45,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{41513,2.1,{0.15,0.15,0.15,0.15},5,5500,0,0,{cd=3,isCannon=0,release=1,slot=1},{270000,{1,2.07,1}},{270321,{261,0.6,6,12,0.07,2}}},{41533,0.75,{0.43,0.83,0.4},4,4200,0,0,{cd=3,isCannon=0,release=2,slot=3},{200000,{1,1.51,1}},{200211,{211,1,1,6,3,0.2,2}},{200221,{3,0.5,4,2}}}},star=10,type=1},{camp=0,element=4,passivity={{{332},{0.6,1.2,1}},{{302},{1,1,1,1}},{{331},{12,0.3}}},passivityIds={40523,40533,40543},position=9,professionId=3,property={255,516631,516631,77461,1802,0,1642,0,0.03,1,0,0.2,1.7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10063,size=1,skillArray={{40501,0.4,{0},1,1100,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{40513,1.6,{0.15,0.15,0.15,0.15,0.15},6,3000,0,0,{cd=1,isCannon=0,release=1,slot=1},{400000,{240,5,6,3,0.25},{260,1,1,23,3,0.4},{10,2.31,1,0.3}}}},star=10,type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}},tankDataAppend={}} -- {enemyData={{{camp=1,element=5,size=1,passivity={{{347},{5,1,0.15}}},passivityIds={50723,50743},position=2,professionId=3,property={340,1095843,1095843,108605,2359,0,2100,0,0,1,0,0.25,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10082,size=1,skillArray={{50701,0.35,{0},1,1200,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{50713,0.73,{0},1,1400,430,0,{cd=3,isCannon=0,release=1,slot=1},{200003,{1,1.71,1},{261,0.72,3,1,0.15,2}}},{50733,0.6,{0.1,0.1,0.1,0.6,0.1,0.55},7,2700,0,0,{cd=3,isCannon=0,release=2,slot=3},{400000,{264,3,1,6,3,0.2},{1,3.75,1},{216,0}}}},star=13,type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}}},fightUnitData={},fightUnitDataAppend={},noUnitDataAppend={}, -- playerData={{camp=0,element=2,size=1,isTibu=false,passivity={{{396},{1,10,22,1,0.03}}},passivityIds={30123,30143},position=2,professionId=3,property={340,833612,833612,115416,2145,0,2050,0,0,1,0,0.25,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10019,size=1,skillArray={{30101,0.25,{0.25},2,1350,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{30113,0.7,{0},1,1900,0,0,{cd=3,isCannon=0,release=1,slot=1},{300000,{245,2},{211,1,2,9,1,0.3,2},{211,1,1,6,1,0.25,2}}},{30133,0.3,{0.3,0.9,0.75,0.35},5,3500,0,0,{cd=3,isCannon=0,release=2,slot=3},{400000,{260,1,2,7,1,0.3},{285,4.53,1,3,0.33,2,2}}}},star=13,type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}},tankDataAppend={},tibuData={}} -- data.fightData = -- {enemyData={{{camp=1,element=5,size=1,passivity={{{347},{5,1,0.15}}},passivityIds={50723,50743},position=2,professionId=3,property={340,1095843,1095843,108605,2359,0,2100,0,0,1,0,0.25,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10082,size=1,skillArray={{50701,0.35,{0},1,1200,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{50713,0.73,{0},1,1400,430,0,{cd=3,isCannon=0,release=1,slot=1},{200003,{1,1.71,1},{261,0.72,3,1,0.15,2}}},{50733,0.6,{0.1,0.1,0.1,0.6,0.1,0.55},7,2700,0,0,{cd=3,isCannon=0,release=2,slot=3},{400000,{264,3,1,6,3,0.2},{1,3.75,1},{216,0}}}},star=13,type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}}},fightUnitData={},fightUnitDataAppend={},noUnitDataAppend={}, -- playerData={{camp=0,element=2,size=1,isTibu=false,passivity={{{396},{1,10,22,1,0.03}}},passivityIds={30123,30143},position=2,professionId=3,property={340,833612,833612,115416,2145,0,2050,0,0,1,0,0.25,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10019,size=1,skillArray={{30101,0.25,{0.25},2,1350,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{30113,0.7,{0},1,1900,0,0,{cd=3,isCannon=0,release=1,slot=1},{300000,{245,2},{211,1,2,9,1,0.3,2},{211,1,1,6,1,0.25,2}}},{30133,0.3,{0.3,0.9,0.75,0.35},5,3500,0,0,{cd=3,isCannon=0,release=2,slot=3},{400000,{260,1,2,7,1,0.3},{285,4.53,1,3,0.33,2,2}}}},star=13,type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}},tankDataAppend={},tibuData={}} -- data.fightSeed=1670224979 -- data.fightSeed=1673022464 -- data.fightData = -- {enemyData={{{ai={0},camp=1,element=3,size=1,passivity={},passivityIds={},position=2,professionId=1,property={1,199,199,65,39,0,72,0,0,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10052,size=1,skillArray={{11801,0.38,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{11811,0.61,{0},1,1500,0,0,{cd=3,isCannon=0,release=1,slot=1},{400000,{1,2.18,1}}}},star=0,type=3}, -- {ai={0},camp=1,size=1,element=2,passivity={},passivityIds={},position=8,professionId=3,property={1,207,207,60,25,0,59,0,0,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10034,size=1,skillArray={{32001,0.38,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{32011,0.83,{0},1,1700,570,0,{cd=3,isCannon=0,release=1,slot=1},{200111,{1,2.47,1}}}},star=0,type=2},firstCamp=0,outData="",teamPassive={},teamSkill={}}},fightUnitData={},fightUnitDataAppend={},noUnitDataAppend={}, -- playerData={{camp=0,size=1,element=3,isTibu=false,passivity={},passivityIds={},position=2,professionId=1,property={1,514,514,73,44,0,79,0,0,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10051,size=1,skillArray={{11501,0.35,{0.29},2,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{11511,0.5,{0.25,0.3,0.2,0.4},5,2800,0,0,{cd=1,isCannon=0,release=1,slot=1},{400000,{10,1.4,1,1}}}},star=4,type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}},tankDataAppend={},tibuData={}} -- this.Execute({seed=1661307997, type=1, maxTime=300},{enemyData={{{ai={0},camp=1,element=3,passivity={{{369},{6,1,0.3,2}},{{371},{6,2,0.09}},{{385},{2,23,1,0.01,10}}},passivityIds={11521,60353,60302,60242,60291,60372,810251},position=1,professionId=1,property={224,520414,520414,47645,1877,0,1519,0.1,0.19,1.025,0.02,0.17,1.545,0.115,0,0,0,0,0,0,0,0,0,0.03,0.11,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10051,size=1,skillArray={{11501,0.35,{0.29},2,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{11511,0.5,{0.25,0.3,0.2,0.4},5,2800,0,0,{cd=1,isCannon=0,release=1,slot=1},{400000,{10,1.4,1,1}}},{11531,1.2,{0},1,2200,0,0,{cd=3,isCannon=0,release=2,slot=3},{100321,{220,0.4,2,3}},{300000,{211,1,1,23,2,0.3,2}}}},star=0,type=3},{ai={0},camp=1,element=1,passivity={{{371},{6,2,0.09}},{{314},{12,0.55,6,1,0.3}},{{369},{6,1,0.3,2}},{{385},{2,23,1,0.01,10}},{{315},{1,5,12,0.07,1}}},passivityIds={20623,20633,20643,60353,60302,60242,60291,60372,810251},position=3,professionId=1,property={224,514137,514137,48389,1808,0,1576,0.1,0.19,1.025,0.02,0.17,1.545,0.115,0,0,0,0,0,0,0,0,0,0.03,0.11,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10007,size=1,skillArray={{20601,0.38,{0},1,1000,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{20613,0.86,{0},1,2200,0,0,{cd=0,isCannon=0,release=1,slot=1},{230000,{219,1.56,1,0.9,4,2,1.04,1,1,1,0.15}}}},star=0,type=1},{ai={0},camp=1,element=4,passivity={{{368},{2,4,0.2}},{{360},{0.2,4,4,0.1,2}},{{357},{0.2,3}},{{369},{18,1,0.2,2}},{{385},{2,4,1,10,10}}},passivityIds={40921,60423,60152,60332,60181,60042,810351},position=5,professionId=2,property={224,550424,550424,68697,1597,0,1713,0.19,0.05,1.025,0.02,0.26,1.725,0.025,0,0,0,0,0,0,0,0,0,0.08,0.02,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10067,size=1,skillArray={{40901,0.68,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{40911,1.7,{0},1,2000,0,0,{cd=1,isCannon=0,release=1,slot=1},{400000,{1,1.68,2},{3,0.2,1,2}}},{40931,1.1,{0},1,2300,0,0,{cd=3,isCannon=0,release=2,slot=3},{200000,{1,1.29,2},{3,0.2,1,2}}}},star=0,type=4},{ai={0},camp=1,element=4,passivity={{{368},{2,4,0.2}},{{360},{0.2,4,4,0.1,2}},{{357},{0.2,3}},{{369},{18,1,0.2,2}},{{385},{2,4,1,10,10}}},passivityIds={40921,60423,60152,60332,60181,60042,810351},position=7,professionId=2,property={224,458687,458687,68697,1597,0,1713,0.19,0.05,1.025,0.02,0.26,1.725,0.025,0,0,0,0,0,0,0,0,0,0.08,0.02,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10067,size=1,skillArray={{40901,0.68,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{40911,1.7,{0},1,2000,0,0,{cd=1,isCannon=0,release=1,slot=1},{400000,{1,1.68,2},{3,0.2,1,2}}},{40931,1.1,{0},1,2300,0,0,{cd=3,isCannon=0,release=2,slot=3},{200000,{1,1.29,2},{3,0.2,1,2}}}},star=0,type=4},{ai={0},camp=1,element=4,passivity={{{369},{6,1,0.3,2}},{{365},{0.45,4}},{{385},{2,27,1,0.01,10}},{{366},{12,0.04}}},passivityIds={41221,60353,60232,60252,60241,60312,810651},position=9,professionId=4,property={224,514370,514370,56030,1651,0,1594,0.1,0.14,1.025,0.02,0.17,1.545,0.115,0.1802,0,0,0,0,0,0,0,0,0.03,0.11,0,0,0,0,0,0.05,0,0,0,0,0,0},quality=0,roleId=10070,size=1,skillArray={{41201,0.46,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{41211,0.5,{0},1,1600,0,0,{cd=1,isCannon=0,release=1,slot=1},{100111,{24,1,1.18}}},{41231,2,{0},1,2400,0,0,{cd=3,isCannon=0,release=2,slot=3},{100000,{24,1,0.98},{211,1,1,22,1,0.2,2}}}},star=0,type=4},firstCamp=0,outData="",teamPassive={},teamSkill={}}},fightUnitData={},fightUnitDataAppend={},noUnitDataAppend={},playerData={{camp=0,element=4,passivity={},passivityIds={40423},position=2,professionId=1,property={255,657846,657846,47322,1890,0,1696,0,0.23,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10062,size=1,skillArray={{40401,0.4,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{40413,0.57,{0.2,0.2},3,2200,0,0,{cd=3,isCannon=0,release=1,slot=1},{200000,{1,0.99,1},{3,0.3,1,2}}},{40433,2,{0.4},2,3000,0,0,{cd=3,isCannon=0,release=2,slot=3},{100000,{213,1,2,12,0.2}}}},star=10,type=1},{camp=0,element=4,passivity={{{334},{1,0.5,1,10,2}}},passivityIds={40723,40743},position=4,professionId=2,property={255,573956,573956,79328,1768,0,1682,0,0.03,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10065,size=1,skillArray={{40701,0.53,{0},1,1200,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{40713,1.4,{0.08,0.08,0.24},4,3100,0,0,{cd=3,isCannon=0,release=1,slot=1},{200000,{1,1.28,2},{254,0.5,1,5,4,0.1,3}}},{40733,3.65,{0.397,0.66},3,6300,0,0,{cd=3,isCannon=0,release=2,slot=3},{200000,{1,1.51,2},{230,5,0.45,1,2},{231,5,0.2,1,2}}}},star=10,type=1},{camp=0,element=4,passivity={{{328},{1,2.41,1}}},passivityIds={40123,40143},position=7,professionId=4,property={255,581467,581467,72085,1837,0,1667,0,0.03,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10059,size=1,skillArray={{40101,0.65,{0},1,1300,400,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{40113,1.05,{0},1,1600,0,0,{cd=3,isCannon=0,release=1,slot=1},{100324,{208,1,1,0,6},{211,1,1,22,1,0.25,2},{236,4,9,1,0.2,2}}},{40133,1.7,{0},1,2300,0,0,{cd=3,isCannon=0,release=2,slot=3},{100000,{253,20,1,0.15,2,1,0.98}}}},star=10,type=1},{camp=0,element=4,passivity={{{338,338,339},{4,22,1,0.09},{4,15,1,0.09},{1,0.15}}},passivityIds={41523,41543},position=6,professionId=3,property={255,578888,578888,81251,1806,0,1672,0,0.03,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10057,size=1,skillArray={{41501,0.45,{0},1,1300,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{41513,2.1,{0.15,0.15,0.15,0.15},5,5500,0,0,{cd=3,isCannon=0,release=1,slot=1},{270000,{1,2.07,1}},{270321,{261,0.6,6,12,0.07,2}}},{41533,0.75,{0.43,0.83,0.4},4,4200,0,0,{cd=3,isCannon=0,release=2,slot=3},{200000,{1,1.51,1}},{200211,{211,1,1,6,3,0.2,2}},{200221,{3,0.5,4,2}}}},star=10,type=1},{camp=0,element=4,passivity={{{332},{0.6,1.2,1}},{{302},{1,1,1,1}},{{331},{12,0.3}}},passivityIds={40523,40533,40543},position=9,professionId=3,property={255,516631,516631,77461,1802,0,1642,0,0.03,1,0,0.2,1.7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10063,size=1,skillArray={{40501,0.4,{0},1,1100,0,0,{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{40513,1.6,{0.15,0.15,0.15,0.15,0.15},6,3000,0,0,{cd=1,isCannon=0,release=1,slot=1},{400000,{240,5,6,3,0.25},{260,1,1,23,3,0.4},{10,2.31,1,0.3}}}},star=10,type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}},tankDataAppend={}}) -- data.fightData = -- {enemyData={{ -- {camp=1,element=5,size=1,passivity={},passivityIds={},position=1,professionId=1,property={38,3277,3277,426,308,0,337,0,0,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10081,skillArray={{"50601",0.68,{0},1,1300,0,"0",{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{"50611",0.3,{0.15,0.15,0.15,0.15,0.6},6,2200,0,"0",{cd=1,isCannon=0,release=1,slot=1},{210001,{1,1.23,1},{268,1,2,1,0.3}}}},type=1}, -- {camp=1,element=3,size=1,passivity={},passivityIds={},position=3,professionId=1,property={38,3086,3086,396,302,0,321,0,0,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10038,skillArray={{"10201",0.4,{0.263},2,1300,0,"0",{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{"10211",0.99,{0},1,1700,0,"0",{cd=1,isCannon=0,release=1,slot=1},{210000,{10,1.45,1,0.1}}}},type=1}, -- {camp=1,element=1,size=1,passivity={},passivityIds={},position=5,professionId=3,property={38,2661,2661,557,278,0,313,0,0,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10008,skillArray={{"20701",1.05,{0},1,1300,0,"0",{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{"20711",1.2,{0},1,1700,0,"0",{cd=1,isCannon=0,release=1,slot=1},{200000,{1,0.9,1},{254,0.3,1,2,3,0.2,2}}}},type=1}, -- {camp=1,element=4,size=1,passivity={},passivityIds={},position=7,professionId=4,property={38,3085,3085,508,306,0,337,0,0,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10060,skillArray={{"40201",0.56,{0},1,1200,0,"0",{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{"40211",1.5,{0},1,2200,0,"0",{cd=1,isCannon=0,release=1,slot=1},{100000,{24,1,0.69},{214,1,2,6,1,0.15,14,1,0.25,11,1,0,2}}}},type=1}, -- {camp=1,element=4,size=1,passivity={},passivityIds={},position=9,professionId=1,property={38,3227,3227,425,311,0,345,0,0,1,0,0.1,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10062,skillArray={{"40401",0.4,{0},1,1300,0,"0",{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{"40411",0.57,{0.2,0.2},3,2200,0,"0",{cd=3,isCannon=0,release=1,slot=1},{200000,{1,0.69,1},{3,0.1,1,2}}}},type=1},firstCamp=1,outData="",teamPassive={},teamSkill={}}}, -- fightUnitData={{},{},{},{},{},{}}, -- leaderData={{camp=0,property={"65","88111","88111","23713","611","0","294","0.0","0.0","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0","0","0.0"}, -- rootId=65,size=1, -- skill={{"910914",1.1,{0},1,2000,0,"0",{cd=3,isCannon=0,release=1,slot=0,sort="1"},{200111,{281,7.41,1,1}}},{"910613",1.1,{0},1,2000,0,"0",{cd=3,isCannon=0,release=2,slot=0,sort="2"},{100113,{4,13,0.42,2,2},{211,1,1,13,2,0.05,2},{212,1,1,15,1,0.09,6,1,0.09,2},{232,1,0.3,1,14,1,1.5}}},{"910112",2.5,{0},1,4000,0,"0",{cd=3,isCannon=0,release=3,slot=0,sort="3"},{200111,{1,3.12,2},{211,1,1,22,3,0.1,1},{261,0.05,2,1,1,1}}},{"910611",1.1,{0},1,2000,0,"0",{cd=3,isCannon=0,release=4,slot=0,sort="4"},{100113,{4,13,0.29,2,2},{211,1,1,13,2,0.04,2},{212,1,1,15,1,0.05,6,1,0.05,2},{232,1,0.3,1,14,1,1.5}}}},type=2}}, -- playerData={ -- {camp=0,element=4,size=1,passivity={{{329},{1,0.5}}},passivityIds={"40223","40243"},position=4,professionId=4,property={340,1176825,1176825,89971,2405,0,2138,0,0,1,0,0.1,1.5,0,0.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10060,skillArray={{"40201",0.56,{0},1,1200,0,"0",{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{"40213",1.5,{0},1,2200,0,"0",{cd=1,isCannon=0,release=1,slot=1},{100000,{24,1,0.99},{214,1,2,6,1,0.15,14,1,0.25,11,1,0.15,2}}},{"40233",2.4,{0},1,3000,0,"0",{cd=3,isCannon=0,release=2,slot=3},{700111,{221,1,1.58,1,2.3}}}},type=1}, -- {camp=0,element=2,size=1,passivity={},passivityIds={"30723","30743"},position=2,professionId=4,property={340,957687,957687,87201,2188,0,2048,0,0,1,0,0.1,1.5,0,0.15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10025,skillArray={{"30701",0.4,{0},1,1200,0,"0",{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{"30713",1.8,{0},1,2400,0,"0",{cd=1,isCannon=0,release=1,slot=1},{100000,{24,1,0.81},{211,1,1,22,1,0.3,2}}},{"30733",1.5,{0},1,2500,0,"0",{cd=3,isCannon=0,release=2,slot=3},{700111,{221,1,1.58,1,2.3}}}},type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}},tibuData={}} --skillArray={{"50601",0.68,{0},1,1300,0,"0",{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,1}}},{"50611",0.3,{0.15,0.15,0.15,0.15,0.6},6,2200,0,"0",{cd=1,isCannon=0,release=1,slot=1},{210001,{1,1.23,1},{268,1,2,1,0.3}}}} --skillArray={{"910914",1.1,{0},1,2000,0,"0",{cd=3,isCannon=0,release=1,slot=0,sort="1"},{200111,{281,7.41,1,1}}},{"910613",1.1,{0},1,2000,0,"0",{cd=3,isCannon=0,release=2,slot=0,sort="2"},{100113,{4,13,0.42,2,2},{211,1,1,13,2,0.05,2},{212,1,1,15,1,0.09,6,1,0.09,2},{232,1,0.3,1,14,1,1.5}}},{"910112",2.5,{0},1,4000,0,"0",{cd=3,isCannon=0,release=3,slot=0,sort="3"},{200111,{1,3.12,2},{211,1,1,22,3,0.1,1},{261,0.05,2,1,1,1}}},{"910611",1.1,{0},1,2000,0,"0",{cd=3,isCannon=0,release=4,slot=0,sort="4"},{100113,{4,13,0.29,2,2},{211,1,1,13,2,0.04,2},{212,1,1,15,1,0.05,6,1,0.05,2},{232,1,0.3,1,14,1,1.5}}}} local op1 = { seed = msg.fightData.fightSeed, -- seed= data.fightSeed, type = msg.fightData.fightType, maxTime = msg.fightData.fightMaxTime, } local op2 = fightData -- if op1.type~=BATTLE_TYPE.CollectMaterials then --屏蔽简化一些 -- this.Execute(op1, data.fightData) -- end return data end function this.AddUnitDataByType(rootId, parentTable, skillLv, type, camp) local configData = nil local skillid = nil if skillLv == 0 then skillLv = 1 end if type == FightUnitType.UnitSupport then configData = ConfigManager.GetConfigDataByDoubleKey(ConfigName.ArtifactSkillConfig, "ArtifactId", rootId, "SkillLevel", skillLv<=31 and skillLv or 31) skillid = configData.SkillId elseif type == FightUnitType.UnitAdjutant then configData = ConfigManager.GetConfigDataByDoubleKey(ConfigName.AdjutantSkillConfig, "AdjutantId", rootId, "SkillLvl", skillLv<=11 and skillLv or 11) skillid = configData.Skill_Id end local fightUnitMine = {} fightUnitMine.skill = {} table.insert(fightUnitMine.skill, this.GetSkillData(skillid)) fightUnitMine.property = {0,0,0,0,0, 0,0,0,0,10000, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0} fightUnitMine.rootId = rootId --< 各系统主表id fightUnitMine.camp = camp fightUnitMine.type = type table.insert(parentTable, fightUnitMine) end --> 获取次级属性初始值 function this.GetSecondaryFactorValue(monsterConfig, propertyId) for i = 1, #monsterConfig.SecondaryFactor do if monsterConfig.SecondaryFactor[i][1] == propertyId then return monsterConfig.SecondaryFactor[i][2] / 10000 end end return 0 end --todo --> 获取hero战斗数据 可分阵营 function this.GetHeroFightData(monsterId, camp) local monsterConfig = MonsterConfig[monsterId] local role = { roleId = monsterConfig.MonsterId, star = monsterConfig.Star, camp = camp, type = monsterConfig.Type, quality = monsterConfig.Quality, element = monsterConfig.PropertyName, professionId = monsterConfig.Profession, size = monsterConfig.Size, passivity = {}, property = { monsterConfig.Level, monsterConfig.Hp, monsterConfig.Hp, monsterConfig.Attack, monsterConfig.PhysicalDefence, monsterConfig.MagicDefence, monsterConfig.Speed, this.GetSecondaryFactorValue(monsterConfig, 51), this.GetSecondaryFactorValue(monsterConfig, 52), this.GetSecondaryFactorValue(monsterConfig, 53), this.GetSecondaryFactorValue(monsterConfig, 54), this.GetSecondaryFactorValue(monsterConfig, 55), this.GetSecondaryFactorValue(monsterConfig, 56), this.GetSecondaryFactorValue(monsterConfig, 60), this.GetSecondaryFactorValue(monsterConfig, 58), this.GetSecondaryFactorValue(monsterConfig, 57), this.GetSecondaryFactorValue(monsterConfig, 151), this.GetSecondaryFactorValue(monsterConfig, 153), this.GetSecondaryFactorValue(monsterConfig, 152), this.GetSecondaryFactorValue(monsterConfig, 154), this.GetSecondaryFactorValue(monsterConfig, 65), this.GetSecondaryFactorValue(monsterConfig, 62), this.GetSecondaryFactorValue(monsterConfig, 63), this.GetSecondaryFactorValue(monsterConfig, 155), this.GetSecondaryFactorValue(monsterConfig, 156), this.GetSecondaryFactorValue(monsterConfig, 200), this.GetSecondaryFactorValue(monsterConfig, 201), this.GetSecondaryFactorValue(monsterConfig, 202), this.GetSecondaryFactorValue(monsterConfig, 203), this.GetSecondaryFactorValue(monsterConfig, 160), this.GetSecondaryFactorValue(monsterConfig, 161), this.GetSecondaryFactorValue(monsterConfig, 162), this.GetSecondaryFactorValue(monsterConfig, 163), this.GetSecondaryFactorValue(monsterConfig, 164), this.GetSecondaryFactorValue(monsterConfig, 167), this.GetSecondaryFactorValue(monsterConfig, 168), this.GetSecondaryFactorValue(monsterConfig, 169), this.GetSecondaryFactorValue(monsterConfig, 170), this.GetSecondaryFactorValue(monsterConfig, 150), this.GetSecondaryFactorValue(monsterConfig, 165), this.GetSecondaryFactorValue(monsterConfig, 166), this.GetSecondaryFactorValue(monsterConfig, 61) }, } role.skillArray = {} local passivityList = {} --> 主 for i = 1, #monsterConfig.SkillList do table.insert(role.skillArray, this.GetSkillData(monsterConfig.SkillList[i])) end --> 被 for i = 1, #monsterConfig.PassiveSkillList do table.insert(passivityList, monsterConfig.PassiveSkillList[i]) end role.passivity = this.GetPassivityData(passivityList) return role end --> 获取monster战斗数据 可分阵营 function this.GetMonsterFightData(monsterId, camp) local monsterConfig = MonsterConfig[monsterId] local role = { roleId = monsterConfig.MonsterId, star = monsterConfig.Star, camp = camp, type = monsterConfig.Type, quality = monsterConfig.Quality, element = monsterConfig.PropertyName, professionId = monsterConfig.Profession, size = monsterConfig.Size, passivity = {}, property = { monsterConfig.Level, monsterConfig.Hp, monsterConfig.Hp, monsterConfig.Attack, monsterConfig.PhysicalDefence, monsterConfig.MagicDefence, monsterConfig.Speed, this.GetSecondaryFactorValue(monsterConfig, 51), this.GetSecondaryFactorValue(monsterConfig, 52), this.GetSecondaryFactorValue(monsterConfig, 53), this.GetSecondaryFactorValue(monsterConfig, 54), this.GetSecondaryFactorValue(monsterConfig, 55), this.GetSecondaryFactorValue(monsterConfig, 56), this.GetSecondaryFactorValue(monsterConfig, 60), this.GetSecondaryFactorValue(monsterConfig, 58), this.GetSecondaryFactorValue(monsterConfig, 57), this.GetSecondaryFactorValue(monsterConfig, 151), this.GetSecondaryFactorValue(monsterConfig, 153), this.GetSecondaryFactorValue(monsterConfig, 152), this.GetSecondaryFactorValue(monsterConfig, 154), this.GetSecondaryFactorValue(monsterConfig, 65), this.GetSecondaryFactorValue(monsterConfig, 62), this.GetSecondaryFactorValue(monsterConfig, 63), this.GetSecondaryFactorValue(monsterConfig, 155), this.GetSecondaryFactorValue(monsterConfig, 156), this.GetSecondaryFactorValue(monsterConfig, 200), this.GetSecondaryFactorValue(monsterConfig, 201), this.GetSecondaryFactorValue(monsterConfig, 202), this.GetSecondaryFactorValue(monsterConfig, 203), this.GetSecondaryFactorValue(monsterConfig, 160), this.GetSecondaryFactorValue(monsterConfig, 161), this.GetSecondaryFactorValue(monsterConfig, 162), this.GetSecondaryFactorValue(monsterConfig, 163), this.GetSecondaryFactorValue(monsterConfig, 164), this.GetSecondaryFactorValue(monsterConfig, 167), this.GetSecondaryFactorValue(monsterConfig, 168), this.GetSecondaryFactorValue(monsterConfig, 169), this.GetSecondaryFactorValue(monsterConfig, 170), this.GetSecondaryFactorValue(monsterConfig, 150), this.GetSecondaryFactorValue(monsterConfig, 165), this.GetSecondaryFactorValue(monsterConfig, 166), this.GetSecondaryFactorValue(monsterConfig, 61) }, } role.skillArray = {} local passivityList = {} --> 主 for i = 1, #monsterConfig.SkillList do table.insert(role.skillArray, this.GetSkillData(monsterConfig.SkillList[i])) end --> 被 for i = 1, #monsterConfig.PassiveSkillList do table.insert(passivityList, monsterConfig.PassiveSkillList[i]) end role.passivity = this.GetPassivityData(passivityList) return role end ---> EVE 战斗测试工具 需策划提前填写好相应的表格 MonsterGroup即可 function this.GetBattleServerDataEVE(monsterGroupId1, monsterGroupId2,round,seed) BattleManager.ResetCVDatas() local mgId1 = monsterGroupId1 local mgId2 = monsterGroupId2 local fightData = { playerData = {}, enemyData = {}, tibuData = {}, fightUnitData = {}, fightUnitDataAppend = {}, tankDataAppend = {} } --> mine local monsterConfig = MonsterGroup[mgId1] local pos = G_FormationConfig[monsterConfig.Formation].pos local Contents = monsterConfig.Contents for i = 1, #Contents do local enemyList = {} local elementIds = {} local idx = 1 for j = 1, #Contents[i] do if Contents[i][j] ~= 0 then fightData.playerData[j] = this.GetMonsterFightData(Contents[i][j], 0) fightData.playerData[j].position = pos[idx] table.insert(elementIds, fightData.playerData[j].element) end idx = idx + 1 end this.SetFightElement(0, elementIds) break --< 取一组 end --> left -- local monsterConfig = MonsterGroup[mgId1] --> enemy monsterConfig = MonsterGroup[mgId2] pos = G_FormationConfig[monsterConfig.Formation].pos Contents = monsterConfig.Contents for i = 1, #Contents do local enemyList = {} local elementIds = {} local idx = 1 for j = 1, #Contents[i] do if Contents[i][j] ~= 0 then enemyList[j] = this.GetMonsterFightData(Contents[i][j], 1) enemyList[j].position = pos[idx] table.insert(elementIds, enemyList[j].element) end idx = idx + 1 end fightData.enemyData[i] = enemyList this.SetFightElement(1, elementIds) break --< 取一组 end local myseed = tostring(os.time()):reverse():sub(1, 7) if seed~= -1 then myseed = seed end local data = { fightData = fightData, fightSeed = tonumber(myseed), fightType = 1, maxRound = round, } return data end -- --> deprecated -- --> gm之前用 -- --获取战斗数据(战斗用) -- function this.GetBattleData(formationId, monsterGroupId) -- local fightData = { -- playerData = { teamSkill = {}, teamPassive = {} }, -- enemyData = {}, -- tibuData = {}, -- } -- local pokemonInfos = FormationManager.formationList[formationId].teamPokemonInfos -- local teamHeroInfos = FormationManager.formationList[formationId].teamHeroInfos -- for i = 1, #pokemonInfos do -- fightData.playerData.teamSkill[i] = this.GetSkillData(DiffMonsterManager.GetSinglePokemonSkillIdData(pokemonInfos[i].pokemonId), pokemonInfos[i].position) -- fightData.playerData.teamPassive[i] = this.GetPassivityData(DiffMonsterManager.GetSinglePokemonPassiveSkillIdData(pokemonInfos[i].pokemonId)) -- end -- for i = 1, #teamHeroInfos do -- local heroData = HeroManager.GetSingleHeroData(teamHeroInfos[i].heroId) -- if heroData then -- local role = { -- roleId = heroData.id, -- camp = 0, -- type = 1, -- quality = 0, -- element = HeroConfig[heroData.id].PropertyName, -- professionId = heroData.profession, -- size = 1, -- --skill = this.GetSkillData(1000112), -- --superSkill = nil, -- passivity = this.GetPassivityData(this.GetTalismanSkillData(heroData.dynamicId)), -- } -- if heroData.skillIdList[1] then -- role.skill = this.GetSkillData(heroData.skillIdList[1].skillId) -- end -- if heroData.skillIdList[2] then -- role.superSkill = this.GetSkillData(heroData.skillIdList[2].skillId) -- end -- local allPassiveSkillIds = HeroManager.GetHeroAllPassiveSkillIds(heroData) -- if allPassiveSkillIds then -- role.passivity = this.GetPassivityData(allPassiveSkillIds) -- end -- -- if heroData.passiveSkillList[2] then -- -- local skillPL = this.GetPassivityData({heroData.passiveSkillList[2].skillId}) -- -- for i = 1, #skillPL do -- -- table.insert(role.passivity, skillPL[i]) -- -- end -- -- end -- role.property = HeroManager.CalculateWarAllProVal(heroData.dynamicId) -- fightData.playerData[i] = role -- end -- end -- local Contents = MonsterGroup[monsterGroupId].Contents -- for i = 1, #Contents do -- local enemyList = { teamSkill = {}, teamPassive = {} } -- for j = 1, #Contents[i] do -- enemyList[j] = this.GetMonsterData(Contents[i][j]) -- end -- fightData.enemyData[i] = enemyList -- end -- return fightData -- end -- --> deprecated -- --> before testbattle -- -- 获取我数据 -- function this.GetBattlePlayerData(fId) -- fId = fId or 1 -- 默认主线编队 -- local playerData = { teamSkill = {}, teamPassive = {} } -- -- local pokemonInfos = FormationManager.formationList[formationId].teamPokemonInfos -- -- for i = 1, #pokemonInfos do -- -- fightData.playerData.teamSkill[i] = this.GetSkillData(DiffMonsterManager.GetSinglePokemonSkillIdData(pokemonInfos[i].pokemonId), pokemonInfos[i].position) -- -- fightData.playerData.teamPassive[i] = this.GetPassivityData(DiffMonsterManager.GetSinglePokemonPassiveSkillIdData(pokemonInfos[i].pokemonId)) -- -- end -- local teamHeroInfos = FormationManager.formationList[fId].teamHeroInfos -- for i = 1, #teamHeroInfos do -- local teamData = teamHeroInfos[i] -- local heroData = HeroManager.GetSingleHeroData(teamData.heroId) -- if heroData then -- local role = { -- roleId = heroData.id, -- position = teamData.position, -- star = heroData.star, -- camp = 0, -- type = 1, -- quality = 0, -- element = HeroConfig[heroData.id].PropertyName, -- professionId = heroData.profession, -- size = 1, -- } -- if heroData.skillIdList[1] then -- role.skill = this.GetSkillData(heroData.skillIdList[1].skillId) -- end -- if heroData.skillIdList[2] then -- role.superSkill = this.GetSkillData(heroData.skillIdList[2].skillId) -- end -- local allPassiveSkillIds = HeroManager.GetHeroAllPassiveSkillIds(heroData) -- if allPassiveSkillIds then -- role.passivity = this.GetPassivityData(allPassiveSkillIds) -- end -- role.property = HeroManager.CalculateWarAllProVal(heroData.dynamicId) -- -- -- table.insert(playerData, role) -- end -- end -- return playerData -- end -- --> deprecated -- -- 根据怪物组数据 -- function this.GetBattleEnemyData(gId) -- -- body -- local enemyData = {} -- local Contents = MonsterGroup[gId].Contents -- for i = 1, #Contents do -- local enemyList = { teamSkill = {}, teamPassive = {} } -- for j = 1, #Contents[i] do -- if Contents[i][j] ~= 0 then -- local data = this.GetMonsterData(Contents[i][j]) -- data.position = j -- table.insert(enemyList, data) -- end -- end -- enemyData[i] = enemyList -- end -- return enemyData -- end --获取单个英雄装备被动技能list --function this.GetSingHeroAllEquipSkillListData(_heroId) -- local allEquipSkillList = {} -- local curHeroData = HeroManager.GetSingleHeroData(_heroId) -- if curHeroData then -- for i = 1, #curHeroData.equipIdList do -- local curEquip = EquipManager.GetSingleEquipData(curHeroData.equipIdList[i]) -- if curEquip then -- if curEquip.skillId and curEquip.skillId > 0 then -- table.insert(allEquipSkillList, curEquip.skillId) -- end -- end -- end -- end -- return allEquipSkillList --end --获取单个英雄法宝被动技能list function this.GetTalismanSkillData(_heroId) local allTalismanSkillList = {} local curHeroData = HeroManager.GetSingleHeroData(_heroId) if curHeroData then for i = 1, #curHeroData.talismanList do local curTalisman = TalismanManager.GetSingleTalismanData(curHeroData.talismanList[i]) if curTalisman then local talismanConFig = ConfigManager.GetConfigDataByDoubleKey(ConfigName.EquipTalismana, "TalismanaId", curTalisman.backData.equipId,"Level",curTalisman.star) if talismanConFig then for j = 1, #talismanConFig.OpenSkillRules do table.insert(allTalismanSkillList, talismanConFig.OpenSkillRules[j]) end end end end end return allTalismanSkillList end -- 获取技能表现 local _CombatList = {} function this.GetSkillCombat(id) if not _CombatList[id] then local combat = CombatControl[id] if not combat then return end _CombatList[id] = { Id = combat.Id, SkillType = combat.SkillType, VerticalDrawing = combat.VerticalDrawing, KeyFrame = combat.KeyFrame, Eterm = combat.Eterm, ShockScreen = combat.ShockScreen, Bullet = combat.Bullet, BulletTime = combat.BulletTime, Hit = combat.Hit, Offset = combat.Offset, skillname = combat.skillname, BeforeBullet = combat.BeforeBullet, SkillNumber = combat.SkillNumber, SkillDuration = combat.SkillDuration, BeforeOrientation = combat.BeforeOrientation, Orientation = combat.Orientation, HitOrientation = combat.HitOrientation, BeforeEffectType = combat.BeforeEffectType , EffectType = combat.EffectType , HitEffectType = combat.HitEffectType, BeforeOffset = combat.BeforeOffset, HitOffset = combat.HitOffset, SkillNameVoice = combat.SkillNameVoice, Move = combat.Move, CastBullet = combat.CastBullet, ReturnTime = combat.ReturnTime, DirectivityEff = combat.DirectivityEff, SkillSoundDelay = combat.SkillSoundDelay, SkillSound = combat.SkillSound, HitSound = combat.HitSound, FireSound = combat.FireSound, fire_smoke = combat.fire_smoke, Closeup = combat.Closeup, CloseupSound = combat.CloseupSound, IsCannon = combat.IsCannon, CloseupDuration = combat.CloseupDuration, isRecoil = combat.isRecoil, MissEff = combat.MissEff, HitArea = combat.HitArea, Animation = combat.Animation, BeforeHideActor = combat.BeforeHideActor, HideActor = combat.HideActor, PV = combat.PV, PVDuration = combat.PVDuration, isDiaup = combat.isDiaup, FriendHitEffect = combat.FriendHitEffect, } end return _CombatList[id] end function this.SetSkillCombat(id, combat) _CombatList[id] = combat end ----- 战斗控制相关 ------------------ -- 是否解锁二倍速 function this.IsUnlockBattleSpeed() return PrivilegeManager.GetPrivilegeOpenStatus(PRIVILEGE_TYPE.DoubleTimesFight) end function this.IsUnlockBattleSpeedThree() return PrivilegeManager.GetPrivilegeOpenStatus(PRIVILEGE_TYPE.ThreeTimesFight) end -- 是否解锁跳过功能 function this.IsUnlockBattlePass() -- return false return PrivilegeManager.GetPrivilegeOpenStatus(PRIVILEGE_TYPE.SkipFight) end --> 是否解锁战斗切后台 function this.IsUnlockBattleInBack() return PrivilegeManager.GetPrivilegeOpenStatus(PRIVILEGE_TYPE.BattleInBack) end -- --> 是否解锁替补 -- function this.IsUnlockBattleInBack() -- return PrivilegeManager.GetPrivilegeOpenStatus(PRIVILEGE_TYPE.BattleInBack) -- end -- 战斗暂停控制 this.IsPlay = 0 function this.StartBattle() if this.IsPlay == 0 then this.IsPlay = 1 end end function this.IsBattlePlaying() return this.IsPlay == 1 end function this.PauseBattle() if this.IsPlay == 1 then this.IsPlay = 2 end end function this.ResumeBattle() if this.IsPlay == 2 then this.IsPlay = 1 end end function this.StopBattle() this.IsPlay = 0 end function this.IsCanOperate() return this.IsPlay ~= 0 end --> battlePanelBehind this.BattleIsStart = false this.BattleIsEnd = false function BattleManager.IsInBackBattle() return BattleManager.BattleIsStart and not BattleManager.BattleIsEnd end function BattleManager.GotoFight(func) if this.IsInBackBattle() then PopupTipPanel.ShowTip(GetLanguageStrById(50014)) return else if func then func() end end end -- 战斗加速控制 BATTLE_TIME_SCALE_ZERO = 0 BATTLE_TIME_SCALE_ONE = 1.2 BATTLE_TIME_SCALE_TWO = 2.1 BATTLE_TIME_SCALE_Three = 3 this.TimeScale = 0 function this.InitTimeScale() this.TimeScale = 0 local _TimeScale = PlayerPrefs.GetFloat(PlayerManager.uid.."battleTimeScaleKey")--, BATTLE_TIME_SCALE_ONE) if _TimeScale <= 0 then _TimeScale = BATTLE_TIME_SCALE_ONE end this.SetTimeScale(_TimeScale) end function this.GetTimeScale() return this.TimeScale end function this.SetTimeScale(TimeScale) if TimeScale < 0 or not this.IsUnlockBattleSpeed() then--or this.IsFirstBattle()then TimeScale = BATTLE_TIME_SCALE_ONE end if TimeScale > BATTLE_TIME_SCALE_Three then TimeScale = BATTLE_TIME_SCALE_Three end if this.TimeScale ~= TimeScale then this.TimeScale = TimeScale PlayerPrefs.SetFloat(PlayerManager.uid.."battleTimeScaleKey", this.TimeScale) -- 刷新前端显示 Game.GlobalEvent:DispatchEvent(GameEvent.Battle.OnTimeScaleChanged) -- 真正生效的敌方 Time.timeScale = TimeScale -- 设置音效播放的速度 SoundManager.SetAudioSpeed(TimeScale) end end -- 获取战斗界面层级 function this.GetBattleSorting() if UIManager.IsOpen(UIName.BattlePanel) then return BattlePanel.sortingOrder end if UIManager.IsOpen(UIName.GuideBattlePanel) then return GuideBattlePanel.sortingOrder end if not BattleManager.BattleIsEnd then return BattlePanel.sortingOrder end end -- -- 获取战斗背景 -- local bgConfig = { -- [1] = "Map2", -- [2] = "Map2", -- [3] = "Map2", -- [1001] = "Map2", -- [1002] = "Map2", -- } this.battleType = 0 function this.GetBattleBg(fightType) this.battleType = fightType if fightType == BATTLE_TYPE.STORY_FIGHT then return G_MainLevelConfig[FightPointPassManager.curOpenFight].BG elseif fightType == BATTLE_TYPE.EXECUTE_FIGHT then return "Map2" elseif fightType == BATTLE_TYPE.BACK then return "Map6" elseif fightType == BATTLE_TYPE.LADDERS or fightType == BATTLE_TYPE.CONTEND_HEGEMONY or fightType == BATTLE_TYPE.Climb_Tower or fightType == BATTLE_TYPE.Ladders_Challenge or fightType == BATTLE_TYPE.DAILY_CHALLENGE then return "Map4" elseif fightType == BATTLE_TYPE.DefenseTraining then return "Map5" elseif fightType == BATTLE_TYPE.BLITZ_STRIKE or fightType == BATTLE_TYPE.Test or fightType == BATTLE_TYPE.GUILD_CAR_DELAY then return "Map1" elseif fightType == BATTLE_TYPE.Climb_Tower_Advance then return "Map4" else return "Map2" end end -- 引导战斗暂停控制 this.isGuidePause = false function this.IsGuidePause() return this.isGuidePause end function this.SetGuidePause(isPause) this.isGuidePause = isPause end -- 声音事件 function FireSound() if GVM.soundsIdx == 0 then return end SoundManager.PlaySound(GVM.sounds[GVM.soundsIdx]) GVM.soundsIdx = GVM.soundsIdx + 1 end -- 设置战斗显示数据 this.elements = {} function this.SetFightElement(camp, _elements) this.elements[camp] = {} for i = 1, #_elements do table.insert(this.elements[camp], _elements[i]) end end -- 设置战斗对阵信息 -- struct = { -- head = 0, -- headFrame = 0, -- name = 0, -- formationId = 0 -- } BattleManager.structA = {} BattleManager.structB = {} function BattleManager.SetAgainstInfoData(fightType, _structA, _structB) this.structA = {} this.structB = {} if _structA then this.structA.head = _structA.head this.structA.headFrame = _structA.headFrame this.structA.name = _structA.name this.structA.formationId = _structA.formationId this.structA.investigateLevel = _structA.investigateLevel else this.structA.head = PlayerManager.head this.structA.headFrame = PlayerManager.frame this.structA.name = PlayerManager.nickName this.structA.formationId = FormationManager.GetFormationId() this.structA.investigateLevel = FormationCenterManager.GetInvestigateLevel() end if _structB then this.structB.head = _structB.head this.structB.headFrame = _structB.headFrame this.structB.name = _structB.name this.structB.formationId = _structB.formationId this.structB.investigateLevel = _structB.investigateLevel end end -- AI 公共对阵信息 需在编队后 function BattleManager.SetAgainstInfoAICommon(fightType, _monsterGroupId, levelName) local monsterShowId = GetMonsterGroupFirstEnemy(_monsterGroupId) local heroid = G_MonsterConfig[monsterShowId].MonsterId local image = GetResourcePath(G_HeroConfig[heroid].Icon) local structA = nil local structB = { head = tostring(image), headFrame = nil, name = levelName or GetLanguageStrById(G_MonsterGroup[_monsterGroupId].Name), formationId = G_MonsterGroup[_monsterGroupId].Formation, investigateLevel = G_MonsterGroup[_monsterGroupId].Investigate } BattleManager.SetAgainstInfoData(fightType, structA, structB) end --> 记录类型对战信息 function BattleManager.SetAgainstInfoRecordCommon(_TeamOneInfoA, _TeamOneInfoB) this.structA = {} this.structB = {} if _TeamOneInfoA then this.structA.head = _TeamOneInfoA.head this.structA.headFrame = _TeamOneInfoA.headFrame this.structA.name = _TeamOneInfoA.name this.structA.formationId = _TeamOneInfoA.formationId this.structA.investigateLevel = _TeamOneInfoA.investigateLevel else this.structA.head = PlayerManager.head this.structA.headFrame = PlayerManager.frame this.structA.name = PlayerManager.nickName this.structA.formationId = FormationManager.GetFormationId() this.structA.investigateLevel = FormationCenterManager.GetInvestigateLevel() end if _TeamOneInfoB then this.structB.head = _TeamOneInfoB.head this.structB.headFrame = _TeamOneInfoB.headFrame this.structB.name = _TeamOneInfoB.name this.structB.formationId = _TeamOneInfoB.formationId this.structB.investigateLevel = _TeamOneInfoB.investigateLevel end end function BattleManager.ResetCVDatas() BattleManager.CV_equipDatas = {} BattleManager.CV_equipDatas[0] = {} BattleManager.CV_equipDatas[1] = {} end ---创建战场 ---@param parent any 父节点 ---@return table ---@return table function BattleManager.CreateBattleScene(parent) --创建战场逻辑Prefab local battleSceneLogicPrefab = resMgr:LoadAsset("BattleSceneLogic") if battleSceneLogicPrefab == nil then LogError("资源创建失败!! 没有找到对应的资源!! Prefab:BattleScene") return end local battleSceneLogicGameObject = GameObject.Instantiate(battleSceneLogicPrefab, parent) battleSceneLogicGameObject.name = battleSceneLogicPrefab.name local battleSceneLogicTransform = battleSceneLogicGameObject.transform battleSceneLogicTransform.localScale = Vector3.one --场景战场场景Prefab local battleScenePrefab = resMgr:LoadAsset("BattleScene") if battleScenePrefab == nil then LogError("资源创建失败!! 没有找到对应的资源!! Prefab:BattleScene") return end local battleSceneGameObject = GameObject.Instantiate(battleScenePrefab, parent) battleSceneGameObject.name = battleScenePrefab.name local battleSceneTransform = battleSceneGameObject.transform battleSceneTransform.localScale = Vector3.one if Screen.height / Screen.width < 16/9 then local w = Screen.height/1920 * 1080 Camera.main.sensorSize = Vector2.New(40 * (Screen.width/w),40) end return battleSceneLogicGameObject, battleSceneGameObject end ---创建地图 ---@param battleScene any ---@param mapName any ---@return table function BattleManager.CreateMap(battleScene, mapName) local floor = Util.GetGameObject(battleScene, "Floor").transform local mapPrefab = resMgr:LoadAsset(mapName) local mapGameObject if mapPrefab ~= nil then mapGameObject = GameObject.Instantiate(mapPrefab, floor) mapGameObject.transform.localScale = Vector3.one end return mapGameObject end function this.Execute(args, fightData) local _seed = args.seed local _type = args.type local _maxRound = args.maxRound local _fightData = fightData local time = string.format("%d-%d-%d-%d-%d-%d", os.date("%Y"), os.date("%m"), os.date("%d"), os.date("%H"), os.date("%M"), os.date("%S")) local isError = false local errorCache if xpcall(function () -- 执行帧记录 BattleRecordManager.InitFrameRecord() Random.SetSeed(args.seed) BattleLogManager.WriteServerFightData(fightData, time, "BEGINP") BattleLogic.Init(fightData, optionData, _maxRound) BattleLogic.Type = _type ---- 加入监听帧同步 local function xfram() local curframe = 0 curframe = BattleLogic.CurFrame() if curframe == nil then curframe = -1 end BattleRecordManager.recordFrame(curframe) end local function xRound() local _round = 0 _round = BattleLogic.GetCurRound() if _round == nil then _round = -1 end BattleRecordManager.recordRoundBytype(_round,RecordType.RoleManager) end local function xMove() local _move = 0 _move = BattleLogic.GetMoveTimes() if _move == nil then _move = -1 end BattleRecordManager.recordRoundBytype(_move,RecordType.RoleManager) end local function XRecordResult(result) BattleRecordManager.recordResult(result) end ----加入监听帧检测计入状态值 -- BattleLogic.Event:AddEvent(BattleEventName.BattleRoundChange, xRound) BattleLogic.Event:AddEvent(BattleEventName.CheckFrame, xMove) BattleLogic.Event:AddEvent(BattleEventName.BattleEnd, XRecordResult) -- BattleLogic.Event:AddEvent(BattleEventName.BattleOrderChange, xfram) BattleLogic.StartOrder() while not BattleLogic.IsEnd do BattleLogic.Update() -- xfram() end ---- 移除监听帧检测 -- BattleLogic.Event:RemoveEvent(BattleEventName.BattleRoundChange, xRound) BattleLogic.Event:RemoveEvent(BattleEventName.CheckFrame, xMove) BattleLogic.Event:RemoveEvent(BattleEventName.BattleEnd, XRecordResult) -- BattleLogic.Event:RemoveEvent(BattleEventName.BattleOrderChange, xfram) BattleLogManager.WriteServerFightDataB(time, "ENDP") end, function (err) isError = true errorCache[1] = "error:\n"..err.."\n" end) then -- BattleLogic.useTimes = 10 BattleLogManager.WriteServerFightDataB(time, "NormalBEGINP") local resultList = {0, 0, 0, 0, 0, 0, 0, 0, 0} local enemyList = {0, 0, 0, 0, 0, 0, 0, 0, 0} local _hpRecord ={} if BattleLogic.Result == 1 then --胜利记录我方剩余血量 local arr = RoleManager.Query(function (r) return r.camp == 0 end, true) local _earr = RoleManager.Query(function (r) return r.camp == 1 end, true) for i=1, #arr do local pos = arr[i].position resultList[pos] = arr[i]:GetRoleData(RoleDataName.Hp) end for i=1, #_earr do local pos = _earr[i].position enemyList[pos] = _earr[i]:GetRoleData(RoleDataName.Hp) end for i=1, #resultList do local _set = "1my hp:"..tostring(resultList[i]).." "..i table.insert(_hpRecord,_set) end for i=1, #enemyList do local _set = "1enemy hp:"..tostring(enemyList[i]).." "..i table.insert(_hpRecord,_set) end elseif BattleLogic.Result == 0 then --失败记录敌方剩余血量 local arr = RoleManager.Query(function (r) return r.camp == 1 end, true) local _earr = RoleManager.Query(function (r) return r.camp == 0 end, true) for i=1, #arr do local pos = arr[i].position resultList[pos] = arr[i]:GetRoleData(RoleDataName.Hp) end for i=1, #_earr do local pos = _earr[i].position enemyList[pos] = _earr[i]:GetRoleData(RoleDataName.Hp) end for i=1, #resultList do local _set = "0my hp:"..tostring(resultList[i]).." "..i table.insert(_hpRecord,_set) end for i=1, #enemyList do local _set = "0enemy hp:"..tostring(enemyList[i]).." "..i table.insert(_hpRecord,_set) end end resultList.useTimes = BattleLogic.useTimes resultList.fightRound = curRound BattleLogManager.WriteServerFightDataB(time, "NormalENDP") return resultList end if isError then --捕获异常,并输出错误日志 local isLog = AppConst.isOpenBLog if not isLog then return end BattleLogManager.WriteServerFightDataB(time, "ErrorBEGINP") BattleLogManager.WriteServerFightData(errorCache,time, "ErrorLog") BattleLogManager.WriteServerFightDataB(time, "ErrorENDP") end LogRed("return -1") --注销事件 -- BattleLogic.Clear() return { result = -1 } end ---获取服务端传过来的战斗数据和随机数种子 ---参数2 isFightPlayer 0和怪物对战 1和玩家对战 ---> fightId 关卡id 随机加入副系统战斗单位(支援 副官) ------> PVE 战斗测试工具 需策划提前填写好相应的表格 MonsterGroup即可 敌方暂不支持配置替补 function this.GetTestBattleServerData(msg, isFightPlayer, monsterGroupId,round,seed) BattleManager.ResetCVDatas() local fightData = { playerData = { teamSkill = {}, teamPassive = {}, firstCamp = 0}, tibuData = {}, enemyData = { }, fightUnitData = {}, leaderData = {}, fightUnitDataAppend = {}, tankDataAppend = {}, noUnitDataAppend = {} } isFightPlayer = isFightPlayer == 1 local data = msg.fightData.heroFightInfos local elementIds = {} local setPlayerItemData = function(fightUnit,istibu) local rid = tonumber(fightUnit.unitId) local position = tonumber(fightUnit.position) local star = tonumber(fightUnit.star) -- if rid == 0 then --to do add check yh 模拟数据 -- rid = 10006 -- star = 5 -- position = 9 -- fightUnit.unitSkillIds = "22301#22313#22333#22323#22343" --- lv hp maxhp -- fightUnit.property = "255#432093#432093#41941#1827#0#1521#0.0#0.0#1.0#0.0#0.1#1.5#0.0#0.1#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0" --340#1208430#118239#2359#0#2100#1208430#0.0#0.0#1.0#0.0#0.25#1.5#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0.0#0#0#0.0#0.0#0.0#0.0#0.0#0.0 #0.0#0.0#0.0#0.0#0.0#0.0#0.0 -- end -- 340 -- 915423#915423#116098#2355#0#2294#0.15#0.15#1.0 -- 0.0#0.45#1.6#0.15#0.0#0.0#0.0#0.0#0.0#0.0 -- 0.0#0.0 #0.0#0.0 #0.0#0.0#0.0#0.0#0.0#0.0 -- 0.0#0.0 #0.0#0.0 #0.1#0.0#0.0#0.0#0.1 local Reflact = { [1]={"Level"," --等级"}, [2]={"Hp"," --生命"}, [3]={"MaxHp"," --最大生命"}, [4]={"Attack"," --攻击力"}, [5]={"PhysicalDefence","--护甲"}, [6]={"MagicDefence","--魔抗"}, [7]={"Speed","--速度"}, [8]={"DamageBocusFactor"," --伤害加成系数(%)"}, [9]={"DamageReduceFactor"," --伤害减免系数(%)"}, [10]={"Hit"," --施法率(%"}, [11]={"Dodge"," --后期基础施法率(%)"}, [12]={"Crit"," --暴击率(%)"}, [13]={"CritDamageFactor"," --暴击伤害系数(%)"}, [14]={"Tenacity"," --抗暴率(%)"}, [15]={"TreatFacter","--治疗加成系数(%)"}, [16]={"CureFacter","--受到治疗加成系数(%)"}, [17]={"PhysicalDamage","--< 物伤"}, [18]={"MagicDamage","--< 法伤"}, [19]={"PhysicalImmune","--< 物免"}, [20]={"MagicImmune","--< 法免"}, [21]={"SpeedAddition"," --< 速度加成"}, [22]={"AttackAddition","--< 攻击加成"}, [23]={"ArmorAddition"," --< 护甲加成"}, [24]={"ControlProbability"," --< 控制几率"}, [25]={"ControlResist","--< 控制抵抗"}, [26]={"SkillDamage","--< 技能伤害"}, [27]={"DamageToMage"," --< 对高爆型伤害"}, [28]={"DamageToFighter","--< 对穿甲型伤害"}, [29]={"DamageToDefender","--< 对防御型伤害"}, [30]={"DamageToHealer","--< 对辅助型伤害"}, [31]={"DefenceFromFighter","--< 受穿甲型伤害降低"}, [32]={"DefenceFromMage","--< 受高爆型伤害降低"}, [33]={"DefenceFromDefender","--< 受防御型伤害降低"}, [34]={"DefenceFromHealer","--< 受辅助型伤害降低"}, [35]={"CriDamageReduceRate","--< 暴伤抵抗"}, [36]={"HealCritical","--< 修理暴击"}, [37]={"HealCriEffect","--< 修理暴击效果"}, [38]={"MaxHpPercentage","--< 生命加成"}, [39]={"other","--< temp"}, [40]={"other","--< temp"}, [41]={"other","--< temp"}, [42]={"other","--< temp"}, [43]={"other","--< temp"}, [44]={"other","--< temp"}, } local skills = string.split(fightUnit.unitSkillIds, "#") local propertys = string.split(fightUnit.property, "#") -- LogError("fightUnit.property:"..tostring(fightUnit.property)) local role = { roleId = rid, position = position, star = star, camp = 0, type = 1, quality = 0, element = HeroConfig[rid].PropertyName, professionId = HeroConfig[rid].Profession, size = 1, passivity = { }, property = { }, isTibu = istibu, leader = false } if not istibu and not role.leader then table.insert(elementIds, role.element) end -- if skills[1] then -- role.skill = this.GetSkillData(tonumber(skills[1])) -- end -- if skills[2] and skills[2] ~= "0" then -- role.superSkill = this.GetSkillData(tonumber(skills[2])) -- end --> role.skillArray = {} local passivityList = {} local idx = 1 for i = 1, #skills do if skills[i] and skills[i] ~= 0 then --> 0 1 3 主动技 --if i - 1 == SkillSlotPos.Slot_0 or i - 1 == SkillSlotPos.Slot_1 or i - 1 == SkillSlotPos.Slot_3 then if i <= 3 then role.skillArray[idx] = this.GetSkillData(tonumber(skills[i])) idx = idx + 1 -- table.insert(role.skillArray, this.GetSkillData(tonumber(skills[i]))) else local passivityId = tonumber(skills[i]) for j = 1,#passivityList do if PassiveSkillLogicConfig[passivityList[j]].Group == PassiveSkillLogicConfig[passivityId].Group then if PassiveSkillLogicConfig[passivityList[j]].Level < PassiveSkillLogicConfig[passivityId].Level then table.remove(passivityList,j) else passivityId = nil end break end end if passivityId ~= nil then table.insert(passivityList, passivityId) end end end end --做个普攻技能检查 if role.skillArray[1] == nil then LogError("配表错误!!!进攻方普攻未找到 roleId:" .. role.roleId .. " 普攻技能id:" .. tonumber(skills[1])) end -- role.passivity, role.passivityIds = this.GetPassivityData(passivityList) role.passivity = this.GetPassivityData(passivityList) role.passivityIds = passivityList -- if #skills > 2 then -- local passivityList = {} -- for j = 3, #skills do -- table.insert(passivityList, tonumber(skills[j])) -- end -- role.passivity = this.GetPassivityData(passivityList) -- end for j = 1, #propertys do role.property[j] = tonumber(propertys[j]) -- LogError(j.."prop:"..tostring(role.property[j])) end return role end for i = 1, #data.fightUnitList do fightData.playerData[i] = setPlayerItemData(data.fightUnitList[i],false) end -- 替补数据条件 to do yh check if data.substitute.unitId ~= "" then fightData.tibuData[1] = setPlayerItemData(data.substitute,true) end this.SetFightElement(0, elementIds) -- local teamSkills = string.split(data.teamSkillList, "|") --异妖位置1#技能id1|异妖位置2#技能id2|.. -- for i = 1, #teamSkills do -- local s = string.split(teamSkills[i], "#") -- fightData.playerData.teamSkill[i] = this.GetSkillData(tonumber(s[2]), tonumber(s[1])) -- end -- -- local teamPassives = string.split(data.teamPassiveList, "|") -- for i = 1, #teamPassives do -- local s = string.split(teamPassives[i], "#") -- local teamPassiveList = {} -- for j = 1, #s do -- teamPassiveList[j] = tonumber(s[j]) -- end -- fightData.playerData.teamPassive[i] = this.GetPassivityData(teamPassiveList) -- end -- 一些战斗外数据 fightData.playerData.outData = data.specialPassive --> 支援 if data.useSupportId and data.useSupportId ~= 0 and data.useSupportId ~= "" then this.AddUnitDataByType(data.useSupportId, fightData.fightUnitData, data.supportSkillLevel, FightUnitType.UnitSupport, 0) end --> 副官 if data.useAdjutantId and data.useAdjutantId ~= 0 and data.useAdjutantId ~= "" then this.AddUnitDataByType(data.useAdjutantId, fightData.fightUnitData, data.adjutantSkillLevel, FightUnitType.UnitAdjutant, 0) end -- 模拟数据 local setPlayerLeaderItemDate = function(fightUnit,_camp) local rid = 1 local position = 99 local star = 0 local allPro = {10,10,10,10,10,10} if fightUnit ~= nil then allPro = string.split(fightUnit.property, "#") end local propertys = { allPro[1],-- Level, allPro[2] and allPro[2] or 0,-- Hp, allPro[3] and allPro[3] or 0,-- Hp, allPro[4] and allPro[4] or 0,-- Attack, allPro[5] and allPro[5] or 0,-- PhysicalDefence, 0,-- MagicDefence, allPro[7] and allPro[7] or 0,-- Speed, 0,-- DamageBocusFactor, 0,-- DamageReduceFactor, 10000,-- Hit, 0,-- Dodge, 0,-- CritFactor, 0,-- CritDamageFactor, 0,-- AntiCritDamageFactor, 0,-- TreatFacter, 0,-- CureFacter, 0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0, } --AircraftCarrierManager.GetFightDataProperty() 对应读表方法 local role = { roleId = rid, position = position, star = star, camp = _camp, type = 1, quality = 0, element = 0, professionId = 0, size = 1, passivity = { }, property = { }, isTibu = false, leader = true, leaderSkillUnlock = 0 } --data.motherShipInfo.plan --id (string) 战机ID --cfgId (int32) 战机表ID (服务器需要切换为技能id脚本中没有此数据!!!) --sort (int32) 穿戴顺序 --skillid (string)技能id -- 技能等级通过id反向读表 todo 需要修改读取方式 role.leaderSkillUnlock = fightUnit.unlockSkillSize local skills = fightUnit.plan role.skillArray = {} if false then --true测试数据 if _camp == 0 then skills = string.split("910111#911012#910513#910714", "#")--910111 else skills = string.split("910915#911011#911111#911211", "#") end local idx = 1 for i = 1, #skills do role.skillArray[idx] = this.GetSkillData(tonumber(skills[i]),i,true,1) idx = idx + 1 end else local idx = 1 for i = 1, #fightUnit.plan do local plane = fightUnit.plan[i] local id = plane.cfgId local lv = MotherShipPlaneConfig[id].Lvl role.skillArray[idx] = this.GetSkillData(tonumber(plane.leaderSkill),plane.sort,true,lv) idx = idx + 1 LogError(i.." skilld>>> "..plane.leaderSkill.." plane.sort:"..plane.sort) end --非测试数据方法 读取方式根据数据结构决定 end for j = 1, #propertys do role.property[j] = tonumber(propertys[j]) end return role end -- 数据结构 -- data.motherShipInfo -- Id (int32) -- property (string) -- plan (MotherShipPlan) 技能数据 if data.motherShipInfo and #data.motherShipInfo.plan > 0 then fightData.leaderData["A"] = setPlayerLeaderItemDate(data.motherShipInfo,0) end --data.motherShipInfo.plan --id (string) 战机ID --cfgId (int32) 战机表ID (服务器需要切换为技能id脚本中没有此数据!!!) --sort (int32) 穿戴顺序 -- 角色性别为非主要信息前端显示即可 -- 测试数据 test -- fightData.enemyAircraftCarrier = setPlayerLeaderItemDate(nil,1) --> 航母 if data.motherShipInfo and #data.motherShipInfo.plan > 0 then -- todo 数据结构需要调整 --> 0 1 主装备数据 2 3 ext数据 -- this.CV_equipDatas[0] = {} -- this.CV_equipDatas[2] = {} -- local infos = string.format("id:%s proprty:%s skillLen:%s", -- data.motherShipInfo.id, -- data.motherShipInfo.property, -- #data.motherShipInfo.plan) -- LogError("motherShipInfo 》》》 "..infos) for i = 1, #data.motherShipInfo.plan do -- local plane =data.motherShipInfo.plan[i] -- local planeInfo = string.format("id:%s cfgId:%s sort:%s", -- plane.id,plane.cfgId,plane.sort) -- LogError("plane>>> "..planeInfo) end local cvMineTb = {} for i = 1, #data.motherShipInfo.plan do -- local equipPlane = AircraftCarrierManager.CreateEmptyTable() -- AircraftCarrierManager.CopyValue(equipPlane, data.motherShipInfo.plan[i]) -- table.insert(this.CV_equipDatas[0], equipPlane) end -- this.CV_equipDatas[2].CVLv = data.motherShipInfo.id table.sort(this.CV_equipDatas[0], function(a, b) return a.sort < b.sort end) cvMineTb.skill = {} for i = 1, #this.CV_equipDatas[0] do -- local planeConfig = G_MotherShipPlaneConfig[this.CV_equipDatas[0][i].cfgId] -- table.insert(cvMineTb.skill, this.GetSkillData(planeConfig.Skill)) -- cvMineTb.skill[i][8].release = this.CV_equipDatas[0][i].sort --< 修改触发顺序为槽位顺序 -- --> 设置显示用到数据 需排序完数据 -- this.CV_equipDatas[0][i].release = this.CV_equipDatas[0][i].sort -- this.CV_equipDatas[0][i].cd = cvMineTb.skill[i][8].cd end -- local proArr = string.split(data.motherShipInfo.property, "#") -- cvMineTb.property = {} -- for j = 1, #proArr do -- cvMineTb.property[j] = tonumber(proArr[j]) -- end -- cvMineTb.rootId = data.motherShipInfo.id --< 各系统主表id -- cvMineTb.camp = 0 -- cvMineTb.type = FightUnitType.UnitAircraftCarrier -- table.insert(fightData.fightUnitData, cvMineTb) end --> mine local monsterConfig = MonsterGroup[monsterGroupId] local pos = G_FormationConfig[monsterConfig.Formation].pos local Contents = monsterConfig.Contents for i = 1, #Contents do local enemyList = {} local elementIds = {} local idx = 1 for j = 1, #Contents[i] do if Contents[i][j] ~= 0 then enemyList[j] = this.GetMonsterFightData(Contents[i][j], 1) enemyList[j].position = pos[idx] table.insert(elementIds, enemyList[j].element) end idx = idx + 1 end fightData.enemyData[i] = enemyList this.SetFightElement(1, elementIds) break --< 取一组 end local data = { fightData = fightData, fightSeed = msg.fightData.fightSeed, fightType = msg.fightData.fightType, maxRound = round, } if seed ~= -1 then data.fightSeed = seed end return data end return this