From 3fd7922ac86ee85a6e678e097fc6d2eacdb367de Mon Sep 17 00:00:00 2001 From: CAtlas0784 Date: Thu, 17 Sep 2026 22:25:49 +0700 Subject: [PATCH] feat(map): implement 2-click pin and warp feature on map --- .../proxy/public/fastpatch_4229938.zip | Bin 9693 -> 9896 bytes .../tools/generate_client_config_patch.js | 76 ++++++++++++------ 2 files changed, 51 insertions(+), 25 deletions(-) diff --git a/Ananta.Proxy/proxy/public/fastpatch_4229938.zip b/Ananta.Proxy/proxy/public/fastpatch_4229938.zip index c103181b5ae3085e133dc24b6f666065f55609fc..00554665d1acf2e0e5bc883256a10bd12b756e84 100644 GIT binary patch delta 8233 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 `M.${name} = true\n`).join("") + ` mapStore._teleportHooked = true\n` + ` local origOnShow = mapStore.OnShow\n` + ` mapStore.OnShow = function(self, ...)\n` + +` self._pendingPin = nil\n` + ` pcall(function()\n` + ` if self.fogNode then self.fogNode:SetActive(false) end\n` + ` if self.fogRoot then self.fogRoot:SetActive(false) end\n` + @@ -227,33 +228,48 @@ gameSwitchDefaults.map((name) => `M.${name} = true\n`).join("") + ` isAlt = UnityEngine.Input.GetKey(UnityEngine.KeyCode.LeftAlt) or UnityEngine.Input.GetKey(UnityEngine.KeyCode.RightAlt) or UnityEngine.Input.GetKey(308) or UnityEngine.Input.GetKey(307)\n` + ` end\n` + ` end)\n` + -` if isAlt or (evtData and evtData.button == 1) then\n` + -` local worldX, worldZ = nil, nil\n` + -` pcall(function()\n` + -` local uiPos = self.GetPointerUIPos and self:GetPointerUIPos()\n` + -` local mousePos = (evtData and evtData.position) or (UnityEngine and UnityEngine.Input and UnityEngine.Input.mousePosition)\n` + -` if not uiPos and mousePos and gCS and gCS.LuaUtils and self.bindData and self.bindData.rootRT then\n` + -` uiPos = gCS.LuaUtils.TransformScreenPointToUI(self.bindData.rootRT, mousePos)\n` + -` end\n` + -` if uiPos and self.TransformUIToTex then\n` + -` local texPos = self:TransformUIToTex(uiPos)\n` + -` if texPos then\n` + -` if self.bindData and self.bindData.bigWorldBg and self.bindData.bigWorldBg.LuaTryGetWorldPos then\n` + -` local suc, areaId, wx, wz = self.bindData.bigWorldBg:LuaTryGetWorldPos(texPos.x, texPos.y)\n` + -` if suc and wx and wz and (math.abs(wx) > 0.1 or math.abs(wz) > 0.1) then\n` + -` worldX, worldZ = wx, wz\n` + -` end\n` + +` local isRightClick = (evtData and evtData.button == 1)\n` + +` local worldX, worldZ = nil, nil\n` + +` pcall(function()\n` + +` local uiPos = self.GetPointerUIPos and self:GetPointerUIPos()\n` + +` local mousePos = (evtData and evtData.position) or (UnityEngine and UnityEngine.Input and UnityEngine.Input.mousePosition)\n` + +` if not uiPos and mousePos and gCS and gCS.LuaUtils and self.bindData and self.bindData.rootRT then\n` + +` uiPos = gCS.LuaUtils.TransformScreenPointToUI(self.bindData.rootRT, mousePos)\n` + +` end\n` + +` if uiPos and self.TransformUIToTex then\n` + +` local texPos = self:TransformUIToTex(uiPos)\n` + +` if texPos then\n` + +` if self.bindData and self.bindData.bigWorldBg and self.bindData.bigWorldBg.LuaTryGetWorldPos then\n` + +` local suc, areaId, wx, wz = self.bindData.bigWorldBg:LuaTryGetWorldPos(texPos.x, texPos.y)\n` + +` if suc and wx and wz and (math.abs(wx) > 0.1 or math.abs(wz) > 0.1) then\n` + +` worldX, worldZ = wx, wz\n` + ` end\n` + -` if not worldX and self.TryTransformTexToWorld then\n` + -` local areaId, wPos = self:TryTransformTexToWorld(texPos)\n` + -` if wPos and (math.abs(wPos.x) > 0.1 or math.abs(wPos.z) > 0.1) then\n` + -` worldX, worldZ = wPos.x, wPos.z\n` + -` end\n` + +` end\n` + +` if not worldX and self.TryTransformTexToWorld then\n` + +` local areaId, wPos = self:TryTransformTexToWorld(texPos)\n` + +` if wPos and (math.abs(wPos.x) > 0.1 or math.abs(wPos.z) > 0.1) then\n` + +` worldX, worldZ = wPos.x, wPos.z\n` + ` end\n` + ` end\n` + ` end\n` + -` end)\n` + -` if worldX and worldZ and (math.abs(worldX) > 0.1 or math.abs(worldZ) > 0.1) then\n` + +` end\n` + +` end)\n` + +` if worldX and worldZ and (math.abs(worldX) > 0.1 or math.abs(worldZ) > 0.1) then\n` + +` local now = (os and os.clock and os.clock()) or 0\n` + +` local shouldWarp = false\n` + +` if isAlt or isRightClick then\n` + +` shouldWarp = true\n` + +` elseif self._pendingPin and (now - self._pendingPin.time) < 12.0 then\n` + +` local dx = worldX - self._pendingPin.x\n` + +` local dz = worldZ - self._pendingPin.z\n` + +` if (dx * dx + dz * dz) < 6400 then\n` + +` shouldWarp = true\n` + +` worldX = self._pendingPin.x\n` + +` worldZ = self._pendingPin.z\n` + +` end\n` + +` end\n` + +` if shouldWarp then\n` + +` self._pendingPin = nil\n` + ` local playerY = 274.6\n` + ` pcall(function()\n` + ` local p = gCS and gCS.MyPlayerManager and gCS.MyPlayerManager.PlayerUnit and gCS.MyPlayerManager.PlayerUnit.Pos\n` + @@ -271,13 +287,23 @@ gameSwitchDefaults.map((name) => `M.${name} = true\n`).join("") + ` end)\n` + ` pcall(function()\n` + ` if gDisplayMessageMgr and gDisplayMessageMgr.ShowMessageContent then\n` + -` gDisplayMessageMgr:ShowMessageContent(string.format("Map Teleport: X=%.1f, Z=%.1f", worldX, worldZ))\n` + +` gDisplayMessageMgr:ShowMessageContent(string.format("Warped to Pin: X=%.1f, Z=%.1f", worldX, worldZ))\n` + ` end\n` + ` end)\n` + ` pcall(function() gMainPhoneUtils.CloseMainPhonePanel(true) end)\n` + ` pcall(function() self:OnBtnClose() end)\n` + ` return\n` + ` else\n` + +` self._pendingPin = { x = worldX, z = worldZ, time = now }\n` + +` pcall(function()\n` + +` if gDisplayMessageMgr and gDisplayMessageMgr.ShowMessageContent then\n` + +` gDisplayMessageMgr:ShowMessageContent("Pin set! Click again to Warp")\n` + +` end\n` + +` end)\n` + +` if origOnMainClick then return origOnMainClick(self, evtData) end\n` + +` end\n` + +` else\n` + +` if isAlt or isRightClick then\n` + ` pcall(function()\n` + ` if gDisplayMessageMgr and gDisplayMessageMgr.ShowMessageContent then\n` + ` gDisplayMessageMgr:ShowMessageContent("Map Click: Target outside world bounds")\n` + @@ -285,8 +311,8 @@ gameSwitchDefaults.map((name) => `M.${name} = true\n`).join("") + ` end)\n` + ` return\n` + ` end\n` + +` if origOnMainClick then return origOnMainClick(self, evtData) end\n` + ` end\n` + -` if origOnMainClick then return origOnMainClick(self, evtData) end\n` + ` end\n` + ` end\n` + ` if C_InteractionManager then\n` +