Teleport HUD
Revision as of 00:01, 19 October 2012 by Kireji Haiku (talk | contribs) (added info about no-script area hack and improved loop speeds)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Gridwide Teleport HUD (works in no-script areas)
- Link 9 prims.
- Drop this script.
- Add up to 8 landmarks.
- Attach to HUD and enjoy!
<lsl> key owner; integer gotTPperms; integer isShowing;
toggle(integer inputInteger) {
if (inputInteger) { integer numOfPrims = llGetNumberOfPrims(); rotation currentRot = llGetRot();
vector white = <1.0, 1.0, 1.0>; vector orange = <1.0, 0.4, 0.0>;
integer index = 1;// root of linkset do { string linkName = llGetLinkName(index);
if (linkName == "TP HUD for landmarks") { llSetLinkPrimitiveParamsFast(index, [PRIM_COLOR, ALL_SIDES, ZERO_VECTOR, (float)TRUE, PRIM_COLOR, 3, <0.0, 1.0, 0.0>, (float)TRUE, // green and opaque floattext PRIM_TEXT, "click green button to close\n" + "or select TP destination", <0.0, 1.0, 0.0>, (float)TRUE]); } else if (linkName == "tp1") { llSetLinkPrimitiveParamsFast(index, [ PRIM_COLOR, ALL_SIDES, white, (float)TRUE, PRIM_POSITION, <0.0, 0.0, -0.0475>*currentRot, PRIM_SIZE, <0.025, 0.025, 0.010>, PRIM_TEXT, llGetInventoryName(INVENTORY_LANDMARK, 0), white, (float)TRUE]); } else if (linkName == "tp2") { llSetLinkPrimitiveParamsFast(index, [ PRIM_COLOR, ALL_SIDES, orange, (float)TRUE, PRIM_POSITION, <0.0, 0.0, -0.0875>*currentRot, PRIM_SIZE, <0.025, 0.025, 0.01>, PRIM_TEXT, llGetInventoryName(INVENTORY_LANDMARK, 1), orange, (float)TRUE]); } else if (linkName == "tp3") { llSetLinkPrimitiveParamsFast(index, [ PRIM_COLOR, ALL_SIDES, white, (float)TRUE, PRIM_POSITION, <0.0, 0.0, -0.1275>*currentRot, PRIM_SIZE, <0.025, 0.025, 0.01>, PRIM_TEXT, llGetInventoryName(INVENTORY_LANDMARK, 2), white, (float)TRUE]); } else if (linkName == "tp4") { llSetLinkPrimitiveParamsFast(index, [ PRIM_COLOR, ALL_SIDES, orange, (float)TRUE, PRIM_POSITION, <0.0, 0.0, -0.1675>*currentRot, PRIM_SIZE, <0.025, 0.025, 0.01>, PRIM_TEXT, llGetInventoryName(INVENTORY_LANDMARK, 3), orange, (float)TRUE]); } else if (linkName == "tp5") { llSetLinkPrimitiveParamsFast(index, [ PRIM_COLOR, ALL_SIDES, white, (float)TRUE, PRIM_POSITION, <0.0, 0.0, -0.2075>*currentRot, PRIM_SIZE, <0.025, 0.025, 0.01>, PRIM_TEXT, llGetInventoryName(INVENTORY_LANDMARK, 4), white, (float)TRUE]); } else if (linkName == "tp6") { llSetLinkPrimitiveParamsFast(index, [ PRIM_COLOR, ALL_SIDES, orange, (float)TRUE, PRIM_POSITION, <0.0, 0.0, -0.2475>*currentRot, PRIM_SIZE, <0.025, 0.025, 0.01>, PRIM_TEXT, llGetInventoryName(INVENTORY_LANDMARK, 5), orange, (float)TRUE]); } else if (linkName == "tp7") { llSetLinkPrimitiveParamsFast(index, [ PRIM_COLOR, ALL_SIDES, white, (float)TRUE, PRIM_POSITION, <0.0, 0.0, -0.2875>*currentRot, PRIM_SIZE, <0.025, 0.025, 0.01>, PRIM_TEXT, llGetInventoryName(INVENTORY_LANDMARK, 6), white, (float)TRUE]); } else if (linkName == "tp8") { llSetLinkPrimitiveParamsFast(index, [ PRIM_COLOR, ALL_SIDES, orange, (float)TRUE, PRIM_POSITION, <0.0, 0.0, -0.3275>*currentRot, PRIM_SIZE,<0.025, 0.025, 0.01>, PRIM_TEXT, llGetInventoryName(INVENTORY_LANDMARK, 7), orange, (float)TRUE]); } } while (++index <= numOfPrims); } else { rotation currentRot = llGetRot(); integer numOfPrims = llGetNumberOfPrims();
integer index = 1;// root of linkset do { string linkName = llGetLinkName(index);
if (linkName == "TP HUD for landmarks") { llSetLinkPrimitiveParamsFast(index, [PRIM_COLOR, ALL_SIDES, ZERO_VECTOR, (float)TRUE, PRIM_COLOR, 3, <1.0, 0.0, 0.0>, (float)TRUE, // red and opaque floattext PRIM_TEXT, "<~!~ TP HUD ~!~>", <1.0, 0.0, 0.0>, (float)TRUE]); } else if (linkName == "tp1" || linkName == "tp2" || linkName == "tp3" || linkName == "tp4" || linkName == "tp5" || linkName == "tp6" || linkName == "tp7" || linkName == "tp8") { llSetLinkPrimitiveParamsFast(index, [ PRIM_COLOR, ALL_SIDES, ZERO_VECTOR, (float)FALSE, PRIM_POSITION, ZERO_VECTOR*currentRot, PRIM_SIZE, <0.01, 0.01, 0.01>, // black and transparent floattext PRIM_TEXT, "", ZERO_VECTOR, (float)FALSE]); } } while (++index <= numOfPrims); }
}
default {
changed(integer change) { if (change & (CHANGED_OWNER | CHANGED_INVENTORY)) llResetScript(); }
attach(key attached) { if (attached != NULL_KEY) llResetScript(); }
state_entry() { llSetLinkPrimitiveParamsFast(LINK_ROOT, [PRIM_NAME, "TP HUD for landmarks", PRIM_LINK_TARGET, 2, PRIM_NAME, "tp1", PRIM_LINK_TARGET, 3, PRIM_NAME, "tp2", PRIM_LINK_TARGET, 4, PRIM_NAME, "tp3", PRIM_LINK_TARGET, 5, PRIM_NAME, "tp4", PRIM_LINK_TARGET, 6, PRIM_NAME, "tp5", PRIM_LINK_TARGET, 7, PRIM_NAME, "tp6", PRIM_LINK_TARGET, 8, PRIM_NAME, "tp7", PRIM_LINK_TARGET, 9, PRIM_NAME, "tp8",]);
owner = llGetOwner(); gotTPperms = FALSE;
isShowing = FALSE; toggle(isShowing);
// request teleport perms and controls perms for no-script area hack llRequestPermissions(owner, (PERMISSION_TELEPORT | PERMISSION_TAKE_CONTROLS)); }
touch_start(integer num_detected) { key id = llDetectedKey(0); string linkName = llGetLinkName(llDetectedLinkNumber(0)); string tpDestination;
if (id != owner) return;
if (gotTPperms && linkName == "TP HUD for landmarks") { isShowing = !isShowing; toggle(isShowing); } else if (linkName == "tp1") tpDestination = llGetInventoryName(INVENTORY_LANDMARK, 0); else if (linkName == "tp2") tpDestination = llGetInventoryName(INVENTORY_LANDMARK, 1); else if (linkName == "tp3") tpDestination = llGetInventoryName(INVENTORY_LANDMARK, 2); else if (linkName == "tp4") tpDestination = llGetInventoryName(INVENTORY_LANDMARK, 3); else if (linkName == "tp5") tpDestination = llGetInventoryName(INVENTORY_LANDMARK, 4); else if (linkName == "tp6") tpDestination = llGetInventoryName(INVENTORY_LANDMARK, 5); else if (linkName == "tp7") tpDestination = llGetInventoryName(INVENTORY_LANDMARK, 6); else if (linkName == "tp8") tpDestination = llGetInventoryName(INVENTORY_LANDMARK, 7);
if (tpDestination == "") llOwnerSay("Invalid destination!"); else llTeleportAgent(owner, tpDestination, ZERO_VECTOR, ZERO_VECTOR); }
// no-script area hack
control(key id,integer held, integer change) { return; }
run_time_permissions(integer perm) { if (perm & PERMISSION_TAKE_CONTROLS) llTakeControls(CONTROL_UP,TRUE,TRUE); if (perm & PERMISSION_TELEPORT) gotTPperms = TRUE; }
} </lsl>