XGmTestManager = XGmTestManager or {} local Panel local ReLogin = CS.XDebugManager.ReLogin local function Open(name, ...) if not XLoginManager.IsLogin() then XUiManager.TipMsg("请先登录") return end XLuaUiManager.Open(name, ...) end local function OpenActivity() XActivityBriefConfigs.TestOpenActivity() XUiManager.SystemDialogTip( "", "开启活动成功,重新登录生效", XUiManager.DialogType.OnlySure, nil, function() XLoginManager.DoDisconnect() end ) end -----------更新版本信息------------ local TxtVersion local function UpdateVersionInfo() if not TxtVersion then return end if CS.XInfo.Version == CS.XRemoteConfig.ApplicationVersion then TxtVersion.text = string.format("客户端版本\n%s", CS.XRemoteConfig.ApplicationVersion) else TxtVersion.text = string.format("原版本%s\n现版本%s", CS.XInfo.Version, CS.XRemoteConfig.ApplicationVersion) end end --------------------------------- local function AddMoeWar() Panel:AddButton( "萌战主页", function() Open("UiMoeWarMain") end ) Panel:AddButton( "萌战信息界面", function() Open("UiMoeWarMessage") end ) Panel:AddButton( "萌战排行榜", function() Open("UiMoeWarRankingList") end ) Panel:AddButton( "萌战赛程", function() Open("UiMoeWarSchedule") end ) local playerId = 1 local itemCount = 1 local itemNo = 1 Panel:AddInput( "投票Id", function(value) playerId = tonumber(value) end ) Panel:AddInput( "道具数量", function(value) itemCount = tonumber(value) end ) Panel:AddInput( "道具类型", function(value) itemNo = tonumber(value) end ) Panel:AddButton( "萌战投票", function() XDataCenter.MoeWarManager.GetPlayer(playerId):RequestVote(itemNo, itemCount) end ) ---------萌战动画 begin------------ local winnerIndex = 1 local animGroupIds = {} Panel:AddInput( "胜利跑道\nIndex(1/2/3)", function(value) winnerIndex = tonumber(value) end ) for index = 1, 3 do Panel:AddInput( "动画组Id" .. index, function(value) animGroupIds[index] = tonumber(value) end ) end Panel:AddButton( "萌战动画", function() XMoeWarConfig.ReloadAnimationConfigs() XLuaUiManager.Open("UiMoeWarAnimation", animGroupIds, winnerIndex, nil, {}) end ) Panel:AddButton( "萌战全动画", function() XMoeWarConfig.ReloadAnimationConfigs() local allAnimGroupIds = XMoeWarConfig.GetAllAnimationGroupIds() XLuaUiManager.Open("UiMoeWarAnimation", allAnimGroupIds, winnerIndex, nil, {}) end ) local roleIndex local animName Panel:AddInput( "动画名", function(value) animName = value end ) Panel:AddInput( "角色Id", function(value) roleIndex = value end ) Panel:AddButton( "播放动画", function() if not XLuaUiManager.IsUiShow("UiMoeWarMessage") then XLuaUiManager.Open("UiMoeWarMessage") end --XEventManager.DispatchEvent(XEventId.EVENT_MOE_WAR_ANIMATION_TEST, roleIndex, animName) CsXGameEventManager.Instance:Notify(XEventId.EVENT_MOE_WAR_ANIMATION_TEST, roleIndex, animName) end ) ---------萌战动画 end------------ end local function AddSvnFunction() local tool = CS.XExternalTool local runSvn = tool.RunSvn local asynRunTool = asynTask(tool.RunToolInNewThread) local svnGuiTool = "TortoiseProc.exe" local svnTool = tool.SvnPath local checkRevCmd = "info --show-item last-changed-revision " local log = XUiManager.TipMsgEnqueue local manualResolveTip = function() log("如果弹窗有红色列表,请手动解决冲突。如无则请手动关闭") end Panel:AddButton( "更新资源包", function() RunAsyn( function() log("开始更新打包机已打包资源") local oldRev = runSvn(checkRevCmd .. tool.ProductPath .. "File") asynRunTool(svnTool, "cleanup " .. tool.ProductPath .. "File", false) asynRunTool(svnTool, "update --accept tf " .. tool.ProductPath .. "File", false) local newRev = runSvn(checkRevCmd .. tool.ProductPath .. "File") if oldRev ~= newRev then --manualResolveTip() --asynRunTool(svnGuiTool,"/command:resolve /path:"..tool.ProductPath.."File", true) if XLoginManager.IsLogin() then XLuaUiManager.RunMain() else ReLogin() end log("资源有更新,已自动重载并返回主界面") else log("资源无更新,版本号:" .. tonumber(newRev)) end local info = runSvn("log -l 1 --incremental " .. tool.ProductPath .. "File") XUiManager.UiFubenDialogTip("打包机最近打包时间", info) end ) end ) Panel:AddButton( "更新Lua", function() local oldRev = runSvn(checkRevCmd .. tool.ProductPath .. "Lua") runSvn("update --accept mf " .. tool.ProductPath .. "Lua") local newRev = runSvn(checkRevCmd .. tool.ProductPath .. "Lua") if oldRev ~= newRev then ReLogin() local info = runSvn("log -l 10 --incremental " .. tool.ProductPath .. "Lua") XUiManager.UiFubenDialogTip(CS.XTextManager.GetText("TipTitle"), "--Lua有更新,已自动热重载并重登,以下是更新记录\n" .. info) else log("Lua无更新,版本号:" .. tonumber(newRev)) end end ) Panel:AddButton( "更新配置表", function() RunAsyn( function() log("开始更新配置表") local oldRev = runSvn(checkRevCmd .. tool.ProductPath .. "Table") asynRunTool(svnTool, "cleanup " .. tool.ProductPath .. "Table", false) asynRunTool(svnTool, "update --non-interactive " .. tool.ProductPath .. "Table", false) local newRev = runSvn(checkRevCmd .. tool.ProductPath .. "Table") if oldRev ~= newRev then manualResolveTip() asynRunTool(svnGuiTool, "/command:resolve /path:" .. tool.ProductPath .. "Table", true) CS.XDebugManager.ReloadLuaTable() local info = runSvn("log -l 15 --incremental " .. tool.ProductPath .. "Table") XUiManager.UiFubenDialogTip("更新记录", info) log("配置表有更新,已自动重载并重登,请查看近期更新记录") else log("配置表无更新,版本号:" .. tonumber(newRev)) end end ) end ) end local function AddArchiveFunction() Panel:AddSubMenu("SVN操作\n(beta)", AddSvnFunction) Panel:AddSubMenu("萌战相关", AddMoeWar) Panel:AddButton( "开启活动", function() OpenActivity() end ) Panel:AddButton( "模拟Android", function() XUserManager.Platform = XUserManager.PLATFORM.Android end ) Panel:AddButton( "模拟iOS", function() XUserManager.Platform = XUserManager.PLATFORM.IOS end ) Panel:AddButton( "简单分享文字2", function() CS.XHeroShareAgent.Share( function(a) XLog.Debug("share status is ") XLog.Debug(a) end, isShowUi, CS.ShareType.Text, heroSharePlatform, " ", false, nil, nil, nil, "简单分享文字", nil ) end ) Panel:AddButton( "分享文字", function() XPlatformShareManager.ShareByPlatformShareId( platformType, function(a) XLog.Debug("share status is ", a) end, 1, isShowUi ) end ) Panel:AddButton( "分享链接", function() XPlatformShareManager.ShareByPlatformShareId( platformType, function(a) XLog.Debug("share status is ", a) end, 2, isShowUi ) end ) Panel:AddButton( "分享图片", function() local runningPlatform = XUserManager.Platform local dirPath if runningPlatform == XUserManager.PLATFORM.Android then dirPath = CS.UnityEngine.Application.persistentDataPath .. "/../../../../DCIM/" elseif runningPlatform == XUserManager.PLATFORM.IOS then dirPath = CS.UnityEngine.Application.persistentDataPath .. "/" elseif runningPlatform == XUserManager.PLATFORM.Win then dirPath = CS.UnityEngine.Application.persistentDataPath .. "/" end if dirPath then local testPicName = "test.png" local fileFullPath = dirPath .. testPicName XLog.Debug("fileFullPath = ", fileFullPath) XPlatformShareManager.Share( XPlatformShareConfigs.ShareType.Image, platformType, function(a) XLog.Debug("share status is ", a) end, fileFullPath, nil, nil, nil, isShowUi ) else XLog.Debug("dirPath is nil") end end ) Panel:AddButton( "打印平台", function() XLog.Debug("AppPackageName = " .. CS.XAppPlatBridge.GetAppPackageName()) end, 3 ) end local function AddInfo() Panel:AddText( "当前服务器", function(TxtServer) TxtServer.text = string.format("当前服务器\n%s", XServerManager.GetCurServerName()) end ) TxtVersion = Panel:AddText("当前版本", UpdateVersionInfo) Panel:AddText( "已启动时间", function(TxtTime) TxtTime.text = string.format( "已启动时间\n%s", XUiHelper.GetTime( math.floor(CS.UnityEngine.Time.realtimeSinceStartup), XUiHelper.TimeFormatType.DAILY_TASK ) ) end ) Panel:AddText( "用户名", function(TxtUsername) TxtUsername.text = string.format("用户名\n%s", XUserManager.UserName or "未登录") end ) end local function AddServerFunction() local version = 0 Panel:AddInput( CS.XInfo.Version, function(value) version = value end ) Panel:AddButton( "改版本号", function() local reset = version == "" local newVersion = reset and CS.XInfo.Version or version CS.XRemoteConfig.SetVersion(newVersion) UpdateVersionInfo() if newVersion == "1.0.0" then XUiManager.TipMsgEnqueue("版本号被改为" .. newVersion .. '主干!(主干1.0.0,或不填重置)') else XUiManager.TipMsgEnqueue("版本号被改为" .. newVersion .. "分支!(主干1.0.0,或不填重置)") end end ) Panel:AddButton( "重置版本号(远程配置)", function() CS.XUriPrefix.LocalMode = false XUiManager.TipMsg("正在重置远程配置") CS.XRemoteConfig.Reset() XScheduleManager.ScheduleOnce( function() XServerManager.Init() XUiManager.TipMsgEnqueue("版本号被改为" .. CS.XRemoteConfig.ApplicationVersion) UpdateVersionInfo() end, 2200 ) end ) local tool = CS.XExternalTool if not tool or type(tool.ProductPath) == "table" then return end local serverPath = tool.ProductPath .. "Bin/NewServer/Bin/" Panel:AddButton( "开启/重启本地服", function() tool.RunToolInNewThread(serverPath .. "Start.bat", nil, true) end ) Panel:AddButton( "关闭本地服", function() tool.RunToolInNewThread(serverPath .. "Stop.bat", nil, true) end ) Panel:AddButton( "本地服清库", function() XUiManager.SystemDialogTip( CS.XTextManager.GetText("TipTitle"), "是否确定进行清库操作?\n操作后将无法恢复!", XUiManager.DialogType.Normal, nil, function() tool.RunToolInNewThread(serverPath .. "ClearDb.bat", nil, true) end ) end ) end local function AddDebugUse() local uiName = "UiSet" Panel:AddInput( "界面名称", function(value) uiName = value end ) Panel:AddButton( "打开界面", function() Open(uiName) end ) Panel:AddButton( "重载Ui配置表", function() CS.XUiManager.Instance:Reset() ReLogin() end ) ---------新增临时服 begin------------ local ip Panel:AddInput( "临时服IP:", function(value) ip = tostring(value) end ) Panel:AddButton( "新增临时服", function() local result, desc = XServerManager.InsertTempServer(ip) if not result then XUiManager.TipMsg(desc) else XUiManager.TipMsg("成功") end end ) ---------新增临时服 end------------ local keyWord Panel:AddInput( "协议关键字", function(value) keyWord = value end ) Panel:AddButton( "添加协议关键字", function() if string.IsNilOrEmpty(keyWord) then XUiManager.TipMsg("请输入网络协议关键字") else table.insert(XRpc.DebugKeyWords, keyWord) XUiManager.TipMsg("添加成功,实用功能中开启网络调试日志即可查看") end end ) Panel:AddButton( "清空协议关键字", function() XRpc.DebugKeyWords = {} end ) Panel:AddButton( "替换进战Loading界面", function() XDataCenter.FubenManager.OpenFightLoading = function() XEventManager.DispatchEvent(XEventId.EVENT_FIGHT_LOADINGFINISHED) local XArchiveCGEntity = require("XEntity/XArchive/XArchiveCGEntity") XLuaUiManager.Open("UiArchiveCGDetail", {XArchiveCGEntity.New(106013)}, 1) end XDataCenter.FubenManager.CloseFightLoading = function() XLuaUiManager.Remove("UiArchiveCGDetail") end XUiManager.TipMsg("进战界面替换成spine动画成功,重登后恢复") end ) Panel:AddButton("hotfix镜头刷新", function() xlua.hotfix(CS.XCamera, 'Update', function() end) end) Panel:AddButton("还原镜头刷新", function() xlua.hotfix(CS.XCamera, 'Update', CS.XCamera.Update) end) local videoId Panel:AddInput( "VideoId:", function(value) videoId = tonumber(value) end ) Panel:AddButton( "播放视频", function() if videoId then local fight = CS.XFight.Instance XLog.Debug("PlayVideo " .. (fight and "In Fight" or "") .. ", VideoId:" .. tostring(videoId), type(videoId)) if fight then local uiFightVideoPlayer = fight.UiManager:GetUi(typeof(CS.XUiFightVideoPlayer)) if uiFightVideoPlayer == nil then fight.UiManager:GetUi(typeof(CS.XUiFight)):OpenChildUi("UiFightVideoPlayer", fight) uiFightVideoPlayer = fight.UiManager:GetUi(typeof(CS.XUiFightVideoPlayer)) end uiFightVideoPlayer:PlayVideo(videoId, 0) else XDataCenter.VideoManager.PlayMovie(videoId, nil, true, true) end end end ) end local function AddTestUse() local guideId = 50102 Panel:AddInput( "引导Id", function(value) guideId = tonumber(value) end ) Panel:AddButton( "开启引导(强制)", function() XDataCenter.GuideManager:PlayGuide(guideId) end ) Panel:AddButton( "开启引导", function() local guide = XGuideConfig.GetGuideGroupTemplatesById(guideId) XDataCenter.GuideManager.TryActiveGuide(guide) end ) Panel:AddButton( "关闭新手引导", function() XDataCenter.GuideManager.ResetGuide() end ) ---------UI遮罩测试 begin------------ local maskTime = 0 --遮罩计时 local timeId = nil local txtMaskTime = Panel:AddText(string.format("距离上一次遮罩计时:%d秒", maskTime)) local updateTxt = function() if XTool.UObjIsNil(txtMaskTime) then return end txtMaskTime.text = string.format("距离上一次遮罩计时:%d秒", maskTime) end local reset = function() maskTime = 0 if timeId then XScheduleManager.UnSchedule(timeId) timeId = nil end end local addTimer = function() timeId = XScheduleManager.ScheduleForever( function() if XTool.UObjIsNil(txt) then reset() return end maskTime = maskTime + 1 updateTxt() end, XScheduleManager.SECOND ) end Panel:AddButton( "添加UI遮罩", function() reset() updateTxt() addTimer() XLuaUiManager.SetMask(true) end ) Panel:AddButton( "取消UI遮罩", function() updateTxt() XLuaUiManager.SetMask(false) end ) ---------UI遮罩测试 end------------ ---------LUA内存 begin------------ Panel:AddButton( "开始记录LUA内存", function() XLuaMemoryMonitor.StartRecordAlloc() end ) Panel:AddButton( "结束记录LUA内存", function() XLuaMemoryMonitor.StopRecordAlloc() end ) ---------LUA内存 end------------ ---------帧率 begin------------ local frameDefault = 5 local frame = tostring(frameDefault) Panel:AddInput( frameDefault, function(value) frame = value end ) Panel:AddButton( "改帧率", function() local reset = frame == "" local newFrame = reset and frameDefault or frame CS.UnityEngine.Application.targetFrameRate = newFrame local frameRate = CS.XGraphicManager.RenderConst.QualitySettingsData.FrameRate frameRate.HigherFrameRate = newFrame frameRate.HighestFrameRate = newFrame frameRate.MiddleFrameRate = newFrame frameRate.LowFrameRate = newFrame frameRate.HighFrameRate = newFrame UpdateVersionInfo() XUiManager.TipMsgEnqueue("帧率被改为" .. newFrame) end ) Panel:AddButton( "60帧", function() local newFrame = 60 CS.UnityEngine.Application.targetFrameRate = newFrame local frameRate = CS.XGraphicManager.RenderConst.QualitySettingsData.FrameRate frameRate.HigherFrameRate = newFrame frameRate.HighestFrameRate = newFrame frameRate.MiddleFrameRate = newFrame frameRate.LowFrameRate = newFrame frameRate.HighFrameRate = newFrame XUiManager.TipMsgEnqueue("帧率被改为" .. newFrame) end ) ---------帧率 end------------ ---------机器人配置调试 begin------------ --[[ 显示武器共鸣技能、意识共鸣技能、意识超频技能增加的生命/会心/防御/攻击数值 显示成员当前的战斗力 显示伙伴当前的战力、攻击力数值 ]] local robotId = 0 Panel:AddInput( "机器人Id", function(value) robotId = tonumber(value) end ) Panel:AddButton( "查看机器人数据", function() if not XTool.IsNumberValid(robotId) then XUiManager.TipMsg("请先输入robotId!") return end if not XRobotManager.CheckRobotExist(robotId) then XUiManager.TipMsg( "robotId不正确,找不到对应配置,robotId: " .. robotId .. ", 配置路径: " .. XRobotManager.GetConfigPath() ) return end local partner = XRobotManager.GetRobotPartner(robotId) local partnerAttr = not XTool.IsTableEmpty(partner) and partner:GetPartnerAttrMap(partner:GetLevel()) local equipResonanceAttr = XRobotManager.GetRobotResonanceAbilityList(robotId) local equipAwakenAttr = XRobotManager.GetRobotAwakenAbilityList(robotId) local content = string.format( [[ 机器人战力: %d\n 机器人伙伴战力: %d\n 机器人伙伴攻击力: %d\n 武器/意识共鸣增加属性值: %s\n 意识超频增加属性值: %s\n ]], XRobotManager.GetRobotAbility(robotId), XRobotManager.GetRobotPartnerAbility(robotId), not XTool.IsTableEmpty(partnerAttr) and partnerAttr[1].Value or 0, not XTool.IsTableEmpty(equipResonanceAttr) and "详见LOG" or "空", not XTool.IsTableEmpty(equipAwakenAttr) and "详见LOG" or "空" ) XUiManager.UiFubenDialogTip("机器人数据", content) if not XTool.IsTableEmpty(equipResonanceAttr) then XLog.Debug("机器人Id: " .. robotId .. ", 武器/意识共鸣增加属性值: ", equipResonanceAttr) end if not XTool.IsTableEmpty(equipAwakenAttr) then XLog.Debug("机器人Id: " .. robotId .. ", 意识超频增加属性值: ", equipAwakenAttr) end end ) local XRobot = require("XEntity/XRobot/XRobot") XRobot.New(1001) ---------机器人配置调试 end------------ end local function AddActivityUse() Panel:AddToggle( "全境性能测试", function(value) XDataCenter.AreaWarManager.SetPerformanceTesting(value) end ) end local function AddPlannerUse() local cueId local typeId Panel:AddInput( "音频类型", function(value) typeId = tonumber(value) end ) Panel:AddInput( "CueId", function(value) cueId = tonumber(value) end ) local btnPlay = Panel:AddButton( "播放音效", function() if not cueId or not typeId then XUiManager.TipMsg("请填写音频类型(1->BGM、2->音效、3->CV)和CueId后使用,例如填写2、1020将播放进入战斗音效") return end if not XSoundManager.PlayFunc[typeId] then XUiManager.TipMsg("不存在音频类型"..typeId..",请检查是否填写正确") return end CS.XAudioManager.StopAll() XSoundManager.PlayFunc[typeId](cueId) end ) if btnPlay then btnPlay.transform:GetComponent("XUguiPlaySound").enabled = false end Panel:AddButton( "关闭音效", function() CS.XAudioManager.StopAll() end ) local skipId Panel:AddInput( "Skip跳转Id", function(value) skipId = tonumber(value) end ) Panel:AddButton( "开始跳转", function() if skipId then XFunctionManager.SkipInterface(tonumber(skipId)) else XUiManager.TipMsg("请输入正确的SkipId后操作") end end ) Panel:AddButton( "音频配置重载", function() CS.XAudioManager.InitConfig() end ) end local function AddFightUse() local uiName = "UiMultiDimFight" Panel:AddInput( "界面名称", function(value) uiName = value end ) Panel:AddButton( "打开战斗界面", function() local fight = CS.XFight.Instance if not fight then return end fight.UiManager:GetUi(typeof(CS.XUiFight)):OpenChildUi(uiName, fight) end ) end local function AddGuildDormUse() Panel:AddToggle("键盘操作", function(res) XGuildDormConfig.DebugKeyboard = res end) Panel:AddToggle("模拟延迟", function(res) XGuildDormConfig.DebugNetworkDelay = res end) Panel:AddInput("最小延迟(毫秒)", function(value) XGuildDormConfig.DebugNetworkDelayMin = value end) Panel:AddInput("最大延迟(毫秒)", function(value) XGuildDormConfig.DebugNetworkDelayMax = value end) Panel:AddToggle("模拟断线重连(按R键)", function(res) XGuildDormConfig.DebugOpenReconnect = res end) Panel:AddToggle("模拟玩家人数(需重进)", function(res) XGuildDormConfig.DebugFullRole = res end) Panel:AddInput("玩家数量", function(value) XGuildDormConfig.DebugFullRoleCount = value end) Panel:AddToggle("重新生成导航障碍", function(res) XDataCenter.GuildDormManager.ResetRoomNavmeshObstacle() end) Panel:AddToggle("切换新旧公会入口", function(res) XGuildDormConfig.DebugOpenOldUi = res end) end --------------Ui组件创建 begin---------------- function XGmTestManager.Init() Panel = CS.XDebugManager.DebuggerGm Panel:AddSubMenu("本地测试", XGmTestManager.TestFunc) Panel:AddSubMenu("当前信息", AddInfo, true) Panel:AddSubMenu("服务器", AddServerFunction, true) Panel:AddSubMenu("开发专用", AddDebugUse) Panel:AddSubMenu("测试专用", AddTestUse) Panel:AddSubMenu("活动测试", AddActivityUse) Panel:AddSubMenu("策划专用", AddPlannerUse) Panel:AddSubMenu("归档功能", AddArchiveFunction) Panel:AddSubMenu("战斗测试", AddFightUse) Panel:AddSubMenu("公会宿舍", AddGuildDormUse) Panel:AddButton("新旧副本入口切换", function() XFubenConfigs.DebugOpenOldMainUi = not XFubenConfigs.DebugOpenOldMainUi end) Panel:AddButton("新旧成员界面切换", function() XEnumConst.CHARACTER.IS_NEW_CHARACTER = not XEnumConst.CHARACTER.IS_NEW_CHARACTER end) Panel:AddButton("新旧装备界面切换", function() XEnumConst.EQUIP.IS_TEST_V2P6 = not XEnumConst.EQUIP.IS_TEST_V2P6 end) end --------------Ui组件创建 end---------------- function XGmTestManager.TestFunc() --XLoginManager.ResetHearbeatInterval() XLoginManager.SpeedUpHearbeatInterval() do return end local DocumentFilePath = CS.UnityEngine.Application.persistentDataPath .. "/document" local files = CS.XFileTool.GetFiles(DocumentFilePath .. "/" .. "matrix") local appFiles = CS.XFileTool.GetFiles(DocumentFilePath .. "/" .. "launch") local filesLength = files.Length local appFilesLength = appFiles.Length local INDEX = "index" XLog.Debug("11 files:" .. filesLength .. ",files:", files) XLog.Debug("11 appFiles:" .. appFilesLength) -- files:AddRangeWithoutGC(appFiles) -- XLog.Debug("22 files:" .. filesLength) local UpdateTable = {} local length = filesLength + appFilesLength -- for index = 0, length - 1 do for i = 0, length - 1 do -- local i = index local file if i < filesLength then file = files[i] print("111 i: " .. tostring(i) .. ", " .. file) local name = CS.XFileTool.GetFileName(file) UpdateTable[name] = true else i = i - filesLength -- 此处i会在迭代器中被重新复制 file = appFiles[i] print("222 i: " .. tostring(i) .. ", " .. file) end end XLog.Debug("UpdateTable", UpdateTable) for i = 0, appFilesLength - 1 do local file = appFiles[i] local name = CS.XFileTool.GetFileName(file) print("i :" .. tostring(i)..", name:" .. name .. ", file:" .. file) if name == INDEX then goto CONTINUE end local info = UpdateTable[name] -- 更新文件已存在 if info then print("已经更新:" .. name) goto CONTINUE end :: CONTINUE :: end do return end local CsTool = CS.XTool local CsApplication = CS.XApplication local CsGameEventManager = CS.XGameEventManager.Instance local cb = function()end local documentPath = CS.UnityEngine.Application.persistentDataPath .. "/document" -- string.Utf8Len local files = CS.System.IO.Directory.GetFiles(documentPath, "*.zip", CS.System.IO.SearchOption.TopDirectoryOnly) print("[Unzip] DocumentPath:" .. tostring(documentPath) .. ", files.length:" .. tostring(files.Length)) local length = files.Length local function UnzipFile(index) if index >= length then if index > 0 then CsApplication.SetProgress(1) print("[Unzip] Finished.") end cb() return end local file = files[index] local nextIndex = index + 1 if string.find(file, "_resource") then local overwrite = true local password = nil local totalCount = CS.ZipUtility.GetZipEntityCount(file, password) print("[Unzip] Start File: " .. tostring(file)) if (totalCount > 0) then local cancelCB = function() UnzipFile(nextIndex) end local confirmCB = function() local needUnit = false CsGameEventManager:Notify(CS.XEventId.EVENT_LAUNCH_START_DOWNLOAD, totalCount, needUnit) CsApplication.SetProgress(0) local progressCB = function(counter, name) local progress = counter / totalCount CsApplication.SetProgress(progress) print("[Unzip] progress:" .. tostring(counter) .. "/" .. tostring(totalCount) .. ", name:" .. tostring(name) .. ", zipFile: " .. tostring(file) .. ", outputPath:" .. tostring(documentPath)) end local finishCB = function(counter) if counter >= totalCount then print("[Unzip] Completed file:" .. tostring(file)) CS.XFileTool.DeleteFile(file) UnzipFile(nextIndex) end end CS.ZipUtility.UnzipFile(file, documentPath, progressCB, finishCB, overwrite, password) end local text = "检查到本地压缩文件" .. CS.XFileTool.GetFileNameWithoutExtension(file) .. ", 是否进行解压?" CsTool.WaitCoroutine(CsApplication.CoDialog(CsApplication.GetText("Tip"), text, cancelCB, confirmCB)) else print("[Unzip] count <= 0, zipFile: " .. tostring(file)) UnzipFile(nextIndex) end else print("[Unzip] name not Contains '_resource', zipFile: " .. tostring(file)) UnzipFile(nextIndex) end end local index = 0 UnzipFile(index) end