From f01f39afd1b43a43a9886d3146fd4ea0950459b0 Mon Sep 17 00:00:00 2001
From: Andrey Kleshchev <andreykproductengine@lindenlab.com>
Date: Fri, 9 Dec 2022 20:56:00 +0200
Subject: [PATCH] SL-8294 Fixed Incorrect coordinates in address bar

Example: Stepping over 183/255/22 will show position 183/1/22 of the same region
---
 indra/newview/llagentui.cpp | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp
index 3410a378905..c19ad2ae6f9 100644
--- a/indra/newview/llagentui.cpp
+++ b/indra/newview/llagentui.cpp
@@ -53,7 +53,16 @@ void LLAgentUI::buildSLURL(LLSLURL& slurl, const bool escaped /*= true*/)
       LLViewerRegion *regionp = gAgent.getRegion();
       if (regionp)
       {
-		  return_slurl = LLSLURL(regionp->getName(), gAgent.getPositionGlobal());
+          // Make sure coordinates are within current region
+          LLVector3d global_pos = gAgent.getPositionGlobal();
+          LLVector3d region_origin = regionp->getOriginGlobal();
+          // -1 otherwise slurl will fmod 256 to 0.
+          // And valid slurl range is supposed to be 0..255
+          F64 max_val = REGION_WIDTH_METERS - 1;
+          global_pos.mdV[VX] = llclamp(global_pos[VX], region_origin[VX], region_origin[VX] + max_val);
+          global_pos.mdV[VY] = llclamp(global_pos[VY], region_origin[VY], region_origin[VY] + max_val);
+
+          return_slurl = LLSLURL(regionp->getName(), global_pos);
       }
 	slurl = return_slurl;
 }
-- 
GitLab