nyuuzyou/wikis huggingface dataset:
LSL 101/Variable Initialization

Category:LSL 101
When a variable declaration is executed, the variable always gets some initial value, whether or not our script specifies. This is called variable initialization, and it deserves a little discussion of its own. So far, we have passed over this detail by always executing an assignment statement for the variable prior to using it. But consider this example.
string RegionName; // This is a global variable
 
default
{
 state_entry()
 {
 // Store the name of the current sim for later use
 RegionName = llGetRegionName();
 }
 
 touch_start( integer num_detected )
 {
 // Announce the region where the script is running
 string WelcomePhrase = "Welcome to " + RegionName + ".";
 llOwnerSay( WelcomePhrase );
 }
}
The only difference between the previous example and this one is that we have replaced the two lines
 string WelcomePhrase
 WelcomePhrase = "Welcome to " + RegionName + ".";
with the single line
 string WelcomePhrase = "Welcome to " + RegionName + ".";
The first version allocates the variable and initializes it with the string containing no characters (written as ""). Then, it updates the variable with the string "Welcome to Ganymede.".
The second version both declares the variable and initializes it with the value "Welcome to Ganymede." in the same statement. The syntax for this is easy to remember because it is written as though the declaration and assignment statements were rolled into one. But keep in mind that this is not simply another form of an assignment statement. For example, the following code fragment is not legal.
 string WelcomePhrase = "Welcome to " + RegionName;
 string WelcomePhrase = WelcomePhrase + ".";
It is not legal because the second statement is an attempt to declare a variable that already exists, and isn't allowed.
Any declaration of a local variable can be followed by the assignment symbol and an initialization expression that follows the same form as an assignment statement. As a matter of fact, providing an initial value is generally considered a good practice, and most examples you see will probably do that.
However, the rules for initializing a global variable are different. Global variables can have a initializer, but it can only be a simple value. It can't be the result of a built-in function and can't have any operators. Thus, we could not change our global variable declaration to
string RegionName = llGetRegionName(); // This is a global variable
On the other hand, we could do this:
string RegionName = "Region not known"; // This is a global variable
Initializing global variables to a unique value like this has an advantage over letting it be compiled with the empty string. When testing your script, if the phrase "Region not known" appears in the output where you expected a region name, you'll immediately know that no assignment to that variable was ever executed. If, on the other hand, the region name was simply missing (i.e. the empty string), it might be less obvious where things went wrong.
Continue this tutorial at Functions or go back to Global vs Local Variables.
LSL Benchmarking Scripts

The scripts below can be cut/pasted into objects inworld and used to benchmark LSL performance. These scripts have been used to to compare LSL2 execution to Mono, but they might also be useful to track simulator performance from version to version. 
Return to LSL Portal
* LSL Recursion Benchmark
* LSL Mandelbrot Benchmark
* LSL Partial Sums Benchmark
* LSL NSieve Benchmark
* LSL NSieve Bits Benchmark
Category:LSL
LSL Benchmarking Scripts/es

Los scripts que aparecen a continuacion pueden ser cortados y pegados dentro de objetos en SL y se utilizan como referencia para comparar el rendimiento de LSL. Estos scripts se han utilizado para comparar ejecuciones en LSL2 y en Mono, pero también pueden ser útiles para realizar un seguimiento del rendimiento de una versión a otra.
Volver a LSL Portal
* LSL Recursion Benchmark
* LSL Mandelbrot Benchmark
* LSL Partial Sums Benchmark
* LSL NSieve Benchmark
* LSL NSieve Bits Benchmark
Category:LSL
Volver a LSL Portal
LSL Benchmarking Scripts/ko

아래의 스크립트를 오브젝트에 넣게 되면 LSL 퍼포먼스의 벤치마크로 사용 하실 수 있습니다.
이런 스크립트는 Mono로 기동하는 LSL2의 컴파일러로 이용 되도록 하고 있지만, 버젼간의 시뮬레이터 퍼포먼스의 기록에도 
사용 할 수 있을 것입니다.
LSL 포탈로 돌아갑니다.
* LSL 재귀 벤치마크
* LSL 만데르브로 집합 벤치마크
* LSL 부분 집계 벤치마크
* LSL NSieve 벤치마크
* LSL NSieve Bits 벤치마크
LSL Constants/llRezObjectWithParams

