-- windows package.path = package.path ..';luafight/?.lua'; -- linux package.path = package.path ..';../luafight/?.lua'; require("Modules.Battle.Logic.Misc.BattleDefine") require("Modules.Battle.Logic.Misc.BattleUtil") require("Modules.Battle.Logic.Misc.BattleQueue") require("Modules.Battle.Logic.Misc.BattleDictionary") require("Modules.Battle.Logic.Misc.BattleList") require("Modules.Battle.Logic.Misc.BattleObjectPool") require("Modules.Battle.Logic.Base.BattleEvent") require("Modules.Battle.Logic.Base.Random") require("Modules.Battle.Logic.Base.RoleData") require("Modules.Battle.Logic.Base.Buff") require("Modules.Battle.Logic.Base.Skill") require("Modules.Battle.Logic.Base.Passivity") require("Modules.Battle.Logic.BattleLogic") require("Modules.Battle.Logic.RoleLogic") require("Modules.Battle.Logic.SkillManager") require("Modules.Battle.Logic.RoleManager") require("Modules.Battle.Logic.OutDataManager") require("Modules.Battle.Logic.BattleLogManager") require("Modules.Battle.Logic.FightUnitLogic") require("Modules.Battle.Logic.FightUnitManager") require("Modules.Language") require("Modules.Debug") local BattleMain = {} local BattleLogic = BattleLogic local Random = Random local BattleRecord local _BattleErrorCache = {} local _BattleErrorIndex = 0 local _seed local _type local _maxRound local _fightData local _optionData 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 local function PrintTable(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 .. PrintTable(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), PrintTable(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 local function generateRecordFile() 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 file = io.open("luafight/BattleRecord/"..time..".txt", "a") -- local record = BattleLogic.GetRecord() -- for i=1, #record do -- file:write(record[i].."\n") -- end -- io.close(file) end local function addBattleData() local str = "" str = str.."seed:\n"..tostring(_seed).."\n" str = str.."type:\n"..tostring(_type).."\n" str = str.."fightData:\n"..PrintTable(_fightData).."\n" str = str.."optionData:\n"..PrintTable(_optionData).."\n" _BattleErrorIndex = _BattleErrorIndex + 1 if _BattleErrorIndex > 5 then _BattleErrorIndex = 1 end _BattleErrorCache[_BattleErrorIndex] = str end local function AddRecord(fightData) BattleRecord = {} BattleLogic.Event:AddEvent(BattleEventName.AddRole, function (role) local record = {} record.uid = role.uid record.camp = role.camp record.damage = 0 role.Event:AddEvent(BattleEventName.RoleDamage, function (defRole, damage, bCrit, finalDmg) record.damage = record.damage + finalDmg end) BattleRecord[role.uid] = record end) for i=1, #fightData.playerData.teamSkill do local teamCaster = BattleLogic.GetTeamSkillCaster(0) local teamSkill = fightData.playerData.teamSkill[i] local teamType = math.floor(teamSkill[1] / 100) local str = "order:1".."camp:"..teamCaster.camp.." team"..teamSkill[1] local record = {} record.uid = str record.camp = teamCaster.camp record.damage = 0 record.order = 1 local curSkill teamCaster.Event:AddEvent(BattleEventName.SkillCast, function (skill) if skill.owner.camp == record.camp then curSkill = skill end end) teamCaster.Event:AddEvent(BattleEventName.RoleDamage, function (defRole, damage, bCrit, finalDmg) if curSkill and curSkill.teamSkillType == teamType then record.damage = record.damage + finalDmg end end) BattleRecord[str] = record end for i=1, #fightData.enemyData do for j=1, #fightData.enemyData[i].teamSkill do local teamCaster = BattleLogic.GetTeamSkillCaster(1) local teamSkill = fightData.enemyData[i].teamSkill[j] local teamType = math.floor(teamSkill[1] / 100) local str = "order:"..i.."camp:"..teamCaster.camp.." team"..teamSkill[1] local record = {} record.uid = str record.camp = teamCaster.camp record.damage = 0 record.order = i local curSkill teamCaster.Event:AddEvent(BattleEventName.SkillCast, function (skill) if skill.owner.camp == record.camp then curSkill = skill end end) teamCaster.Event:AddEvent(BattleEventName.RoleDamage, function (defRole, damage, bCrit, finalDmg) if curSkill and curSkill.teamSkillType == teamType and record.order == BattleLogic.CurOrder then record.damage = record.damage + finalDmg end end) BattleRecord[str] = record end end end function BattleMain.Simple() local fightData = {enemyData={{ {ai={0},camp=1,size=1,element=1,passivity={{{309,309},{4,5,0,5,1,0.12},{4,5,0,9,1,0.1}},{{369},{18,1,0.2,2}},{{357},{0.2,3}},{{368},{2,4,0.2}},{{360},{0.2,4,4,0.1,2}},{{385},{2,22,1,0.01,10}}},passivityIds={"20523","20543","60423","60152","60332","60181","60042","810151"},position=1,professionId=2,property={"246","667874","667874","91279","1673","0","1716","0.21","0.05","1.094","0.03","0.29","1.79","0.04","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.03","0.03","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=10006,round=0,skillArray={{"20501",0.8,{0},1,1400,0,"0",{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{"20513",1.32,{0},1,2300,0,"0",{cd=1,isCannon=0,release=1,slot=1},{200004,{1,1,2},{261,0.6,1,1,0.2,2}}},{"20533",1.3,{0.233,0.233},3,2700,0,"0",{cd=3,isCannon=0,release=2,slot=3},{200002,{1,2.3,2},{265,4,5,0.4,1,1,2}}}},type=1}, {ai={0},camp=1,size=1,element=3,passivity={{{308},{0.1,8,1,22,9,0.09,2,8,0.2,2}},{{369},{18,1,0.2,2}},{{357},{0.2,3}},{{368},{2,4,0.2}},{{360},{0.2,4,4,0.1,2}},{{378},{0.26,0.08,1.2}},{{385},{2,22,1,0.01,10}}},passivityIds={"12423","12443","60423","60152","60332","60181","60042","90302","810151"},position=2,professionId=2,property={"246","680858","680858","84703","1770","0","1727","0.21","0.05","1.094","0.03","0.3623","1.8291","0.04","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.03","0.03","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=10036,round=0,skillArray={{"12401",0.85,{0},1,1900,0,"0",{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{"12413",0.9,{0},1,2400,0,"0",{cd=3,isCannon=0,release=1,slot=1},{200921,{1,2.61,2},{246,3,0.1,2}}},{"12433",3,{0.3,0.3,0.3,0.3,0.3},6,6200,0,"0",{cd=3,isCannon=0,release=2,slot=3},{240000,{235,4,5,1,0.2},{1,2.07,2},{254,0.9,1,4,4,0.2,2,9}}}},type=3}, {ai={0},camp=1,size=1,element=3,passivity={{{369},{18,1,0.2,2}},{{357},{0.2,3}},{{368},{2,4,0.2}},{{360},{0.2,4,4,0.1,2}},{{385},{2,4,1,10,10}}},passivityIds={"10323","60423","60152","60332","60181","60042","810351"},position=3,professionId=2,property={"246","674622","674622","86345","1747","0","1798","0.21","0.05","1.04","0.03","0.29","1.79","0.04","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.084","0.03","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=10039,round=0,skillArray={{"10301",0.62,{0},1,1400,0,"0",{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{"10313",0.6,{0.233,0.233,0.233,0.233},5,1800,0,"0",{cd=1,isCannon=0,release=1,slot=1},{200000,{1,1.14,2},{259,0.45,1,1,3,0.1,22,3,0.1,2}}},{"10333",2,{0.333,0.333},3,2800,0,"0",{cd=3,isCannon=0,release=2,slot=3},{200004,{1,1.36,2},{230,1,0.5,8,3}}}},type=3}, {ai={0},camp=1,size=1,element=5,passivity={{{347},{5,1,0.15}},{{369},{17,1,0.2,2}},{{368},{2,4,0.2}},{{358},{12,0.3,0.2,1,2}},{{377},{0.031,5}},{{385},{2,23,1,0.01,10}}},passivityIds={"50723","50743","60413","60092","60332","60161","60052","90202","810251"},position=5,professionId=3,property={"246","829392","829392","90403","1924","0","1780","0.21","0.104","1.04","0.03","0.29","1.79","0.04","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.03","0.03","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,round=0,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}}},{"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}}}},type=5}, {ai={0},camp=1,size=1,element=4,passivity={{{330},{0.6,1,2,3,0.4,3}},{{369},{6,1,0.3,2}},{{365},{0.45,4}},{{366},{12,0.04}},{{377},{0.031,5}},{{385},{2,27,1,0.01,10}}},passivityIds={"40323","40343","60353","60232","60252","60241","60312","90202","810651"},position=8,professionId=4,property={"246","810794","810794","74754","1853","0","1811","0.1","0.16","1.04","0.03","0.18","1.57","0.15","0.054","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.03","0.14","0.0","0.0","0.0","0.0","0.0","0.054","0.0","0.0","0.0","0.0","0.0","0.0"},quality=0,roleId=10061,round=0,skillArray={{"40301",0.44,{0},1,1300,0,"0",{cd=0,isCannon=0,release=1,slot=0},{400000,{1,1,2}}},{"40313",1.4,{0.15,0.15,0.15,0.15,0.35},6,2500,0,"0",{cd=3,isCannon=0,release=1,slot=1},{240000,{1,1.18,2},{254,0.76,1,2,4,0.4,2}}},{"40333",2.1,{0},1,2450,0,"0",{cd=3,isCannon=0,release=2,slot=3},{100000,{24,1,1.43},{211,1,1,22,1,0.25,2}}}},type=4},teamPassive={},teamSkill={}}}, fightUnitData={{},{},{},{},{},{}}, playerData={ {camp=0,size=1,element=4,passivity={},passivityIds={"40423"},position=2,professionId=1,property={255,806590,806590,60525,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=1,roleId=10062,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=1}, {camp=0,size=1,element=4,passivity={{{331},{12,0.3}},{{332},{0.6,1.2,1}},{{302},{1,1,1,1}}},passivityIds={"40523","40533","40543"},position=4,professionId=3,property={255,608838,608838,96172,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=1,roleId=10063,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}}}},type=1}, {camp=0,size=1,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,697917,697917,100826,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=1,roleId=10057,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}}}},type=1}, {camp=0,size=1,element=4,passivity={{{328},{1,2.41,1}}},passivityIds={"40123","40143"},position=7,professionId=4,property={255,727413,727413,89512,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=1,roleId=10059,skillArray={{"40101",0.65,{0},1,1300,0,"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}}}},type=1}, {camp=0,size=1,element=4,passivity={{{334},{1,0.5,1,10,2}}},passivityIds={"40723","40743"},position=9,professionId=2,property={255,689833,689833,97764,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=1,roleId=10065,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=1},firstCamp=0,outData="",teamPassive={},teamSkill={}},tankDataAppend={}} local op1 = {seed=1661757743, type=1, maxTime=300} BattleMain.Execute(op1,fightData,"") end --简单清除事件 function BattleMain.SimpleClean() BattleLogic.Clear() end function BattleMain.ExecuteProtect(args, fightData, optionData) _seed = args.seed _type = args.type _maxRound = args.maxRound _fightData = fightData _optionData = optionData or {} --该开关用于输出战斗过程中的日志,用于验证前后端是否出现战斗不同步 --BattleLogic.IsOpenBattleRecord = true 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")).."-"..tostring(_fightData["uid"]) Random.SetSeed(args.seed) BattleLogManager.WriteServerFightData(fightData, time, "BEGINP "..BattleLogic.Type) BattleLogic.Init(fightData, optionData, _maxRound) BattleLogic.Type = _type if _type == 9 or _type == 10 or _type == 11 or _type == 14 then AddRecord(fightData) end local _new_productor local function send(x) coroutine.yield(x) end local function productor() local i = 0 while not BattleLogic.IsEnd do i = i + 1 i = BattleLogic.Update() if i > 30000 then -- 防卡死跳锁次数 BattleLogic.IsEnd=true end send(i) end end local function receive() local status,value = coroutine.resume( _new_productor) if status then --LogError("status true".." value "..value) else --LogError("status false".." value "..value) BattleLogic.IsEnd=true end -- end return value end local function consumer() while not BattleLogic.IsEnd do local i = receive() -- 从生产者那里得到物品 end end BattleLogic.StartOrder() _new_productor = coroutine.create(productor) consumer() end function BattleMain.Execute(args, fightData, optionData) -- collectgarbage("collect") -- print("内存为:", collectgarbage("count"))--输出当前内存占用 _seed = args.seed _type = args.type _maxRound = args.maxRound _fightData = fightData _optionData = optionData or {} --该开关用于输出战斗过程中的日志,用于验证前后端是否出现战斗不同步 --BattleLogic.IsOpenBattleRecord = true 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")).."-"..tostring(fightData["uid"]) local isError = false local errorCache if xpcall(function () BattleMain.ExecuteProtect(args, fightData, optionData) end, function (err) isError = true errorCache = "error:\n"..debug.traceback(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 _mytibuList ={0, 0, 0, 0, 0, 0, 0, 0, 0} local _enemytibuList ={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 -- 返回替补数据 local arrTibu = RoleManager.QueryTibu(function (r) return r.camp == 0 end, true) local _earrTibu = RoleManager.QueryTibu(function (r) return r.camp == 1 end, true) if #arrTibu > 0 then resultList.mytibu=arrTibu[1]:GetRoleData(RoleDataName.Hp) if RoleManager.getTibuStateByCamp(0) == 4 or RoleManager.getTibuStateByCamp(0) == 2 then resultList.mytibuPos=arrTibu[1].position else resultList.mytibuPos = -1 end end if #_earrTibu > 0 then resultList.enemytibu=_earrTibu[1]:GetRoleData(RoleDataName.Hp) if RoleManager.getTibuStateByCamp(1) == 4 or RoleManager.getTibuStateByCamp(1) == 2 then resultList.enemytibuPos=_earrTibu[1].position else resultList.enemytibuPos = -1 end end -- BattleLogManager.WriteServerFightData(_hpRecord, time, "HPCHECKER") -- local resultChecker = RoleManager.getRecord() -- BattleLogManager.WriteServerFightData(resultChecker, time, "resultChecker") -- if BattleLogic.IsOpenBattleRecord then -- generateRecordFile() -- end -- print ----------------------------------------- -- print("最终运行帧数:"..BattleLogic.CurFrame()) local curRound, maxRound = BattleLogic.GetCurRound() if curRound > maxRound and _type == 9 then local playerDamage=0 local enemyDamage=0 for k,v in pairs(BattleRecord)do if v.camp == 0 then playerDamage = playerDamage + v.damage else enemyDamage = enemyDamage + v.damage end end resultList.result = playerDamage > enemyDamage and 1 or 0 else resultList.result = BattleLogic.Result end if _type == 10 or _type == 11 or _type == 14 then -- 公会boss和车迟斗法boss返回伤害值 local playerDamage=0 for k,v in pairs(BattleRecord)do if v.camp == 0 then playerDamage = playerDamage + v.damage end end resultList.duration = playerDamage --TODO:公会boss的持续时间传递的是我方总伤害值 else resultList.duration = BattleLogic.CurFrame() / BattleLogic.GameFrameRate end resultList.useTimes = BattleLogic.useTimes resultList.fightRound = curRound BattleLogManager.WriteServerFightDataB(time, "NormalENDP") -- BattleLogic.Clear() -- addBattleData() return resultList end if isError then --捕获异常,并输出错误日志 BattleLogManager.WriteServerFightDataB(time, "ErrorBEGINP") -- BattleLogManager.WriteServerFightData(errorCache,time, "ErrorLog") BattleLogManager.WriteServerFightDataB(time, "ErrorENDP") end --WYLog("return -1") -- BattleLogic.Clear() return { result = -1 } end -- BattleMain.Execute({seed=1614579919, type=1, maxTime=300},{enemyData={{{ai={0},camp=1,element=0,monsterId=10013,passivity={},position=2,professionId=2,property={1,509,509,65,43,0,88,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10011,skillArray={{21201,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{21211,0.2,{0},1,800,0,1,{cd=1,isCannon=1,release=1,slot=1},{230000,{1,0.87,1},{255,0.2,1}}}},star=4,type=1},{ai={0},camp=1,element=0,monsterId=10015,passivity={},position=4,professionId=2,property={1,450,450,85,41,0,85,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10011,skillArray={{21401,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{21411,0.2,{0},1,800,0,1,{cd=-1,isCannon=1,release=1,slot=1},{400000,{260,1,2,9,1,0.2},{260,1,2,10,1,0.2},{1,1.8,1}}}},star=4,type=1},{ai={0},camp=1,element=0,monsterId=10049,passivity={},position=6,professionId=2,property={22,1395,1395,290,133,0,157,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10011,skillArray={{11301,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{11311,0.2,{0},1,800,0,1,{cd=-1,isCannon=1,release=1,slot=1},{200004,{1,0.8,2},{3,0.1,8,2}}}},star=4,type=1},{ai={0},camp=1,element=0,monsterId=10025,passivity={},position=7,professionId=2,property={22,1973,1973,332,180,0,238,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10011,skillArray={{30701,0.2,{0.1,0.1,0.1,0.1,0.1,0.1},7,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{30711,0.5,{0},1,800,0,1,{cd=-1,isCannon=0,release=1,slot=1},{100000,{24,1,0.58},{211,1,1,22,1,0.1,2}}}},star=5,type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}}},fightUnitData={},fightUnitDataAppend={},playerData={{camp=0,element=1,passivity={},position=2,professionId=1,property={30,509,2565,348,241,0,279,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10007,skillArray={{20601,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{20611,0.2,{0},1,800,0,1,{cd=-3,isCannon=1,release=1,slot=1},{230000,{219,19,1,0.4,4,2,0.73,1,0.6}}}},star=5,type=1},{camp=0,element=3,passivity={},position=4,professionId=1,property={30,450,2616,340,249,0,280,0,0,1,0,0,1.5,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,skillArray={{10201,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{10211,0.2,{0},1,800,0,1,{cd=-1,isCannon=1,release=1,slot=1},{210000,{10,1.45,1,0.1}}}},star=5,type=1},{camp=0,element=5,passivity={},position=6,professionId=4,property={1,694,408,73,38,0,70,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10090,skillArray={{51301,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{51311,0.2,{0},1,800,0,1,{cd=1,isCannon=0,release=1,slot=1},{200000,{24,1,0.98},{211,0.2,1,23,3,0.2,2}}}},star=3,type=1},{camp=0,element=4,passivity={},position=7,professionId=2,property={30,1284,1284,254,142,0,166,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10071,skillArray={{41301,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{41311,0.2,{0},1,800,0,1,{cd=1,isCannon=1,release=1,slot=1},{200111,{1,2.28,2}}}},star=3,type=1},{camp=0,element=3,passivity={},position=9,professionId=1,property={30,1369,1369,182,148,0,157,0,0,1,0,0,1.5,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,skillArray={{11801,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{11811,0.2,{0},1,800,0,1,{cd=1,isCannon=1,release=1,slot=1},{400000,{1,2.18,1}}}},star=3,type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}},tankDataAppend={}}) -- BattleMain.Execute({seed=1616223616, type=1, maxTime=300},{enemyData={{{ai={0},camp=1,element=0,monsterId=10015,passivity={},position=2,professionId=2,property={1,450,450,85,41,0,85,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10011,skillArray={{21401,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{21411,0.2,{0},1,800,0,1,{cd=-1,isCannon=1,release=1,slot=1},{400000,{260,1,2,9,1,0.2},{260,1,2,10,1,0.2},{1,1.8,1}}}},star=4,type=1},{ai={0},camp=1,element=0,monsterId=10051,passivity={},position=4,professionId=2,property={1,514,514,73,44,0,79,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10011,skillArray={{11501,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{11511,0.2,{0},1,800,0,1,{cd=-1,isCannon=1,release=1,slot=1},{400000,{10,1.4,1,1}}}},star=4,type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}}},fightUnitData={},fightUnitDataAppend={},playerData={{camp=0,element=3,passivity={},position=2,professionId=2,property={1,441,441,99,42,0,83,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10049,skillArray={{11301,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{11311,0.2,{0},1,800,0,1,{cd=-1,isCannon=1,release=1,slot=1},{200004,{1,0.8,2},{3,0.1,8,2}}}},star=4,type=1},{camp=0,element=3,passivity={},position=4,professionId=4,property={1,459,459,86,42,0,79,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10047,skillArray={{11101,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{11111,0.2,{0},1,800,0,1,{cd=-1,isCannon=1,release=1,slot=1},{400000,{1,1.7,2},{254,0.3,1,1,3,21,0.15,2}}}},star=4,type=1},{camp=0,element=4,passivity={},position=6,professionId=3,property={1,798,798,179,53,0,135,0,0,1,0,0,1.5,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,skillArray={{40501,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{40511,0.2,{0},1,800,0,1,{cd=-1,isCannon=1,release=1,slot=1},{400000,{240,5,6,3,0.15},{260,1,1,23,3,0.3},{1,1.61,1}}}},star=5,type=1},{camp=0,element=5,passivity={},position=7,professionId=1,property={1,507,507,73,42,0,89,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10088,skillArray={{51101,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{51111,0.2,{0},1,800,0,1,{cd=0,isCannon=1,release=1,slot=1},{200111,{1,1.68,1},{261,0.45,3,1,0.15,2}}}},star=4,type=1},{camp=0,element=1,passivity={},position=9,professionId=2,property={1,408,408,94,38,0,79,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=0,roleId=10014,skillArray={{21301,0.3,{0},1,1200,0,1,{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{21311,0.2,{0},1,800,0,1,{cd=1,isCannon=1,release=1,slot=1},{400000,{1,1.8,2},{261,0.3,4,1,0.15,2}}}},star=4,type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}},tankDataAppend={}}) -- BattleMain.Execute({seed=1616228411, type=17, maxTime=0},{enemyData={{{ai={0},camp=1,element=0,passivity={},position=2,professionId=2,property={"1","450","450","85","41","0","85","0.0","0.0","1.0","0.0","0.0","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"},quality=0,roleId=10011,round=0,skillArray={{"21401",0.3,{0},1,1200,0,"0",{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{"21411",0.2,{0},1,800,0,"0",{cd=-1,isCannon=1,release=1,slot=1},{400000,{260,1,2,9,1,0.2},{260,1,2,10,1,0.2},{1,1.8,1}}}},type=1},{ai={0},camp=1,element=0,passivity={},position=4,professionId=2,property={"1","514","514","73","44","0","79","0.0","0.0","1.0","0.0","0.0","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"},quality=0,roleId=10011,round=0,skillArray={{"11501",0.3,{0},1,1200,0,"0",{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{"11511",0.2,{0},1,800,0,"0",{cd=-1,isCannon=1,release=1,slot=1},{400000,{10,1.4,1,1}}}},type=1},teamPassive={},teamSkill={}}},fightUnitData={{},{},{},{}},playerData={{camp=0,element=3,passivity={},position=2,professionId=4,property={1,459,459,86,42,0,79,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10047,skillArray={{"11101",0.3,{0},1,1200,0,"0",{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{"11111",0.2,{0},1,800,0,"0",{cd=-1,isCannon=1,release=1,slot=1},{400000,{1,1.7,2},{254,0.3,1,1,3,21,0.15,2}}}},type=1},{camp=0,element=1,passivity={},position=4,professionId=3,property={1,809,809,168,56,0,125,0,0,1,0,0,1.5,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",0.3,{0},1,1200,0,"0",{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{"20711",0.2,{0},1,800,0,"0",{cd=-1,isCannon=1,release=1,slot=1},{200000,{1,0.9,1},{254,0.3,1,2,3,0.2,2}}}},type=1},{camp=0,element=5,passivity={},position=7,professionId=1,property={1,507,507,73,42,0,89,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10088,skillArray={{"51101",0.3,{0},1,1200,0,"0",{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{"51111",0.2,{0},1,800,0,"0",{cd=0,isCannon=1,release=1,slot=1},{200111,{1,1.68,1},{261,0.45,3,1,0.15,2}}}},type=1},{camp=0,element=1,passivity={},position=6,professionId=1,property={1,524,524,71,36,0,86,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10012,skillArray={{"21101",0.3,{0},1,1200,0,"0",{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{"21111",0.2,{0},1,800,0,"0",{cd=1,isCannon=1,release=1,slot=1},{400000,{260,1,1,23,3,0.2},{1,2.1,1}}}},type=1},{camp=0,element=4,passivity={},position=9,professionId=2,property={1,406,406,74,36,0,75,0,0,1,0,0,1.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},quality=1,roleId=10071,skillArray={{"41301",0.3,{0},1,1200,0,"0",{cd=-2,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{"41311",0.2,{0},1,800,0,"0",{cd=1,isCannon=1,release=1,slot=1},{200111,{1,2.28,2}}}},type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}},tankDataAppend={}}) -- BattleMain.Execute({seed=1624324885, type=1, maxTime=20},{enemyData={{{ai={0},camp=1,element=1,passivity={{{315},{0.5,5,12,0.07,1}}},position=2,professionId=0,property={"92","5931","5931","758","632","0","598","0.0","0.0","1.0","0.0","0.0","0.0","0.0","1.0","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"},quality=0,roleId=10007,round=0,skillArray={{"20601",0.3,{0},1,1200,0,"0",{cd=0,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{"20611",0.2,{0},1,800,0,"0",{cd=0,isCannon=1,release=1,slot=1},{230000,{219,1.09,1,0.4,4,2,0.73,1,0.6}}}},type=1},{ai={0},camp=1,element=2,passivity={{{321},{0.7,2,5,1,0.15}}},position=4,professionId=0,property={"92","4985","4985","1085","577","0","581","0.0","0.0","1.0","0.0","0.0","0.0","0.0","1.0","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"},quality=0,roleId=10022,round=0,skillArray={{"30401",0.3,{0},1,1200,0,"0",{cd=0,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{"30411",0.2,{0},1,800,0,"0",{cd=1,isCannon=1,release=1,slot=1},{400000,{1,1.72,2},{3,0.6,4,1}}},{"30431",0.833,{0.2,0.2,0.2},4,2430,0,"0",{cd=3,isCannon=0,release=2,slot=3},{200003,{1,1.31,2},{229,4,2,5,1,0.15}}}},type=2},{ai={0},camp=1,element=3,passivity={{{304},{14,3,0.2,2}}},position=6,professionId=0,property={"92","5149","5149","1038","612","0","433","0.0","0.0","1.0","0.0","0.0","0.0","0.0","1.0","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"},quality=0,roleId=10044,round=0,skillArray={{"10801",0.3,{0},1,1200,0,"0",{cd=0,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{"10811",0.2,{0},1,800,0,"0",{cd=1,isCannon=1,release=1,slot=1},{210000,{1,1.2,2},{211,0.35,1,14,3,0.35,2},{234,4,0.3,8,2}}},{"10831",0.2,{0},1,800,0,"0",{cd=3,isCannon=1,release=2,slot=3},{200003,{1,1.08,2},{258,0.28,2}}}},type=3},{ai={0},camp=1,element=4,passivity={{{302},{0.6,1,1,1}}},position=7,professionId=0,property={"92","5529","5529","1150","645","0","335","0.0","0.0","1.0","0.0","0.0","0.0","0.0","1.0","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"},quality=0,roleId=10063,round=0,skillArray={{"40501",0.3,{0},1,1200,0,"0",{cd=0,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{"40511",0.2,{0},1,800,0,"0",{cd=1,isCannon=1,release=1,slot=1},{400000,{240,5,6,3,0.15},{260,1,1,23,3,0.3},{1,1.61,1}}}},type=4},{ai={0},camp=1,element=5,passivity={{{343,344},{1,0.1},{0.3,2,1,0.3}}},position=9,professionId=0,property={"92","5499","5499","1140","634","0","405","0.0","0.0","1.0","0.0","0.0","0.0","0.0","1.0","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"},quality=0,roleId=10079,round=0,skillArray={{"50401",0.3,{0},1,1200,0,"0",{cd=0,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{"50411",0.2,{0},1,800,0,"0",{cd=1,isCannon=1,release=1,slot=1},{200000,{1,0.75,2},{268,0.45,2,1,0.3}}},{"50431",0.2,{0},1,800,0,"0",{cd=3,isCannon=1,release=2,slot=3},{200000,{1,1.05,2},{270,0.1,1,1}}}},type=5},teamPassive={},teamSkill={}}},fightUnitData={{},{},{},{}},fightUnitDataAppend={},playerData={{camp=0,element=1,passivity={{{309,310},{4,5,2,9,1,0.2},{3,2,2,5,1,0.2}}},position=2,professionId=3,property={225,237145,237145,48533,1493,0,1431,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},quality=1,roleId=10002,skillArray={{"20101",0.3,{0},1,1200,0,"0",{cd=0,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{"20113",0.2,{0},1,1500,0,"0",{cd=1,isCannon=0,release=1,slot=1},{200321,{1,2.6,1},{248,5,0.2,3,1,2}}},{"20133",0.2,{0},1,800,0,"0",{cd=3,isCannon=1,release=2,slot=3},{270000,{1,2.07,1},{261,0.9,1,4,1,0.2,2},{3,0.25,9,2}}}},type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}},tankDataAppend={}}) -- BattleMain.Execute({seed=1626848262, type=1, maxTime=20},{enemyData={{{ai={},camp=1,element=4,passivity={},position=2,professionId=0,property={"1","216","216","95","44","0","0","0.0","0.0","1.0","0.0","0.0","0.0","0.0","1.0","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"},quality=0,roleId=10067,round=0,skillArray={{"40901",0.3,{0},1,1200,0,"0",{cd=0,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{"40911",0.2,{0},1,800,0,"0",{cd=1,isCannon=1,release=1,slot=1},{400000,{1,1.68,2},{3,0.2,1,2}}}},type=4},{ai={},camp=1,element=3,passivity={},position=4,professionId=0,property={"1","220","220","80","42","0","0","0.0","0.0","1.0","0.0","0.0","0.0","0.0","1.0","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"},quality=0,roleId=10049,round=0,skillArray={{"11301",0.3,{0},1,1200,0,"0",{cd=0,isCannon=1,release=1,slot=0},{400000,{1,1,2}}},{"11311",0.2,{0},1,800,0,"0",{cd=1,isCannon=1,release=1,slot=1},{200004,{1,0.8,2},{3,0.1,8,2}}}},type=3},{ai={},camp=1,element=1,passivity={},position=6,professionId=0,property={"1","975","975","77","41","0","0","0.0","0.0","1.0","0.0","0.0","0.0","0.0","1.0","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"},quality=0,roleId=10015,round=0,skillArray={{"21401",0.3,{0},1,1200,0,"0",{cd=0,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{"21411",0.2,{0},1,800,0,"0",{cd=1,isCannon=1,release=1,slot=1},{400000,{260,1,2,9,2,0.2},{260,1,2,10,2,0.2},{1,1.8,1}}}},type=1},teamPassive={},teamSkill={}}},fightUnitData={{},{},{},{},{},{}},fightUnitDataAppend={},playerData={{camp=0,element=1,passivity={},position=2,professionId=1,property={1,509,509,65,43,0,88,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},quality=1,roleId=10013,skillArray={{"21201",0.3,{0},1,1200,0,"0",{cd=0,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{"21211",0.2,{0},1,800,0,"0",{cd=3,isCannon=1,release=1,slot=1},{230000,{1,0.87,1},{255,0.2,1}}}},type=1},firstCamp=0,outData="",teamPassive={},teamSkill={}},tankDataAppend={{ai={},camp=0,element=4,passivity={},position=9,professionId=0,property={"50","841","841","99","42","0","118","0.0","0.0","1.0","0.0","0.0","0.0","0.0","1.0","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"},quality=0,roleId=10057,round=2,skillArray={{"41501",0.3,{0},1,1200,0,"0",{cd=0,isCannon=1,release=1,slot=0},{400000,{1,1,1}}},{"41531",0.833,{0.2,0.2,0.2},4,2430,0,"0",{cd=3,isCannon=0,release=2,slot=3},{200211,{211,1,1,6,3,0.1,2}},{200000,{1,1.05,1}},{200221,{3,0.3,4,2}}},{"41511",0.2,{0},1,800,0,"0",{cd=3,isCannon=1,release=1,slot=1},{270000,{1,1.44,1}},{270321,{261,0.4,6,12,0.07,2}}}},type=4}}}) return BattleMain