nyuuzyou/wikis huggingface dataset:
LSL plugin for JetBrains IDEs

== LSL plugin for JetBrains IDEs ==
Linden Script language plugin for JetBrains IDEs (IntelliJ IDEA, PyCharm, Android Studio etc.)
Can be installed from JetBrains Plugins Marketplace.
Sources: https://github.com/riej/lsl
The plugin supports:
* code style formatting;
* autocompletion;
* hover hints;
* references (find usages, go to declaration);
* misc features.
Please report about issues to GitHub or IM/notecard in SecondLife to riejinno.
LSL エラー

==Run-time error messages==
スクリプトは実行中に停止し、以下のようなメッセージと共に"Script run-time error"をあなたに伝えるかもしれません。
===Script run-time error: Heap Error===
無意味な事をしないでください。例えば、結果を返さないルーチンでリスト型を返さないでください。
===Script run-time error: Lists may not contain lists===
リスト内にリストを入れることはできません。
===Script run-time error: Math Error===
Float型の数値を0で割ろうとした、integer型の数値を0で割ろうとした、等。
===Script run-time error: Stack-Heap Collision===
スタック領域がバイトコード領域やヒープ領域に衝突した。
それぞれのスクリプトは、16キロバイトに分割されたメモリ内で実行されます。そのメモリはバイトコード領域、スタック領域、ヒープ領域に分割されています。
あなたが長すぎるスクリプトを書いてコンパイルすると、大きすぎるバイトコードが生成され、衝突が発生します。 スクリプトがコンパイルできてセーブに成功したとしても、スクリプトを含んだオブジェクトを rez しようとすると、スクリプトはすぐに、あるいは実行中にクラッシュします。
See .
===Run-time error demo scripts===
ランタイム･エラーを経験するために、以下の例のコンパイルして実行してください。
<lsl>
default
{
 state_entry()
 {
 llOwnerSay((string) [llOwnerSay("bye")]); // Script run-time error: Heap Error
 }
}
</lsl>
<lsl>
default
{
 state_entry()
 {
 list once = [];
 list twice = [once, once]; // Script run-time error: Lists may not contain lists
 }
}
</lsl>
<lsl>
default
{
 state_entry()
 {
 float one = 1.0;
 float zero = 0.0;
 float quotient = one / zero; // Script run-time error: Math Error
 llOwnerSay((string) quotient);
 }
}
</lsl>
<lsl>
default
{
 state_entry()
 {
 list entries = [0];
 while (TRUE)
 {
 entries += entries; // Script run-time error: Stack-Heap Collision
 llOwnerSay((string) llGetListLength(entries));
 }
 }
}
</lsl>
==Compile-time error messages==
The SL GUI はあなたが完璧だと思ったいくつかのコードを拒絶し、いくつかの説明と共にERRORを出力するかもしれません。
===ERROR : Type mismatch===
vector型やrotation型に値を指定するには、 .x .y .z .s という名の要素を使わなければなりません。一度にlistで指定することはできません。例えば:
<lsl>
default
{
 state_entry()
 {
 vector vec = (vector) [1, 2, 3]; // ERROR : Type mismatch
 llOwnerSay((string) vec);
 }
}
</lsl>
===ERROR : Byte code assembly failed -- out of memory===
スクリプトは、ほどよく小さく(reasonably small)書かなければなりません。
例えば、あまりにも多くのelse-ifを並べた場合、コンパイラはスクリプトが大きすぎると報告します。
<lsl>
demoElseIfCompileError(integer count)
{
 if (count == 0)
 {
 ;
 }
 else if (count == 1)
 {
 ;
 }
 else if (count == 2)
 {
 ;
 }
 ...
 ... // ERROR : Byte code assembly failed -- out of memory
 ... // or ERROR : Syntax error
 ...
 else if (count == ...)
 {
 ;
 }
}
</lsl>
どのくらいのスクリプトが大きすぎるスクリプトなのかは、驚くほど変化することがあります。例えば、the 2007-08 Second Life クライアントでは30倍程度に変化しました。具体的には、Windowsクライアントは22個のelse-ifを受け付け、23個のelse-ifを拒絶しましたが、Mac OS Xは692個のelse-ifを受け付け、693個のelse-ifを拒絶しました。
OSによって変化するコンパイラの制限は、コピー制限の手段のように働きます。制限のゆるいコンパイラでコンパイルされたスクリプトを誰でも実行できます。しかし、制限の多いコンパイラしか持たないユーザは、そのソースを変更してもセーブできません。
See , .
===ERROR : Syntax error===
もちろんあなたはスクリプトやスクリプト内の語をコンパイラが受け入れられるように厳密に記述しなければなりません。
そして、スクリプトをほどよく小さく書かなければなりません。あまりに大きなスクリプトを書いた場合、コンパイラは"out of memory(メモリあふれ)" や "byte code assembly failed(バイトコード生成に失敗)"のような丁寧で明確なエラーではなく、 "syntax" error(構文エラー)だと報告するかもしれません。
例えば、2007-08年のWindows版のSecond Lifeクライアントは多くのelse-ifを並べるとSyntax error(構文エラー)を報告します。厳密な制限数は驚くほど変化します。例えば、2007-08年のWindows版のSecond Lifeクライアントは、あるときは22個以上並べたelse-ifを受け入れましたが、あるときはスクリプトの他の詳細な記述によって19個以下に並べたelse-ifを拒絶しました。
1つのコンパイラでLSLを学ぶプログラマは、コンパイラの制限は合理的(reasonable)なものだと感じるかもしれません。例えば、Mac OS Xでは500個までのelse-ifを並べることができます。しかし別なコンパイラを使うプログラマはそうではなく、大きく異なる制限値だけが合理的だと感じるかもしれません。例えば、Windowsではelse-ifを並べられるのはせいぜい1ダースだと感じるかもしれません。
LSL タッチ位置の取得