==Parameters==
parameter	integer value	values to set 	description
 	 	integer param 	
 	 	integer flags 	Flags applied to rezzed object when it is created in the world.
 	 	vector pos, integer relative, integer at_root 	
 	 	rotation rot, integer relative 	
 	 	vector velocity, integer local, integer inherit 	
 	 	vector force, integer local 	
 	 	vector axis, integer local, float spin, float gain	
 	 	float damage 	
 	 	string sound, float volume, integer loop 	
 	 	string sound, float volume 	
 	 	vector locks 	
 	 	integer damage_type 	
 	 	string start_param
LSL Constants/llRezObjectWithParams/ja

==パラメータ==
パラメータ 	整数の値 	設定する値 	説明
REZ_PARAM 	0 	integer param 	リージョンにリザされるオブジェクトのon_rez(integer) イベントに渡されるスタート パラメータ。
REZ_FLAGS 	1 	integer flags 	オブジェクトがワールドに作成されるときに適用されるフラグ。
REZ_POS 	2 	vector pos, integer relative, integer at_root 	新しいオブジェクトをワールドにリザする位置。relative が FALSE の場合、位置はリージョン座標です。relative が TRUE の場合、位置はリジング オブジェクトに対して相対的になります。
at_root が FALSE の場合、オブジェクトのcenterは pos で指定された位置になります(llRezObject）。at_root を TRUE に設定してルート プリムの位置を設定します(llRezAtRoot).
REZ_ROT 	3 	rotation rot, integer relative 	オブジェクトに適用する初期回転。relative が TRUE の場合、回転はリジング オブジェクトに対して相対的であり、それ以外の場合は絶対的です。
REZ_VEL 	4 	vector velocity, integer local, integer inherit 	オブジェクトに適用する初期速度。local が TRUE の場合、速度はローカル オブジェクト座標フレーム内で、それ以外の場合はワールド座標内です。 
inherit が TRUE の場合、オブジェクトはリザーの速度も引き継ぎます。
REZ_ACCEL 	5 	vector force, integer local 	オブジェクトに適用する一定の力。local が TRUE の場合、力ベクトルはローカル座標で指定されます。
REZ_OMEGA 	7 	vector axis, integer local, float spin, float gain	指定された軸を中心にオブジェクトを回転させます。local が TRUE の場合、その軸はローカル座標であり、それ以外の場合はグローバルです。
REZ_DAMAGE 	8 	float damage 	このオブジェクトとの衝突時にエージェントに適用されるダメージ量。
REZ_SOUND 	9 	string sound, float volume, integer loop 	このオブジェクトにアタッチするサウンド。指定された音量で再生されます。 
loop が TRUE の場合、オブジェクトの寿命中、サウンドは連続的にループします。
sound パラメータは、リザーのインベントリ内のサウンド ファイルまたはサウンド アセットのUUIDのいずれかです。
REZ_SOUND_COLLIDE	10 	string sound, float volume 	他のオブジェクト、地面、またはアバターとの衝突時に再生されるサウンド。
sound パラメータは、リザーのインベントリ内のサウンド ファイルまたはサウンド アセットのUUIDのいずれかです。
REZ_LOCK_AXES 	11 	vector locks 	オブジェクトが特定の軸で回転しないようにします。ベクトルの座標をゼロ以外に設定すると、その軸でオブジェクトが回転しなくなります。
たとえばREZ_LOCK_AXES、<1.0、1.0、0.0>は、オブジェクトがZ軸の周りだけで回転できるようにします。
LSL Constants/llRezObjectWithParams Flags

===Flags===
parameter 	integer value	description
REZ_FLAG_TEMP 	0x0001 	Object is rezzed as temporary.
REZ_FLAG_PHYSICAL 	0x0002 	Object is rezzed as physical.
REZ_FLAG_PHANTOM 	0x0004 	Object is rezzed as phantom
REZ_FLAG_DIE_ON_COLLIDE 	0x0008 	The object will die after its first collision.
REZ_FLAG_DIE_ON_NOENTRY 	0x0010 	Object will die if it attempts to enter a parcel that it can't.
REZ_FLAG_NO_COLLIDE_OWNER 	0x0020 	Object will not trigger a collision event if colliding with its owner.†
REZ_FLAG_NO_COLLIDE_FAMILY	0x0040 	Object will not trigger collision events when colliding with other object rezzed by the same rezzer.†
REZ_FLAG_BLOCK_GRAB_OBJECT	0x0080 	Grabbing is disabled for this object.
† Disabling collisions only disables collision events and damage. The object will still cause a physics collision and may push the objects.
LSL Constants/llRezObjectWithParams Flags/ja

===フラグ===
パラメータ 	整数の値 	説明
REZ_FLAG_TEMP 	0x0001 	オブジェクトは一時的にリザされます。
REZ_FLAG_PHYSICAL 	0x0002 	オブジェクトは物理的にリザされます。
REZ_FLAG_PHANTOM 	0x0004 	オブジェクトはファントムとしてリザされます。
REZ_FLAG_DIE_ON_COLLIDE 	0x0008 	オブジェクトは最初の衝突後に消滅します。
REZ_FLAG_DIE_ON_NOENTRY 	0x0010 	オブジェクトは進入できないパーセルに進入しようとした場合に消滅します。
REZ_FLAG_NO_COLLIDE_OWNER 	0x0020 	オブジェクトは所有者と衝突しても衝突イベントをトリガーしません。†
REZ_FLAG_NO_COLLIDE_FAMILY	0x0040 	オブジェクトは同じリザーによってリザされた他のオブジェクトと衝突しても衝突イベントをトリガーしません。†
REZ_FLAG_BLOCK_GRAB_OBJECT	0x0080 	このオブジェクトのつかみ取りが無効になっています。
† 衝突の無効化は衝突イベントとダメージのみを無効にします。オブジェクトは依然として物理的な衝突を引き起こし、他のオブジェクトを押し動かす可能性があります。
LSL Constants vs Globals

There are some advantages in using global variables over the string and key constants when programming in LSO; it's faster and uses less bytecode when it is longer than 3 characters and is used more than twice, but it uses more bytecode when it is shorter than 3 characters or is used once. This is easily demonstrated by running the scripts in Figure 1.
However, this is only true for LSO compiled programs. If Mono is used, then the opposite is true and it uses less memory to use constants. Mono uses only one copy of a constant in memory. In the scripts in Figure 1, using constants saves the memory used to initialize the variable null_key. This is true if LL constants (like NULL_KEY) are used or if user supplied strings (such as "this is a string") are used.
===Pros when using LSO===
* Faster
* Uses less bytecode when it is longer than 3 characters and it used more than twice.
===Cons===
* User can accidentally change the value.
* Uses more bytecode when it is shorter than 3 characters or it used once.
 Figure 1: Bytecode Cost
Constant	Global
<lsl>
dead(){
 key a = NULL_KEY;
 key b = NULL_KEY;
 key c = NULL_KEY;
 key d = NULL_KEY;
}
default {
 state_entry() {
 llOwnerSay((string) llGetFreeMemory());
 }
}</lsl>	
<lsl>key null_key = NULL_KEY;
dead(){
 key a = null_key;
 key b = null_key;
 key c = null_key;
 key d = null_key;
}
default {
 state_entry() {
 llOwnerSay((string) llGetFreeMemory());
 }
}</lsl>
Category:LSL
LSL Delay

==Functions==
Some LSL functions delay script execution when they are called.
The delay is measured in seconds (it's a float value).
{| 	
 	Function
20.0	llRefreshPrimURL
20.0	llSetPrimURL
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 	llSetParcelMusicURL
2.0 	llParcelMediaQuery
2.0 	llParcelMediaCommandList
2.0 	llInstantMessage
2.0 	llGetParcelPrimOwners
1.0 	llTextBox
1.0 	llRequestSimulatorData
==Events==
All events except state_entry and state_exit have a minimum delay. The default delay between events is 0.022 seconds (one simulator frame); a longer delay can be specified with llMinEventDelay. A delay less than the default will have the same effect as if it were the default. The link_message, run_time_permissions and http_request events don't obey the delay set in llMinEventDelay. While there is a maximum of one event per simulator frame (with the exception of state_entry and state_exit, which can be triggered multiple times in one frame), those events that don't obey llMinEventDelay are scheduled with a higher priority than the rest.
{| 	
 	Events
0.022 	at_rot_target
0.022 	at_target
 	attach
0.022 	changed
 	collision
 	collision_end
 	collision_start
0.022 	control
 	dataserver
 	email
0.022(*)	http_request
 	http_response
(*) These events don't obey llMinEventDelay and are given a higher priority.
(**) These events don't obey llMinEventDelay and can be triggered more than once per simulator frame.
LSL Delay/fr

==Fonctions==
Certaines fonctions retardent l'exécution du script quand elles sont appelées.
Le délai est mesuré en secondes (c'est un nombre en virgule flottante).
{| 	
 	Fonction
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
==Évènements==
Tous les évènements ont un délai minimal, le délai par défaut entre des évènements est de 0,05 secondes, un délai plus long peut être demandé avec llMinEventDelay. Un délai inférieur à la valeur par défaut aura le même effet que si c'était la valeur par défaut.
{| 	
 	Évènement
 	at_rot_target
 	at_target
 	attach
 	changed
 	collision
 	collision_end
 	collision_start
0,05	control
 	dataserver
 	email
 	http_response
LSL Delay/it

==Fonctions==
Alcune funzioni ritardano l'eseguzione degli script.
Il tempo è indicato in secondi (con virgola mobile)
{| 	
 	Fonction
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
==Eventi==
{| 	
 	Évènement
 	at_rot_target
 	at_target
 	attach
 	changed
 	collision
 	collision_end
 	collision_start
0,05	control
 	dataserver
 	email
 	http_response
LSL Delay/ko

==함수==
일부 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
LSL Delay/nl

==Functies==
Sommige LSL functie hebben in ingebouwde vertraging wanneer ze aangeroepen worden.
Die vertraging wordt uitgedrukt in seconden (decimaal getal)
{| 	
 	Function
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
==Events==
Alle events hebben een minimale vertraging, de standaard vertraging tussen twee events is 0.05 seconden, een langere vertraging can opgegeven worden door llMinEventDelay aan te roepen. Als je een vetraging opgeeft die kleiner is dan de standaard vertraging, zal de standaard vertraging gebruikt worden.
{| 	
 	Events
 	at_rot_target
 	at_target
 	attach
 	changed
 	collision
 	collision_end
 	collision_start
0.05	control
 	dataserver
 	email
 	http_response
LSL Editor Community Edition

Details, executable and source can be found here: http://sourceforge.net/projects/lsleditor/
There is a bug tracker list here: LSL Editor Bug Tracker.
LSL Editor Community Edition is a standalone Windows LSL script editor and run-time environment.
* Code highlighting (including Brackets matching) 
* Code auto completion (Like Visual Studio) 
* Auto insert events 
* Argument information on functions (typing) 
* Tabbed or MDI interface 
* LSLWiki or SecondLife color scheme 
* The usual editing functions
* Block commenting/uncommenting
* Tooltip on keywords (LSL-Editor contains complete LSL guide!) 
* Auto-indent (using tabs or SecondLife indent scheme) 
* Help, on every keyword, uses www.LSLwiki.NET information 
* Compiling and execute outside SecondLife world
* Breakpoints and stepping coming in a future version
* llDialog input screen
* Printing 
* You don't have to install the program, just unzip and use it. (Requires .NET 2.x.)
* Updated frequently
* Open Source
Windows XP , Windows 2000 , Windows 2003, Windows Vista, Windows 7
== Feature Wishlist ==
* Inventory simulation: Would be nice if the inventory functions of LSL could be simulated by putting dummy objects into a dummy inventory. No further attributes (except maybe type) would have to be supported.
* Linked prim simulation: Would be nice if an object consisting of several linked prims could be simulated. No further attributes beyond link id would have to be supported. Flags like LINK_ALL_OTHERS or LINK_ALL_CHILDREN would be nice to have.
* Missing constants TEXTURE_BLANK and TEXTURE_TRANSPARENT
LSL Editor TextPad ClipBook Events

The following is a clip book file of events for use in TextPad, a Windows text editior.
To install it, bring up your Clip Library (CTRL+F3) and right-click on the drop down menu of clip books. Select "New book..." save it and give it a title. Next, select your new clip book and right-click on the title and select "Edit book". Paste the following into the document that comes up after the first line (keep the first line of the document, it's important). Refresh the Clip Library and your clip library is ready for use.
!TITLE=LSL Events
!SORT=Y
!CHARSET=ANSI
!TEXT=at_rot_target()
	at_rot_target(integer tnum, rotation targetrot, rotation ourrot)
	{
	}
!
!TEXT=at_target()
	at_target(integer tnum, vector targetpos, vector ourpos)
	{
	}
!
!TEXT=attach()
	attach(key id)
	{
	}
!
!TEXT=money()
	money(key id, integer amount)
	{
	}
!
!TEXT=changed()
	changed(integer change)
	{
	}
!
!TEXT=collision()
	collision(integer num_detected)
	{
	}
!
!TEXT=collision_end()
	collision_end(integer num_detected)
	{
	}
!
!TEXT=collision_start()
	collision_start(integer num_detected)
	{
	}
!
!TEXT=control()
	control(key id, integer level, integer edge)
	{
	}
!
!TEXT=dataserver()
	dataserver(key queryid, string data)
	{
	}
!
!TEXT=email()
	email(string time, string address, string subj, string message, integer num_left)
	{
	}
!
!TEXT=http_response()
	http_response(key request_id, integer status, list metadata, string body)
	{
	}
!
!TEXT=land_collision()
	land_collision(vector pos)
	{
	}
!
!TEXT=land_collision_end()
	land_collision_end(vector pos)
	{
	}
!
!TEXT=land_collision_start()
	land_collision_start(vector pos)
	{
	}
!
!TEXT=link_message()
	link_message(integer sender_num, integer num, string str, key id)
	{
	}
!
!TEXT=listen()
	listen(integer channel, string name, key id, string message)
	{
	}
!
!TEXT=moving_end()
	moving_end()
	{
	}
!
!TEXT=moving_start()
	moving_start()
	{
	}
!
!TEXT=touch()
	touch(integer num_detected)
	{
	}
!
!TEXT=no_sensor()
	no_sensor()
	{
	}
!
!TEXT=not_at_rot_target()
	not_at_rot_target()
	{
	}
!
!TEXT=not_at_target()
	not_at_target()
	{
	}
!
!TEXT=object_rez()
	object_rez(key id)
	{
	}
!
!TEXT=on_rez()
	on_rez(integer start_param)
	{
	}
!
!TEXT=remote_data()
	remote_data(integer event_type, key channel, key message_id, string sender, integer idata, string sdata)
	{
	}
!
!TEXT=run_time_permissions()
	run_time_permissions(integer perm)
	{
	}
!
!TEXT=sensor()
	sensor(integer num_detected)
	{
	}
!
!TEXT=state_entry()
	state_entry()
	{
	}
!
!TEXT=state_exit()
	state_exit()
	{
	}
!
!TEXT=timer()
	timer()
	{
	}
!
!TEXT=touch_end()
	touch_end(integer num_detected)
	{
	}
!
!TEXT=touch_start()
	touch_start(integer num_detected)
	{
	}
!
LSL Errors/ja

==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 しようとすると、スクリプトはすぐに、あるいは実行中にクラッシュします。 
詳しくは と を確認ください
===Run-time error demo scripts===
ランタイム･エラーを経験するために、以下の例のコンパイルして実行してください。 
default
{
 state_entry()
 {
 llOwnerSay((string) [llOwnerSay("bye")]); // Script run-time error: Heap Error
 }
}
default
{
 state_entry()
 {
 list once = [];
 list twice = [once, once]; // Script run-time error: Lists may not contain lists
 }
}
default
{
 state_entry()
 {
 float one = 1.0;
 float zero = 0.0;
 float quotient = one / zero; // Script run-time error: Math Error
 llOwnerSay((string) quotient);
 }
}
default
{
 state_entry()
 {
 list entries = [0];
 while (TRUE)
 {
 entries += entries; // Script run-time error: Stack-Heap Collision
 llOwnerSay((string) llGetListLength(entries));
 }
 }
}
==Compile-time error messages==
The SL GUI はあなたが完璧だと思ったいくつかのコードを拒絶し、いくつかの説明と共にERRORを出力するかもしれません。
===ERROR : Type mismatch===
vector型やrotation型に値を指定するには、 .x .y .z .s という名の要素を使わなければなりません。一度にlistで指定することはできません。例えば: 
default
{
 state_entry()
 {
 vector vec = (vector) [1, 2, 3]; // ERROR : Type mismatch
 llOwnerSay((string) vec);
 }
}
===ERROR : Byte code assembly failed -- out of memory===
スクリプトは、ほどよく小さく(reasonably small)書かなければなりません。
例えば、あまりにも多くのelse-ifを並べた場合、コンパイラはスクリプトが大きすぎると報告します。
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 == ...)
 {
 ;
 }
}
どのくらいのスクリプトが大きすぎるスクリプトなのかは、驚くほど変化することがあります。例えば、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 Example Pathfinding Wanderer

This is a pathfinding test script, which is a simple wandering character.
// wandering box; touch me to start wandering
default
{
 on_rez(integer reznum)
 {
 llResetScript();
 }
 state_entry()
 {
 llSay(0, "Touch me to trigger wandering");
 llDeleteCharacter();
 llCreateCharacter([]); 
 }
 touch_start(integer detected)
 {
 llWanderWithin(llGetPos(), <20.0, 20.0, 5.0>, []);
 }
 path_update(integer type, list reserved)
 {
 string update_desc;
 if (type == PU_SLOWDOWN_DISTANCE_REACHED)
 {
 update_desc = "Near";
 }
 else if (type == PU_GOAL_REACHED)
 {
 update_desc = "Stopping";
 }
 else if (type == PU_FAILURE_INVALID_START)
 {
 update_desc = "Cannot path find from current location!";
 }
 else if (type == PU_FAILURE_INVALID_GOAL)
 {
 update_desc = "Goal not on navmesh!";
 }
 else if (type == PU_FAILURE_UNREACHABLE)
 {
 update_desc = "Goal unreachable!";
 }
 else if (type == PU_FAILURE_TARGET_GONE)
 {
 update_desc = "Target gone!";
 }
 else if (type == PU_FAILURE_NO_VALID_DESTINATION)
 {
 update_desc = "No place to go!";
 }
 else if (type == PU_EVADE_HIDDEN)
 {
 update_desc = "I am hidden from my pursuer";
 }
 else if (type == PU_EVADE_SPOTTED)
 {
 update_desc = "I was found by my pursuer";
 }
 else if (type == PU_FAILURE_NO_NAVMESH)
 {
 update_desc = "Error: there is no navmesh for this region?!";
 }
 else if(type == PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED)
 {
 update_desc = "Dynamic pathfinding is disabled in this region";
 }
 else if(type == PU_FAILURE_PARCEL_UNREACHABLE)
 {
 update_desc = "Failed to enter a parcel - is it full?";
 }
 else
 {
 update_desc = "Erm... Not a known value!";
 }
 llOwnerSay("path_update: " + (string)type + ": " + update_desc);
 }
}
LSL Function ID/ja

関数IDは、関数テーブル内の内部関数番号を参照します。
この数値は、あなたがLSL-LSO(デ)コンパイラかLSO VMを書いている（もしくはLSOとhexエディタを読もうとしている）場合に幾つか有用です。一度の指定でこれらはそれぞれ存在しているスクリプトが破棄されるまで変わることは無く、新しい関数はテーブルの最後に追加されます。
これはVMとバイトコードがMonoに移行するときは無影響となるでしょう。
初期設定は以下を参照してください linden\indra\lscript\lscript_library\lscript_library.cpp