// SPDX-License-Identifier: MIT // Copyright (c) 2026 Incoprea // Opt-in owner floorplan marker // Not compiled or tested in-world // Setup: Use a nonphysical root and child owner_marker. Set world ORIGIN, map MAP_SCALE and map offset. Owner-touch arms; root XY should be your map plane. // Stop / restore: Owner-touch disarms and restores marker Home. // Notes: Use a spare modifiable build. Snapshot state is held only in script memory; restore before reset/removal. Do not relink during a preview. Reads only the owner after explicit arming, stores no travel history, and sends no data externally. Not GPS or a visitor tracker. // License: see LICENSE in this distribution. // Original Incoprea. MIT. Not compiled or tested in-world. vector ORIGIN=<128.0,128.0,0.0>; float MAP_SCALE=0.01; vector OFFSET=<0.0,0.0,0.1>; integer target; vector home; integer active; integer valid=TRUE; default { state_entry() { integer i; integer count; for(i=2;i<=llGetObjectPrimCount(llGetKey());++i)if(llGetLinkName(i)=="owner_marker") { target=i; ++count; } if(count!=1) { valid=FALSE; return; } home=llList2Vector(llGetLinkPrimitiveParams(target,[PRIM_POS_LOCAL]),0); } touch_start(integer n) { if(llDetectedKey(0)!=llGetOwner()||llGetLinkNumber()>1||llGetStatus(STATUS_PHYSICS)||!valid)return; active=!active; if(active)llSetTimerEvent(2.0); else { llSetTimerEvent(0.0); llSetLinkPrimitiveParamsFast(target,[PRIM_POS_LOCAL,home]); } } timer() { if(llGetStatus(STATUS_PHYSICS)||!valid) { llSetTimerEvent(0.0); active=FALSE; return; } list data=llGetObjectDetails(llGetOwner(),[OBJECT_POS]); if(!llGetListLength(data))return; vector p=llList2Vector(data,0)-ORIGIN; p.z=0.0; p=p*MAP_SCALE+OFFSET; if(llVecMag(p)>5.0)return; llSetLinkPrimitiveParamsFast(target,[PRIM_POS_LOCAL,p]); } changed(integer change) { if(change&CHANGED_LINK) { active=FALSE; valid=FALSE; llSetTimerEvent(0.0); } } }