touch イベントで touch した面に関する情報を取得するため、detect系 LSL 関数を拡張しました。以下の各関数は touch_start、touch および touch_end イベントでのみ有効です。touch イベントの場合、マウスボタンが押されている間は繰り返しイベントが発生しますが、マウスがオブジェクトの上にある間は、その面に関する情報は有効で、適宜更新されます。(これにより、スライダ、レバー、ダイヤルといった擬似的 GUI を実現できます。)
 ( number)
detect された オブジェクト number が touch した位置のリージョン座標を返します。
 ( number)
detect された オブジェクト number が touch した面を返します。
 ( number)
detect された オブジェクト number が touch した位置のテクスチャにおける座標を返します。
 ( number)
detect された オブジェクト number が touch した位置の面における座標を返します。
 ( number)
detect された オブジェクト number が touch した位置の法線を返します。(法線とは面に対して垂直なベクトルです。)
 ( number)
detect された オブジェクト number が touch した位置の従法線を返します。(従法線とは面に対する接線のベクトルで、接線空間の U 軸を指します。)
=== Call for Feedback ===
=== Links ===
Touch Coordinates
llDetectedLinkFace
=== Internal LL Jira ===
https://jira.lindenlab.com/browse/DEV-9985
LSL ベンチマークスクリプト

以下のスクリプトをオブジェクトにカットペーストするとLSLパフォーマンスのベンチマークとして用いられることができます。これらのスクリプトはMonoで起動するLSL2のコンパイルで用いられるようにされていますが、バージョン間のシミュレータパフォーマンスの記録にも使えるかもしれません。
LSL ポータルにもどる
* LSL 再帰ベンチマーク
* LSL マンデルブロ集合ベンチマーク
* LSL 部分集計ベンチマーク
* LSL エラトステネスのふるいのベンチマーク
* LSL ビットでのエラトステネスのふるいのベンチマーク
LSL ポータル

