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( "版本号数字", function(value) version = tonumber(value) or 0 end ) Panel:AddButton( "改版本号", function() local newVersion = string.format("1.%d.0", version) CS.XRemoteConfig.SetVersion(newVersion) UpdateVersionInfo() if version == 0 then XUiManager.TipMsgEnqueue("版本号被改为" .. newVersion .. '主干。如需切换到分支,输入单个数字即可,例如输入20表示"1.20分支"') else XUiManager.TipMsgEnqueue("版本号被改为" .. newVersion .. "分支。如需切换到主干,输入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) 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() 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 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 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:AddInput( "摇杆触发阈值", function(value) CS.XUiFightJoystick.TriggerThreshold = tonumber(value) 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) end --------------Ui组件创建 begin---------------- function XGmTestManager.Init() Panel = CS.XDebugManager.DebuggerGm Panel:AddSubMenu("当前信息", AddInfo, true) Panel:AddSubMenu("服务器", AddServerFunction, true) Panel:AddSubMenu("开发专用", AddDebugUse) Panel:AddSubMenu("测试专用", AddTestUse) Panel:AddSubMenu("策划专用", AddPlannerUse) Panel:AddSubMenu("归档功能", AddArchiveFunction) Panel:AddSubMenu("战斗测试", AddFightUse) Panel:AddSubMenu("公会宿舍", AddGuildDormUse) end --------------Ui组件创建 end----------------