From a8ad83a84a06575d947e43a662c7770cb052e7a3 Mon Sep 17 00:00:00 2001 From: CAtlas0784 Date: Wed, 16 Sep 2026 21:40:53 +0700 Subject: [PATCH] fix(client-patch): hook F7/F8 onto gLuaClient frame tick and neutralize reconnect & anti-cheat watchdog --- .../proxy/public/fastpatch_4229938.zip | Bin 6368 -> 7890 bytes .../tools/generate_client_config_patch.js | 285 ++++++++++++++---- 2 files changed, 226 insertions(+), 59 deletions(-) diff --git a/Ananta.Proxy/proxy/public/fastpatch_4229938.zip b/Ananta.Proxy/proxy/public/fastpatch_4229938.zip index d4e848e3ab1a672428809d321ae4cba30d5e1a14..e5af67152c1d8fb73fd4681afbdb813342e94d8d 100644 GIT binary patch delta 6229 zcmV-b7^>&sG15H@P)h>@6aWAK2msWqu?$@S64b0PUD|ET*q#>v02_V)04V^IJs2y0 z?LAF%>o{_E{|c7&A}4xW+wa>|-jqatJY_6fvE(;1nVMC>BqU)?0vr;wpJr-Ox#g5p z<&slsZ#m|YOAbkDf6ad6U!)o!DUbjt%GR6OP2!rGCjpH{1N{MXqXE5m;q)n@96519 z9uUVbQk*>C#F?X%$B6q&XU-DG4+*A!+iXr$miq%J27LSbGM37n)Vz-11Cju%va8mvHR5B+Y6bGLTBWhI6wTjw>NSpE9yHZ z&OD<&CyaLQ@v7%MpfJPxdyeBcqi^o<>RabTmhFkM*hgX5Et^O{_#<;?F~VtoiWYc; zC|ck|kgzy=z?6H8rW{e8n#$bktJ%e9cF`Z5%_d(Cr{0H|_o07vapv$Prez24SL@+; zf@zQ!b=zWHlZMgN>*3BRw|@v zvPwCQ>QxhrQbtiYK%9qojMB6YF&KDDq@kSnEY=7fqlB+C$e1LAPf-YRUvIEvoaysN zG**n4jB4GTCj`?#Be?G`34Xwlp}%RySwfJ8-XnZ9#sNX~iYvy6kF_p;ye#ERo68{x z7U(Raeer*dp&4IIaS{<~AOZ2SPjP~E2AnZE$QJd|zeJR9W)u!K;mFkeAiKNM1@auF zOTy@cvqYC6E-IX(GIgaogR8ms78JN9(wi7G6|FSK-QA9w@_^4i8CrJ-Z)`C zPSaC-mn}RNMTiD@%`8NJDgVIuJzkwBNNCoJ!@RDragNYL$w>*C=4P+S7E;EYTT1xq zj4lYp4om7q?vTbA7dFmGFwYWN8YK9WMEF@!5T-U2Rsc+Cz0jQlw8t{aq01MCDotx- zC;G^3bQq?nz_V8)cK!}l6BMSnUh&paLDI>R%(+%;omu!3-Dnek>0V&|1zw%9N80Vo z-*swj-fnL5w$^4%oULKE6XH2{QUL4h!-U%*6S7#Apz0E&iOu|-#@a9N%430KQiaC) zM75Y4177$1-F}r6RRRjK-adz{w@)JL?PjtHEKLf&@c zv`cB&r35^I>$~KC^fug`zuU=(kKVm+HPl@U@915NX)R=KC(`-y;8n8>zC3toAW5ak zG|yyiS~=xHVW{YKrq>r2muEBY@_PE=Y|;^3+9ts?*<@~?mnRW)JwCgdjjpdI)3ck| zxPNtaStCjirY<~B?rJjbe|a@KyE+?vZR*1?5o@pG#S3SDAiOrm8%&)5aqQqvF-hd+ z47@?<=7E1FJ*bR^%)fWQ7l}~(^Hgk)()z}wAIIUUABGnpyF=jz@B&-xT)dg+t#INr zPE_mNVLE0k6k9Ra8z_>SZzf=CrcFopkp`)-Vf#pbQetGuHpqrl5+y|U3Zvw6i>)`4 zER)?DRZ0UX`MUjB?YJ%ymc=H7>CQ&#Em1OJP;*IAK1LLW(&aS_*#;}koOJm=pa%Kg zJQK}bd_d_4V}6bvgyX*j_H9*$P!VylD~<{viJROL3IU-010rGF5OI_&FfTxwB-M() zAIBblqLU?iR1u>%eg?MN6z>R`D#BIPZ$P>oXQt?02F+}osRFn}ZfDL};+Nr?CV262 z3?ZsCRU$}FB$h}>UFTDII==04&j z@k4xt9&T91HH*I4niuFq(5a5|5<*E^p{xvlz@1x`-&*JMoh`xYY}Y@NxpVo|8?m3g z{OXN+5vS^BcZA||wm3x`8CMn~m{jNp5uMgadNcrgYGtT~h z3Z3T|4W`Qs2VVII#a>AK`zf2^5XUUx+qpV9Z3}NAPt?4Ldzm4d1yyR@VS2^*ZHg~O zTGUk!KSwAo0{dc*b%i2)LbtUt_XZOG_w6$*1t2412Ir+9EyouSTOx17vgW^S>xEC$)?1ItqD@k6D5zC0QkWUJ{Ciwc#W zODNbF);FLmibjm$)fr{kV!0JwZNZePG2}REIE2@Lz&RQt{~n62vZ(Rg=e_uAoZA*e zEIua zq3|IwxRabBVJ~WhPYXRw zFdsoUrZVXh%)Km0Fy#U>0N6NS0ByA(sC}2C$qOu2FK;Or7Oy)yaSnI0f~Xu9fe0eD zQu#rPUhJkz_9)ze?5;QJ!eRwFs2`UbAjHRwmD2|YSza+H0L9%gOYlG!jW`s|K zf|i^Uep=5taF6zP&;uMYJapf@>p2JFznw0srtRQQ&2aNkOEcYD#Ds<0Ycz?X#%>cu z^)3VSdB70tng~BV!!X*ycmjEIOjt0?^+FQe)%#Nm!6aQmcQUC2?sMQi4aBx&&CZr; zv^Cx?3?!F-^`7&pL6J6CicxlfWhZh`SH8QKY(ac;soNinKcWglE~g%&bF!#>$>H*v zjgzsVADEi~V_`meV<)f;p;%g+=NJQ<1l999glyDPG(xm0i}HI$_9?1CwwbFI9d?`X zyH_lUP*~PI|4>4+CVEh7UDNar9$UWTLC!!P| z>m_b~k;S8xx)bbY3Ea?Yu69q+1ED@C_J*w>-C>>(qKZdgNYdK4?B_>)&WRI5a5^|$ z#n=iq577dS@m}gjYWii795zp@y1{dBy$GZ3fY5-@#W?`DSB#FcyO8+DQ#Pc$yYKw@ zrY6PM%N9n1m{WWzZ~DT}&It~KZf6!?j(yI5lC;y4R2n5wwA^sC8WM547(k(ek8oAI z8${MK%n;y(Jj17BFT^M@$T9qx%JLz3;%-1?NInb0He-UOEyv`s@Nq4_yl$_mDmADo%@ZH<_QsSAu#nGx z9kG%BjZ-ioa4#M1@>7a^F7wHZ%fP0b!Upq0|5uuybLMAhOByFs(gN)$rF zrCQRc*kCu=i*bIpyiNj?$Bc>`2d5GE=rC;pgC}QAre&}^M!OE zr>y^gI7&`&h!>@TS}F?%N#vb>);rRU8XNFG2Yp-i-?8X!o5MZ0ZO!PQY$Y_fR;Z3| zjlYNmlqK#gDR^%S)il611#8N4x^;WQ!Ct-6kgEbKE#!^{#>{4Lb|L9@gDb-ifmoLE zgwRD7TDY9V>ERTA5@&y%+M_46)(Fssr{i?s zAAY2Kflh3Gne5k{6B=|;81|gbfB)Uz|KT^kmT$G_wWT?*0sQWt{`I&2`M0*(-~ZP? z{{BDy*;ZR@@hsKro*RR%Tc_)a4V&usREv&f!eK6KK$@%`2JU3$U5`fBSF^$OXds_Y zuwO<{yF4W+q?8tKwUuXoOj^0@98}k`ttkF}ifqVIb887ImCFuQrQ9lTSz$yOn^a5P z8CZpL5^|haCds(8wphQ8F+Hd7U&1VyPmxLkuSt=)l~90nl+3wVV1>uxN$=X3C=aLVwq)tf-}US_h(D^_qRK6dfryosGH= zsRK0xZIpyJs0eRX5MC<4AAa-e-~GeC{Py4f&895?N^RP}E2`2$7j~crB^PUIP?T3$ z+Dh)*-KSS0B)PwTx6tFa)gt!>rz}f+duC9cGGTAx=4n7n6yW4blth`l2)}(Z+il9t zBn(rCc}Xne$#tv#>unmJICwf+wvVZ|Vad}tvO|VEfge8!JK)Qn>4`A~pC9FX%O8#N zBe6jjmJ;fmzo{9=`um;m=4T{!Tb)mJsV&4zb+nz zv%HC+yGmaY8nDN1BeLq;87Qs1dvQBdKSKYnmx5^UIC-(wt^@pl3bju;(1Ul6w(g^K3dCom~#E&W>v; zRNVQ6qb3c<>;3ks2I28g$%B>oUDZOj_&&R2DCpCF0P?RaVq9x_Y--v?$)X2)?AkoZ zDQQQNNCC^sT9PtWng9vr-cJ)0p-R_kNt=FE_?DfT9@nTBwCUOgZs_?LLh0R3C*Il9 zg)&bm$RhC19nNSL-QlE4<0iqCt=HD-^V#C-7}GYUxaa)fJit;SMkVR{@fi~S(<)tM zT@>_xs3k&}M1h5Z${Jb%cjYXw#Cf*-9ZLCAA3rq-Uwqhe;-j7uzg){;1V44r)sP;$*Ls@Ipb`KQ$Ap63jel;aeeWgdwa-#UpVrS1EZG+@5vJ91a2v`!}h{CbOL5| zNb|tg9PG;`ghKLpmo#2g08}tmf4*>`eQq*-rhJD1Rzbcw{8le<&vM3Z%=s1!H@0nT z*5Hh9o7vrX3cl{kAyp04&eVJq#T9Kh648bO)z_0SC(e=FYv)Z442SJf0#tM_QS?nP8|ILI%(m`T*%&1k@StYfXsqpk~E=h)e! zv6lE|{uLY*$Thbb5W}IC-n`qH#ORTK;=qx79iATNLH**Kpx|HYE7g^oNwTvkiBt7< zUA0&p6%;iLNo%VP35s?(o_e-VWzSJWFANX4ZyCI3y&au=F}%E-ot_PDFSdvblt%|m zm|!moK&5`?_b7k-6BlmSi{ro2#gck( z0iq=RhJ4!q2Q!lU1|fUINjHsu5|^ULa*eKd=5K%?oge_sQjb??&*|K;V5J|tK+PQa z*j%&3D6rHZl9+4o%7QGtC)852#FP_r9cP)jA|!}5o*|Re15uKR&-K3B*c4-r92d;&|Qm?6!jLV*>FM$sw&^r4O-c?;x9M) ziWYCtjdtd(V%VTxcMV_G&-H1GyRUHzKDXZC!qsNBr`Q1iuT*qdlk-M|H8hhubzeXCGws-GLS?bDyC;$05D8MJ2jD~V3_B&VunYU;{h z2DPLoUsf2h9t(MY&mkIxy~MH$NiUH-LCn`6#Y8raQKiBA5cpJ1QY-O00;ootg~JdgaiWAtdryyIS$mUFkRYh%-Eh6000|)lPefW zAk?fdU2$JO^fCkh0CNfe05kvq00000000000Jecd8Ix`kHj~O25C+H{00000q&oy~ delta 4672 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 Cw+&MO diff --git a/Ananta.Proxy/proxy/tools/generate_client_config_patch.js b/Ananta.Proxy/proxy/tools/generate_client_config_patch.js index b29b206..0dfd1e3 100644 --- a/Ananta.Proxy/proxy/tools/generate_client_config_patch.js +++ b/Ananta.Proxy/proxy/tools/generate_client_config_patch.js @@ -121,6 +121,58 @@ if (forceSwitches) { gameSwitchDefaults.map((name) => `M.${name} = true\n`).join("") + `\n` + `gGameSwitch = M\n\n` + +`local ProcessDebugCommand\n` + +`local _lastHotkeyFrame = -1\n` + +`local function CheckCustomHotkeys()\n` + +` pcall(function()\n` + +` if not UnityEngine or not UnityEngine.Input then return end\n` + +` local curFrame = UnityEngine.Time and UnityEngine.Time.frameCount or -1\n` + +` if curFrame == _lastHotkeyFrame then return end\n` + +` _lastHotkeyFrame = curFrame\n\n` + +` local f8 = false\n` + +` local f7 = false\n` + +` local isShift = false\n` + +` pcall(function()\n` + +` f8 = UnityEngine.Input.GetKeyDown("f8")\n` + +` f7 = UnityEngine.Input.GetKeyDown("f7")\n` + +` isShift = UnityEngine.Input.GetKey("left shift") or UnityEngine.Input.GetKey("right shift")\n` + +` end)\n` + +` if not f8 and UnityEngine.KeyCode then\n` + +` pcall(function() f8 = UnityEngine.Input.GetKeyDown(UnityEngine.KeyCode.F8) end)\n` + +` end\n` + +` if not f7 and UnityEngine.KeyCode then\n` + +` pcall(function() f7 = UnityEngine.Input.GetKeyDown(UnityEngine.KeyCode.F7) end)\n` + +` end\n` + +` if not isShift and UnityEngine.KeyCode then\n` + +` pcall(function() isShift = UnityEngine.Input.GetKey(UnityEngine.KeyCode.LeftShift) or UnityEngine.Input.GetKey(UnityEngine.KeyCode.RightShift) end)\n` + +` end\n` + +` if not f8 and KeyCode then\n` + +` pcall(function() f8 = UnityEngine.Input.GetKeyDown(KeyCode.F8) end)\n` + +` end\n` + +` if not f7 and KeyCode then\n` + +` pcall(function() f7 = UnityEngine.Input.GetKeyDown(KeyCode.F7) end)\n` + +` end\n` + +` if not f8 then\n` + +` pcall(function() f8 = UnityEngine.Input.GetKeyDown(289) end)\n` + +` end\n` + +` if not f7 then\n` + +` pcall(function() f7 = UnityEngine.Input.GetKeyDown(288) end)\n` + +` end\n` + +` if not isShift then\n` + +` pcall(function() isShift = UnityEngine.Input.GetKey(304) or UnityEngine.Input.GetKey(303) end)\n` + +` end\n\n` + +` if f8 then\n` + +` if ProcessDebugCommand then ProcessDebugCommand("TOGGLE_CLOTHES") end\n` + +` end\n` + +` if f7 then\n` + +` if isShift then\n` + +` if ProcessDebugCommand then ProcessDebugCommand("OPEN_MONSTER_PANEL") end\n` + +` else\n` + +` if ProcessDebugCommand then ProcessDebugCommand("SPAWN_ENEMY") end\n` + +` end\n` + +` end\n` + +` end)\n` + +`end\n\n` + `-- Bypass CBT date expiration for Gacha pools and unlock all map/systems\n` + `local function ApplyAllGlobalHooks()\n` + ` pcall(function()\n` + @@ -187,8 +239,6 @@ gameSwitchDefaults.map((name) => `M.${name} = true\n`).join("") + ` if gMapSystem then\n` + ` gMapSystem.CanShowVehicleNavRoute = function(self) return true end\n` + ` gMapSystem.CheckCanShowVehicleNavLine = function(self) return true end\n` + -` pcall(function() gMapSystem:GmSwitchFlag("FogMap", false) end)\n` + -` pcall(function() gMapSystem:GmSwitchFlag("ShowAllMapArea", true) end)\n` + ` if gMapSystem.fogMap then\n` + ` gMapSystem.fogMap.IsUnlocked = function(self, sceneId, x, z) return true end\n` + ` end\n` + @@ -343,62 +393,142 @@ gameSwitchDefaults.map((name) => `M.${name} = true\n`).join("") + ` if origOnClosePhoto then return origOnClosePhoto(self, ...) end\n` + ` end\n` + ` end\n` + -` if gHudMgr and not gHudMgr._customTickHooked then\n` + -` gHudMgr._customTickHooked = true\n` + -` local origHudUpdate = gHudMgr.Update\n` + -` gHudMgr.Update = function(self, ...)\n` + -` if origHudUpdate then origHudUpdate(self, ...) end\n` + -` pcall(function()\n` + -` if UnityEngine and UnityEngine.Input and UnityEngine.KeyCode then\n` + -` if UnityEngine.Input.GetKeyDown(UnityEngine.KeyCode.F8) then\n` + -` if ProcessDebugCommand then ProcessDebugCommand("TOGGLE_CLOTHES") end\n` + -` end\n` + -` if UnityEngine.Input.GetKeyDown(UnityEngine.KeyCode.F7) then\n` + -` if ProcessDebugCommand then ProcessDebugCommand("SPAWN_ENEMY:40900579:0:1") end\n` + -` end\n` + -` end\n` + -` end)\n` + +` if gLuaClient and not gLuaClient._hotkeyHooked then\n` + +` gLuaClient._hotkeyHooked = true\n` + +` local oldClientUpdate = gLuaClient.OnUpdate\n` + +` gLuaClient.OnUpdate = function(self, ...)\n` + +` if oldClientUpdate then oldClientUpdate(self, ...) end\n` + +` if CheckCustomHotkeys then CheckCustomHotkeys() end\n` + ` end\n` + ` end\n` + +` if gLuaClient and gLuaClient.ForceUpdateArray and not gLuaClient._hotkeyForceRegistered then\n` + +` gLuaClient._hotkeyForceRegistered = true\n` + +` table.insert(gLuaClient.ForceUpdateArray, function()\n` + +` if CheckCustomHotkeys then CheckCustomHotkeys() end\n` + +` end)\n` + +` end\n` + ` end)\n` + ` pcall(function()\n` + -` if CS and CS.L50 and CS.L50.Script and CS.L50.Script.LX6 and CS.L50.Script.LX6.Security then\n` + -` local sec = CS.L50.Script.LX6.Security\n` + -` if sec.DavinciReport then\n` + -` sec.DavinciReport.Send = function() end\n` + -` sec.DavinciReport.Report = function() end\n` + +` local dm = CS and CS.L50 and CS.L50.Script and CS.L50.Script.LX6 and CS.L50.Script.LX6.Security and CS.L50.Script.LX6.Security.DavinciMgr and CS.L50.Script.LX6.Security.DavinciMgr.Instance\n` + +` if dm then\n` + +` pcall(function()\n` + +` local t = dm:GetType()\n` + +` local flags = 36\n` + +` pcall(function() flags = System.Reflection.BindingFlags.NonPublic:ToInt() + System.Reflection.BindingFlags.Instance:ToInt() end)\n` + +` local fDet = t:GetField("_detectors", flags)\n` + +` if fDet then\n` + +` local list = fDet:GetValue(dm)\n` + +` if list then list:Clear() end\n` + +` end\n` + +` local fCol = t:GetField("_collectors", flags)\n` + +` if fCol then\n` + +` local list = fCol:GetValue(dm)\n` + +` if list then list:Clear() end\n` + +` end\n` + +` end)\n` + +` end\n` + +` end)\n` + +` pcall(function()\n` + +` local nm = (CS and CS.LX6 and CS.LX6.Engine and CS.LX6.Engine.NetworkManager and CS.LX6.Engine.NetworkManager.Instance) or (gCS and gCS.NetworkManager and gCS.NetworkManager.Instance)\n` + +` if nm then\n` + +` nm.CheckNetwork = false\n` + +` if CS and CS.LX6 and CS.LX6.Engine and CS.LX6.Engine.NetworkManager then\n` + +` CS.LX6.Engine.NetworkManager.SilentReconnectEnabled = true\n` + ` end\n` + -` if sec.DavinciMgr then\n` + -` sec.DavinciMgr.CheckTimeScale = function() end\n` + -` sec.DavinciMgr.ReportTimeScale = function() end\n` + -` sec.DavinciMgr.CheckSpeed = function() end\n` + +` pcall(function()\n` + +` local t = nm:GetType()\n` + +` local flags = 36\n` + +` pcall(function() flags = System.Reflection.BindingFlags.NonPublic:ToInt() + System.Reflection.BindingFlags.Instance:ToInt() end)\n` + +` local fFocus = t:GetField("checkFocusChanged", flags)\n` + +` if fFocus then fFocus:SetValue(nm, false) end\n` + +` local fPing = t:GetField("checkPingpongTimeOut", flags)\n` + +` if fPing then fPing:SetValue(nm, false) end\n` + +` local fCheckNet = t:GetField("checkNetwork", flags)\n` + +` if fCheckNet then fCheckNet:SetValue(nm, false) end\n` + +` if nm.CancelDelayShowReconnectPanel then nm:CancelDelayShowReconnectPanel() end\n` + +` if nm.ClearCheckNeedReconnect then nm:ClearCheckNeedReconnect() end\n` + +` end)\n` + +` end\n` + +` end)\n` + +` pcall(function()\n` + +` local lmCS = (CS and CS.LX6 and CS.LX6.Manager and CS.LX6.Manager.LoginManager and CS.LX6.Manager.LoginManager.Instance) or (gCS and gCS.LoginManager and gCS.LoginManager.Instance)\n` + +` if lmCS then\n` + +` lmCS.CheckLoginConnected = false\n` + +` pcall(function()\n` + +` if lmCS.ClearReconnectState then lmCS:ClearReconnectState() end\n` + +` if lmCS.ClearLoginTimeoutCo then lmCS:ClearLoginTimeoutCo() end\n` + +` end)\n` + +` end\n` + +` local lm = gLoginManager or (GroupName2Class and GroupName2Class.LoginManager) or C_LoginManager\n` + +` if lm then\n` + +` lm.CheckNetworkState = function() end\n` + +` lm.OnUpdate_CheckNet = function() end\n` + +` lm.StopReconCo = function() end\n` + +` lm.DoKickToLogin = function() end\n` + +` lm.KickToLogin = function() end\n` + +` lm.RetryServerInfo = function() return true end\n` + +` end\n` + +` end)\n` + +` pcall(function()\n` + +` local gu = (CS and CS.LX6 and CS.LX6.Utils and CS.LX6.Utils.GuiUtils) or (gCS and gCS.GuiUtils)\n` + +` if gu then\n` + +` gu.ShowReconnectMessage = function() end\n` + +` gu.ShowDisconnectMessage = function() end\n` + +` gu.ShowServerDonw = function() end\n` + +` end\n` + +` if gClientToAvatarDelegate then gClientToAvatarDelegate.DavinciCode = function() end end\n` + +` if ClientToAvatarDelegate then ClientToAvatarDelegate.DavinciCode = function() end end\n` + +` end)\n` + +` pcall(function()\n` + +` local bombStore = GroupName2Class and GroupName2Class.CommonBombStore or C_CommonBombStore\n` + +` if bombStore and not bombStore._reconnectHooked then\n` + +` bombStore._reconnectHooked = true\n` + +` local oldOnShow = bombStore.OnShow\n` + +` bombStore.OnShow = function(self, panelId, data)\n` + +` if data then\n` + +` local t1 = tostring(data.tips1Text or "")\n` + +` local t2 = tostring(data.tips2Text or "")\n` + +` local cBtn = tostring(data.confirmBtnText or "")\n` + +` local all = t1 .. " " .. t2 .. " " .. cBtn\n` + +` if string.find(all, "重连") or string.find(all, "Reconnect") or string.find(all, "断开") or string.find(all, "网络") or string.find(all, "Network") or string.find(all, "connect") then\n` + +` pcall(function()\n` + +` if gPanelManager then gPanelManager:Close(panelId or gPanelId.S_COMMON_BOMB_PANEL) end\n` + +` if gDisplayMessageMgr then gDisplayMessageMgr:CloseBomb() end\n` + +` end)\n` + +` return\n` + +` end\n` + +` end\n` + +` if oldOnShow then return oldOnShow(self, panelId, data) end\n` + ` end\n` + ` end\n` + -` if CS and CS.LX6 and CS.LX6.Security then\n` + -` local sec = CS.LX6.Security\n` + -` if sec.DavinciReport then\n` + -` sec.DavinciReport.Send = function() end\n` + -` sec.DavinciReport.Report = function() end\n` + -` end\n` + -` if sec.DavinciMgr then\n` + -` sec.DavinciMgr.CheckTimeScale = function() end\n` + -` sec.DavinciMgr.ReportTimeScale = function() end\n` + -` sec.DavinciMgr.CheckSpeed = function() end\n` + +` if gPanelManager and not gPanelManager._bombFilterHooked then\n` + +` gPanelManager._bombFilterHooked = true\n` + +` local oldCheckShow = gPanelManager.CheckShow\n` + +` gPanelManager.CheckShow = function(self, panelId, params, ...)\n` + +` if panelId == (gPanelId and gPanelId.S_COMMON_BOMB_PANEL) and params then\n` + +` local t1 = tostring(params.tips1Text or "")\n` + +` local t2 = tostring(params.tips2Text or "")\n` + +` local cBtn = tostring(params.confirmBtnText or "")\n` + +` local all = t1 .. " " .. t2 .. " " .. cBtn\n` + +` if string.find(all, "重连") or string.find(all, "Reconnect") or string.find(all, "断开") or string.find(all, "网络") or string.find(all, "Network") or string.find(all, "connect") then\n` + +` return nil\n` + +` end\n` + +` end\n` + +` if oldCheckShow then return oldCheckShow(self, panelId, params, ...) end\n` + ` end\n` + ` end\n` + -` if DavinciReport then\n` + -` DavinciReport.Send = function() end\n` + -` DavinciReport.Report = function() end\n` + -` end\n` + -` if DavinciMgr then\n` + -` DavinciMgr.CheckTimeScale = function() end\n` + -` DavinciMgr.ReportTimeScale = function() end\n` + -` DavinciMgr.CheckSpeed = function() end\n` + -` end\n` + -` if gDavinciMgr then\n` + -` gDavinciMgr.CheckTimeScale = function() end\n` + -` gDavinciMgr.ReportTimeScale = function() end\n` + -` gDavinciMgr.CheckSpeed = function() end\n` + +` if gDisplayMessageMgr and not gDisplayMessageMgr._bombFilterHooked then\n` + +` gDisplayMessageMgr._bombFilterHooked = true\n` + +` local oldShowBomb = gDisplayMessageMgr.ShowBomb\n` + +` gDisplayMessageMgr.ShowBomb = function(self, params)\n` + +` if params and params.tips1Text and type(params.tips1Text) == "string" then\n` + +` local t = params.tips1Text\n` + +` if string.find(t, "重连") or string.find(t, "Reconnect") or string.find(t, "网络连接已断开") or string.find(t, "network") or string.find(t, "Network") then\n` + +` return\n` + +` end\n` + +` end\n` + +` if oldShowBomb then return oldShowBomb(self, params) end\n` + +` end\n` + ` end\n` + ` end)\n` + ` pcall(function()\n` + @@ -414,7 +544,7 @@ gameSwitchDefaults.map((name) => `M.${name} = true\n`).join("") + ` end\n` + ` end)\n` + `end\n\n` + -`local function ProcessDebugCommand(cmd)\n` + +`ProcessDebugCommand = function(cmd)\n` + ` if not cmd or type(cmd) ~= "string" then return end\n` + ` if cmd == "UNSTUCK_BLACKSCREEN" then\n` + ` pcall(function()\n` + @@ -454,9 +584,24 @@ gameSwitchDefaults.map((name) => `M.${name} = true\n`).join("") + ` gVideoManager:PlayVideo(numId or arg)\n` + ` end\n` + ` end)\n` + -` elseif string.sub(cmd, 1, 12) == "SPAWN_ENEMY:" then\n` + -` local p1, p2, p3 = string.match(string.sub(cmd, 13), "([^:]+):?([^:]*):?([^:]*)")\n` + -` local enemyId = tonumber(p1) or 40900579\n` + +` elseif string.sub(cmd, 1, 11) == "SPAWN_ENEMY" then\n` + +` local p1, p2, p3 = string.match(string.sub(cmd, 12), "^:?([^:]*):?([^:]*):?([^:]*)")\n` + +` local reqId = tonumber(p1)\n` + +` local enemyId = reqId or (function()\n` + +` local id = 40900579\n` + +` pcall(function()\n` + +` if LTConfig and LTConfig.AutoTestBossTestConfig and LTConfig.AutoTestBossTestConfig.count and LTConfig.AutoTestBossTestConfig.count > 0 then\n` + +` for i = 0, LTConfig.AutoTestBossTestConfig.count - 1 do\n` + +` local cfg = LTConfig.AutoTestBossTestConfig.LoadAt(i)\n` + +` if cfg and cfg.BossId and #cfg.BossId > 0 and cfg.BossId[1] and cfg.BossId[1].EnemyId then\n` + +` id = cfg.BossId[1].EnemyId\n` + +` return\n` + +` end\n` + +` end\n` + +` end\n` + +` end)\n` + +` return id\n` + +` end)()\n` + ` local camp = tonumber(p2) or 0\n` + ` if camp == 2 then camp = 0 end\n` + ` local count = tonumber(p3) or 1\n` + @@ -468,12 +613,28 @@ gameSwitchDefaults.map((name) => `M.${name} = true\n`).join("") + ` elseif gCS and gCS.GmUtils and gCS.GmUtils.AddEnemy then\n` + ` gCS.GmUtils.AddEnemy(enemyId)\n` + ` end\n` + -` if gClientToGameSceneGMDelegate then\n` + +` if gClientToGameSceneGMDelegate and gClientToGameSceneGMDelegate.GmAddEnemyByPlayer then\n` + ` pcall(function() gClientToGameSceneGMDelegate:GmAddEnemyByPlayer(enemyId, camp) end)\n` + ` end\n` + -` if gCS and gCS.MessageTipsMgr and gCS.MessageTipsMgr.ShowMessageTips then\n` + -` gCS.MessageTipsMgr:ShowMessageTips("Spawned Enemy ID: " .. enemyId)\n` + +` pcall(function()\n` + +` if gDisplayMessageMgr and gDisplayMessageMgr.ShowMessageContent then\n` + +` gDisplayMessageMgr:ShowMessageContent("Spawned Enemy ID: " .. tostring(enemyId))\n` + +` end\n` + +` if gCS and gCS.MessageTipsMgr and gCS.MessageTipsMgr.ShowMessageTips then\n` + +` gCS.MessageTipsMgr:ShowMessageTips("Spawned Enemy ID: " .. tostring(enemyId))\n` + +` end\n` + +` end)\n` + +` end)\n` + +` elseif cmd == "OPEN_MONSTER_PANEL" then\n` + +` pcall(function()\n` + +` if gPanelManager and gPanelId and gPanelId.S_SKILL_DEBUG_PANEL then\n` + +` gPanelManager:CheckShow(gPanelId.S_SKILL_DEBUG_PANEL, { ShowAddEnemy = true })\n` + ` end\n` + +` pcall(function()\n` + +` if gDisplayMessageMgr and gDisplayMessageMgr.ShowMessageContent then\n` + +` gDisplayMessageMgr:ShowMessageContent("Opened Monster Spawn Menu")\n` + +` end\n` + +` end)\n` + ` end)\n` + ` elseif cmd == "TOGGLE_CLOTHES" then\n` + ` pcall(function()\n` + @@ -496,9 +657,15 @@ gameSwitchDefaults.map((name) => `M.${name} = true\n`).join("") + ` end\n` + ` end\n` + ` end\n` + -` if gCS and gCS.MessageTipsMgr and gCS.MessageTipsMgr.ShowMessageTips then\n` + -` gCS.MessageTipsMgr:ShowMessageTips(_G._clothesHidden and "Outfit Hidden (Base Body)" or "Outfit Shown")\n` + -` end\n` + +` pcall(function()\n` + +` local tip = _G._clothesHidden and "Outfit Hidden (Base Body)" or "Outfit Shown"\n` + +` if gDisplayMessageMgr and gDisplayMessageMgr.ShowMessageContent then\n` + +` gDisplayMessageMgr:ShowMessageContent(tip)\n` + +` end\n` + +` if gCS and gCS.MessageTipsMgr and gCS.MessageTipsMgr.ShowMessageTips then\n` + +` gCS.MessageTipsMgr:ShowMessageTips(tip)\n` + +` end\n` + +` end)\n` + ` end)\n` + ` end\n` + `end\n\n` +