__NOTOC__
== Second Life LSL ポータルへようこそ! ==
LSL とは "リンデン スクリプト言語" (Linden Scripting Language) の略で、これは SL のオブジェクト (アバターの装備や HUD も含めて) の様々なふるまいを実現するために使われます。
これはのスクリプト言語であるについて、正確で開かれた情報の提供を目指しているコミュニティです。
あらゆるレベルのスクリプト作成者の助けになることを目指しています。
自由に編集と追加を行ってください。(Wiki の編集については) Wiki ヘルプ を参照してください。How to choose a wikiも併せて参照しましょう。著作権の扱いが正当だと確信できない限り、他所で掲載されている情報をここへ転載しないでください。詳細は Talk:LSL Portal を参照してください。
LSLを習得したいのであればLSLチュートリアルを試してみましょう。
----
== LSL ポータル ==
* LSL 編集入門 - wikiの編集のしかた
* ポータルガイドライン - wikiですべきこと
* ポータル To-Do - wikiの編集がもっとも必要なところ
* LSL ポータル翻訳プロジェクト - 翻訳の調整	
== LSL 言語 リファレンス ==
* 
* 
* 
** 
** 
** 
** 
** 
** 
** 
* 
** [#mw-pages (page 1: A～L)]
** [#mw-pages (page 2: L～V)]
** [#mw-pages (page 3: V～Z)]
** (内部 ID 順)
* 演算子
* 状態
* 
** 
** 
** 
** 
** 
** 
** 
* 変数
* エラー	
== ==
{| border="0" cellspacing="0" cellpadding="0"	
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
** 
** 
** 
* 
* 
* 
* 
* 
*	
== LSL 言語 リファレンス ==
* 
* 
* 
** 
** 
** 
** 
** 
** 
** 
* 
** [#mw-pages (page 1: A～L)]
** [#mw-pages (page 2: L～V)]
** [#mw-pages (page 3: V～Z)]
** (内部 ID 順)
* 演算子
* 状態
* 
** 
** 
** 
** 
** 
** 
** 
* 変数
* エラー	
== ==
{| border="0" cellspacing="0" cellpadding="0"	
* 
** 
** 
** 
** 
** 
* 
** 
** 
** 
** 
* 
** 
** 
** 
* 
** 
* 
** 
** 
** 
* 
** 
** 
** 
* 
** 
*** 
*** 
** 
* 
** 
** 
* 
** 
** 
* 
** 
*** 
*** 
** 
*** 
*** 
*** 
* 
** 
** 
** 
** 
* 
** 
*** 
** 
** 
**
		
== ==
{| border="0" cellspacing="0" cellpadding="0"	
		
== ==
{| border="0" cellspacing="0" cellpadding="0"	
		
== ==
{| border="0" cellspacing="0" cellpadding="0"	
Category:Portals/ja
Category:Creation/ja
LSL 変数

変数(variable)は数値や文字列などの情報を保持しておく場所です。
変数は名前、型、値を持ちます。名前は文字で始まり、命名規則はCやJavaと同じです。大文字と小文字は区別されます。Xはxと同じではありません。
LSLは著しく静的な型を持つ言語です。これは、変数が型を宣言する必要があり、変数は型に一致する値しか持つことができないことを意味します。しかしながら, list変数は他の型の値を０個以上持つことができます。
いくつかの例:
integer count = 2;
float measure = 1.2;
string chars = "Lee";
list words = ["This", "Is", "A", "List"];
list entries = ["A list may contain many types of values such as", 2, 1.2, <0.4, 0.8, 1.6>];
vector vec = <1,6,2>;
== 変数のスコープ ==
変数名は最初に現れたところからその変数が含まれるスコープまで、またグローバル変数ではスクリプトの最後までスコープを持ちます。同じ名前を同じスコープの中で二度定義することはできませんが、内側のスコープで同じ名前を再定義することはできて、再定義された名前は外側のスコープの同じ名前を隠蔽します。重ねますが、動作的にはCやJavaにきわめて似通っています。一方で、次のコードはコンパイルして実行可能です。
integer i = 50;
default {
 state_entry() {
 string i = "Hello there!"; //JavaやCとは違って、 これはコンパイルできます。
 llOwnerSay(i); //"Hello there!"というはずです。グローバル変数iの値を取り出す方法はありません。
 }
}
== 関連項目 ==
* string
* key
* integer
* float
* list
* vector
* rotation
LSL 演算子

演算子は、1個もしくは2個の被演算子に対して演算（もしくは数学的な作用）を実行するために用いられます。簡単で一般的な例として、1 + 2 の場合、1 と 2 が被演算子、 + が演算子です。
この概念は、被演算子に変数が利用できること（特殊な制約として代入演算子の左辺は変数でなければいけない）により、LSLでは大幅に拡張されました。
演算子 	説明 	使用例 	 	
() [] . 	小カッコ(Parenthesis), 大カッコ(Brackets), ドット 	do this second (do this first) 	 	
(type) 	型キャスト 	message = "The result is:" + (string) result;	 	
! ~ ++ -- 	論理否定, ビット反転, インクリメント, デクリメント 	counter++; 	 	
* / % 	乗算/内積, 除算, 剰余/外積 	rollover = (count + 1)%5; 	 	
- 	減算 	one = 3 - 2; 	 	
+ 	加算 あるいは 文字列連結 	two = 1+1;
text = "Hello" + "World"; 	 	
+ 	配列の連結 	myList = [1, 2, 3] + [4, 5];
newList = oldList + addList;	 	
<< >> 	左シフト, 右シフト 	eight = 4 << 1; 	 	
< <= > >= 	未満, 以下, より大きい , 以上 	isFalse = (6 <= 4); 	 	
== != 	等価比較, 不等価比較 	isFalse = ("this" == "that"); 	 	
& 	ビット演算 AND 	zero = 4 & 2;
four = 4 & 4; 	 	
^ 	ビット演算 XOR 	zero = 4 ^ 4;
six = 4 ^ 2; 	 	
 	ビット演算 OR 	 	 	
 	 	条件比較 OR 	isTrue = (FALSE	TRUE);
&& 	条件比較 AND 	isFalse = (FALSE && TRUE); 	 	
= += -= *= /= %=	代入 	four = 4; 	 	
Note: 他の多くのプログラミング言語と異なり、C 言語風の && および || という演算子は常に 両方の被演算子を評価します。例えば、
<lsl>if (TRUE || 1/0) llSay( 0, "Aha!" );</lsl> 
は "Aha!" と表示する前に Math Error (除算エラー) を起こします。
Note: ブーリアン演算子の優先順位は不明瞭です。式解析の優先順位に矛盾を生んだり、もしくは単純に || と && の優先順位を同一と見なすかもしれないバグを含んでいるかもしれません。順位を明確にしたい場合は括弧 "()" で囲んでください。
Note: 条件文での評価は末尾から行なわれるようです。変数 x の値が 1 だった場合、以下の最初の二例は偽、最後の二例は真になります:
<lsl>(x && (x = 0) == 0 && x)</lsl>
<lsl>(x && (x = 0) == 0 && x == 0)</lsl>
<lsl>(x == 0 && (x = 0) == 0)</lsl>
<lsl>(x == 0 && (x = 0) == 0 && x)</lsl>
両辺の真偽に関わりなく、両辺とも評価されます。
==+ 演算子==
result = left + right
Left の型 	Right の型 	Result の型 	説明
integer 	integer 	integer 	left と right を加算する
integer 	float 	float 	left と right を加算する
float 	integer 	float 	left と right を加算する
string 	string 	string 	left の末尾に right を連結する
list 	* 	list 	left の末尾に right を連結する
* 	list 	list 	left が right の先頭に新しい配列要素として追加される。
vector 	vector 	vector 	left と right を加算する
rotation 	rotation 	rotation 	left と right を加算するあくまで演算例として。実際の回転の組み合わせでは * および / を使ってください。
== 複合代入演算子 ==
単純代入演算子 '=' の代わりに、以下の方法を使えます:
単純代入演算子 	複合代入演算子
a = a + 1 	a += 1
a = a - 1 	a -= 1
a = a * (n+1) 	a *= (n+1)
a = a / (n+1) 	a /= (n+1)
a = a % b 	a %= b
====
 等価であるビット演算
AND 	OR
~(a & b) 	~a | ~b
~a & ~b 	~(a | b)
 	
a & ~b 	~(~a | b)
~(a & ~b)	~a | b
 等価である論理演算
AND 	OR
!(a && b) 	!a || !b
!a && !b 	!(a || b)
 	
a && !b 	!(!a || b)
!(a && !b)	!a || b
により、各行とも AND 列にあるコードは OR 列のそれと論理的に等価です。a と b は変数である必要は無く、演算式でも構いません。ある種の状況では、コードを簡略化するためにこの手法が使えます。これらの 2 セットを混同しないことが大切です。上 2 行はド・モルガンの法則をそのとおりに表現したものであり、下 2 行はそれから導き出したものです。
LSL 遅延

==関数==
いくつかのLSL関数は呼び出されるときにスクリプト実行で遅延がかかります。
遅延は秒で計測されます。（float値です）
{| 	
 	関数
20.0	llRefreshPrimURL
20.0	llEmail
10.0	llLoadURL
10.0	llGetSimulatorHostname
5.0 	llTeleportAgentHome
3.0 	llSendRemoteData
3.0 	llRemoteLoadScriptPin
3.0 	llRemoteLoadScript
3.0 	llRemoteDataReply
3.0 	llGiveInventoryList
2.0 	llSetPrimURL
2.0 	llSetParcelMusicURL
2.0 	llParcelMediaQuery
2.0 	llParcelMediaCommandList
2.0 	llInstantMessage
2.0 	llGetParcelPrimOwners
1.0 	llRequestSimulatorData
1.0 	llRequestInventoryData
==イベント==
全てのイベントにはわずかに遅延があり、基本的にイベント間で0.05秒遅延し、長い遅延はllMinEventDelayで指定可能です。基本値よりも少ない遅延は、基本値程度に作用するでしょう。
{| 	
 	イベント
 	at_rot_target
 	at_target
 	attach
 	changed
 	collision
 	collision_end
 	collision_start
0.05	control
 	dataserver
 	email
 	http_response
LSO

Second Life has two LSL compilers, one which compiles into LSO bytecode and is executed by the simulator in the LSO , the other which compiles to and is executed by the simulator in the Mono VM. This article is about the LSO bytecode.
LSO is mostly a stack-based language with a reference-counted heap and a very odd function calling convention in which the caller allocates storage for the callee's local variables. All the gory details can be found at https://web.archive.org/web/20080430044527/https://www.libsecondlife.org/wiki/LSO, including some opcodes that are implemented in the interpreter but never outputted by the compiler (such as the handy DUP family of instructions for Forth-style programming, and PUSHIP/POPIP for implementing custom function calls/function pointers, jumptable-based switch statements and the like).
It's actually a reasonably powerful instruction set in some ways, but the compiler doesn't make use of it very well.
With the release of the Mono VM, LSO has been maintained for backwards compatibility.
=Bytecodes=
Argument Types	Variable type codes	Variable type codes
{| 	 	
Type 	Size 	
dword 	4 	
short 	2 	
byte 	1 	
type 	1 	upper 4 bits are type.Left lower 4 bits are type.Right
==By Task==
=== Pop Value ===
Name	Value	Description	arg0 size
=== Duplicate Value ===
Name	Value	Description
=== Store to Local ===
Name	Value	Description	arg0 size
=== Store to Global ===
Name	Value	Description	arg0 size
=== Load to Local ===
Name	Value	Description	arg0 size
=== Load to Global ===
Name	Value	Description	arg0 size
=== Push Local ===
Name	Value	Description	arg0 size
=== Push Global ===
Name	Value	Description	arg0 size
=== Push into List ===
Name	Value	Description	arg0 size
=== Push Zero Values ===
Name	Value	Description	arg0 size
=== Operators ===
Name	Value	Description	arg0 size
=== Jump ===
Name	Value	Description	arg0 size	arg1 size
=== Return ===
Name	Value	Description	arg0 size
=== Stack to Heap ===
Name	Value	Description	arg0 size
=== Call Functions ===
Name	Value	Description	arg0 size
=== Special Registers ===
Name	Value	Description
=== Miscellaneous ===
Name	Value	Description	arg0 size
== All Bytecodes ==
Name	Value	class="unsortable"Description	class="unsortable"arg0 size	class="unsortable"arg1 size
Category:Assets
LZW Compression

= LZW Compression =
The LZW compression standard is a simple to implement, and fairly good compression algorithm. It does not perform any statistical analysis of the input data and thus is not optimal, however it can see gains of around 20-30% on most natural language text of sufficient size. Other properties of the algorithm are its relatively efficient, stream-compatible encryption.
LZW compression should be used where you want to reduce the size of data by a modest amount with good performance and low memory overhead.
For more information regarding the algorithm you may view the Wikipedia page.
= Implementations =
* LSL
LZW LSL Examples

= LZW LSL Examples =
== Description ==
The following LSL code snippets show examples of using the LZW engine by Haravikk Mistral. These examples require that you add any relevant functions and constants from the helpers code where noted.
States are used in these scripts for clarity, but are not necessary to the operation of the scripts themselves.
== Examples ==
=== Compress a message ===
string myMsg = "Hello world! I am a lovely message waiting to be compressed! Hello world! I am a lovely message waiting to be compressed!";
// Add necessary functions from https://wiki.secondlife.com/wiki/LZW_LSL_Helpers here
default {
 state_entry() { // Send our message
 llResetTime();
 lslLZWCompressBase64ToBase64(
 LINK_THIS,
 llStringToBase64((myMsg = "") + myMsg),
 llGetOwner()
 );
 }
 
 link_message(integer x, integer y, string msg, key id) {
 if (!lslLZWIsReply(y, id)) return;
 
 y = lslLZWGetReplyMode(y);
 if (y == LSLLZW_COMMAND_ERROR) 
 llOwnerSay("COMPRESS ERROR: "+msg);
 else if (y == LSLLZW_COMMAND_COMPRESS) 
 llOwnerSay("Compressed: "+msg);
 }
}
=== Decompress a message ===
string myMsg = "BIBlBsBsBvAgB3BvByBsBkAhAgBJAgBhBtEOAgEDB2EBB5AgBtBlBzBzBhBnBlEFBhBpB0BpBuBnAgB0EEBiEeBjBvBtBwByEZBzBlEKAgEAECEEEGEIEzENEPERETEVEXEwEcEeB3EgEiEkEmEoEqEsEuEwEyAhAA==";
// Add necessary functions from https://wiki.secondlife.com/wiki/LZW_LSL_Helpers here
default {
 state_entry() { // Send our message
 llResetTime();
 lslLZWDecompressBase64ToBase64(
 LINK_THIS,
 (myMsg = "") + myMsg,
 llGetOwner()
 );
 }
 
 link_message(integer x, integer y, string msg, key id) {
 if (!lslLZWIsReply(y, id)) return;
 
 y = lslLZWGetReplyMode(y);
 if (y == LSLLZW_COMMAND_ERROR) 
 llOwnerSay("COMPRESS ERROR: "+msg);
 else if (y == LSLLZW_COMMAND_DECOMPRESS) 
 llOwnerSay("Decompressed: "+llBase64ToString((msg = "") + msg));
 }
}
LandStatReply

==Message Layout==
{
	LandStatReply Low Trusted Unencoded
	{
		RequestData	Single
		{	ReportType			U32				}
		{	RequestFlags		U32				}
		{	TotalObjectCount	U32				}
	}
	{	
		ReportData	Variable
		{	TaskLocalID			U32				}
		{	TaskID				LLUUID			}
		{	LocationX			F32				}
		{	LocationY			F32				}
		{	LocationZ			F32				}
		{	Score				F32				}
		{	TaskName			Variable	1	}
		{	OwnerName			Variable	1	}
	}
}
==Usage and Notes==
Category:Messages
LandStatRequest

==Message Layout==
{
	LandStatRequest Low NotTrusted Unencoded
	{
		AgentData		Single
		{	AgentID		LLUUID		}
		{	SessionID	LLUUID		}
	}
	{
		RequestData Single
		{	ReportType		U32				}
		{	RequestFlags	U32				}
		{	Filter			Variable	1	}
		{	ParcelLocalID	S32			1	}
	}
}
==Usage and Notes==
Category:Messages
Land & Support User Group

__TOC__
 
The Land and Suppprt User Group meeting is a monthly, public meeting intended for discussion & education of SL topics such as current known issues and bugs, project viewers and new features, and general Mainland issues. Wendi and Izzy Linden will be your moderators. Please bring your questions & concerns.
All are welcome!
Meetings will be held on the fourth Wednesday of each month (see schedule below) at 12:00pm SLT excluding US holidays. Exceptions will be noted here. Meetings are held inworld at http://maps.secondlife.com/secondlife/Linden%20Estate%20Services4/229/27/29
An update group is available. Please see the following link for more information and a link to join the group in Second Life. http://world.secondlife.com/group/2bda1b4b-5049-4f64-c673-bc4eb7414439
===Meeting Dates===
*January 22, 2025
*February 26, 2025
*March 26, 2025
*April 23, 2025
*May 28, 2025
*June 25, 2025
*July 23, 2025
*August 27, 2025
*September 24, 2025
*October 22, 2025
*November 26, 2025
*December 24, 2025 cancelled due to holiday
==Agenda==
*General Primary Grid Concerns and Land Discussion
*Open Q&A
Disclaimer: Please be aware that only general topics will be discussed and there are certain topics or information we cannot discuss (specific account information or billing questions, abuse related issues, etc).
==Useful Links==
Alternate Viewers
Second Life Help
Submit a Ticket
Premium and Concierge Live Chat Support
View and File a Jira Bug Report
Second Life Community Blogs
Land Sales

=== Feature Design Document ===
(none)
=== Functional Spec ===
(none)
=== Test scripts ===
Search test
=== Discussion for future improvements ===
(none)
=== Relationship to other features ===
 List of features that need to be tested when this feature changes, and why. 
World Map - Land Sales is an optional overlay on the World map.
=== User Guides ===
(none)
Landmark

Landmarks are shortcuts to places in Second Life and stored in your inventory. They are displayed ether as bright red () or faded mauve () pushpin icons depending if you've used them recently (red) or not (faded mauve) (please note that this feature is ). You can create new landmarks by clicking at the World menu and go to Create Landmark Here as shown in the picture on the right. The landmark will be stored in your inventorys landmarks folder then. If you would like a more detailed description about the landmark, you can make a right click on it and select About Landmark. A new window will pop up similar to picture on the left. It provides the name of the region, a description that can be entered by the landowner as well as information about the traffic and the area. Furthermore it states out to which sim it leads you and the coordinates x, y and z. You can choose if you would like to teleport to that region by pressing Teleport, you can view it on the map to check how many people are around and what's next to it by pressing Show on Map or you can close it again by clicking the tiny x on the upper right.
See INVENTORY LANDMARK for the LSL constant.
== Caveats ==
== See Also ==
* Why do Landmarks come in two different colors?
* How do I use Landmarks?
* Video Tutorial/Teleporting & landmarks
* Video Tutorial/Deleting duplicate landmarks
==Related Topics==
*SLurl
*Map
*Teleport
Landmark2slurl

Landmarks retrieved via LSL from an object's inventory will only have global coordinates in it (plus the landmark's inventory name, like all assets), which are retrieved through an (expensive) dataserver call. In order to create a SLURL from the landmark (as the viewer does with the Copy to SLURL option), first we need to figure out the region's position in the grid, then look up its name, and use the remainder as local coordinates.
Unfortunately, at the time of writing, there is no LSL function to retrieve the region's name, based on its grid coordinates. The only alternative given by us by Linden Lab is to use a (special) capabilities call instead, which can be used via llHTTPRequest. It was allegedly designed to inject some Javascript on the Map API but works well for our own purposes.
The script below shows how exactly to achieve this and do the calculations right (i.e., without any rounding errors).
// Click to print SLURL for every landmark in inventory.
// Uses llRequestInventoryData() to get coordinates
// Uses http://wiki.secondlife.com/wiki/Linden_Lab_Official:Map_API_Reference#Region_name_from_global_coordinates to get region name
integer landmarkIndex;
vector landmarkCoords;
string landmarkRegion;
string landmarkSlurl;
key inventoryRequestId;
key mapRequestId;
requestLandmarkInfo(integer inventoryIndex) {
 if (inventoryIndex >= llGetInventoryNumber(INVENTORY_LANDMARK)) return;
 landmarkIndex = inventoryIndex;
 string landmarkName = llGetInventoryName(INVENTORY_LANDMARK, landmarkIndex);
 inventoryRequestId = llRequestInventoryData(landmarkName);
}
default {
 touch_start(integer count) {
 requestLandmarkInfo(0);
 }
 dataserver(key requestId, string data) {
 if (requestId != inventoryRequestId) return;
 if ((vector)data == ZERO_VECTOR) return;
 // landmark request
 landmarkCoords = llGetRegionCorner() + (vector)data;
 // http://wiki.secondlife.com/wiki/Linden_Lab_Official:Map_API_Reference#Region_name_from_global_coordinates
 mapRequestId = llHTTPRequest(
 "https://cap.secondlife.com/cap/0/b713fe80-283b-4585-af4d-a3b7d9a32492?var=region"
 + "&grid_x=" + (string)((integer)landmarkCoords.x / 256)
 + "&grid_y=" + (string)((integer)landmarkCoords.y / 256), [], "");
 }
 http_response(key requestId, integer status, list metadata, string body) {
 if (requestId != mapRequestId) return;
 landmarkRegion = llList2String(llParseString2List(body, ["var region='", "';"], []), 0);
 landmarkSlurl = "http://maps.secondlife.com/secondlife/" + llEscapeURL(landmarkRegion) +
 "/" + (string)((integer)landmarkCoords.x % 256) +
 "/" + (string)((integer)landmarkCoords.y % 256) +
 "/" + (string)((integer)landmarkCoords.z);
 llOwnerSay(llGetInventoryName(INVENTORY_LANDMARK, landmarkIndex) + ": "
 + landmarkSlurl + " <nolink>" + landmarkSlurl + "</nolink>");
 requestLandmarkInfo(landmarkIndex + 1);
 }
}
Category:LSL Examples
Landmarks

=== Feature Design Document ===
Landmarks are inventory assets that contain precise locations in Second Life. Their main purpose is to enable teleportation to that location from somewhere else. Landmarks are stored, by default, in the Landmarks folder in My Inventory. Landmarks may be given to others, stored in notecards and in any field used for teleportation. There are two versions of landmarks, one of which is obsolete but still functional. The previous version stored a location in the form of a global position. Version 2 stores the local position and the RegionID of the region in question.
You may create landmarks in your own inventory by use of the Create Landmark Here option on the World menu. It is possible to edit the underlying landmark asset, however not via the Second Life client.
=== Functional Spec ===
(none)
=== Test scripts ===
Landmarks test
=== Discussion for future improvements ===
(none)
=== Relationship to other features ===
 List of features that need to be tested when this feature changes, and why. 
Teleport
=== User Guides ===
(none)
Category:Assets
Language Resources

__NOTOC__
== Language Resources from Volunteers==
== More Language Related Projects ==
*Check the Localization Portal for more projects and language information!
== Linguists ==
*Need help speaking to residents in a different language? Check out the list of all languages spoken by Volunteers.
 
*Not on this list and you should be? Please add yourself onto the list!	
== Languages: Resources ==
Translated Volunteer Portals:
 In need of updates as of 12/15/09
Brazilian
French
German 
Japanese
Spanish 
*Italian Resources
*Japanese Resources
*Spanish Resources
* Orientation Areas: S
**English and other language OIs.