|
|
| (29 intermediate revisions by 8 users not shown) |
| Line 1: |
Line 1: |
| {{LSL Header}} | | {{LSL Header|ml=*}} |
|
| |
|
| == The New Script ==
| | The following script contains the default code that is placed in every new script. It says "''Hello, Avatar''" when it is saved or reset and says "''Touched.''" when it is touched. That makes it the LSL representation of the famous [http://en.wikipedia.org/wiki/Hello_world_program Hello world program]. |
|
| |
|
| The script you get from the SL GUI, when first you ask to create a New Script in an object or in your inventory, was this script, as of 2007-08:
| | <source lang="lsl2"> |
| | |
| <pre> | |
| default | | default |
| { | | { |
| Line 18: |
Line 16: |
| } | | } |
| } | | } |
| </pre> | | </source> |
| | |
| That script shows you how to get something to happen when you save or reset the script.
| |
| | |
| The example thing that happens is { llSay(0, "Hello, Avatar!"); }. The other example thing happens when you touch the object.
| |
| | |
| == How To Try New Lines of Code ==
| |
| | |
| You're supposed to notice that you can edit this script and click the Save button repeatedly to try out new code.
| |
| | |
| For example, you might try:
| |
| | |
| <pre>
| |
| default
| |
| {
| |
| state_entry()
| |
| {
| |
| llSetText("look at me blue", <0.0, 0.0, 1.0>, 1.0);
| |
| llOwnerSay("OK");
| |
| }
| |
| }
| |
| </pre>
| |
| | |
| Each time you edit and Save, the SL GUI will compile and run your new line of code. Every time you click Reset, the SL GUI will run your one line of code again.
| |
| | |
| == Your First New Lines of Code ==
| |
| | |
| Exploring new commands in this way can run you thru a long series of demoes that teach you about how scripts work, such as the following.
| |
| | |
| * Twiddle the red, green, and blue intensity, also the "alpha" opacity/ transparency:
| |
| <pre>
| |
| llSetColor(<0.3, 0.3, 0.3>, ALL_SIDES); // darken
| |
| llSetColor(<1.0, 1.0, 1.0>, ALL_SIDES); // lighten
| |
| llSetAlpha(0.7, ALL_SIDES); // make translucent
| |
| </pre>
| |
| | |
| * Twiddle the label of the object running the script:
| |
| <pre>
| |
| llSetText("look at me green", <0.0, 1.0, 0.0>, 1.0); // label
| |
| llSetText("look at me black", <0.0, 0.0, 0.0>, 1.0); // label differently
| |
| llSetText("", <0.0, 0.0, 0.0>, 1.0); // do not label
| |
| </pre>
| |
| | |
| * Move and rotate while not physical, then kick and spin while physical and bouncy.
| |
| <pre>
| |
| llSetStatus(STATUS_PHYSICS, FALSE); llSleep(0.1);
| |
| llSetPos(llGetPos() + <0.0, 0.0, 2.1>); // teleport up the Z axis
| |
| llSetPos(llGetPos() + <0.0, 0.0, -2.1>); // teleport back down the Z axis
| |
| llSetLocalRot(llRotBetween(<1, 0, 0>, llGetSunDirection())); // turn the East face to the Sun
| |
| llSetLocalRot(llEuler2Rot(ZERO_VECTOR)); // turn the East face to the East
| |
| llSetStatus(STATUS_PHYSICS, TRUE); llSleep(0.1);
| |
| llSetBuoyancy(0.9); // bounce well, without floating
| |
| llApplyImpulse(<0.0, 0.0, 1.0>, TRUE); // advance along the Z axis
| |
| llApplyRotationalImpulse(<0.0, 0.0, 3.0>, TRUE); // yaw about the Z axis
| |
| llSetStatus(STATUS_PHYSICS, FALSE); llSetStatus(STATUS_PHYSICS, TRUE); // zero rot inertia
| |
| </pre>
| |
| | |
| * Poke around inside the object running the script:
| |
| <pre>
| |
| llOwnerSay((string) llGetAgentSize(llGetLinkKey(llGetNumberOfPrims())) ); // often not ZERO_VECTOR while avatar sits
| |
| llOwnerSay((string) llKey2Name(llGetLinkKey(llGetNumberOfPrims())) ); // often the name of the sitting avatar
| |
| llOwnerSay(llList2CSV( [ZERO_VECTOR, FALSE, TRUE, STATUS_PHYSICS, PI] )); // some named code values
| |
| </pre>
| |
| | |
| * Chat a question for you the object's owner to answer:
| |
| <pre>
| |
| llDialog(llGetOwner(), "A clarifying demo?", ["No", "Yes"], 7); // chat some Q & A
| |
| llDialog(llGetOwner(), "Choose an arc:", ["PI_BY_TWO", "PI", "TWO_PI"], 7); // chat some Q & A
| |
| </pre>
| |
| | |
| These [[llDialog]] examples start you into a new lesson that could be your next lesson: the work of learning how scripts and avatars communicate with one another. In particular, you could also learn to make sense of such examples as:
| |
| | |
| <pre>
| |
| llRequestAgentData(llGetOwner(), DATA_BORN); // the data-of-birth of the owning avatar
| |
| </pre>
| |
|
| |
|
| The parameter 7 shown in the llDialog examples chooses a chat channel on to which the llDialog call will copy the answer you give to the question, as if you had chatted it yourself. You can see this happen if you learn to code a receiver for [[listen]] events. Similarly, if you learn to code a receiver for [[dataserver]] events, then you can [[llOwnerSay]] the results of the [[llRequestAgentData]] example.
| | Notes: |
| | * Scripters should learn to call the simpler [[llOwnerSay]] rather than llSay, in order to avoid making objects that spam the neighborhood via [[PUBLIC_CHANNEL]] zero. |
|
| |
|
| Enjoy!
| | * Scripters should learn to call [[llInstantMessage]] rather than llSay, in order to stop losing chat while far away or logged off. |
|
| |
|
| {{#vardefine:sort|Hello Avatar}}{{LSLC|Library}}{{LSLC|Examples}} | | {{#vardefine:sort|Hello Avatar}}{{LSLC|Library}}{{LSLC|Examples}} |
| {{LSLC|Tutorials}} | | {{LSLC|Tutorials}} |